<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>11441</bug_id>
          
          <creation_ts>2006-10-27 16:02:00 -0700</creation_ts>
          <short_desc>More rendering code cleaning</short_desc>
          <delta_ts>2006-10-30 18:27:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>49076</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-27 16:02:00 -0700</bug_when>
    <thetext>More fall cleaning of the rendering code.  Patch to come.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49077</commentid>
    <comment_count>1</comment_count>
      <attachid>11262</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-27 16:06:27 -0700</bug_when>
    <thetext>Created attachment 11262
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49078</commentid>
    <comment_count>2</comment_count>
      <attachid>11263</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-27 16:12:54 -0700</bug_when>
    <thetext>Created attachment 11263
no-whitespace-changes version of the patch

Diff made with svn diff -x -w</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48879</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-10-28 11:35:54 -0700</bug_when>
    <thetext>I actually had a bunch of comments on the first 2/3 of the patch before Tim reviewed it :-)

In case you want to consider them:

I interpret the &quot;one line&quot; guideline as &quot;one line&quot;, not &quot;one statement&quot;, so revert this:

-    
-    if (!result) {
+
+    if (!result)
         // Allocate a new chunk from the arena
         ARENA_ALLOCATE(result, &amp;m_pool, size);
-    }

Please change &apos;b&apos; to &apos;firstLine&apos; in these:

+    virtual short lineHeight(bool b, bool isRootLineBox = false) const;
+    virtual short baselinePosition(bool b, bool isRootLineBox = false) const;

For this:

-    virtual int maxTopMargin(bool positive) const {
+    virtual int maxTopMargin(bool positive) const
+    {
         if (positive)
             return m_maxTopPosMargin;
-        else
-            return m_maxTopNegMargin;
+        return m_maxTopNegMargin;
     }

I think &quot;return positive ? m_maxTopPosMargin : m_maxTopNegMargin;&quot; is neater. Ditto for maxBottomMargin().

Leftover space after the &amp;:

+    int skipWhitespace(BidiIterator&amp; , BidiState&amp;);

&apos;stream&apos; is redundant:

+    virtual void dump(TextStream* stream, DeprecatedString ind = &quot;&quot;) const;

I don&apos;t think you need parameter names at all in these:
+    RootInlineBox* lineAtIndex(int index);
+    int heightForLineCount(int lineCount);

Same goes for &apos;renderer&apos; here:
+    Position positionForRenderer(RenderObject* renderer, bool start = true) const;

Is this comment still needed?!

-    // XXX Generalize to work with top and left as well.
+    // FIXME: Generalize to work with top and left as well.

And what about this one? Duh.

+#include &quot;AXObjectCache.h&quot; // For accessibility

Index: WebCore/rendering/RenderFieldset.cpp

Needs spaces around the minus sign:

+    int yOff = (legend-&gt;yPos() &gt; 0) ? 0 : (legend-&gt;height()-borderTop()) / 2;

Index: WebCore/rendering/RenderForeignObject.cpp

I wanted to suggest a better name for the bool in:

+    virtual void computeAbsoluteRepaintRect(IntRect&amp;, bool f);

Apparently it means that the caller is fixed, but I can&apos;t see that it&apos;s being used anywhere. Weird.

The change makes the comment redundant:

-    ASSERT(false); // Should never be reached.
+    ASSERT_NOT_REACHED(); // Should never be reached.

I don&apos;t like the name &apos;needsLayout&apos; here:

-    bool needlayout = false;
+    bool needsLayout = false;

How about &apos;ensureLayout&apos;?

Double parentheses:

+    if ((newImage-&gt;imageSize().width() != intrinsicWidth() || newImage-&gt;imageSize().height() != intrinsicHeight() || imageSizeChanged)) {

Missing space after if:

+            if(imageSizeChanged || m_width != oldwidth || m_height != oldheight)


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48866</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-10-28 11:41:50 -0700</bug_when>
    <thetext>Finally, I don&apos;t think the patch will merge following r17399 :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48540</commentid>
    <comment_count>5</comment_count>
      <attachid>11279</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-29 18:50:21 -0800</bug_when>
    <thetext>Created attachment 11279
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48566</commentid>
    <comment_count>6</comment_count>
      <attachid>11279</attachid>
    <who name="">mitz</who>
    <bug_when>2006-10-30 09:57:55 -0800</bug_when>
    <thetext>Comment on attachment 11279
updated patch

Great work! I have 3 comments which you should fix when landing.

&quot;its&quot;, not &quot;it&apos;s&quot;:

+// FIXME: move this to it&apos;s own file

&quot;IntRect &amp;exposeRect&quot; -&gt; &quot;IntRect&amp; exposeRect&quot;:

+    IntRect getRectToExpose(const IntRect&amp; visibleRect,  const IntRect &amp;exposeRect, const ScrollAlignment&amp; alignX, const ScrollAlignment&amp; alignY);    

&apos;b&apos; is a bad name, but &apos;firstLine&apos; is better than no name:

-    virtual short lineHeight(bool b, bool isRootLineBox=false) const;
-    virtual short baselinePosition(bool b, bool isRootLineBox=false) const;
+    virtual short lineHeight(bool, bool isRootLineBox = false) const;
+    virtual short baselinePosition(bool, bool isRootLineBox = false) const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48422</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-30 18:27:37 -0800</bug_when>
    <thetext>Landed in r17448.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11262</attachid>
            <date>2006-10-27 16:06:27 -0700</date>
            <delta_ts>2006-10-29 18:50:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cleanup2.diff</filename>
            <type>text/plain</type>
            <size>128433</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzM5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTU2IEBACisyMDA2LTEwLTI3ICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ0MQorICAg
ICAgICBNb3JlIHJlbmRlcmluZyBjb2RlIGNsZWFuaW5nCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckFwcGxl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcHBsZXQ6OlJlbmRlckFwcGxldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckFyZW5hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJBcmVuYTo6UmVuZGVyQXJlbmEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXJl
bmE6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckFyZW5hOjpmcmVlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXJlbmEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OlJlbmRlckJSKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJSOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJSOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJSOjpz
ZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6Y2FyZXRNaW5PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OmlubGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJSLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjptYXhUb3BNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1heEJv
dHRvbU1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5pdE1heE1hcmdp
blZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0SGFzTWFya3VwVHJ1
bmNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6QmxvY2tTZWxlY3Rpb25J
bmZvOjpCbG9ja1NlbGVjdGlvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnJlbW92ZUNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6cGFpbnRPYmplY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJ1dHRvbjo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnJl
bW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpSZW5kZXJD
b250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJDb250YWluZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJDb250YWluZXI6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6UmVuZGVyQ291
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b1JvbWFuKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SGVicmV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNhbGNNaW5NYXhXaWR0
aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRz
ZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRz
ZXQ6OnBhaW50Qm9yZGVyTWludXNMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmll
bGRzZXQ6OnNldFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6On5S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpjYWxjTWluTWF4V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OnJlbmRlck5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZv
cmVpZ25PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6cmVuZGVyTmFtZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZvcm1FbGVtZW50OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JtRWxl
bWVudDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcm1FbGVtZW50Ojp0ZXh0
QWxpZ25tZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJGcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6
ZWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckhUTUxDYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52
YXM6OnJlbmRlck5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW1hZ2U6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjpzZXRDb250ZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpz
ZXRDYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklt
YWdlOjppbWFnZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRleHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OmVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpSZW5kZXJJbmxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjp+UmVuZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5l
OjphZGRDaGlsZFRvRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNsb25l
SW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2Fs
Y01pbk1heFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cmVxdWlyZXNM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OndpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGF5b3V0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFJlY3RzOjpDbGlwUmVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om5leHRTaWJsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzZXRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpbmVFZGl0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lRWRpdDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlu
ZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVFZGl0
OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFNl
bGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVFZGl0OjpzZXRTZWxl
Y3Rpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlv
blJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnJlbmRlck5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y2FuSGF2ZUNoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEl0ZW06OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhcmVudE9m
Rmlyc3RMaW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVN
YXJrZXJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9zaXRp
b25MaXN0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpyZW5kZXJOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmlzTGlzdE1hcmtlcik6CisK
IDIwMDYtMTAtMjcgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEJldGguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODc1OSw4ICs4NzU5LDYgQEAK
IAkJRjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmluZyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUJCNTQxOUMwQUNEREZFNDAwMjgyMEVC
IC8qIFJlbmRlckxpc3RCb3guY3BwICovLAotCQkJCUFCQjU0MTlEMEFDRERGRTQwMDI4MjBFQiAv
KiBSZW5kZXJMaXN0Qm94LmggKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAwMEE0MjM0IC8qIEF1
dG9UYWJsZUxheW91dC5jcHAgKi8sCiAJCQkJQThDRkYwNDkwQTE1NEYwOTAwMEE0MjM0IC8qIEF1
dG9UYWJsZUxheW91dC5oICovLAogCQkJCUJDRUE0ODEzMDk3RDkzMDIwMDk0QzlFNCAvKiBiaWRp
LmNwcCAqLywKQEAgLTg4MzgsNiArODgzNiw4IEBACiAJCQkJQThFQTczQkQwQTE5MDBFMzAwQThF
RjVGIC8qIFJlbmRlckxlZ2VuZC5oICovLAogCQkJCUE4RUE3M0JFMEExOTAwRTMwMEE4RUY1RiAv
KiBSZW5kZXJMaW5lRWRpdC5jcHAgKi8sCiAJCQkJQThFQTczQjEwQTE5MDBFMzAwQThFRjVGIC8q
IFJlbmRlckxpbmVFZGl0LmggKi8sCisJCQkJQUJCNTQxOUMwQUNEREZFNDAwMjgyMEVCIC8qIFJl
bmRlckxpc3RCb3guY3BwICovLAorCQkJCUFCQjU0MTlEMEFDRERGRTQwMDI4MjBFQiAvKiBSZW5k
ZXJMaXN0Qm94LmggKi8sCiAJCQkJQThFQTdBNDgwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxp
c3RJdGVtLmNwcCAqLywKIAkJCQlBOEVBN0E0QzBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlz
dEl0ZW0uaCAqLywKIAkJCQlBOEVBN0E0QjBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1h
cmtlci5jcHAgKi8sCkBAIC0xMDQ5OCw3ICsxMDQ5OCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0JCQlj
b21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVuY29k
aW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTEwNTEzLDcg
KzEwNTEyLDYgQEAKIAkJCXByb2R1Y3RSZWZHcm91cCA9IDAzNDc2OERGRkYzOEE1MDQxMURCOUM4
QiAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9v
dCA9ICIiOwotCQkJc2hvdWxkQ2hlY2tDb21wYXRpYmlsaXR5ID0gMTsKIAkJCXRhcmdldHMgPSAo
CiAJCQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJREQwNDFG
QkUwOUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFJlbmRlckFwcGxl
dDo6UmVuZGVyQXBwbGV0KEhUTUxBcHBsZXRFbGVtZW50KiBhcHBsZXQsIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBhcmdzKQotICAgIDogUmVuZGVyV2lkZ2V0KGFwcGxldCksIG1fYXJn
cyhhcmdzKQorICAgIDogUmVuZGVyV2lkZ2V0KGFwcGxldCkKKyAgICAsIG1fYXJncyhhcmdzKQog
ewogICAgIHNldElubGluZSh0cnVlKTsKIH0KQEAgLTc0LDEzICs3NSwxNCBAQCB2b2lkIFJlbmRl
ckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgICAgIG1fd2lkdGggLSBib3JkZXJM
ZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpOwog
ICAgIGludCBoZWlnaHQgPSBzdHlsZSgpLT5oZWlnaHQoKS5pc0ZpeGVkKCkgPyBzdHlsZSgpLT5o
ZWlnaHQoKS52YWx1ZSgpIDoKICAgICAgICAgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOwotICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hp
bGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CiAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50
KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsKICAgICAgICAgICAg
IGlmICghcC0+bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBtX2FyZ3Muc2V0KHAt
Pm5hbWUoKSwgcC0+dmFsdWUoKSk7CiAgICAgICAgIH0KLSAgICAKKyAgICB9CisKICAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAg
c2V0V2lkZ2V0KGZyYW1lLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KEludFNpemUod2lkdGgsIGhl
aWdodCksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLCBtX2FyZ3MpKTsKQEAgLTk5LDQg
KzEwMSw0IEBAIHZvaWQgUmVuZGVyQXBwbGV0OjpsYXlvdXQoKQogICAgIHNldE5lZWRzTGF5b3V0
KGZhbHNlKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQXBwbGV0LmgJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQXBwbGV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlckFwcGxldChIVE1MQXBwbGV0RWxl
bWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKTsKICAgICAgICAgdmly
dHVhbCB+UmVuZGVyQXBwbGV0KCk7CisKICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckFwcGxldCI7IH0KKwogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNBcHBsZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgdmly
dHVhbCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIGludCBpbnRyaW5zaWNXaWR0aCgp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGludCBpbnRyaW5zaWNIZWlnaHQoKSBjb25zdDsKQEAg
LTQ3LDYgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBtX2FyZ3M7CiAgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJBcHBsZXRfaApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQXJlbmEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckFyZW5hLmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJB
cmVuYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJSZW5k
ZXJBcmVuYS5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNkZWZpbmUgUk9VTkRV
UCh4LHkpICgoKCh4KSsoKHkpLTEpKS8oeSkpKih5KSkKIApAQCAtNDksMTQgKzQ5LDE0IEBAIGNv
bnN0IGludCBzaWduYXR1cmUgPSAweERCQTAwQUVBOwogY29uc3QgaW50IHNpZ25hdHVyZURlYWQg
PSAweERCQTAwQUVEOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUmVuZGVyQXJlbmEgKmFyZW5h
OworICAgIFJlbmRlckFyZW5hKiBhcmVuYTsKICAgICBzaXplX3Qgc2l6ZTsKICAgICBpbnQgc2ln
bmF0dXJlOwogfSBSZW5kZXJBcmVuYURlYnVnSGVhZGVyOwogCiAjZW5kaWYKIAotUmVuZGVyQXJl
bmE6OlJlbmRlckFyZW5hKHVuc2lnbmVkIGludCBhcmVuYVNpemUpCitSZW5kZXJBcmVuYTo6UmVu
ZGVyQXJlbmEodW5zaWduZWQgYXJlbmFTaXplKQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGFy
ZW5hIHBvb2wKICAgICBJTklUX0FSRU5BX1BPT0woJm1fcG9vbCwgIlJlbmRlckFyZW5hIiwgYXJl
bmFTaXplKTsKQEAgLTc2LDggKzc2LDggQEAgdm9pZCogUmVuZGVyQXJlbmE6OmFsbG9jYXRlKHNp
emVfdCBzaXplKQogI2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2Ugc3RhbmRhcmQgbWFsbG9jIHNv
IHRoYXQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyB3b3JrLgogICAgIGFzc2VydCh0aGlzKTsKLSAg
ICB2b2lkICpibG9jayA9IDo6bWFsbG9jKHNpemVvZihSZW5kZXJBcmVuYURlYnVnSGVhZGVyKSAr
IHNpemUpOwotICAgIFJlbmRlckFyZW5hRGVidWdIZWFkZXIgKmhlYWRlciA9IChSZW5kZXJBcmVu
YURlYnVnSGVhZGVyICopYmxvY2s7CisgICAgdm9pZCogYmxvY2sgPSA6Om1hbGxvYyhzaXplb2Yo
UmVuZGVyQXJlbmFEZWJ1Z0hlYWRlcikgKyBzaXplKTsKKyAgICBSZW5kZXJBcmVuYURlYnVnSGVh
ZGVyKiBoZWFkZXIgPSAoUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciopYmxvY2s7CiAgICAgaGVhZGVy
LT5hcmVuYSA9IHRoaXM7CiAgICAgaGVhZGVyLT5zaXplID0gc2l6ZTsKICAgICBoZWFkZXItPnNp
Z25hdHVyZSA9IHNpZ25hdHVyZTsKQEAgLTkwLDggKzkwLDggQEAgdm9pZCogUmVuZGVyQXJlbmE6
OmFsbG9jYXRlKHNpemVfdCBzaXplKQogCiAgICAgLy8gQ2hlY2sgcmVjeWNsZXJzIGZpcnN0CiAg
ICAgaWYgKHNpemUgPCBnTWF4UmVjeWNsZWRTaXplKSB7Ci0gICAgICAgIGNvbnN0IGludCAgIGlu
ZGV4ID0gc2l6ZSA+PiAyOwotICAgIAorICAgICAgICBjb25zdCBpbnQgaW5kZXggPSBzaXplID4+
IDI7CisKICAgICAgICAgcmVzdWx0ID0gbV9yZWN5Y2xlcnNbaW5kZXhdOwogICAgICAgICBpZiAo
cmVzdWx0KSB7CiAgICAgICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdG8gdGhlIG5leHQgb2JqZWN0
CkBAIC05OSwxMSArOTksMTAgQEAgdm9pZCogUmVuZGVyQXJlbmE6OmFsbG9jYXRlKHNpemVfdCBz
aXplKQogICAgICAgICAgICAgbV9yZWN5Y2xlcnNbaW5kZXhdID0gbmV4dDsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc3VsdCkgeworCisgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIC8vIEFsbG9jYXRlIGEgbmV3IGNodW5rIGZyb20gdGhlIGFyZW5hCiAgICAgICAgIEFSRU5B
X0FMTE9DQVRFKHJlc3VsdCwgJm1fcG9vbCwgc2l6ZSk7Ci0gICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdDsKICNlbmRpZgpAQCAtMTEzLDcgKzExMiw3IEBAIHZvaWQgUmVuZGVyQXJlbmE6OmZyZWUo
c2l6ZV90IHNpemUsIHZvaWQKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlIHN0YW5kYXJk
IGZyZWUgc28gdGhhdCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzIHdvcmsuCi0gICAgUmVuZGVyQXJl
bmFEZWJ1Z0hlYWRlciAqaGVhZGVyID0gKFJlbmRlckFyZW5hRGVidWdIZWFkZXIgKilwdHIgLSAx
OworICAgIFJlbmRlckFyZW5hRGVidWdIZWFkZXIqIGhlYWRlciA9IChSZW5kZXJBcmVuYURlYnVn
SGVhZGVyKilwdHIgLSAxOwogICAgIGFzc2VydChoZWFkZXItPnNpZ25hdHVyZSA9PSBzaWduYXR1
cmUpOwogICAgIGFzc2VydChoZWFkZXItPnNpemUgPT0gc2l6ZSk7CiAgICAgYXNzZXJ0KGhlYWRl
ci0+YXJlbmEgPT0gdGhpcyk7CkBAIC0xMjUsMTIgKzEyNCwxMiBAQCB2b2lkIFJlbmRlckFyZW5h
OjpmcmVlKHNpemVfdCBzaXplLCB2b2lkCiAKICAgICAvLyBTZWUgaWYgaXQncyBhIHNpemUgdGhh
dCB3ZSByZWN5Y2xlCiAgICAgaWYgKHNpemUgPCBnTWF4UmVjeWNsZWRTaXplKSB7Ci0gICAgICAg
IGNvbnN0IGludCAgIGluZGV4ID0gc2l6ZSA+PiAyOwotICAgICAgICB2b2lkKiAgICAgICBjdXJy
ZW50VG9wID0gbV9yZWN5Y2xlcnNbaW5kZXhdOworICAgICAgICBjb25zdCBpbnQgaW5kZXggPSBz
aXplID4+IDI7CisgICAgICAgIHZvaWQqIGN1cnJlbnRUb3AgPSBtX3JlY3ljbGVyc1tpbmRleF07
CiAgICAgICAgIG1fcmVjeWNsZXJzW2luZGV4XSA9IHB0cjsKICAgICAgICAgKigodm9pZCoqKXB0
cikgPSBjdXJyZW50VG9wOwogICAgIH0KICNlbmRpZgogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmgJKHJldmlzaW9uIDE3MzkwKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXJlbmEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsOCBAQAogICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0
aGUgTVBMIG9yIHRoZSBHUEwuCiAgKi8KIAotI2lmbmRlZiBSRU5ERVJBUkVOQV9ICi0jZGVmaW5l
IFJFTkRFUkFSRU5BX0gKKyNpZm5kZWYgUmVuZGVyQXJlbmFfaAorI2RlZmluZSBSZW5kZXJBcmVu
YV9oCiAKICNpbmNsdWRlICJBcmVuYS5oIgogCkBAIC00MywyMiArNDMsMjIgQEAgc3RhdGljIGNv
bnN0IHNpemVfdCBnTWF4UmVjeWNsZWRTaXplID0gNAogCiBjbGFzcyBSZW5kZXJBcmVuYSB7CiBw
dWJsaWM6Ci0gICBSZW5kZXJBcmVuYSh1bnNpZ25lZCBpbnQgYXJlbmFTaXplID0gNDA5Nik7Cisg
ICAgUmVuZGVyQXJlbmEodW5zaWduZWQgYXJlbmFTaXplID0gNDA5Nik7CiAgICAgflJlbmRlckFy
ZW5hKCk7CiAKLSAgLy8gTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBzaXplKTsKLSAgdm9pZCAgZnJlZShzaXplX3Qgc2l6ZSwgdm9pZCogcHRyKTsK
KyAgICAvLyBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAgICB2b2lkKiBhbGxvY2F0ZShz
aXplX3QpOworICAgIHZvaWQgZnJlZShzaXplX3QsIHZvaWQqKTsKIAogcHJpdmF0ZToKLSAgLy8g
VW5kZXJseWluZyBhcmVuYSBwb29sCi0gIEFyZW5hUG9vbCBtX3Bvb2w7CisgICAgLy8gVW5kZXJs
eWluZyBhcmVuYSBwb29sCisgICAgQXJlbmFQb29sIG1fcG9vbDsKIAotICAvLyBUaGUgcmVjeWNs
ZXIgYXJyYXkgaXMgc3BhcnNlIHdpdGggdGhlIGluZGljZXMgYmVpbmcgbXVsdGlwbGVzIG9mIDQs
Ci0gIC8vIGkuZS4sIDAsIDQsIDgsIDEyLCAxNiwgMjAsIC4uLgotICB2b2lkKiAgICAgICBtX3Jl
Y3ljbGVyc1tnTWF4UmVjeWNsZWRTaXplID4+IDJdOworICAgIC8vIFRoZSByZWN5Y2xlciBhcnJh
eSBpcyBzcGFyc2Ugd2l0aCB0aGUgaW5kaWNlcyBiZWluZyBtdWx0aXBsZXMgb2YgNCwKKyAgICAv
LyBpLmUuLCAwLCA0LCA4LCAxMiwgMTYsIDIwLCAuLi4KKyAgICB2b2lkKiBtX3JlY3ljbGVyc1tn
TWF4UmVjeWNsZWRTaXplID4+IDJdOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJBcmVuYV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIu
Y3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBS
ZW5kZXJCUjo6UmVuZGVyQlIoTm9kZSogbm9kZSkKLSAgICA6IFJlbmRlclRleHQobm9kZSwgbmV3
IFN0cmluZ0ltcGwoIlxuIikpLCBtX2xpbmVIZWlnaHQoLTEpCisgICAgOiBSZW5kZXJUZXh0KG5v
ZGUsIG5ldyBTdHJpbmdJbXBsKCJcbiIpKQorICAgICwgbV9saW5lSGVpZ2h0KC0xKQogewogfQog
CkBAIC00OCw3ICs0OSw3IEBAIElubGluZUJveCogUmVuZGVyQlI6OmNyZWF0ZUlubGluZUJveChi
b28KICAgICByZXR1cm4gYm94OwogfQogCi1zaG9ydCBSZW5kZXJCUjo6YmFzZWxpbmVQb3NpdGlv
biggYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK3Nob3J0IFJlbmRl
ckJSOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gp
IGNvbnN0CiB7CiAgICAgaWYgKGZpcnN0VGV4dEJveCgpICYmICFmaXJzdFRleHRCb3goKS0+aXNU
ZXh0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzUsMjEgKzc2LDIxIEBAIHNob3J0IFJlbmRl
ckJSOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW4KICAgICAgICAgICAgIHJldHVybiBsaC5jYWxj
TWluVmFsdWUocy0+Zm9udFNpemUoKSk7CiAgICAgICAgIHJldHVybiBsaC52YWx1ZSgpOwogICAg
IH0KLSAgICAKKwogICAgIGlmIChtX2xpbmVIZWlnaHQgPT0gLTEpCiAgICAgICAgIG1fbGluZUhl
aWdodCA9IFJlbmRlck9iamVjdDo6bGluZUhlaWdodChmYWxzZSk7CiAgICAgcmV0dXJuIG1fbGlu
ZUhlaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCUjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIF9zdHls
ZSkKK3ZvaWQgUmVuZGVyQlI6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAg
ICBSZW5kZXJUZXh0OjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRlclRleHQ6OnNldFN0eWxl
KG5ld1N0eWxlKTsKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKIH0KIAogaW50IFJlbmRlckJSOjpj
YXJldE1pbk9mZnNldCgpIGNvbnN0IAogeyAKLSAgICByZXR1cm4gMDsgCisgICAgcmV0dXJuIDA7
CiB9CiAKIGludCBSZW5kZXJCUjo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdCAKQEAgLTEwMiwxNCAr
MTAzLDE0IEBAIHVuc2lnbmVkIFJlbmRlckJSOjpjYXJldE1heFJlbmRlcmVkT2Zmc2UKICAgICBy
ZXR1cm4gMTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJSOjpwb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKGludCBfeCwgaW50IF95KQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJSOjpwb3NpdGlv
bkZvckNvb3JkaW5hdGVzKGludCAvKngqLywgaW50IC8qeSovKQogewogICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIH0KIAotSW5saW5lQm94ICpS
ZW5kZXJCUjo6aW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKK0lubGlu
ZUJveCogUmVuZGVyQlI6OmlubGluZUJveChpbnQgLypvZmZzZXQqLywgRUFmZmluaXR5IC8qYWZm
aW5pdHkqLykKIHsKICAgICByZXR1cm4gZmlyc3RUZXh0Qm94KCk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2aXNpb24gMTczOTApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4ICsx
OSw5IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYg
UkVOREVSX0JSX0gKLSNkZWZpbmUgUkVOREVSX0JSX0gKKworI2lmbmRlZiBSZW5kZXJCUl9oCisj
ZGVmaW5lIFJlbmRlckJSX2gKIAogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIApAQCAtNTYsMTYg
KzU3LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7Ci0gICAgCisKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7
CiAKLSAgICB2aXJ0dWFsIElubGluZUJveCogaW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0
eSBhZmZpbml0eSA9IFVQU1RSRUFNKTsKLSAgICAKKyAgICB2aXJ0dWFsIElubGluZUJveCogaW5s
aW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSA9IFVQU1RSRUFNKTsKKwogcHJpdmF0ZToKICAg
ICBtdXRhYmxlIHNob3J0IG1fbGluZUhlaWdodDsKLQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gUkVOREVSX0JSX0gKKyNlbmRpZiAvLyBSZW5kZXJCUl9oCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDEz
IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5s
aW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTM2NzksNCArMzY3OSwzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmR1bXAoVGV4
dFN0cmVhbSAqc3RyZWEKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIFJlbmRlckJsb2NrX0gK
LSNkZWZpbmUgUmVuZGVyQmxvY2tfSAorI2lmbmRlZiBSZW5kZXJCbG9ja19oCisjZGVmaW5lIFJl
bmRlckJsb2NrX2gKIAogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxv
dy5oIgpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG92
ZXJyaWRkZW4gZm9yIGlubGluZS1ibG9jay4KLSAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQo
Ym9vbCBiLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1YWwgc2hv
cnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxzZSkgY29u
c3Q7Ci0gICAgCisgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jv
b3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OworICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKwogICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlckJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuICghaXNJbmxpbmUoKSB8fCBp
c1JlcGxhY2VkKCkpICYmICFpc1RhYmxlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVG
bG93KCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiAhaXNSZXBsYWNlZCgpOyB9CiAgICAg
dmlydHVhbCBib29sIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgY29uc3QgeyByZXR1cm4g
aXNJbmxpbmUoKSAmJiBpc1JlcGxhY2VkKCk7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZHJlbklubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5JbmxpbmU7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5JbmxpbmUoYm9vbCBiKSB7IG1fY2hpbGRyZW5JbmxpbmUg
PSBiOyB9CiAgICAgdm9pZCBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNl
cnRpb25Qb2ludCA9IDApOwpAQCAtNjEsMTEgKzYxLDExIEBAIHB1YmxpYzoKICAgICAvLyBUaGUg
aGVpZ2h0IChhbmQgd2lkdGgpIG9mIGEgYmxvY2sgd2hlbiB5b3UgaW5jbHVkZSBvdmVyZmxvdyBz
cGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbQogICAgIC8vIG9mIHRoZSBibG9jayAoZS5nLiwgYSA8
ZGl2IHN0eWxlPSJoZWlnaHQ6MjVweCI+IHRoYXQgaGFzIGEgMTAwcHggdGFsbCBpbWFnZSBpbnNp
ZGUKICAgICAvLyBpdCB3b3VsZCBoYXZlIGFuIG92ZXJmbG93IGhlaWdodCBvZiBib3JkZXJUb3Ao
KSArIHBhZGRpbmdUb3AoKSArIDEwMHB4LgotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0
KGJvb2wgaW5jbHVkZUludGVyaW9yPXRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG92ZXJm
bG93V2lkdGgoYm9vbCBpbmNsdWRlSW50ZXJpb3I9dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgb3ZlcmZsb3dMZWZ0KGJvb2wgaW5jbHVkZUludGVyaW9yPXRydWUpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IG92ZXJmbG93VG9wKGJvb2wgaW5jbHVkZUludGVyaW9yPXRydWUpIGNvbnN0Owot
ICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxvd1JlY3QoYm9vbCBpbmNsdWRlSW50ZXJpb3I9dHJ1
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dIZWlnaHQoYm9vbCBpbmNsdWRlSW50
ZXJpb3IgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvdmVyZmxvd1dpZHRoKGJvb2wg
aW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dM
ZWZ0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
b3ZlcmZsb3dUb3AoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93SGVpZ2h0KGludCBoKSB7IG1fb3ZlcmZs
b3dIZWlnaHQgPSBoOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93V2lkdGgoaW50IHcp
IHsgbV9vdmVyZmxvd1dpZHRoID0gdzsgfQogICAgIApAQCAtNzMsMjAgKzczLDIyIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNUb3BNYXJnaW5RdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1f
dG9wTWFyZ2luUXVpcms7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNCb3R0b21NYXJnaW5RdWlyaygp
IGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tTWFyZ2luUXVpcms7IH0KIAotICAgIHZpcnR1YWwgaW50
IG1heFRvcE1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7CisgICAgdmlydHVhbCBpbnQgbWF4
VG9wTWFyZ2luKGJvb2wgcG9zaXRpdmUpIGNvbnN0CisgICAgewogICAgICAgICBpZiAocG9zaXRp
dmUpCiAgICAgICAgICAgICByZXR1cm4gbV9tYXhUb3BQb3NNYXJnaW47Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBtX21heFRvcE5lZ01hcmdpbjsKKyAgICAgICAgcmV0dXJuIG1f
bWF4VG9wTmVnTWFyZ2luOwogICAgIH0KLSAgICB2aXJ0dWFsIGludCBtYXhCb3R0b21NYXJnaW4o
Ym9vbCBwb3NpdGl2ZSkgY29uc3QgeworCisgICAgdmlydHVhbCBpbnQgbWF4Qm90dG9tTWFyZ2lu
KGJvb2wgcG9zaXRpdmUpIGNvbnN0CisgICAgewogICAgICAgICBpZiAocG9zaXRpdmUpCiAgICAg
ICAgICAgICByZXR1cm4gbV9tYXhCb3R0b21Qb3NNYXJnaW47Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJldHVybiBtX21heEJvdHRvbU5lZ01hcmdpbjsKKyAgICAgICAgcmV0dXJuIG1fbWF4
Qm90dG9tTmVnTWFyZ2luOwogICAgIH0KIAotICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygp
IHsKKyAgICB2b2lkIGluaXRNYXhNYXJnaW5WYWx1ZXMoKQorICAgIHsKICAgICAgICAgaWYgKG1f
bWFyZ2luVG9wID49IDApIHsKICAgICAgICAgICAgIG1fbWF4VG9wUG9zTWFyZ2luID0gbV9tYXJn
aW5Ub3A7CiAgICAgICAgICAgICBtX21heFRvcE5lZ01hcmdpbiA9IDA7CkBAIC0xMjYsNyArMTI4
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIHRvIGxheSBvdXQgdGhlIGxlZ2VuZCBmb3Ig
YSBmaWVsZHNldC4KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGF5b3V0TGVnZW5kKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbikgeyByZXR1cm4gMDsgfTsKLSAgICAKKwogICAgIC8vIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBpbiBiaWRpLmNwcAogICAg
IHZvaWQgYmlkaVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0IEJp
ZGlJdGVyYXRvciYgZW5kLCBCaWRpU3RhdGUmIGJpZGkpOwogICAgIFJvb3RJbmxpbmVCb3gqIGRl
dGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCBmdWxsTGF5b3V0LCBCaWRpSXRlcmF0b3ImIHN0YXJ0
LCBCaWRpU3RhdGUmIGJpZGkpOwpAQCAtMTM2LDggKzEzOCw4IEBAIHB1YmxpYzoKICAgICBib29s
IG1hdGNoZWRFbmRMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0IEJpZGlTdGF0
dXMmIHN0YXR1cywgQmlkaUNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5k
TGluZVN0YXR1cywgQmlkaUNvbnRleHQqIGVuZExpbmVDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgUm9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcywgaW50JiByZXBh
aW50Qm90dG9tLCBpbnQmIHJlcGFpbnRUb3ApOwotICAgIGludCBza2lwV2hpdGVzcGFjZShCaWRp
SXRlcmF0b3ImICwgQmlkaVN0YXRlICYpOwotICAgIEJpZGlJdGVyYXRvciBmaW5kTmV4dExpbmVC
cmVhayhCaWRpSXRlcmF0b3ImIHN0YXJ0LCBCaWRpU3RhdGUgJmluZm8gKTsKKyAgICBpbnQgc2tp
cFdoaXRlc3BhY2UoQmlkaUl0ZXJhdG9yJiAsIEJpZGlTdGF0ZSYpOworICAgIEJpZGlJdGVyYXRv
ciBmaW5kTmV4dExpbmVCcmVhayhCaWRpSXRlcmF0b3ImIHN0YXJ0LCBCaWRpU3RhdGUmIGluZm8p
OwogICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBz
dGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yJiBlbmQpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0
ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqKTsKICAgICBpbnQgdGFiV2lkdGgoYm9vbCBpc1doaXRl
c3BhY2VQcmUpOwpAQCAtMTQ3LDIzICsxNDksMjMgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRl
RWxsaXBzaXNMaW5lQm94ZXMoKTsKICAgICB2b2lkIGNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3co
KTsKICAgICAvLyBlbmQgYmlkaS5jcHAgZnVuY3Rpb25zCisKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE9i
amVjdChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9pZCBwYWludEZsb2F0cyhQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludFNlbGVjdGlvbiA9IGZhbHNlKTsK
KyAgICB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAg
IHZvaWQgcGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAg
ICB2b2lkIHBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
b2lkIHBhaW50Q2FyZXQoUGFpbnRJbmZvJiwgQ2FyZXRUeXBlKTsKICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZvaWQg
cGFpbnRGbG9hdHMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5LCBib29sIHBhaW50U2Vs
ZWN0aW9uID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGksIGlu
dCBfdHgsIGludCBfdHkpOwotICAgIHZvaWQgcGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSk7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihQYWludEluZm8m
IGksIGludCBfdHgsIGludCBfdHkpOwotICAgIHZvaWQgcGFpbnRDYXJldChQYWludEluZm8mIGks
IENhcmV0VHlwZSk7Ci0gICAgCi0gICAgdm9pZCBpbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJP
YmplY3QgKm8pOwotICAgIHZvaWQgcmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0ICpv
KTsKKyAgICB2b2lkIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCopOworICAgIHZv
aWQgcmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCBzZXRQYWlu
dHNGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqLCBib29sKTsKIAogICAgIC8vIGNhbGxlZCBm
cm9tIGxpbmVXaWR0aCwgdG8gcG9zaXRpb24gdGhlIGZsb2F0cyBhZGRlZCBpbiB0aGUgbGFzdCBs
aW5lLgogICAgIHZvaWQgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICB2b2lkIGNsZWFyRmxvYXRz
KCk7Ci0gICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyT2JqZWN0ICpjaGlsZCk7CisgICAgaW50
IGdldENsZWFyRGVsdGEoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIG1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyT2JqZWN0KiBmbG9hdFRv
UmVtb3ZlID0gMCk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsK
IApAQCAtMTcxLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAvLyBpcyBlbXB0eS4gSG93ZXZlciwg
bGF5b3V0SW5saW5lQ2hpbGRyZW4oKSByZWxpZXMgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3IuCiAg
ICAgLy8gaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk1
I2MzCiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdGlu
Z09iamVjdHMhPTA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmpl
Y3QqIG8pOworICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCopOwog
CiAgICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gZmxvYXRC
b3R0b20oKSA+IG1faGVpZ2h0OyB9CiAgICAgdm9pZCBhZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVy
QmxvY2sqIHByZXYsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCk7CkBAIC0xODQsMjcgKzE4Niwy
NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IGZsb2F0UmVjdCgpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBpbnQgbGluZVdpZHRoKGludCB5KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBs
b3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yPXRydWUsIGJvb2wgaW5j
bHVkZVNlbGY9dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRpb24o
Ym9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvcj10cnVlLCBib29sIGluY2x1ZGVTZWxmPXRydWUp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvcj10cnVlLCBib29sIGluY2x1ZGVTZWxmPXRydWUpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0
cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcmln
aHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wg
aW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0
aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxm
ID0gdHJ1ZSkgY29uc3Q7CiAKICAgICBpbnQgcmlnaHRPZmZzZXQoKSBjb25zdDsKLSAgICBpbnQg
cmlnaHRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRl
bnQgPSB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodFJlbWFpbmluZyA9
IDApIGNvbnN0OworICAgIGludCByaWdodFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zmc2V0
LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogaGVpZ2h0UmVtYWluaW5nID0gMCkg
Y29uc3Q7CiAgICAgaW50IHJpZ2h0T2Zmc2V0KGludCB5KSBjb25zdCB7IHJldHVybiByaWdodFJl
bE9mZnNldCh5LCByaWdodE9mZnNldCgpLCB0cnVlKTsgfQogCiAgICAgaW50IGxlZnRPZmZzZXQo
KSBjb25zdDsKLSAgICBpbnQgbGVmdFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zmc2V0LCBi
b29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpo
ZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBpbnQgbGVmdFJlbE9mZnNldChpbnQgeSwg
aW50IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogaGVpZ2h0
UmVtYWluaW5nID0gMCkgY29uc3Q7CiAgICAgaW50IGxlZnRPZmZzZXQoaW50IHkpIGNvbnN0IHsg
cmV0dXJuIGxlZnRSZWxPZmZzZXQoeSwgbGVmdE9mZnNldCgpLCB0cnVlKTsgfQogCi0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0QWN0aW9uIGhp
dFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCi0gICAgdmlydHVh
bCBib29sIGlzUG9pbnRJblNjcm9sbGJhcihOb2RlSW5mbyYgaW5mbywgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRJblNjcm9sbGJhcihOb2Rl
SW5mbyYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwotICAgIAor
CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwogICAgIHZvaWQgY2FsY0lubGlu
ZU1pbk1heFdpZHRoKCk7CiAgICAgdm9pZCBjYWxjQmxvY2tNaW5NYXhXaWR0aCgpOwpAQCAtMjE5
LDEwICsyMTgsMTAgQEAgcHVibGljOgogICAgIC8vIGNoaWxkcmVuLgogICAgIHZpcnR1YWwgUmVu
ZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUZpcnN0TGV0dGVyKCk7Ci0gICAgCisKICAgICBib29sIGluUm9vdEJsb2NrQ29udGV4dCgpIGNv
bnN0OwogCi0gICAgdm9pZCBzZXRIYXNNYXJrdXBUcnVuY2F0aW9uKGJvb2wgYj10cnVlKSB7IG1f
aGFzTWFya3VwVHJ1bmNhdGlvbiA9IGI7IH0KKyAgICB2b2lkIHNldEhhc01hcmt1cFRydW5jYXRp
b24oYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc01hcmt1cFRydW5jYXRpb24gPSBiOyB9CiAgICAgYm9v
bCBoYXNNYXJrdXBUcnVuY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXJrdXBUcnVuY2F0
aW9uOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uTm9uZTsgfQpAQCAtMjM1LDcgKzIz
NCw4IEBAIHB1YmxpYzoKICAgICAgICAgU2VsZWN0aW9uU3RhdGUgbV9zdGF0ZTsKIAogICAgICAg
ICBCbG9ja1NlbGVjdGlvbkluZm8oKSB7IG1fYmxvY2sgPSAwOyBtX3N0YXRlID0gU2VsZWN0aW9u
Tm9uZTsgfQotICAgICAgICBCbG9ja1NlbGVjdGlvbkluZm8oUmVuZGVyQmxvY2sqIGIpIHsgCisg
ICAgICAgIEJsb2NrU2VsZWN0aW9uSW5mbyhSZW5kZXJCbG9jayogYikKKyAgICAgICAgeyAKICAg
ICAgICAgICAgIG1fYmxvY2sgPSBiOwogICAgICAgICAgICAgbV9zdGF0ZSA9IG1fYmxvY2stPnNl
bGVjdGlvblN0YXRlKCk7CiAgICAgICAgICAgICBtX3JlY3RzID0gbV9ibG9jay0+c2VsZWN0aW9u
R2FwUmVjdHMoKTsKQEAgLTI0NSwzNSArMjQ1LDM3IEBAIHB1YmxpYzoKICAgICAgICAgU2VsZWN0
aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgICAgIFJlbmRl
ckJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICB9OwotICAgIAor
CiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKSB7IHJldHVybiBzZWxlY3Rpb25H
YXBSZWN0cygpOyB9CiAgICAgR2FwUmVjdHMgc2VsZWN0aW9uR2FwUmVjdHMoKTsKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3Q7CiAgICAgYm9vbCBpc1Nl
bGVjdGlvblJvb3QoKSBjb25zdDsKICAgICBHYXBSZWN0cyBmaWxsU2VsZWN0aW9uR2FwcyhSZW5k
ZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0
eSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxh
c3RMZWZ0LCBpbnQmIGxhc3RSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBpID0gMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQm
IGxhc3RSaWdodCwgY29uc3QgUGFpbnRJbmZvKiA9IDApOwogICAgIEdhcFJlY3RzIGZpbGxJbmxp
bmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBi
bG9ja1ksIGludCB0eCwgaW50IHR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBh
aW50SW5mbyogaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBs
YXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQmIGxhc3RSaWdodCwgY29uc3QgUGFpbnRJbmZvKik7
CiAgICAgR2FwUmVjdHMgZmlsbEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50
JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50SW5mbyogaSk7Ci0gICAgSW50UmVjdCBmaWxsVmVydGlj
YWxTZWxlY3Rpb25HYXAoaW50IGxhc3RUb3AsIGludCBsYXN0TGVmdCwgaW50IGxhc3RSaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJvdHRvbVksIFJlbmRlckJs
b2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIGNvbnN0IFBhaW50SW5mbyog
aSk7Ci0gICAgSW50UmVjdCBmaWxsTGVmdFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNlbE9i
aiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJsb2Nr
LCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJbmZv
KiBpKTsKLSAgICBJbnRSZWN0IGZpbGxSaWdodFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNl
bE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJ
bmZvKiBpKTsKLSAgICBJbnRSZWN0IGZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKFJlbmRlck9i
amVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Y29uc3QgUGFpbnRJbmZvKiBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50
SW5mbyopOworICAgIEludFJlY3QgZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGludCBsYXN0VG9w
LCBpbnQgbGFzdExlZnQsIGludCBsYXN0UmlnaHQsIGludCBib3R0b21ZLCBSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxv
Y2tYLCBpbnQgYmxvY2tZLCBjb25zdCBQYWludEluZm8qKTsKKyAgICBJbnRSZWN0IGZpbGxMZWZ0
U2VsZWN0aW9uR2FwKFJlbmRlck9iamVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGlu
dCBoZWlnaHQsIFJlbmRlckJsb2NrKiByb290QmxvY2ssIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0
IFBhaW50SW5mbyopOworICAgIEludFJlY3QgZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlck9i
amVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRlckJsb2Nr
KiByb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2Nr
WCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyopOworICAgIElu
dFJlY3QgZmlsbEhvcml6b250YWxTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGlu
dCB4UG9zLCBpbnQgeVBvcywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBQYWludEluZm8q
KTsKIAogICAgIHZvaWQgZ2V0SG9yaXpvbnRhbFNlbGVjdGlvbkdhcEluZm8oU2VsZWN0aW9uU3Rh
dGUgc3RhdGUsIGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKTsKICAgICBpbnQgbGVmdFNl
bGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeSk7CiAgICAgaW50IHJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCB5KTsKIAogI2lm
bmRlZiBOREVCVUcKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtICpzdHJlYW0sIERl
cHJlY2F0ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRl
eHRTdHJlYW0qIHN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQgPSAiIikgY29uc3Q7CiAjZW5k
aWYKIAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb21wdXRpbmcgbGluZSBjb3VudHMgYW5k
IGhlaWdodHMgZm9yIGxpbmUgY291bnRzLgotICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVBdEluZGV4
KGludCBpKTsKKyAgICBSb290SW5saW5lQm94KiBsaW5lQXRJbmRleChpbnQgaW5kZXgpOwogICAg
IGludCBsaW5lQ291bnQoKTsKLSAgICBpbnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCBsKTsKKyAg
ICBpbnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCBsaW5lQ291bnQpOwogICAgIHZvaWQgY2xlYXJU
cnVuY2F0aW9uKCk7CiAKIHByb3RlY3RlZDoKQEAgLTI4MSw4ICsyODMsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgUG9zaXRpb24gcG9zaXRpb25Gb3JCb3goSW5saW5lQm94ICpib3gsIGJvb2wgc3RhcnQ9dHJ1
ZSkgY29uc3Q7Ci0gICAgUG9zaXRpb24gcG9zaXRpb25Gb3JSZW5kZXJlcihSZW5kZXJPYmplY3Qg
KnJlbmRlcmVyLCBib29sIHN0YXJ0PXRydWUpIGNvbnN0OworICAgIFBvc2l0aW9uIHBvc2l0aW9u
Rm9yQm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBjb25zdDsKKyAgICBQb3NpdGlv
biBwb3NpdGlvbkZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgc3RhcnQg
PSB0cnVlKSBjb25zdDsKICAgICAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEZsb2F0aW5n
T2JqZWN0IHsKQEAgLTI5MSwxNCArMjkzLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIEZs
b2F0UmlnaHQKICAgICAgICAgfTsKIAotICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUp
IHsKLSAgICAgICAgICAgIG5vZGUgPSAwOwotICAgICAgICAgICAgc3RhcnRZID0gMDsKLSAgICAg
ICAgICAgIGVuZFkgPSAwOwotICAgICAgICAgICAgbV90eXBlID0gdHlwZTsKLSAgICAgICAgICAg
IGxlZnQgPSAwOwotICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgbm9QYWludCA9
IGZhbHNlOworICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpCisgICAgICAgICAgICA6
IG5vZGUoMCkKKyAgICAgICAgICAgICwgc3RhcnRZKDApCisgICAgICAgICAgICAsIGVuZFkoMCkK
KyAgICAgICAgICAgICwgbGVmdCgwKQorICAgICAgICAgICAgLCB3aWR0aCgwKQorICAgICAgICAg
ICAgLCBtX3R5cGUoMCkKKyAgICAgICAgICAgICwgbm9QYWludChmYWxzZSkKKyAgICAgICAgewog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC0zOTYsMjcgKzM5OSwyNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGludCBuZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX25lZ01hcmdpbjsgfQogICAg
ICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9wb3NNYXJnaW4gLSBtX25lZ01hcmdp
bjsgfQogICAgIH07Ci0gICAgCi0gICAgdm9pZCBhZGp1c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVy
T2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7Ci0gICAgdm9pZCBh
ZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOwotICAgIFJl
bmRlck9iamVjdCogaGFuZGxlU3BlY2lhbENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0
IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYg
aGFuZGxlZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVGbG9hdGluZ0NoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGJvb2wmIGhhbmRsZWQp
OwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlUG9zaXRpb25lZENoaWxkKFJlbmRlck9iamVjdCog
Y2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGJvb2wmIGhhbmRsZWQpOwotICAg
IFJlbmRlck9iamVjdCogaGFuZGxlQ29tcGFjdENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIENv
bXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCk7CisKKyAgICB2b2lkIGFkanVz
dFBvc2l0aW9uZWRCbG9jayhSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7
CisgICAgdm9pZCBhZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mKTsKKyAgICBS
ZW5kZXJPYmplY3QqIGhhbmRsZVNwZWNpYWxDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25z
dCBNYXJnaW5JbmZvJiwgQ29tcGFjdEluZm8mLCBib29sJiBoYW5kbGVkKTsKKyAgICBSZW5kZXJP
YmplY3QqIGhhbmRsZUZsb2F0aW5nQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFy
Z2luSW5mbyYsIGJvb2wmIGhhbmRsZWQpOworICAgIFJlbmRlck9iamVjdCogaGFuZGxlUG9zaXRp
b25lZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBo
YW5kbGVkKTsKKyAgICBSZW5kZXJPYmplY3QqIGhhbmRsZUNvbXBhY3RDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBDb21wYWN0SW5mbyYsIGJvb2wmIGhhbmRsZWQpOwogICAgIFJlbmRlck9iamVj
dCogaGFuZGxlUnVuSW5DaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sJiBoYW5kbGVkKTsK
LSAgICB2b2lkIGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZv
JiBtYXJnaW5JbmZvLCBpbnQgeVBvc0VzdGltYXRlKTsKLSAgICB2b2lkIGNsZWFyRmxvYXRzSWZO
ZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IG9s
ZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbik7Ci0gICAgdm9pZCBpbnNlcnRDb21w
YWN0SWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgQ29tcGFjdEluZm8mIGNvbXBhY3RJbmZv
KTsKLSAgICBpbnQgZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQs
IGNvbnN0IE1hcmdpbkluZm8mIGluZm8pOworICAgIHZvaWQgY29sbGFwc2VNYXJnaW5zKFJlbmRl
ck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgeVBvc0VzdGltYXRlKTsKKyAgICB2b2lk
IGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYsIGlu
dCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4pOworICAgIHZvaWQgaW5zZXJ0
Q29tcGFjdElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJik7CisgICAg
aW50IGVzdGltYXRlVmVydGljYWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBN
YXJnaW5JbmZvJik7CiAgICAgdm9pZCBkZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24oUmVuZGVy
T2JqZWN0KiBjaGlsZCk7Ci0gICAgdm9pZCBoYW5kbGVCb3R0b21PZkJsb2NrKGludCB0b3AsIGlu
dCBib3R0b20sIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOwotICAgIHZvaWQgc2V0Q29sbGFwc2Vk
Qm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOworICAgIHZvaWQgaGFu
ZGxlQm90dG9tT2ZCbG9jayhpbnQgdG9wLCBpbnQgYm90dG9tLCBNYXJnaW5JbmZvJik7CisgICAg
dm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIC8v
IEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0QmxvY2tDaGls
ZHJlbi4KIAogcHJvdGVjdGVkOgogICAgIERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0
PiogbV9mbG9hdGluZ09iamVjdHM7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8UmVuZGVyT2JqZWN0
PiogbV9wb3NpdGlvbmVkT2JqZWN0czsKLSAgICAKKwogICAgIGJvb2wgbV9jaGlsZHJlbklubGlu
ZSA6IDE7CiAgICAgYm9vbCBtX2ZpcnN0TGluZSA6IDE7CiAgICAgdW5zaWduZWQgbV9jbGVhclN0
YXR1cyAgOiAyOyAvLyBFQ2xlYXIKQEAgLTQzMiwxOSArNDM1LDE5IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIEhvdyBtdWNoIGNvbnRlbnQgb3ZlcmZsb3dzIG91dCBvZiBvdXIgYmxvY2sgdmVydGlj
YWxseSBvciBob3Jpem9udGFsbHkgKGFsbCB3ZSBzdXBwb3J0CiAgICAgLy8gZm9yIG5vdyBpcyBz
cGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbSBhbmQgdGhlIHJpZ2h0LCB3aGljaCBhcmUgdGhlIGNv
bW1vbiBjYXNlcykuCi0gICAgLy8gWFhYIEdlbmVyYWxpemUgdG8gd29yayB3aXRoIHRvcCBhbmQg
bGVmdCBhcyB3ZWxsLgorICAgIC8vIEZJWE1FOiBHZW5lcmFsaXplIHRvIHdvcmsgd2l0aCB0b3Ag
YW5kIGxlZnQgYXMgd2VsbC4KICAgICBpbnQgbV9vdmVyZmxvd0hlaWdodDsKICAgICBpbnQgbV9v
dmVyZmxvd1dpZHRoOwotICAgIAorCiAgICAgLy8gTGVmdCBhbmQgdG9wIG92ZXJmbG93LiAgRG9l
cyBub3QgYWZmZWN0IHNjcm9sbGluZyBkaW1lbnNpb25zLCBidXQgd2UgZG8gYXQgbGVhc3QgdXNl
IGl0CiAgICAgLy8gd2hlbiBkaXJ0eSByZWN0IGNoZWNraW5nIGFuZCBoaXQgdGVzdGluZy4KICAg
ICBpbnQgbV9vdmVyZmxvd0xlZnQ7CiAgICAgaW50IG1fb3ZlcmZsb3dUb3A7Ci0gICAgCisKICAg
ICAvLyBmdWxsIHdpZHRoIG9mIGEgdGFiIGNoYXJhY3RlcgogICAgIGludCBtX3RhYldpZHRoOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVuZGVyQmxvY2tfSAor
I2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCw4ICs1
OCw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpyZW1vdmVDaGlsZChSZW5kZXJPYmoKICAgICBpZiAo
b2xkQ2hpbGQgPT0gbV9pbm5lciB8fCAhbV9pbm5lcikgewogICAgICAgICBSZW5kZXJGbGV4aWJs
ZUJveDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogICAgICAgICBtX2lubmVyID0gMDsKLSAgICB9
Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBtX2lubmVyLT5yZW1vdmVDaGlsZChvbGRD
aGlsZCk7CiB9CiAKQEAgLTEwOSwyNCArMTA4LDI0IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjp1cGRh
dGVQc2V1ZG9DaGlsZChSZW4KICAgICAgICAgdXBkYXRlUHNldWRvQ2hpbGRGb3JPYmplY3QodHlw
ZSwgdGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyQnV0dG9uOjpwYWludE9iamVjdChQYWludEluZm8m
IGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckJ1dHRvbjo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAgIC8vIFB1c2ggYSBjbGlw
LgotICAgIGlmIChtX2lubmVyICYmIGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsK
LSAgICAgICAgSW50UmVjdCBjbGlwUmVjdChfdHggKyBib3JkZXJMZWZ0KCksIF90eSArIGJvcmRl
clRvcCgpLAorICAgIGlmIChtX2lubmVyICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkgeworICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KHR4ICsgYm9yZGVyTGVmdCgp
LCB0eSArIGJvcmRlclRvcCgpLAogICAgICAgICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAt
IGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyQm90dG9tKCkgLSBib3JkZXJUb3AoKSk7
CiAgICAgICAgIGlmIChjbGlwUmVjdC53aWR0aCgpID09IDAgfHwgY2xpcFJlY3QuaGVpZ2h0KCkg
PT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAg
IGkucC0+Y2xpcChjbGlwUmVjdCk7CisgICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAg
ICAgIHBhaW50SW5mby5wLT5jbGlwKGNsaXBSZWN0KTsKICAgICB9Ci0gICAgCisKICAgICAvLyBQ
YWludCB0aGUgY2hpbGRyZW4uCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KGksIF90eCwg
X3R5KTsKLSAgICAKKyAgICBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwg
dHkpOworCiAgICAgLy8gUG9wIHRoZSBjbGlwLgotICAgIGlmIChtX2lubmVyICYmIGkucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGkucC0+cmVzdG9yZSgpOworICAgIGlm
IChtX2lubmVyICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAg
ICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHJldmlzaW9uIDE3MzkwKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDgg
KzIwLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJCdXR0b25fSAotI2RlZmluZSBSZW5k
ZXJCdXR0b25fSAorI2lmbmRlZiBSZW5kZXJCdXR0b25faAorI2RlZmluZSBSZW5kZXJCdXR0b25f
aAogCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKIApAQCAtMzAsMTQgKzMwLDE1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFJlbmRlckJ1dHRvbnMgYXJlIGp1c3QgbGlrZSBub3Jt
YWwgZmxleGJveGVzIGV4Y2VwdCB0aGF0IHRoZXkgd2lsbCBnZW5lcmF0ZSBhbiBhbm9ueW1vdXMg
YmxvY2sgY2hpbGQuCiAvLyBGb3IgaW5wdXRzLCB0aGV5IHdpbGwgYWxzbyBnZW5lcmF0ZSBhbiBh
bm9ueW1vdXMgUmVuZGVyVGV4dCBhbmQga2VlcCBpdHMgc3R5bGUgYW5kIGNvbnRlbnQgdXAKIC8v
IHRvIGRhdGUgYXMgdGhlIGJ1dHRvbiBjaGFuZ2VzLgotY2xhc3MgUmVuZGVyQnV0dG9uIDogcHVi
bGljIFJlbmRlckZsZXhpYmxlQm94Ci17CitjbGFzcyBSZW5kZXJCdXR0b24gOiBwdWJsaWMgUmVu
ZGVyRmxleGlibGVCb3ggewogcHVibGljOgogICAgIFJlbmRlckJ1dHRvbihOb2RlKik7CiAKKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
QnV0dG9uIjsgfQorCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCAqYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMoKSB7fQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9u
eW1vdXNCb3hlcygpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBl
cigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShS
ZW5kZXJTdHlsZSopOwpAQCAtNDksOCArNTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRl
eHQoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyQnV0dG9uIjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBib29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC01
OCw2ICs1Nyw2IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJCbG9jayogbV9pbm5lcjsKIH07CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyQnV0
dG9uX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAkocmV2aXNpb24g
MTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwyNSArMjgsMjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJSZW5kZXJDb250YWluZXIuaCIKIAotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIiAvLyBGb3IgYWNjZXNzaWJpbGl0eQorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0KLS8v
IEZvciBhY2Nlc3NpYmlsaXR5Ci0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIiAKKyNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlckNvbnRhaW5l
cjo6UmVuZGVyQ29udGFpbmVyKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5kZXJCb3gobm9kZSkKKyAg
ICAsIG1fZmlyc3QoMCkKKyAgICAsIG1fbGFzdCgwKQogewotICAgIG1fZmlyc3QgPSAwOwotICAg
IG1fbGFzdCA9IDA7CiB9CiAKIApAQCAtNjM5LDQgKzYzNyw0IEBAIHZvaWQgUmVuZGVyQ29udGFp
bmVyOjpsaW5lQm94UmVjdHMoVmVjdG8KIAogI3VuZGVmIERFQlVHX0xBWU9VVAogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWlu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaAko
cmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJDb250YWluZXJfSAotI2RlZmluZSBSZW5kZXJD
b250YWluZXJfSAorI2lmbmRlZiBSZW5kZXJDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJDb250
YWluZXJfaAogCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAKQEAgLTMyLDI4ICszMiwyNyBAQCBj
bGFzcyBQb3NpdGlvbjsKIC8qKgogICogQmFzZSBjbGFzcyBmb3IgcmVuZGVyaW5nIG9iamVjdHMg
dGhhdCBjYW4gaGF2ZSBjaGlsZHJlbgogICovCi1jbGFzcyBSZW5kZXJDb250YWluZXIgOiBwdWJs
aWMgUmVuZGVyQm94Ci17CitjbGFzcyBSZW5kZXJDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyQm94
IHsKIHB1YmxpYzoKICAgICBSZW5kZXJDb250YWluZXIoTm9kZSopOwogICAgIHZpcnR1YWwgflJl
bmRlckNvbnRhaW5lcigpOwogCi0gICAgUmVuZGVyT2JqZWN0ICpmaXJzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdDsgfQotICAgIFJlbmRlck9iamVjdCAqbGFzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0OyB9CisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdDsgfQorICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCAqbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCAqYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Q2hpbGQoUmVuZGVyT2JqZWN0ICpvbGRDaGlsZCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsK
LSAgICAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9i
amVjdCogY2hpbGQpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCk7CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2Rl
KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpIHsgc2V0TWluTWF4S25vd24o
IHRydWUgKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKSB7IHNldE1pbk1h
eEtub3duKHRydWUpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1v
dXNCb3hlcygpOwogCkBAIC02MiwxNyArNjEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRl
UHNldWRvQ2hpbGRGb3JPYmplY3QoUmVuZGVyU3R5bGU6OlBzZXVkb0lkLCBSZW5kZXJPYmplY3Qq
KTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMo
aW50IHgsIGludCB5KTsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBsaW5lQm94UmVjdHMoVmVj
dG9yPEludFJlY3Q+Jik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEZpcnN0Q2hpbGQoUmVu
ZGVyT2JqZWN0KiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KICAgICB2b2lkIHNldExhc3RD
aGlsZChSZW5kZXJPYmplY3QqIGxhc3QpIHsgbV9sYXN0ID0gbGFzdDsgfQogCi1wcm90ZWN0ZWQ6
Ci0gICAgUmVuZGVyT2JqZWN0ICptX2ZpcnN0OwotICAgIFJlbmRlck9iamVjdCAqbV9sYXN0Owor
ICAgIFJlbmRlck9iamVjdCogbV9maXJzdDsKKyAgICBSZW5kZXJPYmplY3QqIG1fbGFzdDsKIH07
CiAKLX0KLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVy
Q29udGFpbmVyX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZpc2lv
biAxNzM5MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNvbnN0IGludCBj
TWFya2VyUGFkZGluZyA9IDc7CiAKIFJlbmRlckNvdW50ZXI6OlJlbmRlckNvdW50ZXIoTm9kZSog
bm9kZSwgQ291bnRlckRhdGEqIGNvdW50ZXIpCi0gICAgOiBSZW5kZXJUZXh0KG5vZGUsIDApLCBt
X2NvdW50ZXIoY291bnRlciksIG1fY291bnRlck5vZGUoMCkKKyAgICA6IFJlbmRlclRleHQobm9k
ZSwgMCkKKyAgICAsIG1fY291bnRlcihjb3VudGVyKQorICAgICwgbV9jb3VudGVyTm9kZSgwKQog
ewogfQogCkBAIC01Nyw5ICs1OSwxMCBAQCBzdGF0aWMgU3RyaW5nIHRvUm9tYW4oaW50IG51bWJl
ciwgYm9vbCB1CiAgICAgaW50IGQgPSAwOwogICAgIGRvIHsKICAgICAgICAgaW50IG51bSA9IG51
bWJlciAlIDEwOwotICAgICAgICBpZiAobnVtICUgNSA8IDQpCisgICAgICAgIGlmIChudW0gJSA1
IDwgNCkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG51bSAlIDU7IGkgPiAwOyBpLS0pCiAg
ICAgICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KCZkaWdpdHNbZF0sIDEsIDApOworICAgICAgICB9
CiAgICAgICAgIGlmIChudW0gPj0gNCAmJiBudW0gPD0gOCkKICAgICAgICAgICAgIHJvbWFuLmlu
c2VydCgmZGlnaXRzW2QgKyAxXSwgMSwgMCk7CiAgICAgICAgIGlmIChudW0gPT0gOSkKQEAgLTk0
LDcgKzk3LDcgQEAgc3RhdGljIFN0cmluZyB0b0hlYnJldyhpbnQgbnVtYmVyKQogewogICAgIGlm
IChudW1iZXIgPCAxKQogICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyKTsKLSAg
ICAKKwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB0ZW5EaWdpdFtdID0gezE0OTcsIDE0OTksIDE1
MDAsIDE1MDIsIDE1MDQsIDE1MDUsIDE1MDYsIDE1MDgsIDE1MTB9OwogCiAgICAgU3RyaW5nIGxl
dHRlcjsKQEAgLTIxNywxMSArMjIwLDExIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6Y2FsY01pbk1h
eFdpZHRoKCkKICAgICBpbnQgdmFsdWUgPSBtX2NvdW50ZXJOb2RlLT5jb3VudCgpOwogICAgIGlm
IChtX2NvdW50ZXJOb2RlLT5pc1Jlc2V0KCkpCiAgICAgICAgIHZhbHVlID0gbV9jb3VudGVyTm9k
ZS0+dmFsdWUoKTsKLSAgICAKKwogICAgIGludCB0b3RhbCA9IHZhbHVlOwogICAgIGlmIChtX2Nv
dW50ZXJOb2RlLT5wYXJlbnQoKSkKICAgICAgICAgdG90YWwgPSBtX2NvdW50ZXJOb2RlLT5wYXJl
bnQoKS0+dG90YWwoKTsKLSAgICAKKwogICAgIG1faXRlbSA9IGNvbnZlcnRWYWx1ZVRvVHlwZSh2
YWx1ZSwgdG90YWwsIG1fY291bnRlci0+bGlzdFN0eWxlKCkpOwogCiAgICAgaWYgKGhhc1NlcGFy
YXRvcikgewpAQCAtMjMwLDE1ICsyMzMsMTQgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjTWlu
TWF4V2lkdGgoKQogICAgICAgICB3aGlsZSAgKGNvdW50ZXItPnBhcmVudCgpICYmIChmaXJzdCB8
fCAhKGNvdW50ZXItPmlzUmVzZXQoKSAmJiBjb3VudGVyLT5wYXJlbnQoKS0+aXNSb290KCkpKSkg
ewogICAgICAgICAgICAgdmFsdWUgPSBjb3VudGVyLT5jb3VudCgpID8gY291bnRlci0+Y291bnQo
KSA6IDE7CiAgICAgICAgICAgICB0b3RhbCA9IGNvdW50ZXItPnBhcmVudCgpLT50b3RhbCgpOwot
ICAgICAgICAgICAgbV9pdGVtID0gY29udmVydFZhbHVlVG9UeXBlKHZhbHVlLCB0b3RhbCwgbV9j
b3VudGVyLT5saXN0U3R5bGUoKSkgCi0gICAgICAgICAgICAgICAgKyBtX2NvdW50ZXItPnNlcGFy
YXRvcigpICsgbV9pdGVtOworICAgICAgICAgICAgbV9pdGVtID0gY29udmVydFZhbHVlVG9UeXBl
KHZhbHVlLCB0b3RhbCwgbV9jb3VudGVyLT5saXN0U3R5bGUoKSkgKyBtX2NvdW50ZXItPnNlcGFy
YXRvcigpICsgbV9pdGVtOwogICAgICAgICAgICAgY291bnRlciA9IGNvdW50ZXItPnBhcmVudCgp
OwogICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0
ciA9IG5ldyBTdHJpbmdJbXBsKG1faXRlbS5jaGFyYWN0ZXJzKCksIG1faXRlbS5sZW5ndGgoKSk7
Ci0gICAgCisKICAgICBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoKTsKIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDI0ICsyMCwyMyBA
QAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIFJFTkRF
Ul9DT1VOVEVSX0hfCi0jZGVmaW5lIFJFTkRFUl9DT1VOVEVSX0hfCisjaWZuZGVmIFJlbmRlckNv
dW50ZXJfaAorI2RlZmluZSBSZW5kZXJDb3VudGVyX2gKIAogI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENvdW50ZXJOb2RlOwogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgQ291bnRlck5vZGU7CiAKIGNsYXNzIFJlbmRlckNv
dW50ZXIgOiBwdWJsaWMgUmVuZGVyVGV4dCB7Ci0KIHB1YmxpYzoKICAgICBSZW5kZXJDb3VudGVy
KE5vZGUqLCBDb3VudGVyRGF0YSopOwotICAgIAorCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckNvdW50ZXIiOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKIApA
QCAtNDksNiArNDgsNiBAQCBwcml2YXRlOgogICAgIENvdW50ZXJOb2RlKiBtX2NvdW50ZXJOb2Rl
OwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBSZW5kZXJDb3VudGVyX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVs
ZHNldC5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmll
bGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwyOSArNzAsMjkgQEAgUmVuZGVyT2JqZWN0
KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJl
bmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwg
aW50IF90eSkKK3ZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAgIGludCB3ID0gd2lkdGgoKTsK
ICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4
dHJhKCk7CiAgICAgUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAgICAgaWYg
KCFsZWdlbmQpCi0gICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFpbnRCb3hEZWNvcmF0aW9u
cyhpLCBfdHgsIF90eSk7CisgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAgICBpbnQgeU9mZiA9IChsZWdlbmQtPnlQ
b3MoKSA+IDApID8gMCA6IChsZWdlbmQtPmhlaWdodCgpLWJvcmRlclRvcCgpKS8yOworICAgIGlu
dCB5T2ZmID0gKGxlZ2VuZC0+eVBvcygpID4gMCkgPyAwIDogKGxlZ2VuZC0+aGVpZ2h0KCktYm9y
ZGVyVG9wKCkpIC8gMjsKICAgICBoIC09IHlPZmY7Ci0gICAgX3R5ICs9IHlPZmYgLSBib3JkZXJU
b3BFeHRyYSgpOworICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgpOwogCi0gICAgaW50
IG15ID0gbWF4KF90eSwgaS5yLnkoKSk7Ci0gICAgaW50IGVuZCA9IG1pbihpLnIuYm90dG9tKCks
ICBfdHkgKyBoKTsKKyAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yLnkoKSk7CisgICAg
aW50IGVuZCA9IG1pbihwYWludEluZm8uci5ib3R0b20oKSwgdHkgKyBoKTsKICAgICBpbnQgbWgg
PSBlbmQgLSBteTsKIAotICAgIHBhaW50QmFja2dyb3VuZChpLnAsIHN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwgX3R4LCBfdHks
IHcsIGgpOworICAgIHBhaW50QmFja2dyb3VuZChwYWludEluZm8ucCwgc3R5bGUoKS0+YmFja2dy
b3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgbXksIG1oLCB0eCwgdHks
IHcsIGgpOwogCiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpKQotICAgICAgICBwYWludEJv
cmRlck1pbnVzTGVnZW5kKGkucCwgX3R4LCBfdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBv
cygpLCBsZWdlbmQtPndpZHRoKCkpOworICAgICAgICBwYWludEJvcmRlck1pbnVzTGVnZW5kKHBh
aW50SW5mby5wLCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBvcygpLCBsZWdlbmQt
PndpZHRoKCkpOwogfQogCi12b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJvcmRlck1pbnVzTGVn
ZW5kKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBoLAor
dm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZ2VuZChHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBpbnQgbHgsIGludCBsdykKIHsKIApAQCAtMTEwLDE2ICsxMTAsMTYgQEAgdm9pZCBS
ZW5kZXJGaWVsZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZwogICAgIGJvb2wgcmVuZGVyX2IgPSBi
cyA+IEJISURERU47CiAKICAgICBpZiAocmVuZGVyX3QpIHsKLSAgICAgICAgZHJhd0JvcmRlcihw
LCBfdHgsIF90eSwgX3R4ICsgbHgsIF90eSArICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgQlNU
b3AsIHRjLCBzdHlsZS0+Y29sb3IoKSwgdHMsCi0gICAgICAgICAgICAgICAgICAgKHJlbmRlcl9s
ICYmIChscyA9PSBET1RURUQgfHwgbHMgPT0gREFTSEVEIHx8IGxzID09IERPVUJMRSk/c3R5bGUt
PmJvcmRlckxlZnRXaWR0aCgpOjApLCAwKTsKLSAgICAgICAgZHJhd0JvcmRlcihwLCBfdHgrbHgr
bHcsIF90eSwgX3R4ICsgdywgX3R5ICsgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBCU1RvcCwg
dGMsIHN0eWxlLT5jb2xvcigpLCB0cywKLSAgICAgICAgICAgICAgICAgICAwLCAocmVuZGVyX3Ig
JiYgKHJzID09IERPVFRFRCB8fCBycyA9PSBEQVNIRUQgfHwgcnMgPT0gRE9VQkxFKT9zdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpOjApKTsKKyAgICAgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRl
eHQsIHR4LCB0eSwgdHggKyBseCwgdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgQlNUb3As
IHRjLCBzdHlsZS0+Y29sb3IoKSwgdHMsCisgICAgICAgICAgICAgICAgICAgKHJlbmRlcl9sICYm
IChscyA9PSBET1RURUQgfHwgbHMgPT0gREFTSEVEIHx8IGxzID09IERPVUJMRSkgPyBzdHlsZS0+
Ym9yZGVyTGVmdFdpZHRoKCkgOiAwKSwgMCk7CisgICAgICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3ND
b250ZXh0LCB0eCArIGx4ICsgbHcsIHR5LCB0eCArIHcsIHR5ICsgc3R5bGUtPmJvcmRlclRvcFdp
ZHRoKCksIEJTVG9wLCB0Yywgc3R5bGUtPmNvbG9yKCksIHRzLAorICAgICAgICAgICAgICAgICAg
IDAsIChyZW5kZXJfciAmJiAocnMgPT0gRE9UVEVEIHx8IHJzID09IERBU0hFRCB8fCBycyA9PSBE
T1VCTEUpID8gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA6IDApKTsKICAgICB9CiAKICAgICBp
ZiAocmVuZGVyX2IpCi0gICAgICAgIGRyYXdCb3JkZXIocCwgX3R4LCBfdHkgKyBoIC0gc3R5bGUt
PmJvcmRlckJvdHRvbVdpZHRoKCksIF90eCArIHcsIF90eSArIGgsIEJTQm90dG9tLCBiYywgc3R5
bGUtPmNvbG9yKCksIGJzLAotICAgICAgICAgICAgICAgICAgIChyZW5kZXJfbCAmJiAobHMgPT0g
RE9UVEVEIHx8IGxzID09IERBU0hFRCB8fCBscyA9PSBET1VCTEUpP3N0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKTowKSwKLSAgICAgICAgICAgICAgICAgICAocmVuZGVyX3IgJiYgKHJzID09IERPVFRF
RCB8fCBycyA9PSBEQVNIRUQgfHwgcnMgPT0gRE9VQkxFKT9zdHlsZS0+Ym9yZGVyUmlnaHRXaWR0
aCgpOjApKTsKKyAgICAgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRleHQsIHR4LCB0eSArIGgg
LSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgdHggKyB3LCB0eSArIGgsIEJTQm90dG9tLCBi
Yywgc3R5bGUtPmNvbG9yKCksIGJzLAorICAgICAgICAgICAgICAgICAgIChyZW5kZXJfbCAmJiAo
bHMgPT0gRE9UVEVEIHx8IGxzID09IERBU0hFRCB8fCBscyA9PSBET1VCTEUpID8gc3R5bGUtPmJv
cmRlckxlZnRXaWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgKHJlbmRlcl9yICYmIChy
cyA9PSBET1RURUQgfHwgcnMgPT0gREFTSEVEIHx8IHJzID09IERPVUJMRSkgPyBzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpIDogMCkpOwogCiAgICAgaWYgKHJlbmRlcl9sKSB7CiAgICAgICAgIGNv
bnN0IENvbG9yJiBsYyA9IHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKTsKQEAgLTEzNCw5ICsxMzQs
OCBAQCB2b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJvcmRlck1pbnVzTGVnCiAgICAgICAgICAg
ICAobHMgPj0gT1VUU0VUKSAmJgogICAgICAgICAgICAgKGJzID09IERPVFRFRCB8fCBicyA9PSBE
QVNIRUQgfHwgYnMgPT0gU09MSUQgfHwgYnMgPT0gSU5TRVQpOwogCi0gICAgICAgIGRyYXdCb3Jk
ZXIocCwgX3R4LCBfdHksIF90eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgX3R5ICsgaCwg
QlNMZWZ0LCBsYywgc3R5bGUtPmNvbG9yKCksIGxzLAotICAgICAgICAgICAgICAgICAgIGlnbm9y
ZV90b3A/MDpzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICBpZ25v
cmVfYm90dG9tPzA6c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgICAgICBkcmF3Qm9y
ZGVyKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5LCB0eCArIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgdHkgKyBoLCBCU0xlZnQsIGxjLCBzdHlsZS0+Y29sb3IoKSwgbHMsCisgICAgICAgICAgICAg
ICAgICAgaWdub3JlX3RvcCA/IDAgOiBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgaWdub3JlX2Jv
dHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgfQogCiAgICAgaWYg
KHJlbmRlcl9yKSB7CkBAIC0xNTIsMTUgKzE1MSwxNCBAQCB2b2lkIFJlbmRlckZpZWxkc2V0Ojpw
YWludEJvcmRlck1pbnVzTGVnCiAgICAgICAgICAgICAocnMgPj0gRE9UVEVEIHx8IHJzID09IElO
U0VUKSAmJgogICAgICAgICAgICAgKGJzID09IERPVFRFRCB8fCBicyA9PSBEQVNIRUQgfHwgYnMg
PT0gU09MSUQgfHwgYnMgPT0gSU5TRVQpOwogCi0gICAgICAgIGRyYXdCb3JkZXIocCwgX3R4ICsg
dyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIF90eSwgX3R4ICsgdywgX3R5ICsgaCwgQlNS
aWdodCwgcmMsIHN0eWxlLT5jb2xvcigpLCBycywKLSAgICAgICAgICAgICAgICAgICBpZ25vcmVf
dG9wPzA6c3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgaWdub3Jl
X2JvdHRvbT8wOnN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAgICAgZHJhd0JvcmRl
cihncmFwaGljc0NvbnRleHQsIHR4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHR5
LCB0eCArIHcsIHR5ICsgaCwgQlNSaWdodCwgcmMsIHN0eWxlLT5jb2xvcigpLCBycywKKyAgICAg
ICAgICAgICAgICAgICBpZ25vcmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBp
Z25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyRmllbGRzZXQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2
b2lkIFJlbmRlckZpZWxkc2V0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0g
ICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKF9zdHlsZSk7CisgICAgUmVuZGVyQmxvY2s6OnNldFN0
eWxlKG5ld1N0eWxlKTsKIAogICAgIC8vIFdpbklFIHJlbmRlcnMgZmllbGRzZXRzIHdpdGggZGlz
cGxheTppbmxpbmUgbGlrZSB0aGV5J3JlIGlubGluZS1ibG9ja3MuICBGb3IgdXMsCiAgICAgLy8g
YW4gaW5saW5lLWJsb2NrIGlzIGp1c3QgYSBibG9jayBlbGVtZW50IHdpdGggcmVwbGFjZWQgc2V0
IHRvIHRydWUgYW5kIGlubGluZSBzZXQKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5vZGUqIHNoYWRvd1BhcmVudE5vZGUoKSB7
IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogICAgIAogcHJpdmF0ZToKLSAgICAgICAgTm9kZSog
bV9zaGFkb3dQYXJlbnQ7ICAgIAorICAgIE5vZGUqIG1fc2hhZG93UGFyZW50OyAgICAKIH07CiAK
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbChOb2RlKiBu
b2RlKQpAQCAtNzIsMjIgKzcyLDIxIEBAIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp+UmVuZGVy
RmlsZVVwbG8KIHsKICAgICBpZiAobV9idXR0b24pCiAgICAgICAgIG1fYnV0dG9uLT5kZXRhY2go
KTsKLSAgICBpZiAobV9maWxlQ2hvb3NlcikgeworICAgIGlmIChtX2ZpbGVDaG9vc2VyKQogICAg
ICAgICBtX2ZpbGVDaG9vc2VyLT5kaXNjb25uZWN0VXBsb2FkQ29udHJvbCgpOwotICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHMp
Cit2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3
U3R5bGUpCiB7CiAgICAgLy8gRm9yY2UgdGV4dC1hbGlnbiB0byBtYXRjaCB0aGUgZGlyZWN0aW9u
Ci0gICAgaWYgKHMtPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgcy0+c2V0VGV4dEFsaWdu
KExFRlQpOworICAgIGlmIChuZXdTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICBu
ZXdTdHlsZS0+c2V0VGV4dEFsaWduKExFRlQpOwogICAgIGVsc2UKLSAgICAgICAgcy0+c2V0VGV4
dEFsaWduKFJJR0hUKTsKLSAgICAKLSAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUocyk7CisgICAg
ICAgIG5ld1N0eWxlLT5zZXRUZXh0QWxpZ24oUklHSFQpOworCisgICAgUmVuZGVyQmxvY2s6OnNl
dFN0eWxlKG5ld1N0eWxlKTsKICAgICBpZiAobV9idXR0b24pCi0gICAgICAgIG1fYnV0dG9uLT5y
ZW5kZXJlcigpLT5zZXRTdHlsZShjcmVhdGVCdXR0b25TdHlsZShzKSk7CisgICAgICAgIG1fYnV0
dG9uLT5yZW5kZXJlcigpLT5zZXRTdHlsZShjcmVhdGVCdXR0b25TdHlsZShuZXdTdHlsZSkpOwog
CiAgICAgc2V0UmVwbGFjZWQoaXNJbmxpbmUoKSk7CiB9CkBAIC0xNDAsMjIgKzEzOSwyMiBAQCBS
ZW5kZXJTdHlsZSogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNyCiAgICAgcmV0dXJuIHN0eWxl
OwogfQogCi12b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludElu
Zm8mIGksIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFp
bnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAgIC8v
IFB1c2ggYSBjbGlwLgotICAgIGlmIChpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8
IGkucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykgeworICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKICAgICAgICAgSW50UmVjdCBj
bGlwUmVjdCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVp
Z2h0KCkgLSBib3JkZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpKTsKICAgICAgICAgaWYgKGNsaXBS
ZWN0LndpZHRoKCkgPT0gMCB8fCBjbGlwUmVjdC5oZWlnaHQoKSA9PSAwKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpLnAtPnNhdmUoKTsKLSAgICAgICAgaS5wLT5jbGlwKGNsaXBSZWN0
KTsKKyAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLnAtPmNs
aXAoY2xpcFJlY3QpOwogICAgIH0KLSAgICAKLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkgeworCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXllZEZpbGVuYW1lID0gbV9m
aWxlQ2hvb3Nlci0+YmFzZW5hbWVGb3JXaWR0aChtYXhGaWxlbmFtZVdpZHRoKCkpOwogICAgICAg
ICBUZXh0UnVuIHRleHRSdW4oZGlzcGxheWVkRmlsZW5hbWUuY2hhcmFjdGVycygpLCBkaXNwbGF5
ZWRGaWxlbmFtZS5sZW5ndGgoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERldGVybWluZSB3
aGVyZSB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHBsYWNlZAogICAgICAgICBpbnQgY29udGVudExl
ZnQgPSB0eCArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgICAgIGludCBidXR0
b25BbmRJY29uV2lkdGggPSBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSArIGFmdGVyQnV0
dG9uU3BhY2luZyArIChtX2ZpbGVDaG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmls
ZW5hbWVTcGFjaW5nIDogMCk7CkBAIC0xNjcsMTMgKzE2NiwxMyBAQCB2b2lkIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhl
IGJ1dHRvbidzIGJhc2VsaW5lCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVyZXIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24qPihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7CiAgICAg
ICAgIGludCB0ZXh0WSA9IGJ1dHRvblJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
LnkoKSArIGJ1dHRvblJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGJ1dHRvblJlbmRlcmVyLT5ib3Jk
ZXJUb3AoKSArIGJ1dHRvblJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyBidXR0b25SZW5kZXJlci0+
YmFzZWxpbmVQb3NpdGlvbih0cnVlLCBmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBpLnAtPnNl
dEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKLSAgICAgICAgaS5wLT5zZXRQZW4oc3R5bGUoKS0+Y29s
b3IoKSk7Ci0gICAgICAgIAorCisgICAgICAgIHBhaW50SW5mby5wLT5zZXRGb250KHN0eWxlKCkt
PmZvbnQoKSk7CisgICAgICAgIHBhaW50SW5mby5wLT5zZXRQZW4oc3R5bGUoKS0+Y29sb3IoKSk7
CisKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKLSAgICAgICAgaS5wLT5kcmF3VGV4dCh0
ZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKLSAgICAgICAgCisgICAgICAgIHBhaW50
SW5mby5wLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKKwogICAg
ICAgICBpZiAobV9maWxlQ2hvb3Nlci0+aWNvbigpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1p
bmUgd2hlcmUgdGhlIGljb24gc2hvdWxkIGJlIHBsYWNlZAogICAgICAgICAgICAgaW50IGljb25Z
ID0gdHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIChjb250ZW50SGVpZ2h0KCkgLSBp
Y29uSGVpZ2h0KSAvIDI7CkBAIC0xODIsMjUgKzE4MSwyNSBAQCB2b2lkIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVm
dCArIG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpICsgYWZ0ZXJCdXR0b25TcGFjaW5nOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQgKyBj
b250ZW50V2lkdGgoKSAtIG1fYnV0dG9uLT5yZW5kZXJlcigpLT53aWR0aCgpIC0gYWZ0ZXJCdXR0
b25TcGFjaW5nIC0gaWNvbldpZHRoOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIERy
YXcgdGhlIGZpbGUgaWNvbgotICAgICAgICAgICAgbV9maWxlQ2hvb3Nlci0+aWNvbigpLT5wYWlu
dChpLnAsIEludFJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKKyAg
ICAgICAgICAgIG1fZmlsZUNob29zZXItPmljb24oKS0+cGFpbnQocGFpbnRJbmZvLnAsIEludFJl
Y3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKICAgICAgICAgfQogICAg
IH0KLSAgICAKKwogICAgIC8vIFBhaW50IHRoZSBjaGlsZHJlbi4KLSAgICBSZW5kZXJCbG9jazo6
cGFpbnRPYmplY3QoaSwgdHgsIHR5KTsKLSAgICAKKyAgICBSZW5kZXJCbG9jazo6cGFpbnRPYmpl
Y3QocGFpbnRJbmZvLCB0eCwgdHkpOworCiAgICAgLy8gUG9wIHRoZSBjbGlwLgotICAgIGlmIChp
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IGkucGhhc2UgPT0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kcykKLSAgICAgICAgaS5wLT5yZXN0b3JlKCk7CisgICAgaWYgKHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykKKyAgICAgICAgcGFpbnRJbmZvLnAt
PnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY01pbk1h
eFdpZHRoKCkKIHsKICAgICBtX21pbldpZHRoID0gMDsKICAgICBtX21heFdpZHRoID0gMDsKLSAg
ICAKKwogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0
aCgpLnZhbHVlKCkgPiAwKQogICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGND
b250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKQEAg
LTIxMCw3ICsyMDksNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjYWxjTWluTWF4
CiAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQoKS5mbG9hdFdpZHRoKFRl
eHRSdW4oJmNoLCAxKSwgVGV4dFN0eWxlKDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsK
ICAgICAgICAgbV9tYXhXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRo
TnVtQ2hhcnMpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlz
Rml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7CiAgICAgICAgIG1f
bWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21pbldpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwpAQCAt
MjE4LDE2ICsyMTcsMTYgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY01pbk1h
eAogICAgICAgICBtX21pbldpZHRoID0gMDsKICAgICBlbHNlCiAgICAgICAgIG1fbWluV2lkdGgg
PSBtX21heFdpZHRoOwotICAgIAorCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
ICAgICAgICAgbV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgICAgICBtX21pbldpZHRoID0gbWlu
KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7CiAgICAgfQotICAgIAorCiAgICAgaW50IHRvQWRkID0gcGFkZGluZ0xlZnQoKSArIHBh
ZGRpbmdSaWdodCgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKTsKICAgICBtX21pbldp
ZHRoICs9IHRvQWRkOwogICAgIG1fbWF4V2lkdGggKz0gdG9BZGQ7Ci0gICAgCisKICAgICBzZXRN
aW5NYXhLbm93bigpOwogfQogCkBAIC0yNDMsNCArMjQyLDQgQEAgUmVuZGVyT2JqZWN0KiBIVE1M
RmlsZVVwbG9hZElubmVyQnV0dG9uRQogICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihhcmVuYSwgc3R5bGUpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJl
dmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTgsMTMgKzE4LDEyIEBACiAgKgogICovCiAKLSNpZm5k
ZWYgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2xfSAotI2RlZmluZSBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbF9ICi0KLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2lmbmRlZiBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbF9oCisjZGVmaW5lIFJlbmRlckZpbGVVcGxvYWRDb250cm9sX2gKIAogI2luY2x1
ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU2hhcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQxLDYgKzQwLDggQEAgcHVibGljOgogICAgIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sKE5vZGUqKTsKICAgICB+UmVuZGVyRmlsZVVwbG9hZENvbnRyb2woKTsKIAorICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbCI7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSop
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBjYWxjTWluTWF4V2lkdGgoKTsKQEAgLTUwLDE2ICs1MSwxNCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHZhbHVlQ2hhbmdlZCgpOwogCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZpbGVVcGxvYWRDb250cm9sIjsgfQotCiBwcm90ZWN0
ZWQ6CiAgICAgaW50IG1heEZpbGVuYW1lV2lkdGgoKTsKICAgICBSZW5kZXJTdHlsZSogY3JlYXRl
QnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCk7Ci0gICAgCisKICAgICBS
ZWZQdHI8SFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQ+IG1fYnV0dG9uOwogICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2xfaApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiAxNzM5MCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDggKzIwLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJGbGV4aWJsZUJveF9I
Ci0jZGVmaW5lIFJlbmRlckZsZXhpYmxlQm94X0gKKyNpZm5kZWYgUmVuZGVyRmxleGlibGVCb3hf
aAorI2RlZmluZSBSZW5kZXJGbGV4aWJsZUJveF9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgogCkBAIC0zMiw2ICszMiw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJGbGV4aWJsZUJveChOb2Rl
Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyRmxleGlibGVCb3goKTsKIAorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5N
YXhXaWR0aCgpOwogICAgIHZvaWQgY2FsY0hvcml6b250YWxNaW5NYXhXaWR0aCgpOwogICAgIHZv
aWQgY2FsY1ZlcnRpY2FsTWluTWF4V2lkdGgoKTsKQEAgLTQ2LDggKzQ4LDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZsZXhpbmdDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxl
eGluZ0NoaWxkcmVuOyB9CiAgICAgdmlydHVhbCBib29sIGlzU3RyZXRjaGluZ0NoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJldGNoaW5nQ2hpbGRyZW47IH0KIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwotCiAgICAgdm9pZCBwbGFjZUNoaWxkKFJlbmRl
ck9iamVjdCogY2hpbGQsIGludCB4LCBpbnQgeSk7CiAKIHByb3RlY3RlZDoKQEAgLTYzLDQgKzYz
LDQgQEAgcHJvdGVjdGVkOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBS
ZW5kZXJGbGV4aWJsZUJveF9ICisjZW5kaWYgLy8gUmVuZGVyRmxleGlibGVCb3hfaApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE4ICsyMCwxNyBAQAog
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3cu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgotI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTc5OSw0ICs3OTgsNCBA
QCB2b2lkIFJlbmRlckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhCiAgICAgICAgICAgICAg
ICAgICAgb3cpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvdy5oCShyZXZpc2lvbiAxNzM5MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwogCi0jaWZu
ZGVmIFJlbmRlckZsb3dfSAotI2RlZmluZSBSZW5kZXJGbG93X0gKKyNpZm5kZWYgUmVuZGVyRmxv
d19oCisjZGVmaW5lIFJlbmRlckZsb3dfaAogCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVyLmgi
CiAKQEAgLTUyLDQyICs1Miw0MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJGbG93KiBj
b250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVhdGlvbjsgfQogICAgIHZvaWQg
c2V0Q29udGludWF0aW9uKFJlbmRlckZsb3cqIGMpIHsgbV9jb250aW51YXRpb24gPSBjOyB9CiAg
ICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQpOwotICAgIAorCiAgICAgdm9pZCBhZGRDaGlsZFdpdGhDb250aW51YXRpb24oUmVuZGVyT2Jq
ZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkVG9GbG93KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0
ICpuZXdDaGlsZCwgUmVuZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCk7CiAKLSAgICBzdGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5vbnltb3VzRmxv
dyhEb2N1bWVudCogZG9jLCBSZW5kZXJTdHlsZSogc3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJG
bG93KiBjcmVhdGVBbm9ueW1vdXNGbG93KERvY3VtZW50KiwgUmVuZGVyU3R5bGUqKTsKIAotICAg
IHZvaWQgZXh0cmFjdExpbmVCb3goSW5saW5lRmxvd0JveCogbGluZUJveCk7Ci0gICAgdm9pZCBh
dHRhY2hMaW5lQm94KElubGluZUZsb3dCb3gqIGxpbmVCb3gpOwotICAgIHZvaWQgcmVtb3ZlTGlu
ZUJveChJbmxpbmVGbG93Qm94KiBsaW5lQm94KTsKKyAgICB2b2lkIGV4dHJhY3RMaW5lQm94KElu
bGluZUZsb3dCb3gqKTsKKyAgICB2b2lkIGF0dGFjaExpbmVCb3goSW5saW5lRmxvd0JveCopOwor
ICAgIHZvaWQgcmVtb3ZlTGluZUJveChJbmxpbmVGbG93Qm94Kik7CiAgICAgdm9pZCBkZWxldGVM
aW5lQm94ZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpOwogICAg
IAotICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jv
b3RMaW5lQm94PWZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9v
bCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICAKICAg
ICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGlu
ZUJveDsgfQogICAgIElubGluZUZsb3dCb3gqIGxhc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0TGluZUJveDsgfQogCi0gICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJv
eChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25s
eVJ1bj1mYWxzZSk7CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29s
IG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlzT25seVJ1biA9
IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0
LCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSk7CiAgICAgCi0gICAgdm9pZCBwYWludExpbmVz
KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Ci0gICAgYm9vbCBoaXRUZXN0TGluZXMo
Tm9kZUluZm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbik7CisgICAgdm9pZCBwYWludExpbmVzKFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKKyAgICBib29sIGhpdFRlc3RMaW5lcyhOb2RlSW5mbyYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGdl
dEFic29sdXRlUmVwYWludFJlY3QoKTsKKworICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0g
dHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNs
dWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93
SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CiAgICAgCi0g
ICAgdmlydHVhbCBpbnQgbG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlv
cj10cnVlLCBib29sIGluY2x1ZGVTZWxmPXRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHJp
Z2h0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBp
bmNsdWRlU2VsZj10cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVl
KSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQs
IEVBZmZpbml0eSBhZmZpbml0eSA9IFVQU1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDApOworICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmlu
aXR5ID0gVVBTVFJFQU0sIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IF90eCwg
aW50IF90eSk7Ci0gICAgdm9pZCBwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCos
IGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0ICZwcmV2TGluZSwgY29uc3QgSW50UmVjdCAm
dGhpc0xpbmUsIGNvbnN0IEludFJlY3QgJm5leHRMaW5lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZv
aWQgcGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgcHJldkxpbmUsIGNvbnN0IEludFJlY3QmIHRoaXNMaW5lLCBjb25zdCBJ
bnRSZWN0JiBuZXh0TGluZSk7CiAgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0
KiwgaW50IHR4LCBpbnQgdHkpOwogCiBwcm90ZWN0ZWQ6CkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gRm9yIGlubGluZSBmbG93cywgZWFjaCBib3ggcmVwcmVzZW50cyBh
IHBvcnRpb24gb2YgdGhhdCBpbmxpbmUuCiAgICAgSW5saW5lRmxvd0JveCogbV9maXJzdExpbmVC
b3g7CiAgICAgSW5saW5lRmxvd0JveCogbV9sYXN0TGluZUJveDsKLSAgICAKKwogICAgIG11dGFi
bGUgc2hvcnQgbV9saW5lSGVpZ2h0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gUmVuZGVyRmxvd19ICisjZW5kaWYgLy8gUmVuZGVyRmxvd19oCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTczOTApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTcgKzIxLDE5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKKwogI2luY2x1ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIK
LSNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
bmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQgKm5vZGUpIAorUmVuZGVyRm9yZWlnbk9iamVjdDo6UmVuZGVyRm9yZWlnbk9iamVjdChT
VkdGb3JlaWduT2JqZWN0RWxlbWVudCogbm9kZSkgCiAgICAgOiBSZW5kZXJCbG9jayhub2RlKQog
ewogfQpAQCAtNDcsNyArNDksNyBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KFBh
aW50SW5mCiAgICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEtSZW5kZXJpbmdEZXZpY2UgKmRldmljZSA9IHJlbmRlcmluZ0Rldmlj
ZSgpOworICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwog
ICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29u
dGV4dCgpOwogICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwogICAgIGlmICghY29u
dGV4dCkgewpAQCAtNzYsNyArNzgsNyBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50
KFBhaW50SW5mCiAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCiAgICAgICAgIHBhaW50SW5mby5w
LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIAorCiAgICAgaWYgKHNob3VsZFBvcENvbnRl
eHQpIHsKICAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7CiAgICAgICAgIGRlbGV0ZSBjb250
ZXh0OwpAQCAtODksNyArOTEsNyBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVB
YnNvbHV0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9y
QXR0cmlidXRlcygpICogbG9jYWxUcmFuc2Zvcm0oKTsKICAgICByID0gdHJhbnNmb3JtLm1hcFJl
Y3Qocik7Ci0gICAgCisKICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QociwgZik7CiB9CiAKQEAgLTExNCw3ICsxMTYsNyBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OmxheW91dCgpCiAKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAgICByZXBhaW50
QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZEJvdW5kcyk7Ci0gICAgCisKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKQEAgLTEyNCw5ICsxMjYsOSBAQCBib29sIFJlbmRl
ckZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KE5vCiAgICAgdG90YWxUcmFuc2Zvcm0gKj0gdHJh
bnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAg
IHRvdGFsVHJhbnNmb3JtLmludmVydCgpLm1hcCh4LCB5LCAmbG9jYWxYLCAmbG9jYWxZKTsKLSAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGluZm8sIChpbnQpbG9jYWxYLCAoaW50
KWxvY2FsWSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KGluZm8sIHN0YXRpY19jYXN0PGludD4obG9jYWxYKSwgc3RhdGljX2Nhc3Q8
aW50Pihsb2NhbFkpLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogfQogCi19Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDI5ICsy
MCwyOSBAQAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlckZvcmVpZ25PYmplY3RfSAotI2RlZmlu
ZSBSZW5kZXJGb3JlaWduT2JqZWN0X0gKKyNpZm5kZWYgUmVuZGVyRm9yZWlnbk9iamVjdF9oCisj
ZGVmaW5lIFJlbmRlckZvcmVpZ25PYmplY3RfaAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQ7CiAKLWNsYXNzIFJlbmRlckZvcmVpZ25PYmplY3QgOiBwdWJsaWMg
UmVuZGVyQmxvY2sKLXsKK2NsYXNzIFJlbmRlckZvcmVpZ25PYmplY3QgOiBwdWJsaWMgUmVuZGVy
QmxvY2sgewogcHVibGljOgotICAgIFJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQgKm5vZGUpOwotICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGb3JlaWduT2JqZWN0IjsgfQotICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKLSAgICAKKyAgICBSZW5kZXJGb3JlaWduT2JqZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
Kik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyRm9yZWlnbk9iamVjdCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworCiAgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQotICAgIAotICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpOwor
CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBi
b29sIGYpOwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogCkBAIC01MCwxMSArNTAsMTIgQEAgcHVibGljOgogCiAgcHJpdmF0ZToK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CisKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRz
OwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckZvcmVpZ25PYmplY3RfaApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDkgKzUwLDkgQEAgc2hvcnQgUmVuZGVyRm9ybUVsZW1lbnQ6OmJhc2VsaW5lUG9zaXRpbwogICAg
IHJldHVybiBtYXJnaW5Ub3AoKSArIHdpZGdldCgpLT5iYXNlbGluZVBvc2l0aW9uKG1faGVpZ2h0
KTsKIH0KIAotdm9pZCBSZW5kZXJGb3JtRWxlbWVudDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHMp
Cit2b2lkIFJlbmRlckZvcm1FbGVtZW50OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUp
CiB7Ci0gICAgUmVuZGVyV2lkZ2V0OjpzZXRTdHlsZShzKTsKKyAgICBSZW5kZXJXaWRnZXQ6OnNl
dFN0eWxlKG5ld1N0eWxlKTsKIAogICAgIC8vIERvIG5vdCBwYWludCBhIGJhY2tncm91bmQgb3Ig
Ym9yZGVyIGZvciBBcXVhIGZvcm0gZWxlbWVudHMKICAgICBzZXRTaG91bGRQYWludEJhY2tncm91
bmRPckJvcmRlcihmYWxzZSk7CkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1l
bnQ6OmxheW91dCgpCiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxjSGVpZ2h0KCk7Ci0gICAg
CisKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBI
b3Jpem9udGFsQWxpZ25tZW50IFJlbmRlckZvcm1FbGVtZW50Ojp0CiAgICAgICAgIGNhc2UgVEFB
VVRPOgogICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IEFs
aWduUmlnaHQgOiBBbGlnbkxlZnQ7CiAgICAgfQotICAgIEFTU0VSVChmYWxzZSk7IC8vIFNob3Vs
ZCBuZXZlciBiZSByZWFjaGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBTaG91bGQg
bmV2ZXIgYmUgcmVhY2hlZC4KICAgICByZXR1cm4gQWxpZ25MZWZ0OwogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsOCBAQAogI2lmbmRlZiBSZW5kZXJGb3JtRWxlbWVudF9oCiAjZGVmaW5lIFJlbmRlckZvcm1F
bGVtZW50X2gKIAotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCisKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZS5oIgogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lLmgJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjcgKzIyLDI1IEBACiAgKgogICov
CiAKLSNpZm5kZWYgUmVuZGVyRnJhbWVfSAotI2RlZmluZSBSZW5kZXJGcmFtZV9ICisjaWZuZGVm
IFJlbmRlckZyYW1lX2gKKyNkZWZpbmUgUmVuZGVyRnJhbWVfaAogCi0jaW5jbHVkZSAiUmVuZGVy
UGFydC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJQ
YXJ0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyRnJhbWUgOiBwdWJs
aWMgUmVuZGVyUGFydAoteworY2xhc3MgUmVuZGVyRnJhbWUgOiBwdWJsaWMgUmVuZGVyUGFydCB7
CiBwdWJsaWM6CiAgICAgUmVuZGVyRnJhbWUoSFRNTEZyYW1lRWxlbWVudCopOwogCiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZyYW1l
IjsgfQogCi0gICAgSFRNTEZyYW1lRWxlbWVudCogZWxlbWVudCgpIGNvbnN0Ci0gICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihSZW5kZXJQYXJ0OjplbGVtZW50
KCkpOyB9CisgICAgSFRNTEZyYW1lRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihSZW5kZXJQYXJ0OjplbGVtZW50KCkpOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyRnJhbWVfaApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwx
MCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNl
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01NTYsNCArNTU2LDQgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6
ZHVtcChUZXh0U3RyZWFtKiBzdAogfQogI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24gMTczOTApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MiwyMCArMjIsMTggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJGcmFtZVNldF9ICi0jZGVm
aW5lIFJlbmRlckZyYW1lU2V0X0gKKyNpZm5kZWYgUmVuZGVyRnJhbWVTZXRfaAorI2RlZmluZSBS
ZW5kZXJGcmFtZVNldF9oCiAKLSNpbmNsdWRlICJSZW5kZXJDb250YWluZXIuaCIKICNpbmNsdWRl
ICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCi0KKyNpbmNsdWRlICJSZW5kZXJDb250YWluZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50OwogY2xh
c3MgTW91c2VFdmVudDsKIAotY2xhc3MgUmVuZGVyRnJhbWVTZXQgOiBwdWJsaWMgUmVuZGVyQ29u
dGFpbmVyCi17CitjbGFzcyBSZW5kZXJGcmFtZVNldCA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIg
ewogICAgIGZyaWVuZCBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50OwogcHVibGljOgogICAgIFJl
bmRlckZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqKTsKQEAgLTU2LDggKzU0LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICBIVE1MRnJhbWVTZXRF
bGVtZW50KiBlbGVtZW50KCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lU2V0RWxlbWVudCo+KFJlbmRlckNvbnRhaW5lcjo6ZWxlbWVudCgpKTsgfQorICAgIEhU
TUxGcmFtZVNldEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVTZXRFbGVtZW50Kj4oUmVuZGVyQ29udGFpbmVyOjplbGVtZW50KCkpOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBE
ZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKQEAgLTgxLDYgKzc4LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fY2xpZW50UmVzaXppbmc7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckZyYW1lU2V0X2gKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0
OSArMzUsNDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCi1SZW5kZXJIVE1MQ2FudmFzOjpSZW5kZXJIVE1MQ2FudmFzKE5vZGUqIG4pCi0gICAg
OiBSZW5kZXJSZXBsYWNlZChuKQorUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZhcyhO
b2RlKiBub2RlKQorICAgIDogUmVuZGVyUmVwbGFjZWQobm9kZSkKIHsKIH0KIAotY29uc3QgY2hh
ciogUmVuZGVySFRNTENhbnZhczo6cmVuZGVyTmFtZSgpIGNvbnN0Cit2b2lkIFJlbmRlckhUTUxD
YW52YXM6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAg
ICByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOwotfQotCi12b2lkIFJlbmRlckhUTUxDYW52YXM6
OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpCi17Ci0gICAgaWYgKCFzaG91bGRQ
YWludChpLCB0eCwgdHkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0eCwgdHkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgeCA9IHR4ICsgbV94OwogICAgIGludCB5ID0g
dHkgKyBtX3k7CiAKLSAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiAo
aS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxlY3Rpb24pKSAKLSAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhpLCB4LCB5KTsKKyAgICBp
ZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
ZWN0aW9uKSkgCisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB4LCB5KTsK
IAotICAgIGlmICgoaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBpLnBoYXNlID09IFBh
aW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBhaW50T3V0bGluZShpLnAsIHgs
IHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKLSAgICAKLSAgICBpZiAoaS5waGFzZSAh
PSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24p
CisgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdp
ZHRoKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIHBhaW50
T3V0bGluZShwYWludEluZm8ucCwgeCwgeSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwor
CisgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QoaSkpCisgICAgaWYgKCFzaG91bGRQYWludFdp
dGhpblJvb3QocGFpbnRJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBkcmF3U2Vs
ZWN0aW9uVGludCA9IHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSAmJiAhZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKTsKLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9u
KSB7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSB7CiAg
ICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFsc2U7CiAgICAgfQogCiAg
ICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihlbGVtZW50KCkpLT5wYWludChp
LnAsCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oZWxlbWVudCgpKS0+
cGFpbnQocGFpbnRJbmZvLnAsCiAgICAgICAgICAgICBJbnRSZWN0KHggKyBib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCB5ICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRlbnRX
aWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpKTsKIAogICAgIGlmIChkcmF3U2VsZWN0aW9uVGludCkK
LSAgICAgICAgaS5wLT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJbmZvLnAtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3Qo
KSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52
YXM6OmxheW91dCgpCkBAIC05Nyw0ICs5Miw0IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6bGF5
b3V0KCkKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJldmlzaW9u
IDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IFJlbmRlckhUTUxDYW52YXNfSAotI2RlZmluZSBSZW5kZXJIVE1MQ2FudmFzX0gKKyNpZm5kZWYg
UmVuZGVySFRNTENhbnZhc19oCisjZGVmaW5lIFJlbmRlckhUTUxDYW52YXNfaAogCiAjaW5jbHVk
ZSAiUmVuZGVyUmVwbGFjZWQuaCIKIApAQCAtMzMsMTEgKzMzLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBSZW5kZXJIVE1MQ2FudmFzIDogcHVibGljIFJlbmRlclJlcGxhY2Vk
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlckhUTUxDYW52YXMoTm9kZSopOwotICAgICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKKworICAgICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVySFRNTENh
bnZhcyI7IH0KKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgfTsKIAotfSAv
L25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBS
ZW5kZXJIVE1MQ2FudmFzX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlz
aW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MywxNCArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoTm9kZSogbikK
LSAgICA6IFJlbmRlclJlcGxhY2VkKG4pCitSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoTm9kZSog
bm9kZSkKKyAgICA6IFJlbmRlclJlcGxhY2VkKG5vZGUpCiAgICAgLCBtX2NhY2hlZEltYWdlKDAp
CisgICAgLCBtX2lzQW5vbnltb3VzSW1hZ2UoMCkKIHsKICAgICBtX3NlbGVjdGlvblN0YXRlID0g
U2VsZWN0aW9uTm9uZTsKICAgICBzZXRJbnRyaW5zaWNXaWR0aCgwKTsKICAgICBzZXRJbnRyaW5z
aWNIZWlnaHQoMCk7Ci0gICAgbV9pc0Fub255bW91c0ltYWdlID0gMDsKICAgICB1cGRhdGVBbHRU
ZXh0KCk7CiB9CiAKQEAgLTYwLDE5ICs2MCwxOCBAQCBSZW5kZXJJbWFnZTo6flJlbmRlckltYWdl
KCkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVy
SW1hZ2U6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2b2lkIFJlbmRlckltYWdlOjpz
ZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnNl
dFN0eWxlKF9zdHlsZSk7Ci0gICAgCisgICAgUmVuZGVyUmVwbGFjZWQ6OnNldFN0eWxlKG5ld1N0
eWxlKTsKICAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcih0cnVlKTsKIH0KIAot
dm9pZCBSZW5kZXJJbWFnZTo6c2V0Q29udGVudE9iamVjdChDYWNoZWRSZXNvdXJjZSogY28pCit2
b2lkIFJlbmRlckltYWdlOjpzZXRDb250ZW50T2JqZWN0KENhY2hlZFJlc291cmNlKiBjYWNoZWRS
ZXNvdXJjZSkKIHsKLSAgICBpZiAoY28gJiYgbV9jYWNoZWRJbWFnZSAhPSBjbykgeworICAgIGlm
IChjYWNoZWRSZXNvdXJjZSAmJiBtX2NhY2hlZEltYWdlICE9IGNhY2hlZFJlc291cmNlKSB7CiAg
ICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVy
ZWYodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFn
ZSo+KGNvKTsKKyAgICAgICAgbV9jYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdl
Kj4oY2FjaGVkUmVzb3VyY2UpOwogICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAg
ICAgIG1fY2FjaGVkSW1hZ2UtPnJlZih0aGlzKTsKICAgICB9CkBAIC04Miw3ICs4MSw3IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnNldENhY2hlZEltYWdlKENhY2hlZEkKIHsKICAgICBpZiAoaXNBbm9u
eW1vdXNJbWFnZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAobV9jYWNoZWRJ
bWFnZSAhPSBuZXdJbWFnZSkgewogICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAg
ICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwpAQCAtOTQsNDYgKzkzLDQ2IEBAIHZvaWQg
UmVuZGVySW1hZ2U6OnNldENhY2hlZEltYWdlKENhY2hlZEkKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogbykKK3ZvaWQgUmVuZGVySW1hZ2U6
OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogbmV3SW1hZ2UpCiB7CiAgICAgaWYgKGRvY3VtZW50
QmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG8gIT0gbV9jYWNo
ZWRJbWFnZSkgewotICAgICAgICBSZW5kZXJSZXBsYWNlZDo6aW1hZ2VDaGFuZ2VkKG8pOworICAg
IGlmIChuZXdJbWFnZSAhPSBtX2NhY2hlZEltYWdlKSB7CisgICAgICAgIFJlbmRlclJlcGxhY2Vk
OjppbWFnZUNoYW5nZWQobmV3SW1hZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBpd2NoYW5nZWQgPSBmYWxzZTsKKyAgICBib29sIGltYWdlU2l6ZUNoYW5nZWQgPSBmYWxz
ZTsKIAotICAgIGlmIChvLT5pc0Vycm9ySW1hZ2UoKSkgewotICAgICAgICBpbnQgaXcgPSBvLT5p
bWFnZSgpLT53aWR0aCgpICsgNDsKLSAgICAgICAgaW50IGloID0gby0+aW1hZ2UoKS0+aGVpZ2h0
KCkgKyA0OworICAgIGlmIChuZXdJbWFnZS0+aXNFcnJvckltYWdlKCkpIHsKKyAgICAgICAgaW50
IGltYWdlV2lkdGggPSBuZXdJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSArIDQ7CisgICAgICAgIGlu
dCBpbWFnZUhlaWdodCA9IG5ld0ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSArIDQ7CiAKICAgICAg
ICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4
dCB3ZSBpbnZlbnRlZCkKICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwotICAgICAgICAgICAg
aXcgPSBtYXgoaXcsIG1pbihmb250LndpZHRoKFRleHRSdW4obV9hbHRUZXh0LmNoYXJhY3RlcnMo
KSwgbV9hbHRUZXh0Lmxlbmd0aCgpKSksIDEwMjQpKTsKLSAgICAgICAgICAgIGloID0gbWF4KGlo
LCBtaW4oZm9udC5oZWlnaHQoKSwgMjU2KSk7CisgICAgICAgICAgICBpbWFnZVdpZHRoID0gbWF4
KGltYWdlV2lkdGgsIG1pbihmb250LndpZHRoKFRleHRSdW4obV9hbHRUZXh0LmNoYXJhY3RlcnMo
KSwgbV9hbHRUZXh0Lmxlbmd0aCgpKSksIDEwMjQpKTsKKyAgICAgICAgICAgIGltYWdlSGVpZ2h0
ID0gbWF4KGltYWdlSGVpZ2h0LCBtaW4oZm9udC5oZWlnaHQoKSwgMjU2KSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXcgIT0gaW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICAgICAgc2V0
SW50cmluc2ljV2lkdGgoaXcpOwotICAgICAgICAgICAgaXdjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKGltYWdlV2lkdGggIT0gaW50cmluc2ljV2lkdGgoKSkgeworICAgICAgICAgICAgc2V0
SW50cmluc2ljV2lkdGgoaW1hZ2VXaWR0aCk7CisgICAgICAgICAgICBpbWFnZVNpemVDaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoaWggIT0gaW50cmluc2ljSGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChpaCk7Ci0gICAgICAgICAgICBpd2No
YW5nZWQgPSB0cnVlOworICAgICAgICBpZiAoaW1hZ2VIZWlnaHQgIT0gaW50cmluc2ljSGVpZ2h0
KCkpIHsKKyAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChpbWFnZUhlaWdodCk7CisgICAg
ICAgICAgICBpbWFnZVNpemVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGJvb2wgbmVlZGxheW91dCA9IGZhbHNlOworICAgIGJvb2wgbmVlZHNMYXlvdXQgPSBmYWxzZTsK
IAogICAgIC8vIEltYWdlIGRpbWVuc2lvbnMgaGF2ZSBiZWVuIGNoYW5nZWQsIHNlZSB3aGF0IG5l
ZWRzIHRvIGJlIGRvbmUKLSAgICBpZiAoKG8tPmltYWdlU2l6ZSgpLndpZHRoKCkgIT0gaW50cmlu
c2ljV2lkdGgoKSB8fCBvLT5pbWFnZVNpemUoKS5oZWlnaHQoKSAhPSBpbnRyaW5zaWNIZWlnaHQo
KSB8fCBpd2NoYW5nZWQpKSB7Ci0gICAgICAgIGlmKCFvLT5pc0Vycm9ySW1hZ2UoKSkgewotICAg
ICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgoby0+aW1hZ2VTaXplKCkud2lkdGgoKSk7Ci0gICAg
ICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoby0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpOworICAg
IGlmICgobmV3SW1hZ2UtPmltYWdlU2l6ZSgpLndpZHRoKCkgIT0gaW50cmluc2ljV2lkdGgoKSB8
fCBuZXdJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkgIT0gaW50cmluc2ljSGVpZ2h0KCkgfHwg
aW1hZ2VTaXplQ2hhbmdlZCkpIHsKKyAgICAgICAgaWYgKCFuZXdJbWFnZS0+aXNFcnJvckltYWdl
KCkpIHsKKyAgICAgICAgICAgIHNldEludHJpbnNpY1dpZHRoKG5ld0ltYWdlLT5pbWFnZVNpemUo
KS53aWR0aCgpKTsKKyAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChuZXdJbWFnZS0+aW1h
Z2VTaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgZ2VuZXJhdGVkIGltYWdlIGNvbnRlbnQgdXNpbmcgOmJlZm9yZS86YWZ0ZXIsIHdlIG1pZ2h0
IG5vdCBiZSBpbiB0aGUKQEAgLTE0NiwyNCArMTQ1LDIzIEBAIHZvaWQgUmVuZGVySW1hZ2U6Omlt
YWdlQ2hhbmdlZChDYWNoZWRJbWEKICAgICAgICAgICAgIGNhbGNXaWR0aCgpOwogICAgICAgICAg
ICAgY2FsY0hlaWdodCgpOwogICAgIAotICAgICAgICAgICAgaWYoaXdjaGFuZ2VkIHx8IG1fd2lk
dGggIT0gb2xkd2lkdGggfHwgbV9oZWlnaHQgIT0gb2xkaGVpZ2h0KQotICAgICAgICAgICAgICAg
IG5lZWRsYXlvdXQgPSB0cnVlOwotICAgIAorICAgICAgICAgICAgaWYoaW1hZ2VTaXplQ2hhbmdl
ZCB8fCBtX3dpZHRoICE9IG9sZHdpZHRoIHx8IG1faGVpZ2h0ICE9IG9sZGhlaWdodCkKKyAgICAg
ICAgICAgICAgICBuZWVkc0xheW91dCA9IHRydWU7CisKICAgICAgICAgICAgIG1fd2lkdGggPSBv
bGR3aWR0aDsKICAgICAgICAgICAgIG1faGVpZ2h0ID0gb2xkaGVpZ2h0OwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG5lZWRsYXlvdXQpIHsKKyAgICBpZiAobmVlZHNMYXlvdXQpIHsKICAg
ICAgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0
KHRydWUpOwogICAgICAgICBpZiAobWluTWF4S25vd24oKSkKICAgICAgICAgICAgIHNldE1pbk1h
eEtub3duKGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICAvLyBG
SVhNRTogV2UgYWx3YXlzIGp1c3QgZG8gYSBjb21wbGV0ZSByZXBhaW50LCBzaW5jZSB3ZSBhbHdh
eXMgcGFzcyBpbiB0aGUgZnVsbCBpbWFnZQogICAgICAgICAvLyByZWN0IGF0IHRoZSBtb21lbnQg
YW55d2F5LgotICAgICAgICByZXBhaW50UmVjdGFuZ2xlKEludFJlY3QoYm9yZGVyTGVmdCgpK3Bh
ZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpK3BhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNv
bnRlbnRIZWlnaHQoKSkpOworICAgICAgICByZXBhaW50UmVjdGFuZ2xlKEludFJlY3QoYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRl
bnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpKTsKIH0KIAogdm9pZCBSZW5kZXJJbWFnZTo6cmVz
ZXRBbmltYXRpb24oKQpAQCAtMTc1LDMwICsxNzMsMzEgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cmVz
ZXRBbmltYXRpb24oKQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJ
bmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGlmICghc2hvdWxkUGFpbnQo
aSwgX3R4LCBfdHkpKSByZXR1cm47CisgICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8sIHR4
LCB0eSkpCisgICAgICAgIHJldHVybjsKIAotICAgIF90eCArPSBtX3g7Ci0gICAgX3R5ICs9IG1f
eTsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogICAgICAgICAKLSAgICBpZiAoc2hv
dWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VPdXRs
aW5lICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAKLSAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhpLCBfdHgsIF90eSk7CisgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3Vu
ZE9yQm9yZGVyKCkgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUpIAorICAgICAgICBwYWludEJv
eERlY29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCog
cCA9IGkucDsKLSAgICAKLSAgICBpZiAoKGkucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwg
aS5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0
aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBwYWludE91
dGxpbmUocCwgX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKLSAgICAKLSAg
ICBpZiAoaS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBpLnBoYXNlICE9IFBhaW50
UGhhc2VTZWxlY3Rpb24pCisgICAgR3JhcGhpY3NDb250ZXh0KiBwID0gcGFpbnRJbmZvLnA7CisK
KyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lk
dGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgcGFpbnRP
dXRsaW5lKHAsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOworCisgICAgaWYg
KHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFz
aG91bGRQYWludFdpdGhpblJvb3QoaSkpCisgICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3Qo
cGFpbnRJbmZvKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBib29sIGlzUHJpbnRp
bmcgPSBkb2N1bWVudCgpLT5wcmludGluZygpOwogICAgIGJvb2wgZHJhd1NlbGVjdGlvblRpbnQg
PSBpc1NlbGVjdGVkKCkgJiYgIWlzUHJpbnRpbmc7Ci0gICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGVjdGlvbikgeworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNl
bGVjdGlvbikgewogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25l
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkcmF3U2VsZWN0aW9uVGludCA9IGZhbHNl
OwpAQCAtMjE1LDQyICsyMTQsNDMgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZv
JiBpLCBpbgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UgfHwgaW1h
Z2UoKS0+aXNOdWxsKCkgfHwgZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmIChpLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24pCisgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAo
Y1dpZHRoID4gMiAmJiBjSGVpZ2h0ID4gMikgewogICAgICAgICAgICAgaWYgKCFlcnJvck9jY3Vy
cmVkKCkpIHsKICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oQ29sb3I6OmxpZ2h0R3JheSk7CiAg
ICAgICAgICAgICAgICAgcC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAg
ICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdChfdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBh
ZCwgX3R5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5
ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sIGVycm9yUGljdHVyZURyYXduID0gZmFs
c2U7Ci0gICAgICAgICAgICBpbnQgaW1hZ2VYID0gMCwgaW1hZ2VZID0gMDsKKyAgICAgICAgICAg
IGludCBpbWFnZVggPSAwOworICAgICAgICAgICAgaW50IGltYWdlWSA9IDA7CiAgICAgICAgICAg
ICBpbnQgdXNhYmxlV2lkdGggPSBjV2lkdGg7CiAgICAgICAgICAgICBpbnQgdXNhYmxlSGVpZ2h0
ID0gY0hlaWdodDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoZXJyb3JPY2N1cnJl
ZCgpICYmICFpbWFnZSgpLT5pc051bGwoKSAmJiAodXNhYmxlV2lkdGggPj0gaW1hZ2UoKS0+d2lk
dGgoKSkgJiYgKHVzYWJsZUhlaWdodCA+PSBpbWFnZSgpLT5oZWlnaHQoKSkpIHsKICAgICAgICAg
ICAgICAgICAvLyBDZW50ZXIgdGhlIGVycm9yIGltYWdlLCBhY2NvdW50aW5nIGZvciBib3JkZXIg
YW5kIHBhZGRpbmcuCi0gICAgICAgICAgICAgICAgaW50IGNlbnRlclggPSAodXNhYmxlV2lkdGgg
LSBpbWFnZSgpLT53aWR0aCgpKS8yOworICAgICAgICAgICAgICAgIGludCBjZW50ZXJYID0gKHVz
YWJsZVdpZHRoIC0gaW1hZ2UoKS0+d2lkdGgoKSkgLyAyOwogICAgICAgICAgICAgICAgIGlmIChj
ZW50ZXJYIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWCA9IDA7Ci0gICAgICAgICAg
ICAgICAgaW50IGNlbnRlclkgPSAodXNhYmxlSGVpZ2h0IC0gaW1hZ2UoKS0+aGVpZ2h0KCkpLzI7
CisgICAgICAgICAgICAgICAgaW50IGNlbnRlclkgPSAodXNhYmxlSGVpZ2h0IC0gaW1hZ2UoKS0+
aGVpZ2h0KCkpIC8gMjsKICAgICAgICAgICAgICAgICBpZiAoY2VudGVyWSA8IDApCiAgICAgICAg
ICAgICAgICAgICAgIGNlbnRlclkgPSAwOwogICAgICAgICAgICAgICAgIGltYWdlWCA9IGxlZnRC
b3JkZXIgKyBsZWZ0UGFkICsgY2VudGVyWDsKICAgICAgICAgICAgICAgICBpbWFnZVkgPSB0b3BC
b3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZOwotICAgICAgICAgICAgICAgIHAtPmRyYXdJbWFnZShp
bWFnZSgpLCBJbnRQb2ludChfdHggKyBpbWFnZVgsIF90eSArIGltYWdlWSkpOworICAgICAgICAg
ICAgICAgIHAtPmRyYXdJbWFnZShpbWFnZSgpLCBJbnRQb2ludCh0eCArIGltYWdlWCwgdHkgKyBp
bWFnZVkpKTsKICAgICAgICAgICAgICAgICBlcnJvclBpY3R1cmVEcmF3biA9IHRydWU7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0ZXh0ID0gbV9hbHRU
ZXh0LmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoJ1xc
JywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAgICAgICAgICAgICBwLT5zZXRG
b250KHN0eWxlKCktPmZvbnQoKSk7CiAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKHN0eWxlKCkt
PmNvbG9yKCkpOwotICAgICAgICAgICAgICAgIGludCBheCA9IF90eCArIGxlZnRCb3JkZXIgKyBs
ZWZ0UGFkOwotICAgICAgICAgICAgICAgIGludCBheSA9IF90eSArIHRvcEJvcmRlciArIHRvcFBh
ZDsKKyAgICAgICAgICAgICAgICBpbnQgYXggPSB0eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkOwor
ICAgICAgICAgICAgICAgIGludCBheSA9IHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkOwogICAgICAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgICAgICAg
ICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7CiAgICAgICAgICAgICAgICAgCkBAIC0y
NjcsMTIgKzI2NywxMiBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGksIGlu
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fY2FjaGVkSW1hZ2UpIHsKICNpZiBQTEFURk9S
TShNQUMpCi0gICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAh
aS5wLT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdo
dChfdHggLSBtX3gsIF90eSAtIG1feSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOworICAg
ICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5w
LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0
eCAtIG1feCwgdHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgog
Ci0gICAgICAgIEludFJlY3QgcmVjdChJbnRQb2ludChfdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBh
ZCwgX3R5ICsgdG9wQm9yZGVyICsgdG9wUGFkKSwgSW50U2l6ZShjV2lkdGgsIGNIZWlnaHQpKTsK
LSAgICAgICAgCisgICAgICAgIEludFJlY3QgcmVjdChJbnRQb2ludCh0eCArIGxlZnRCb3JkZXIg
KyBsZWZ0UGFkLCB0eSArIHRvcEJvcmRlciArIHRvcFBhZCksIEludFNpemUoY1dpZHRoLCBjSGVp
Z2h0KSk7CisKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAoZWxlbWVudCgp
ICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQqPihlbGVtZW50KCkpIDogMDsKICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigp
IDogQ29tcG9zaXRlU291cmNlT3ZlcjsKICAgICAgICAgcC0+ZHJhd0ltYWdlKGltYWdlKCksIHJl
Y3QsIGNvbXBvc2l0ZU9wZXJhdG9yKTsKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFJlbmRlcklt
YWdlOjpwYWludChQYWludEluZm8mIGksIGluCiB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQog
ewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIG1pbk1heEtub3duKCkg
KTsKKyAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBJbnRSZWN0IG9sZEJvdW5kczsK
ICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
OwpAQCAtMzA2LDIyICszMDYsMjIgQEAgdm9pZCBSZW5kZXJJbWFnZTo6bGF5b3V0KCkKIAogSFRN
TE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCiB7Ci0gICAgSFRNTEltYWdlRWxl
bWVudCogaSA9IGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSA/IHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KCkpIDogMDsKLSAgICByZXR1cm4g
aSA/IGktPmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKKyAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5o
YXNUYWdOYW1lKGltZ1RhZykgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVu
dCgpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlRWxlbWVudCA/IGltYWdlRWxlbWVudC0+ZG9jdW1l
bnQoKS0+Z2V0SW1hZ2VNYXAoaW1hZ2VFbGVtZW50LT5pbWFnZU1hcCgpKSA6IDA7CiB9CiAKLWJv
b2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gsIGludCBf
eSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBS
ZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBib29sIGlu
c2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChpbmZvLCBfeCwgX3ksIF90eCwgX3R5
LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2Rl
QXRQb2ludChpbmZvLCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKGlu
c2lkZSAmJiBlbGVtZW50KCkpIHsKLSAgICAgICAgaW50IHR4ID0gX3R4ICsgbV94OwotICAgICAg
ICBpbnQgdHkgPSBfdHkgKyBtX3k7Ci0gICAgICAgIAorICAgICAgICB0eCArPSBtX3g7CisgICAg
ICAgIHR5ICs9IG1feTsKKwogICAgICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAo
KTsKICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgICAgLy8gd2UncmUgYSBjbGllbnQgc2lk
ZSBpbWFnZSBtYXAKLSAgICAgICAgICAgIGluc2lkZSA9IG1hcC0+bWFwTW91c2VFdmVudChfeCAt
IHR4LCBfeSAtIHR5LCBJbnRTaXplKGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpLCBp
bmZvKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG1hcC0+bWFwTW91c2VFdmVudCh4IC0gdHgsIHkg
LSB0eSwgSW50U2l6ZShjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSwgaW5mbyk7CiAg
ICAgICAgICAgICBpbmZvLnNldElubmVyTm9uU2hhcmVkTm9kZShlbGVtZW50KCkpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFs
dFRleHQoKQogewogICAgIGlmICghZWxlbWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgICAg
IAorCiAgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIG1f
YWx0VGV4dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KCkpLT5hbHRU
ZXh0KCk7CiAgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKGltZ1RhZykpCkBAIC00
MzQsNCArNDM0LDQgQEAgSW1hZ2UqIFJlbmRlckltYWdlOjpudWxsSW1hZ2UoKQogICAgIHJldHVy
biAmc2hhcmVkTnVsbEltYWdlOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICoK
ICAqLwogCi0jaWZuZGVmIFJFTkRFUl9JTUFHRV9ICi0jZGVmaW5lIFJFTkRFUl9JTUFHRV9ICisj
aWZuZGVmIFJlbmRlckltYWdlX2gKKyNkZWZpbmUgUmVuZGVySW1hZ2VfaAogCiAjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtMzYsOCArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2NMb2FkZXI7CiBjbGFzcyBIVE1MTWFwRWxl
bWVudDsKIAotY2xhc3MgUmVuZGVySW1hZ2UgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQKLXsKK2Ns
YXNzIFJlbmRlckltYWdlIDogcHVibGljIFJlbmRlclJlcGxhY2VkIHsKIHB1YmxpYzoKICAgICBS
ZW5kZXJJbWFnZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVySW1hZ2UoKTsKQEAgLTQ1LDMx
ICs0NCwzMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlckltYWdlIjsgfQogCiAgICAgdmlydHVhbCBib29sIGlzSW1h
Z2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSopOwotICAg
IAorCiAgICAgLy8gZG9uJ3QgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgdGhpcyBtZXRob2Qgdmly
dHVhbCEKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCgpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oUmVuZGVyUmVwbGFjZWQ6OmVsZW1lbnQoKSk7IH0K
KyAgICBIVE1MRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4oUmVuZGVyUmVwbGFjZWQ6OmVsZW1lbnQoKSk7IH0KIAogICAgIC8vIGhvb2sg
dG8ga2VlcCBSZW5kZU9iamVjdDo6bV9pbmxpbmUoKSB1cCB0byBkYXRlCiAgICAgdmlydHVhbCB2
b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICpzdHlsZSk7CiAgICAgdm9pZCB1cGRhdGVBbHRUZXh0
KCk7Ci0gICAgCisKICAgICB2b2lkIHNldElzQW5vbnltb3VzSW1hZ2UoYm9vbCBhbm9uKSB7IG1f
aXNBbm9ueW1vdXNJbWFnZSA9IGFub247IH0KICAgICBib29sIGlzQW5vbnltb3VzSW1hZ2UoKSB7
IHJldHVybiBtX2lzQW5vbnltb3VzSW1hZ2U7IH0KLSAgICAKKwogICAgIHZvaWQgc2V0Q2FjaGVk
SW1hZ2UoQ2FjaGVkSW1hZ2UqKTsKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEltYWdlOyB9Ci0gICAgCisKICAgICBJbWFnZSogaW1hZ2UoKSB7
IHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSA6IG51bGxJbWFn
ZSgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKLSAgICAKKwogICAgIHZpcnR1
YWwgaW50IGNhbGNSZXBsYWNlZFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FsY1Jl
cGxhY2VkSGVpZ2h0KCkgY29uc3Q7CiAKQEAgLTgwLDkgKzc4LDkgQEAgcHVibGljOgogCiAgICAg
Ly8gQ2FsbGVkIHRvIHNldCBnZW5lcmF0ZWQgY29udGVudCBpbWFnZXMgKGUuZy4sIDpiZWZvcmUv
OmFmdGVyIGdlbmVyYXRlZCBpbWFnZXMpLgogICAgIHZvaWQgc2V0Q29udGVudE9iamVjdChDYWNo
ZWRSZXNvdXJjZSopOwotICAgIAorCiAgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5pc0Vycm9ySW1hZ2UoKTsgfQot
ICAgIAorCiAgICAgSFRNTE1hcEVsZW1lbnQqIGltYWdlTWFwKCk7CiAKICAgICB2b2lkIHJlc2V0
QW5pbWF0aW9uKCk7CkBAIC0xMDMsNiArMTAxLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW1h
Z2UqIG51bGxJbWFnZSgpOwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJJbWFnZV9oCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDE4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlcklubGluZTo6UmVuZGVySW5saW5lKE5vZGUqIG5vZGUp
Ci06UmVuZGVyRmxvdyhub2RlKSwgbV9pc0NvbnRpbnVhdGlvbihmYWxzZSkKLXt9CisgICAgOiBS
ZW5kZXJGbG93KG5vZGUpCisgICAgLCBtX2lzQ29udGludWF0aW9uKGZhbHNlKQoreworfQogCiBS
ZW5kZXJJbmxpbmU6On5SZW5kZXJJbmxpbmUoKQote30KK3sKK30KIAotdm9pZCBSZW5kZXJJbmxp
bmU6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2b2lkIFJlbmRlcklubGluZTo6c2V0
U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIFJlbmRlckZsb3c6OnNldFN0eWxl
KF9zdHlsZSk7CisgICAgUmVuZGVyRmxvdzo6c2V0U3R5bGUobmV3U3R5bGUpOwogICAgIHNldElu
bGluZSh0cnVlKTsKIAogICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgc3BsaXQgaW5saW5l
cyBwaWNrIHVwIHRoZSBuZXcgc3R5bGUuIFdlCkBAIC02Miw3ICs2NSw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzZXRTdHlsZShSZW5kZXJTdHlsZSoKICAgICB9CiAKICAgICBtX2xpbmVIZWlnaHQg
PSAtMTsKLSAgICAKKwogICAgIC8vIFVwZGF0ZSBwc2V1ZG9zIGZvciA6YmVmb3JlIGFuZCA6YWZ0
ZXIgbm93LgogICAgIHVwZGF0ZVBzZXVkb0NoaWxkKFJlbmRlclN0eWxlOjpCRUZPUkUpOwogICAg
IHVwZGF0ZVBzZXVkb0NoaWxkKFJlbmRlclN0eWxlOjpBRlRFUik7CkBAIC04NCwxMSArODcsMTEg
QEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogICAgICAgICAvLyBp
bmxpbmUgaW50byBjb250aW51YXRpb25zLiAgVGhpcyBpbnZvbHZlcyBjcmVhdGluZyBhbiBhbm9u
eW1vdXMgYmxvY2sgYm94IHRvIGhvbGQKICAgICAgICAgLy8gfG5ld0NoaWxkfC4gIFdlIHRoZW4g
bWFrZSB0aGF0IGJsb2NrIGJveCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gIFdlIHRh
a2UgYWxsIG9mCiAgICAgICAgIC8vIHRoZSBjaGlsZHJlbiBhZnRlciB8YmVmb3JlQ2hpbGR8IGFu
ZCBwdXQgdGhlbSBpbiBhIGNsb25lIG9mIHRoaXMgb2JqZWN0LgotICAgICAgICBSZW5kZXJTdHls
ZSAqbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAg
IFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUo
KTsKICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAgICBuZXdT
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sgKm5ld0JveCA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2soZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMg
Ym94ICovKTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyQmxvY2soZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgYm94ICovKTsKICAgICAgICAg
bmV3Qm94LT5zZXRTdHlsZShuZXdTdHlsZSk7CiAgICAgICAgIFJlbmRlckZsb3cqIG9sZENvbnRp
bnVhdGlvbiA9IGNvbnRpbnVhdGlvbigpOwogICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94
KTsKQEAgLTEwMSw3ICsxMDQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Zsb3co
UmVuZGVyCiAgICAgICAgIGlmIChpc0xhc3RDaGlsZCAmJiBiZWZvcmVDaGlsZCAhPSBsYXN0Q2hp
bGQoKSkKICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gMDsgLy8gV2UgZGVzdHJveWVkIHRoZSBs
YXN0IGNoaWxkLCBzbyBub3cgd2UgbmVlZCB0byB1cGRhdGUgb3VyIGluc2VydGlvbgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludCB0byBiZSAwLiAgSXQncyBqdXN0IGEgc3Ry
YWlnaHQgYXBwZW5kIG5vdy4KLSAgICAgICAgCisKICAgICAgICAgc3BsaXRGbG93KGJlZm9yZUNo
aWxkLCBuZXdCb3gsIG5ld0NoaWxkLCBvbGRDb250aW51YXRpb24pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRv
RmxvdyhSZW5kZXIKIAogUmVuZGVySW5saW5lKiBSZW5kZXJJbmxpbmU6OmNsb25lSW5saW5lKFJl
bmRlckZsb3cqIHNyYykKIHsKLSAgICBSZW5kZXJJbmxpbmUgKm8gPSBuZXcgKHNyYy0+cmVuZGVy
QXJlbmEoKSkgUmVuZGVySW5saW5lKHNyYy0+ZWxlbWVudCgpKTsKKyAgICBSZW5kZXJJbmxpbmUq
IG8gPSBuZXcgKHNyYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVySW5saW5lKHNyYy0+ZWxlbWVudCgp
KTsKICAgICBvLT5tX2lzQ29udGludWF0aW9uID0gdHJ1ZTsKICAgICBvLT5zZXRTdHlsZShzcmMt
PnN0eWxlKCkpOwogICAgIHJldHVybiBvOwpAQCAtMTI2LDcgKzEyOSw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0
aGlzIGlubGluZS4KICAgICBSZW5kZXJJbmxpbmUqIGNsb25lID0gY2xvbmVJbmxpbmUodGhpcyk7
CiAgICAgY2xvbmUtPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKLSAgICAKKwogICAgIC8vIE5v
dyB0YWtlIGFsbCBvZiB0aGUgY2hpbGRyZW4gZnJvbSBiZWZvcmVDaGlsZCB0byB0aGUgZW5kIGFu
ZCByZW1vdmUKICAgICAvLyB0aGVtIGZyb20gfHRoaXN8IGFuZCBwbGFjZSB0aGVtIGluIHRoZSBj
bG9uZS4KICAgICBSZW5kZXJPYmplY3QqIG8gPSBiZWZvcmVDaGlsZDsKQEAgLTE2Miw3ICsxNjUs
NyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgIC8v
IGhhcyB0byBtb3ZlIGludG8gdGhlIGlubGluZSBjb250aW51YXRpb24uICBDYWxsIHVwZGF0ZVBz
ZXVkb0NoaWxkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbmxpbmUncyA6YWZ0ZXIKICAgICAgICAgLy8g
Y29udGVudCBnZXRzIHByb3Blcmx5IGRlc3Ryb3llZC4KICAgICAgICAgY3Vyci0+dXBkYXRlUHNl
dWRvQ2hpbGQoUmVuZGVyU3R5bGU6OkFGVEVSKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTm93
IHdlIG5lZWQgdG8gdGFrZSBhbGwgb2YgdGhlIGNoaWxkcmVuIHN0YXJ0aW5nIGZyb20gdGhlIGZp
cnN0IGNoaWxkCiAgICAgICAgIC8vICphZnRlciogY3VyckNoaWxkIGFuZCBhcHBlbmQgdGhlbSBh
bGwgdG8gdGhlIGNsb25lLgogICAgICAgICBvID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwpA
QCAtMjA4LDcgKzIxMSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2Jq
ZWMKICAgICB9CiAKICAgICBSZW5kZXJCbG9jayogcG9zdCA9IGJsb2NrLT5jcmVhdGVBbm9ueW1v
dXNCbG9jaygpOwotICAgIAorCiAgICAgUmVuZGVyT2JqZWN0KiBib3hGaXJzdCA9IG1hZGVOZXdC
ZWZvcmVCbG9jayA/IGJsb2NrLT5maXJzdENoaWxkKCkgOiBwcmUtPm5leHRTaWJsaW5nKCk7CiAg
ICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykKICAgICAgICAgYmxvY2stPmluc2VydENoaWxkTm9k
ZShwcmUsIGJveEZpcnN0KTsKQEAgLTIxOCw4ICsyMjEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6
c3BsaXRGbG93KFJlbmRlck9iamVjCiAKICAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKSB7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogbyA9IGJveEZpcnN0OwotICAgICAgICB3aGlsZSAobykKLSAg
ICAgICAgeworICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBu
byA9IG87CiAgICAgICAgICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBw
cmUtPmFwcGVuZENoaWxkTm9kZShibG9jay0+cmVtb3ZlQ2hpbGROb2RlKG5vKSk7CkBAIC0yMzks
NyArMjQxLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogICAg
IC8vIGNvbm5lY3RlZCwgdGh1cyBhbGxvd2luZyBuZXdDaGlsZCBhY2Nlc3MgdG8gYSByZW5kZXJB
cmVuYSBzaG91bGQgaXQgbmVlZAogICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluIGFkZGl0aW9uYWwg
Ym94ZXMgKGUuZy4sIHRhYmxlIGNvbnN0cnVjdGlvbikuCiAgICAgbmV3QmxvY2tCb3gtPmFkZENo
aWxkVG9GbG93KG5ld0NoaWxkLCAwKTsKLSAgICAKKwogICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEg
ZnVsbCBsYXlvdXQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyAoZXNwZWNpYWxs
eSB3cmFwcGVycyBmb3IgaW1hZ2VzKQogICAgIC8vIGdldCBkZWxldGVkIHByb3Blcmx5LiAgQmVj
YXVzZSBvYmplY3RzIG1vdmVzIGZyb20gdGhlIHByZSBibG9jayBpbnRvIHRoZSBwb3N0IGJsb2Nr
LCB3ZSB3YW50IHRvCiAgICAgLy8gbWFrZSBuZXcgbGluZSBib3hlcyBpbnN0ZWFkIG9mIGxlYXZp
bmcgdGhlIG9sZCBsaW5lIGJveGVzIGFyb3VuZC4KQEAgLTI0OCwyMCArMjUwLDIxIEBAIHZvaWQg
UmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICBwb3N0LT5zZXROZWVkc0xh
eW91dEFuZE1pbk1heFJlY2FsYygpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFp
bnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBwYWludExpbmVzKGks
IF90eCwgX3R5KTsKKyAgICBwYWludExpbmVzKHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIAogdm9p
ZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50
IHR4LCBpbnQgdHkpCiB7CiAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdExpbmVC
b3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgIHJlY3RzLmFw
cGVuZChJbnRSZWN0KHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgY3Vyci0+
d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKTsKLSAgICAKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCisK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSkKICAg
ICAgICAgICAgIGN1cnItPmFic29sdXRlUmVjdHMocmVjdHMsIHR4ICsgY3Vyci0+eFBvcygpLCB0
eSArIGN1cnItPnlQb3MoKSk7Ci0gICAgCisgICAgfQorCiAgICAgaWYgKGNvbnRpbnVhdGlvbigp
KQogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQ
b3MoKSArIGNvbnRpbnVhdGlvbigpLT54UG9zKCksCkBAIC0yNzAsNyArMjczLDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMoVmVjdG9yPAogCiB2b2lkIFJlbmRlcklubGluZTo6
Y2FsY01pbk1heFdpZHRoKCkKIHsKLSAgICBBU1NFUlQoICFtaW5NYXhLbm93bigpICk7CisgICAg
QVNTRVJUKCFtaW5NYXhLbm93bigpKTsKIAogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtkRGVi
dWcoIDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIihSZW5kZXJJbmxpbmUpOjpjYWxjTWluTWF4
V2lkdGgoKSB0aGlzPSIgPDwgdGhpcyA8PCBlbmRsOwpAQCAtMjgzLDcgKzI4Niw4IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpjYWxjTWluTWF4V2lkdGgoKQogICAgIHNldE1pbk1heEtub3duKCk7CiB9
CiAKLWJvb2wgUmVuZGVySW5saW5lOjpyZXF1aXJlc0xheWVyKCkgeworYm9vbCBSZW5kZXJJbmxp
bmU6OnJlcXVpcmVzTGF5ZXIoKQorewogICAgIHJldHVybiBpc1Jvb3QoKSB8fCBpc1JlbFBvc2l0
aW9uZWQoKSB8fCBzdHlsZSgpLT5vcGFjaXR5KCkgPCAxLjBmOwogfQogCkBAIC0yOTgsNyArMzAy
LDcgQEAgaW50IFJlbmRlcklubGluZTo6d2lkdGgoKSBjb25zdAogICAgICAgICBpZiAoY3VyciA9
PSBmaXJzdExpbmVCb3goKSB8fCBjdXJyLT54UG9zKCkgKyBjdXJyLT53aWR0aCgpID4gcmlnaHRT
aWRlKQogICAgICAgICAgICAgcmlnaHRTaWRlID0gY3Vyci0+eFBvcygpICsgY3Vyci0+d2lkdGgo
KTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmlnaHRTaWRlIC0gbGVmdFNpZGU7CiB9CiAK
QEAgLTMzNSwxMCArMzM5LDkgQEAgY29uc3QgY2hhciAqUmVuZGVySW5saW5lOjpyZW5kZXJOYW1l
KCkgYwogICAgIHJldHVybiAiUmVuZGVySW5saW5lIjsKIH0KIAotYm9vbCBSZW5kZXJJbmxpbmU6
Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50
IF90eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCitib29sIFJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8s
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKLSAgICByZXR1cm4gaGl0VGVzdExpbmVzKGluZm8sIF94LCBfeSwgX3R4LCBfdHksIGhp
dFRlc3RBY3Rpb24pOworICAgIHJldHVybiBoaXRUZXN0TGluZXMoaW5mbywgeCwgeSwgdHgsIHR5
LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9z
aXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpCkBAIC0zNTEsNCArMzU0LDQgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25GbwogICAgIHJldHVybiBSZW5kZXJG
bG93Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpOwogfQogCi19Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMTczOTAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNDYgKzIyLDQyIEBACiAgKgogICovCiAKLSNpZm5kZWYgUkVOREVSX0lOTElORV9ICi0jZGVm
aW5lIFJFTkRFUl9JTkxJTkVfSAorI2lmbmRlZiBSZW5kZXJJbmxpbmVfaAorI2RlZmluZSBSZW5k
ZXJJbmxpbmVfaAogCiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgUG9zaXRpb247Ci19CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFBvc2l0aW9uOwogCi1jbGFzcyBSZW5kZXJJbmxpbmUgOiBwdWJsaWMgUmVuZGVyRmxvdwotewor
Y2xhc3MgUmVuZGVySW5saW5lIDogcHVibGljIFJlbmRlckZsb3cgewogcHVibGljOgogICAgIFJl
bmRlcklubGluZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVySW5saW5lKCk7CiAKLSAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklu
bGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVG
bG93KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlbklu
bGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0lubGlu
ZUNvbnRpbnVhdGlvbigpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
VG9GbG93KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
OwogICAgIHZvaWQgc3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJs
b2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyRmxvdyogb2xkQ29udCk7CiAg
ICAgdm9pZCBzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sq
IG5ld0Jsb2NrQm94LAogICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlckZsb3cqIG9sZENvbnQpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
KFJlbmRlclN0eWxlKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkge30gLy8gRG8gbm90
aGluZyBmb3IgbGF5b3V0KCkKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiBpLCBpbnQgdHgsIGludCB0eSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9k
ZUluZm8mIGluZm8sIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pOwotICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0gLy8gRG8gbm90aGluZyBmb3IgbGF5b3V0KCkK
KworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQgeCwgaW50IHksIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKwogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWlu
TWF4V2lkdGgoKTsKIAogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKQEAgLTY5LDcgKzY1
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBoZWlnaHQoKSBjb25zdDsKLSAgICAKKwogICAgIC8vIHVzZWQgdG8gY2FsY3VsYXRl
IG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVuZGVyRmxvdykg
dG8gcmV0dXJuCiAgICAgLy8gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVuIGxpbmUgKGFu
ZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUpLgogICAgIHZpcnR1YWwgaW50IG9mZnNldExl
ZnQoKSBjb25zdDsKQEAgLTc4LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWJzb2x1dGVS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7Ci0gICAg
CisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgUmVuZGVySW5saW5lKiBjbG9uZUlubGluZShSZW5k
ZXJGbG93KiBzcmMpOwogCkBAIC04Niw3ICs4Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
Q29udGludWF0aW9uIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UncmUgYSBjb250aW51YXRpb24g
b2YgYW4gaW5saW5lLgogfTsKIAotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKKyNlbmRpZiAvLyBSZW5kZXJJbmxpbmVfaApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBAQAogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIiAKICNp
bmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIiAKIAog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTIzMTIsNCArMjMx
Miw0IEBAIHZvaWQgTWFycXVlZTo6dGltZXJGaXJlZChUaW1lcjxNYXJxdWVlPioKICAgICB9CiB9
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwyOSArNDEsNDIgQEAKICAqIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgogICovCiAKLSNpZm5k
ZWYgcmVuZGVyX2xheWVyX2gKLSNkZWZpbmUgcmVuZGVyX2xheWVyX2gKKyNpZm5kZWYgUmVuZGVy
TGF5ZXJfaAorI2RlZmluZSBSZW5kZXJMYXllcl9oCiAKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlNjcm9sbEJhci5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7
Ci1jbGFzcyBSZW5kZXJWaWV3OworY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXI7CiBjbGFzcyBSZW5k
ZXJGcmFtZVNldDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xh
c3MgUmVuZGVyVGFibGU7CiBjbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgUGxhdGZvcm1TY3JvbGxi
YXI7CitjbGFzcyBSZW5kZXJWaWV3OwogCisvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGl0J3Mgb3du
IGZpbGUKIGNsYXNzIENsaXBSZWN0cyB7CiBwdWJsaWM6Ci0gICAgQ2xpcFJlY3RzKGNvbnN0IElu
dFJlY3QmIHIpIDptX292ZXJmbG93Q2xpcFJlY3QociksIG1fZml4ZWRDbGlwUmVjdChyKSwgbV9w
b3NDbGlwUmVjdChyKSwgbV9yZWZDbnQoMCkge30KKyAgICBDbGlwUmVjdHMoY29uc3QgSW50UmVj
dCYgcikKKyAgICAgICAgOiBtX292ZXJmbG93Q2xpcFJlY3QocikKKyAgICAgICAgLCBtX2ZpeGVk
Q2xpcFJlY3QocikKKyAgICAgICAgLCBtX3Bvc0NsaXBSZWN0KHIpCisgICAgICAgICwgbV9yZWZD
bnQoMCkKKyAgICB7CisgICAgfQorCiAgICAgQ2xpcFJlY3RzKGNvbnN0IEludFJlY3QmIG8sIGNv
bnN0IEludFJlY3QmIGYsIGNvbnN0IEludFJlY3QmIHApCi0gICAgICA6bV9vdmVyZmxvd0NsaXBS
ZWN0KG8pLCBtX2ZpeGVkQ2xpcFJlY3QoZiksIG1fcG9zQ2xpcFJlY3QocCksIG1fcmVmQ250KDAp
IHt9CisgICAgICAgIDogbV9vdmVyZmxvd0NsaXBSZWN0KG8pCisgICAgICAgICwgbV9maXhlZENs
aXBSZWN0KGYpCisgICAgICAgICwgbV9wb3NDbGlwUmVjdChwKQorICAgICAgICAsIG1fcmVmQ250
KDApCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IEludFJlY3QmIG92ZXJmbG93Q2xpcFJlY3Qo
KSB7IHJldHVybiBtX292ZXJmbG93Q2xpcFJlY3Q7IH0KICAgICBjb25zdCBJbnRSZWN0JiBmaXhl
ZENsaXBSZWN0KCkgeyByZXR1cm4gbV9maXhlZENsaXBSZWN0OyB9CkBAIC03MSwxOCArODQsMTgg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZWYoKSB7IG1fcmVmQ250Kys7IH0KICAgICB2b2lkIGRl
cmVmKFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkgeyBpZiAoLS1tX3JlZkNudCA9PSAwKSBkZXN0
cm95KHJlbmRlckFyZW5hKTsgfQotICAgIAotICAgIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSog
cmVuZGVyQXJlbmEpOworCisgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7CiAKICAgICAv
LyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7ICAgIAorICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRlckFyZW5hKikgdGhyb3coKTsgICAgCiAKICAgICAvLyBP
dmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJvbSBiZWluZyBjYWxsZWQu
Ci0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opOwotICAgICAg
ICAKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKKwogcHJpdmF0ZToK
ICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkIG9uIGFsbCByZW5k
ZXIgb2JqZWN0cy4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6KSB0aHJvdygpOwor
ICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpIHRocm93KCk7CiAKIHByaXZhdGU6CiAgICAg
SW50UmVjdCBtX292ZXJmbG93Q2xpcFJlY3Q7CkBAIC05MSwxNCArMTA0LDE2IEBAIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgbV9yZWZDbnQ7CiB9OwogCisKKy8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8g
aXQncyBvd24gZmlsZQogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGluZyBv
ZiBsYXllcnMgd2l0aCBvdmVyZmxvdzogbWFycXVlZS4KLWNsYXNzIE1hcnF1ZWUKLXsKK2NsYXNz
IE1hcnF1ZWUgewogcHVibGljOgogICAgIE1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsKIAogICAgIGlu
dCBzcGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWQ7IH0KICAgICBpbnQgbWFycXVlZVNwZWVk
KCkgY29uc3Q7CisKICAgICBFTWFycXVlZURpcmVjdGlvbiByZXZlcnNlRGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RU1hcnF1ZWVEaXJlY3Rpb24+KC1kaXJlY3Rpb24oKSk7
IH0KICAgICBFTWFycXVlZURpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKIApAQCAtMTA3LDgg
KzEyMiw4IEBAIHB1YmxpYzoKICAgICBpbnQgdW5mdXJsUG9zKCkgY29uc3QgeyByZXR1cm4gbV91
bmZ1cmxQb3M7IH0KIAogICAgIEVXaGl0ZVNwYWNlIHdoaXRlU3BhY2UoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxFV2hpdGVTcGFjZT4obV93aGl0ZVNwYWNlKTsgfQotICAgIAotICAgIGludCBjb21w
dXRlUG9zaXRpb24oRU1hcnF1ZWVEaXJlY3Rpb24gZGlyLCBib29sIHN0b3BBdENsaWVudEVkZ2Up
OworCisgICAgaW50IGNvbXB1dGVQb3NpdGlvbihFTWFycXVlZURpcmVjdGlvbiwgYm9vbCBzdG9w
QXRDbGllbnRFZGdlKTsKIAogICAgIHZvaWQgc2V0RW5kKGludCBlbmQpIHsgbV9lbmQgPSBlbmQ7
IH0KICAgICAKQEAgLTE2MSwxOSArMTc2LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
U2Nyb2xsQWxpZ25tZW50IGdBbGlnbkNlbnRlckFsd2F5czsKICAgICBzdGF0aWMgY29uc3QgU2Ny
b2xsQWxpZ25tZW50IGdBbGlnblRvcEFsd2F5czsKICAgICBzdGF0aWMgY29uc3QgU2Nyb2xsQWxp
Z25tZW50IGdBbGlnbkJvdHRvbUFsd2F5czsKLSAgICAKKwogICAgIHN0YXRpYyBTY3JvbGxCZWhh
dmlvciBnZXRWaXNpYmxlQmVoYXZpb3IoY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBzKSB7IHJldHVy
biBzLm1fcmVjdFZpc2libGU7IH0KICAgICBzdGF0aWMgU2Nyb2xsQmVoYXZpb3IgZ2V0UGFydGlh
bEJlaGF2aW9yKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgcykgeyByZXR1cm4gcy5tX3JlY3RQYXJ0
aWFsOyB9CiAgICAgc3RhdGljIFNjcm9sbEJlaGF2aW9yIGdldEhpZGRlbkJlaGF2aW9yKGNvbnN0
IFNjcm9sbEFsaWdubWVudCYgcykgeyByZXR1cm4gcy5tX3JlY3RIaWRkZW47IH0KLSAgICAKKwog
ICAgIFJlbmRlckxheWVyKFJlbmRlck9iamVjdCopOwogICAgIH5SZW5kZXJMYXllcigpOwotICAg
IAorCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
OyB9CiAgICAgUmVuZGVyTGF5ZXIqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9
CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
dmlvdXM7IH0KICAgICBSZW5kZXJMYXllciogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBt
X25leHQ7IH0KLQogICAgIFJlbmRlckxheWVyKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdDsgfQogICAgIFJlbmRlckxheWVyKiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3Q7IH0KIApAQCAtMTg0LDM5ICsxOTgsNDEgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0
T25seVRoaXNMYXllcigpOwogCiAgICAgdm9pZCByZXBhaW50SW5jbHVkaW5nRGVzY2VuZGFudHMo
KTsKLSAgICAKKwogICAgIHZvaWQgc3R5bGVDaGFuZ2VkKCk7Ci0gICAgCisKICAgICBNYXJxdWVl
KiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlOyB9CiAgICAgdm9pZCBzdXNwZW5k
TWFycXVlZXMoKTsKIAogICAgIGJvb2wgaXNPdmVyZmxvd09ubHkoKSBjb25zdCB7IHJldHVybiBt
X2lzT3ZlcmZsb3dPbmx5OyB9Ci0gICAgCisKICAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBjb25z
dDsKICAgICBSZW5kZXJMYXllciogdHJhbnNwYXJlbnRBbmNlc3RvcigpOwogICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwot
ICAgIAotICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290KCkgY29uc3QgeworCisgICAgY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3QoKSBjb25zdAorICAgIHsKICAgICAgICAgY29uc3QgUmVuZGVyTGF5
ZXIqIGN1cnIgPSB0aGlzOwotICAgICAgICB3aGlsZSAoY3Vyci0+cGFyZW50KCkpIGN1cnIgPSBj
dXJyLT5wYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKGN1cnItPnBhcmVudCgpKQorICAgICAgICAg
ICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwogICAgICAgICByZXR1cm4gY3VycjsKICAgICB9CiAg
ICAgCiAgICAgaW50IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KICAgICBpbnQgeVBvcygp
IGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQgc2V0UG9zKGludCB4UG9zLCBpbnQgeVBv
cykKKyAgICB7CisgICAgICAgIG1feCA9IHhQb3M7CisgICAgICAgIG1feSA9IHlQb3M7CisgICAg
fQorCiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIGludCBo
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotCiAgICAgdm9pZCBzZXRXaWR0aChp
bnQgdykgeyBtX3dpZHRoID0gdzsgfQogICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoKSB7IG1faGVp
Z2h0ID0gaDsgfQogCiAgICAgaW50IHNjcm9sbFdpZHRoKCk7CiAgICAgaW50IHNjcm9sbEhlaWdo
dCgpOwotICAgIAotICAgIHZvaWQgc2V0UG9zKCBpbnQgeFBvcywgaW50IHlQb3MgKSB7Ci0gICAg
ICAgIG1feCA9IHhQb3M7Ci0gICAgICAgIG1feSA9IHlQb3M7Ci0gICAgfQogCiAgICAgLy8gU2Ny
b2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cu
CiAgICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkpOwpAQCAtMjI2LDM2ICsyNDIs
NDYgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBib29s
IHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBib29sIHJlcGFpbnQgPSB0cnVlKTsKICAgICB2b2lk
IHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4LCBtX3Njcm9sbFkpOyB9
CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQobV9zY3Jv
bGxYICsgbV9zY3JvbGxPcmlnaW5YLCB5KTsgfQotICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBJbnRSZWN0ICZyLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCA9IGdBbGln
bkNlbnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSA9IGdBbGlnbkNl
bnRlcklmTmVlZGVkKTsKLSAgICBJbnRSZWN0IGdldFJlY3RUb0V4cG9zZShjb25zdCBJbnRSZWN0
ICZ2aXNpYmxlUmVjdCwgIGNvbnN0IEludFJlY3QgJmV4cG9zZVJlY3QsIGNvbnN0IFNjcm9sbEFs
aWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSk7ICAgIAorICAg
IHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblggPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblkgPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCk7CisKKyAgICBJbnRSZWN0IGdldFJl
Y3RUb0V4cG9zZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgIGNvbnN0IEludFJlY3QgJmV4
cG9zZVJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGln
bm1lbnQmIGFsaWduWSk7ICAgIAorCiAgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KGJvb2wpOwogICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKICAgICBQ
YXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
KTsKICAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCiAg
ICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgeyByZXR1cm4gbV9oQmFyLmdldCgp
OyB9CiAgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIHsgcmV0dXJuIG1fdkJhci5n
ZXQoKTsgfQorCiAgICAgUGxhdGZvcm1TY3JvbGxiYXIqIGhvcml6b250YVNjcm9sbGJhcldpZGdl
dCgpIGNvbnN0OwogICAgIFBsYXRmb3JtU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcldpZGdl
dCgpIGNvbnN0OworCiAgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdDsKICAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0OworCiAgICAgdm9pZCBwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMoKTsKICAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
Y29uc3QgSW50UG9pbnQmKTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KTsKKwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0gICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXI9MS4wKTsKKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKICAg
ICB2b2lkIGF1dG9zY3JvbGwoKTsKKwogICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYsIGNvbnN0IEludFNpemUmKTsKICAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CiAgICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9v
bCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQogICAgIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbigpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMoYm9vbCBkb0Z1bGxSZXBh
aW50ID0gZmFsc2UsIGJvb2wgY2hlY2tGb3JSZXBhaW50PXRydWUpOworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnMoYm9vbCBkb0Z1bGxSZXBhaW50ID0gZmFsc2UsIGJvb2wgY2hlY2tGb3JS
ZXBhaW50ID0gdHJ1ZSk7CiAgICAgdm9pZCBjaGVja0ZvclJlcGFpbnRPblJlc2l6ZSgpOwotICAg
IHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgsIGludCYgcmVsWSkgewotICAg
ICAgICByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7Ci0gICAgfQotICAgICAKKworICAg
IHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgsIGludCYgcmVsWSkgeyByZWxY
ICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7IH0KKwogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHMo
KTsKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3QoKTsKIApAQCAtMjY4LDIxICsyOTQsMjEgQEAgcHVi
bGljOgogICAgIHZvaWQgdXBkYXRlWk9yZGVyTGlzdHMoKTsKICAgICBWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogcG9zWk9yZGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zWk9yZGVyTGlzdDsgfQog
ICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9uZWdaT3JkZXJMaXN0OyB9Ci0gICAgCisKICAgICB2b2lkIGRpcnR5T3ZlcmZsb3dMaXN0KCk7
CiAgICAgdm9pZCB1cGRhdGVPdmVyZmxvd0xpc3QoKTsKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIq
Piogb3ZlcmZsb3dMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd0xpc3Q7IH0KLSAgICAK
KwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2li
bGVDb250ZW50OyB9Ci0gICAgdm9pZCBzZXRIYXNWaXNpYmxlQ29udGVudChib29sIGIpOworICAg
IHZvaWQgc2V0SGFzVmlzaWJsZUNvbnRlbnQoYm9vbCk7CiAgICAgdm9pZCBkaXJ0eVZpc2libGVD
b250ZW50U3RhdHVzKCk7CiAKICAgICAvLyBHZXRzIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwb3Np
dGlvbmVkIGFuY2VzdG9yIGxheWVyIChhbHNvIGluY2x1ZGVzCiAgICAgLy8gdGhlIDxodG1sPiBs
YXllciBhbmQgdGhlIHJvb3QgbGF5ZXIpLgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3Np
dGlvbmVkQW5jZXN0b3IoKSBjb25zdDsKLSAgICAKKwogICAgIHZvaWQgY29udmVydFRvTGF5ZXJD
b29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGludCYgeCwgaW50JiB5KSBj
b25zdDsKLSAgICAKKwogICAgIGJvb2wgaGFzQXV0b1pJbmRleCgpIGNvbnN0IHsgcmV0dXJuIHJl
bmRlcmVyKCktPnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKTsgfQogICAgIGludCB6SW5kZXgoKSBj
b25zdCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5kZXgoKTsgfQogCkBAIC0zMDks
MjEgKzMzNSwyMSBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94KCkg
Y29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoUmVuZGVyT2JqZWN0OjpO
b2RlSW5mbyYgaW5mbyk7Ci0gICAgCisKICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCi0gICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5h
KiByZW5kZXJBcmVuYSk7CisgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7CiAKICAgICAg
Ly8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuICBEZXJpdmVkIGNsYXNzZXMgbXVzdCBvdmVycmlk
ZSBvcGVyYXRvciBuZXcKICAgICAvLyBpbiBvcmRlciB0byBhbGxvY2F0ZSBvdXQgb2YgdGhlIFJl
bmRlckFyZW5hLgotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRlckFyZW5h
KiByZW5kZXJBcmVuYSkgdGhyb3coKTsgICAgCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCwgUmVuZGVyQXJlbmEqKSB0aHJvdygpOyAgICAKIAogICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJl
dmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5nIGNhbGxlZC4KLSAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkKiBwdHIsIHNpemVfdCBzeik7CisgICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCosIHNpemVfdCk7CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRv
ciBuZXcgaXMgZGlzYWxsb3dlZCBvbiBhbGwgcmVuZGVyIG9iamVjdHMuCi0gICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCBzeikgdGhyb3coKTsKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90KSB0aHJvdygpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmV4dFNpYmxpbmcoUmVuZGVy
TGF5ZXIqIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQpAQCAtMzM1LDcgKzM2MSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb2xsZWN0TGF5ZXJzKFZlY3RvcjxSZW5kZXJMYXllcio+KiYsIFZlY3Rv
cjxSZW5kZXJMYXllcio+KiYpOwogCiAgICAgdm9pZCBwYWludExheWVyKFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHBhaW50RGlydHlSZWN0
LAotICAgICAgICBib29sIGhhdmVUcmFuc3BhcmVuY3ksIFBhaW50UmVzdHJpY3Rpb24sIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290KTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXZlVHJh
bnNwYXJlbmN5LCBQYWludFJlc3RyaWN0aW9uLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCk7
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBo
aXRUZXN0UmVjdCk7CiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyhib29sKiBuZWVk
SEJhciA9IDAsIGJvb2wqIG5lZWRWQmFyID0gMCk7CiAKQEAgLTM0OSwxNCArMzc1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjaGlsZFZpc2liaWxpdHlDaGFuZ2VkKGJvb2wgbmV3VmlzaWJpbGl0
eSk7CiAgICAgdm9pZCBkaXJ0eVZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7CiAgICAgdm9pZCB1
cGRhdGVWaXNpYmlsaXR5U3RhdHVzKCk7Ci0gICAgICAgIAorCiBwcm90ZWN0ZWQ6ICAgCiAgICAg
UmVuZGVyT2JqZWN0KiBtX29iamVjdDsKLSAgICAKKwogICAgIFJlbmRlckxheWVyKiBtX3BhcmVu
dDsKICAgICBSZW5kZXJMYXllciogbV9wcmV2aW91czsKICAgICBSZW5kZXJMYXllciogbV9uZXh0
OwotCiAgICAgUmVuZGVyTGF5ZXIqIG1fZmlyc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIG1fbGFzdDsK
IApAQCAtMzc2LDIxICs0MDEsMjEgQEAgcHJvdGVjdGVkOiAgIAogICAgIC8vIFRoZSBsYXllcidz
IHdpZHRoL2hlaWdodAogICAgIGludCBtX3dpZHRoOwogICAgIGludCBtX2hlaWdodDsKLSAgICAK
KwogICAgIC8vIE91ciBzY3JvbGwgb2Zmc2V0cyBpZiB0aGUgdmlldyBpcyBzY3JvbGxlZC4KICAg
ICBpbnQgbV9zY3JvbGxYOwogICAgIGludCBtX3Njcm9sbFk7CiAgICAgaW50IG1fc2Nyb2xsT3Jp
Z2luWDsKICAgICBpbnQgbV9zY3JvbGxMZWZ0T3ZlcmZsb3c7Ci0gICAgCisKICAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgogICAgIGludCBtX3Njcm9sbFdpZHRo
OwogICAgIGludCBtX3Njcm9sbEhlaWdodDsKLSAgICAKKwogICAgIC8vIEZvciBsYXllcnMgd2l0
aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KICAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX2hCYXI7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotICAgIAorCiAg
ICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6
aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgogICAg
IGJvb2wgbV9pblJlc2l6ZU1vZGU7CiAKQEAgLTQwMCw3ICs0MjUsNyBAQCBwcm90ZWN0ZWQ6ICAg
CiAgICAgLy8gei1pbmRpY2VzLgogICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBtX3Bvc1pPcmRl
ckxpc3Q7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fbmVnWk9yZGVyTGlzdDsKLSAgICAK
KwogICAgIC8vIFRoaXMgbGlzdCBjb250YWlucyBvdXIgb3ZlcmZsb3cgY2hpbGQgbGF5ZXJzLgog
ICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBtX292ZXJmbG93TGlzdDsKIApAQCAtNDI0LDEwICs0
NDksMTAgQEAgcHJvdGVjdGVkOiAgIAogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7
CiAgICAgYm9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wg
bV9oYXNWaXNpYmxlRGVzY2VuZGFudCA6IDE7Ci0gICAgCisKICAgICBNYXJxdWVlKiBtX21hcnF1
ZWU7IC8vIFVzZWQgYnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3c6bWFycXVlZQogfTsKIAotfSAvLyBu
YW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVu
ZGVyTGF5ZXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmNwcAkocmV2aXNp
b24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw5ICsxMTAsOSBAQCB2b2lkIFJlbmRlckxpbmVFZGl0OjpjYWxjTWlu
TWF4V2lkdGgoKQogICAgIFJlbmRlckZvcm1FbGVtZW50OjpjYWxjTWluTWF4V2lkdGgoKTsKIH0K
IAotdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKnMpCit2b2lkIFJl
bmRlckxpbmVFZGl0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVu
ZGVyRm9ybUVsZW1lbnQ6OnNldFN0eWxlKHMpOworICAgIFJlbmRlckZvcm1FbGVtZW50OjpzZXRT
dHlsZShuZXdTdHlsZSk7CiAKICAgICBUZXh0RmllbGQqIHcgPSBzdGF0aWNfY2FzdDxUZXh0Rmll
bGQqPih3aWRnZXQoKSk7CiAgICAgdy0+c2V0QWxpZ25tZW50KHRleHRBbGlnbm1lbnQoKSk7CkBA
IC0xNDksNyArMTQ5LDcgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogICAgIH0KIAogICAgIHctPnNldFJlYWRPbmx5KGUtPmlzUmVhZE9ubHlDb250cm9sKCkpOwot
ICAgIAorCiAgICAgLy8gSGFuZGxlIHVwZGF0aW5nIHRoZSBzZWFyY2ggYXR0cmlidXRlcy4KICAg
ICB3LT5zZXRQbGFjZWhvbGRlclN0cmluZyhlLT5nZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRy
KS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIGlmICh3LT50eXBlKCkgPT0gVGV4dEZpZWxkOjpT
ZWFyY2gpIHsKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIFJlbmRlckxpbmVFZGl0Ojp2YWx1ZUNo
YW5nZWQoV2lkZ2V0CiAKIGludCBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0aW9uU3RhcnQoKQogewot
ICAgIFRleHRGaWVsZCAqbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxUZXh0RmllbGQgKj4obV93aWRn
ZXQpOworICAgIFRleHRGaWVsZCogbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxUZXh0RmllbGQqPiht
X3dpZGdldCk7CiAgICAgaW50IHN0YXJ0ID0gbGluZUVkaXQtPnNlbGVjdGlvblN0YXJ0KCk7CiAg
ICAgaWYgKHN0YXJ0ID09IC0xKQogICAgICAgICBzdGFydCA9IGxpbmVFZGl0LT5jdXJzb3JQb3Np
dGlvbigpOwpAQCAtMTkxLDE4ICsxOTEsMTggQEAgaW50IFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rp
b25TdGFydCgpCiAKIGludCBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0aW9uRW5kKCkKIHsKLSAgICBU
ZXh0RmllbGQgKmxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8VGV4dEZpZWxkICo+KG1fd2lkZ2V0KTsK
KyAgICBUZXh0RmllbGQqIGxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8VGV4dEZpZWxkKj4obV93aWRn
ZXQpOwogICAgIGludCBzdGFydCA9IGxpbmVFZGl0LT5zZWxlY3Rpb25TdGFydCgpOwogICAgIGlm
IChzdGFydCA9PSAtMSkKICAgICAgICAgcmV0dXJuIGxpbmVFZGl0LT5jdXJzb3JQb3NpdGlvbigp
OwotICAgIHJldHVybiBzdGFydCArIChpbnQpbGluZUVkaXQtPnNlbGVjdGVkVGV4dCgpLmxlbmd0
aCgpOworICAgIHJldHVybiBzdGFydCArIHN0YXRpY19jYXN0PGludD4obGluZUVkaXQtPnNlbGVj
dGVkVGV4dCgpLmxlbmd0aCgpKTsKIH0KIAogdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0
aW9uU3RhcnQoaW50IHN0YXJ0KQogewogICAgIGludCByZWFsU3RhcnQgPSBtYXgoc3RhcnQsIDAp
OwogICAgIGludCBsZW5ndGggPSBtYXgoc2VsZWN0aW9uRW5kKCkgLSByZWFsU3RhcnQsIDApOwot
ICAgIHN0YXRpY19jYXN0PFRleHRGaWVsZCAqPihtX3dpZGdldCktPnNldFNlbGVjdGlvbihyZWFs
U3RhcnQsIGxlbmd0aCk7CisgICAgc3RhdGljX2Nhc3Q8VGV4dEZpZWxkKj4obV93aWRnZXQpLT5z
ZXRTZWxlY3Rpb24ocmVhbFN0YXJ0LCBsZW5ndGgpOwogfQogCiB2b2lkIFJlbmRlckxpbmVFZGl0
OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFJlbmRl
ckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25FbmQoaW50CiAgICAgICAgIHN0YXJ0ID0gcmVhbEVuZDsK
ICAgICAgICAgbGVuZ3RoID0gMDsKICAgICB9Ci0gICAgc3RhdGljX2Nhc3Q8VGV4dEZpZWxkICo+
KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9uKHN0YXJ0LCBsZW5ndGgpOworICAgIHN0YXRpY19jYXN0
PFRleHRGaWVsZCo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9uKHN0YXJ0LCBsZW5ndGgpOwogfQog
CiB2b2lkIFJlbmRlckxpbmVFZGl0OjpzZWxlY3QoKQpAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQg
UmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKGkKIHsKICAgICBpbnQgcmVhbFN0YXJ0
ID0gbWF4KHN0YXJ0LCAwKTsKICAgICBpbnQgbGVuZ3RoID0gbWF4KGVuZCAtIHJlYWxTdGFydCwg
MCk7Ci0gICAgc3RhdGljX2Nhc3Q8VGV4dEZpZWxkICo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9u
KHJlYWxTdGFydCwgbGVuZ3RoKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0RmllbGQqPihtX3dpZGdl
dCktPnNldFNlbGVjdGlvbihyZWFsU3RhcnQsIGxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuaAkocmV2aXNpb24gMTcz
OTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHNlbGVj
dGlvbkVuZCgpOwogICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7CiAgICAgICAg
IHZvaWQgc2V0U2VsZWN0aW9uRW5kKGludCk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgaXNF
ZGl0ZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRFZGl0ZWQoYm9vbCk7CiAgICAgICAgIGJv
b2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcm9s
bEJhci5oIiAKICNpbmNsdWRlICJSZW5kZXJCUi5oIgpAQCAtNDMyLDQgKzQzMiw0IEBAIEludFJl
Y3QgUmVuZGVyTGlzdEJveDo6d2luZG93Q2xpcFJlY3QoKSAKICAgICByZXR1cm4gdmlldygpLT5m
cmFtZVZpZXcoKS0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihlbmNsb3NpbmdMYXllcigpLCB0cnVl
KTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKICAqCiAgKi8KIAotI2lm
bmRlZiBSZW5kZXJMaXN0Qm94X0gKLSNkZWZpbmUgUmVuZGVyTGlzdEJveF9ICisjaWZuZGVmIFJl
bmRlckxpc3RCb3hfaAorI2RlZmluZSBSZW5kZXJMaXN0Qm94X2gKIAogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCiAKQEAgLTM1LDYgKzM1LDggQEAgcHVibGljOgogICAgIFJlbmRlckxpc3RCb3go
SFRNTFNlbGVjdEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTGlzdEJveCgpOwogCisgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RCb3gi
OyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CkBAIC00Miw0NyAr
NDQsNDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uQ2hhbmdlZChib29sIHNlbGVj
dGlvbkNoYW5nZWQpIHsgbV9zZWxlY3Rpb25DaGFuZ2VkID0gc2VsZWN0aW9uQ2hhbmdlZDsgfQog
CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlckxpc3RCb3giOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluU2Nyb2xsYmFy
KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyPTEuMCk7CisgICAgdmlydHVhbCBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
ID0gMS4wZik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAgICAgdmly
dHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wgaXNSb290TGluZUJveCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNIZWlnaHQoKTsKICAgICB2b2lkIHNldE9wdGlvbnND
aGFuZ2VkKGJvb2wgYykgeyBtX29wdGlvbnNDaGFuZ2VkID0gYzsgfQogICAgIHZvaWQgdmFsdWVD
aGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCk7Ci0gICAgCisKICAgICAvLyBTY3JvbGxiYXJDbGll
bnQgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7
CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CiAKICAgICBIVE1M
T3B0aW9uRWxlbWVudCogb3B0aW9uQXRQb2ludChpbnQgeCwgaW50IHkpOwotICAgIAorCiAgICAg
Ym9vbCBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChpbnQgaW5kZXgpOwotICAgIAor
CiAgICAgdmlydHVhbCBib29sIHNob3VsZEF1dG9zY3JvbGwoKSBjb25zdCB7IHJldHVybiBudW1J
dGVtcygpID4gc2l6ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIG1fb3B0aW9uc0NoYW5nZWQ7Ci0gICAgaW50IG1fb3B0aW9uc1dpZHRo
OwotICAgIGludCBtX29wdGlvbnNNYXhIZWlnaHQ7Ci0gICAgaW50IG1fb3B0aW9uc1RvdGFsSGVp
Z2h0OwotICAgIGludCBtX2luZGV4T2Zmc2V0OwotICAgIGJvb2wgbV9zZWxlY3Rpb25DaGFuZ2Vk
OwotICAgIAogICAgIGludCBzaXplKCkgY29uc3Q7CiAgICAgaW50IG51bUl0ZW1zKCkgY29uc3Q7
CiAgICAgSW50UmVjdCBpdGVtQm91bmRpbmdCb3hSZWN0KGludCB0eCwgaW50IHR5LCBpbnQgaW5k
ZXgpOwogICAgIHZvaWQgcGFpbnRTY3JvbGxiYXIoUGFpbnRJbmZvJik7CiAgICAgdm9pZCBwYWlu
dEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGlzdEluZGV4
KTsKICAgICB2b2lkIHBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQg
dHksIGludCBsaXN0SW5kZXgpOwotICAgIAorCisgICAgYm9vbCBtX29wdGlvbnNDaGFuZ2VkOwor
ICAgIGludCBtX29wdGlvbnNXaWR0aDsKKyAgICBpbnQgbV9vcHRpb25zTWF4SGVpZ2h0OworICAg
IGludCBtX29wdGlvbnNUb3RhbEhlaWdodDsKKyAgICBpbnQgbV9pbmRleE9mZnNldDsKKyAgICBi
b29sIG1fc2VsZWN0aW9uQ2hhbmdlZDsKKwogICAgIFNjcm9sbGJhciogbV92QmFyOwogfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJMaXN0
Qm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE3
MzkwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw5ICs0Nyw5IEBAIFJlbmRlckxpc3RJdGVtOjpSZW5kZXJMaXN0SXRlbShOb2Rl
KiBub2QKICAgICBzZXRJbmxpbmUoZmFsc2UpOyAvLyBvdXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUK
IH0KIAotdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIF9zdHlsZSkK
K3ZvaWQgUmVuZGVyTGlzdEl0ZW06OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsK
LSAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUoX3N0eWxlKTsKKyAgICBSZW5kZXJCbG9jazo6c2V0
U3R5bGUobmV3U3R5bGUpOwogCiAgICAgaWYgKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSAhPSBM
Tk9ORSB8fAogICAgICAgICAoc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiAhc3R5bGUoKS0+
bGlzdFN0eWxlSW1hZ2UoKS0+aXNFcnJvckltYWdlKCkpKSB7CkBAIC0xNDIsMjkgKzE0MiwyOSBA
QCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgUmVuZGVyT2Jq
ZWN0KiBmaXJzdENoaWxkID0gY3Vyci0+Zmlyc3RDaGlsZCgpOwogICAgIGlmICghZmlyc3RDaGls
ZCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IGN1cnJDaGlsZCA9IGZpcnN0Q2hpbGQ7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxk
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyQ2hpbGQgPT0gbWFya2VyKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY3VyckNoaWxk
LT5pc0lubGluZSgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnI7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChjdXJyQ2hpbGQtPmlzRmxvYXRpbmcoKSB8fCBjdXJyQ2hpbGQtPmlzUG9zaXRpb25l
ZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAo
Y3VyckNoaWxkLT5pc1RhYmxlKCkgfHwgIWN1cnJDaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxl
KCktPmh0bWxIYWNrcygpICYmIGN1cnJDaGlsZC0+ZWxlbWVudCgpICYmCiAgICAgICAgICAgICAo
Y3VyckNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxkLT5lbGVt
ZW50KCktPmhhc1RhZ05hbWUob2xUYWcpKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCisKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExp
bmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwogICAgICAgICBpZiAobGluZUJveCkKICAgICAgICAg
ICAgIHJldHVybiBsaW5lQm94OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBA
IC0xOTEsNyArMTkxLDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2VyTG9jYXRp
bwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQgPSB0aGlz
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtYXJrZXJQYXIgIT0gbGluZUJv
eFBhcmVudCB8fCAhbV9tYXJrZXItPm1pbk1heEtub3duKCkpIHsKICAgICAgICAgICAgIG1fbWFy
a2VyLT5yZW1vdmUoKTsKICAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkKQEAgLTIzMSw3
ICsyMzEsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAgICAg
ICAgICAgICB5T2Zmc2V0ICs9IG8tPnlQb3MoKTsKICAgICAgICAgICAgIHhPZmZzZXQgKz0gby0+
eFBvcygpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3QgPSBtX21hcmtlci0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgIGludCBsZWZ0TGluZU9m
ZnNldCA9IGxlZnRSZWxPZmZzZXQoeU9mZnNldCwgbGVmdE9mZnNldCh5T2Zmc2V0KSk7CkBAIC0y
NTMsMTIgKzI1MywxMiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIo
CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIGksIGlu
dCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKCFtX2hlaWdodCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50KGksIF90eCwgX3R5KTsKKyAgICBSZW5k
ZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCiBEZXByZWNhdGVkU3RyaW5n
IFJlbmRlckxpc3RJdGVtOjptYXJrZXJTdHJpbmdWYWx1ZSgpCkBAIC0yNjYsNCArMjY2LDQgQEAg
RGVwcmVjYXRlZFN0cmluZyBSZW5kZXJMaXN0SXRlbTo6bWFya2VyUwogICAgIHJldHVybiBtX21h
cmtlciA/IG1fbWFya2VyLT50ZXh0KCkgOiAiIjsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCShyZXZpc2lvbiAxNzM5MCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJMaXN0SXRlbV9ICi0jZGVm
aW5lIFJlbmRlckxpc3RJdGVtX0gKKyNpZm5kZWYgUmVuZGVyTGlzdEl0ZW1faAorI2RlZmluZSBS
ZW5kZXJMaXN0SXRlbV9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogCkBAIC0zMSwxOSAr
MzEsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJMaXN0TWFya2VyOwog
Ci1jbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1YmxpYyBSZW5kZXJCbG9jawoteworY2xhc3MgUmVu
ZGVyTGlzdEl0ZW0gOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlckxp
c3RJdGVtKE5vZGUqKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCiAgICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxp
c3RJdGVtIjsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7Ci0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldFN0
eWxlKFJlbmRlclN0eWxlKik7CisKICAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CiAgICAgdm9pZCBzZXRWYWx1ZShpbnQgdikgeyBtX3ByZWRlZlZhbCA9IHY7IH0KICAg
ICB2b2lkIGNhbGNWYWx1ZSgpOwpAQCAtNTcsNyArNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgcG9zaXRpb25MaXN0TWFya2VyKCk7CiAgICAgdm9pZCB1cGRhdGVNYXJrZXJMb2Nh
dGlvbigpOwotICAgIAorCiAgICAgdm9pZCBzZXROb3RJbkxpc3QoYm9vbCBub3RJbkxpc3QpIHsg
bV9ub3RJbkxpc3QgPSBub3RJbkxpc3Q7IH0KICAgICBib29sIG5vdEluTGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbm90SW5MaXN0OyB9CiAKQEAgLTcwLDcgKzY5LDYgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV92YWx1ZTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvL25hbWVzcGFj
ZQotCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJMaXN0SXRlbV9oCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTczOTApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDQgKzUy
MSw0IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdCgKICAgICByZXR1
cm4gSW50UmVjdChhYnN4ICsgeFBvcygpLCBhYnN5ICsgcm9vdC0+c2VsZWN0aW9uVG9wKCksIHdp
ZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkocmV2aXNpb24g
MTczOTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJMaXN0TWFy
a2VyX0gKLSNkZWZpbmUgUmVuZGVyTGlzdE1hcmtlcl9ICisjaWZuZGVmIFJlbmRlckxpc3RNYXJr
ZXJfaAorI2RlZmluZSBSZW5kZXJMaXN0TWFya2VyX2gKIAogI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAgLTM1LDE5ICszNSwyMSBAQCBjbGFz
cyBSZW5kZXJMaXN0SXRlbTsKIC8qIHVzZWQgdG8gcmVuZGVyIHRoZSBsaXN0cyBtYXJrZXIuCiAg
ICAgIFRoaXMgY2xhc3MgYWx3YXlzIGhhcyB0byBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIFJlbmRl
ckxpc3RJdGVtIQogKi8KLWNsYXNzIFJlbmRlckxpc3RNYXJrZXIgOiBwdWJsaWMgUmVuZGVyQm94
Ci17CitjbGFzcyBSZW5kZXJMaXN0TWFya2VyIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6
CiAgICAgUmVuZGVyTGlzdE1hcmtlcihEb2N1bWVudCopOwogICAgIH5SZW5kZXJMaXN0TWFya2Vy
KCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyTGlzdE1hcmtlciI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RNYXJrZXIo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVu
ZGVyU3R5bGUqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJMaXN0TWFya2VyIjsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgeG9mZiwgaW50IHlvZmYpOworCiAgICAgLy8gc28gdGhlIG1hcmtlciBn
ZXRzIHRvIGxheW91dCBpdHNlbGYuIE9ubHkgbmVlZGVkIGZvcgogICAgIC8vIGxpc3Qtc3R5bGUt
cG9zaXRpb246IGluc2lkZQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGlu
dCB4b2ZmLCBpbnQgeW9mZik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKIApAQCAtNTcsMjIgKzU5LDIwIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCwgYm9v
bCk7CiAKLSAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExp
bmVCb3g9ZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihi
b29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBzaG9y
dCBsaW5lSGVpZ2h0KGJvb2wsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICAKICAgICBDYWNoZWRJbWFnZSogbGlzdEltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9saXN0SW1hZ2U7IH0KLSAgICAKKwogICAgIFJlbmRlckxpc3RJdGVtKiBs
aXN0SXRlbSgpIHsgcmV0dXJuIG1fbGlzdEl0ZW07IH0KICAgICB2b2lkIHNldExpc3RJdGVtKFJl
bmRlckxpc3RJdGVtKiBsaXN0SXRlbSkgeyBtX2xpc3RJdGVtID0gbGlzdEl0ZW07IH0KLSAgICAK
KwogICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX2l0
ZW07IH0KIAogICAgIGJvb2wgaXNJbnNpZGUoKSBjb25zdDsKLSAgICAKKwogICAgIEludFJlY3Qg
Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0
YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7CiAgICAg
dmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKQEAgLTg1LDYgKzg1LDYgQEAgcHJpdmF0
ZToKICAgICBTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlOwogfTsKIAotfSAvL25hbWVz
cGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJM
aXN0TWFya2VyX2gK
</data>
<flag name="review"
          id="3882"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11263</attachid>
            <date>2006-10-27 16:12:54 -0700</date>
            <delta_ts>2006-10-29 18:50:21 -0800</delta_ts>
            <desc>no-whitespace-changes version of the patch</desc>
            <filename>cleanupNoSpaces.diff</filename>
            <type>text/plain</type>
            <size>91623</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJC
dXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC01OCw4ICs1OCw3IEBACiAgICAgaWYgKG9sZENoaWxkID09IG1faW5uZXIgfHwgIW1faW5uZXIp
IHsKICAgICAgICAgUmVuZGVyRmxleGlibGVCb3g6OnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKICAg
ICAgICAgbV9pbm5lciA9IDA7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAg
bV9pbm5lci0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogfQogCkBAIC0xMDksMjQgKzEwOCwyNCBA
QAogICAgICAgICB1cGRhdGVQc2V1ZG9DaGlsZEZvck9iamVjdCh0eXBlLCB0aGlzKTsKIH0KIAot
dm9pZCBSZW5kZXJCdXR0b246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50
IF90eSkKK3ZvaWQgUmVuZGVyQnV0dG9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8gUHVzaCBhIGNsaXAuCi0gICAgaWYgKG1faW5u
ZXIgJiYgaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBJbnRSZWN0
IGNsaXBSZWN0KF90eCArIGJvcmRlckxlZnQoKSwgX3R5ICsgYm9yZGVyVG9wKCksCisgICAgaWYg
KG1faW5uZXIgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Cisg
ICAgICAgIEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9w
KCksCiAgICAgICAgICAgICB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwg
aGVpZ2h0KCkgLSBib3JkZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpKTsKICAgICAgICAgaWYgKGNs
aXBSZWN0LndpZHRoKCkgPT0gMCB8fCBjbGlwUmVjdC5oZWlnaHQoKSA9PSAwKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpLnAtPnNhdmUoKTsKLSAgICAgICAgaS5wLT5jbGlwKGNsaXBS
ZWN0KTsKKyAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLnAt
PmNsaXAoY2xpcFJlY3QpOwogICAgIH0KICAgICAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4u
Ci0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KGksIF90eCwgX3R5KTsKKyAgICBSZW5kZXJC
bG9jazo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIAogICAgIC8vIFBvcCB0
aGUgY2xpcC4KLSAgICBpZiAobV9pbm5lciAmJiBpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKQotICAgICAgICBpLnAtPnJlc3RvcmUoKTsKKyAgICBpZiAobV9pbm5lciAmJiBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgIHBhaW50SW5mby5wLT5y
ZXN0b3JlKCk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZsb3cuaAkocmV2
aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyRmxvd19ICi0jZGVmaW5l
IFJlbmRlckZsb3dfSAorI2lmbmRlZiBSZW5kZXJGbG93X2gKKyNkZWZpbmUgUmVuZGVyRmxvd19o
CiAKICNpbmNsdWRlICJSZW5kZXJDb250YWluZXIuaCIKIApAQCAtNTcsMTEgKzU3LDExIEBACiAg
ICAgdmlydHVhbCB2b2lkIGFkZENoaWxkVG9GbG93KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyT2JqZWN0ICpuZXdDaGlsZCwgUmVuZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDApOwog
Ci0gICAgc3RhdGljIFJlbmRlckZsb3cqIGNyZWF0ZUFub255bW91c0Zsb3coRG9jdW1lbnQqIGRv
YywgUmVuZGVyU3R5bGUqIHN0eWxlKTsKKyAgICBzdGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5v
bnltb3VzRmxvdyhEb2N1bWVudCosIFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGV4dHJhY3RM
aW5lQm94KElubGluZUZsb3dCb3gqIGxpbmVCb3gpOwotICAgIHZvaWQgYXR0YWNoTGluZUJveChJ
bmxpbmVGbG93Qm94KiBsaW5lQm94KTsKLSAgICB2b2lkIHJlbW92ZUxpbmVCb3goSW5saW5lRmxv
d0JveCogbGluZUJveCk7CisgICAgdm9pZCBleHRyYWN0TGluZUJveChJbmxpbmVGbG93Qm94Kik7
CisgICAgdm9pZCBhdHRhY2hMaW5lQm94KElubGluZUZsb3dCb3gqKTsKKyAgICB2b2lkIHJlbW92
ZUxpbmVCb3goSW5saW5lRmxvd0JveCopOwogICAgIHZvaWQgZGVsZXRlTGluZUJveGVzKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIApAQCAtNzUsOCArNzUsOCBAQAogICAgIHZpcnR1
YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCBtYWtlUGxhY2VIb2xkZXJCb3gsIGJv
b2wgaXNSb290TGluZUJveCwgYm9vbCBpc09ubHlSdW49ZmFsc2UpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQsIGJvb2wgaXNSb290TGluZUJveCA9IGZh
bHNlKTsKICAgICAKLSAgICB2b2lkIHBhaW50TGluZXMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5KTsKLSAgICBib29sIGhpdFRlc3RMaW5lcyhOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKTsKKyAgICB2b2lk
IHBhaW50TGluZXMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIGJvb2wgaGl0VGVz
dExpbmVzKE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwog
ICAgIApAQCAtODQsOSArODQsOSBAQAogICAgIHZpcnR1YWwgaW50IHJpZ2h0bW9zdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVl
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92
ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVlKSBjb25zdDsKICAgICAK
LSAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZp
bml0eSA9IFVQU1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOworICAgIHZp
cnR1YWwgSW50UmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5ID0gVVBTVFJFQU0s
IGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IF90eCwgaW50IF90eSk7CisgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwg
aW50IHR5KTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0Kiwg
aW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QgJnByZXZMaW5lLCBjb25zdCBJbnRSZWN0ICZ0
aGlzTGluZSwgY29uc3QgSW50UmVjdCAmbmV4dExpbmUpOwogICAgIHZvaWQgcGFpbnRPdXRsaW5l
KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIApAQCAtMTA4LDQgKzEwOCw0IEBA
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFJlbmRlckZsb3dfSAorI2Vu
ZGlmIC8vIFJlbmRlckZsb3dfaApJbmRleDogcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHJldmlzaW9uIDE3MzkwKQor
KysgcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDggQEAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFJlbmRlckFwcGxldDo6UmVuZGVy
QXBwbGV0KEhUTUxBcHBsZXRFbGVtZW50KiBhcHBsZXQsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiBhcmdzKQotICAgIDogUmVuZGVyV2lkZ2V0KGFwcGxldCksIG1fYXJncyhhcmdzKQor
ICAgIDogUmVuZGVyV2lkZ2V0KGFwcGxldCkKKyAgICAsIG1fYXJncyhhcmdzKQogewogICAgIHNl
dElubGluZSh0cnVlKTsKIH0KQEAgLTc0LDEyICs3NSwxMyBAQAogICAgICAgICBtX3dpZHRoIC0g
Ym9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmln
aHQoKTsKICAgICBpbnQgaGVpZ2h0ID0gc3R5bGUoKS0+aGVpZ2h0KCkuaXNGaXhlZCgpID8gc3R5
bGUoKS0+aGVpZ2h0KCkudmFsdWUoKSA6CiAgICAgICAgIG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkg
LSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKLSAgICBm
b3IgKE5vZGUqIGNoaWxkID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlKCktPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkgewogICAgICAgICAgICAgSFRNTFBhcmFt
RWxlbWVudCogcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnQqPihjaGlsZCk7CiAgICAg
ICAgICAgICBpZiAoIXAtPm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgbV9hcmdz
LnNldChwLT5uYW1lKCksIHAtPnZhbHVlKCkpOwogICAgICAgICB9CisgICAgfQogICAgIAogICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsK
QEAgLTk5LDQgKzEwMSw0IEBACiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHAJKHJldmlzaW9uIDE3MzkwKQor
KysgcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
OCBAQAogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KIAogI2RlZmluZSBST1VORFVQKHgseSkgKCgoKHgpKygoeSktMSkpLyh5KSkqKHkpKQogCkBA
IC01Niw3ICs1Niw3IEBACiAKICNlbmRpZgogCi1SZW5kZXJBcmVuYTo6UmVuZGVyQXJlbmEodW5z
aWduZWQgaW50IGFyZW5hU2l6ZSkKK1JlbmRlckFyZW5hOjpSZW5kZXJBcmVuYSh1bnNpZ25lZCBh
cmVuYVNpemUpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJlbmEgcG9vbAogICAgIElOSVRf
QVJFTkFfUE9PTCgmbV9wb29sLCAiUmVuZGVyQXJlbmEiLCBhcmVuYVNpemUpOwpAQCAtMTAwLDEw
ICsxMDAsOSBAQAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIC8vIEFsbG9jYXRlIGEgbmV3IGNodW5rIGZyb20gdGhl
IGFyZW5hCiAgICAgICAgIEFSRU5BX0FMTE9DQVRFKHJlc3VsdCwgJm1fcG9vbCwgc2l6ZSk7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbmRpZgpAQCAtMTMzLDQgKzEzMiw0IEBACiAj
ZW5kaWYKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2Fu
dmFzLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDQ5ICszNSw0NCBAQAogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1SZW5kZXJIVE1MQ2FudmFzOjpSZW5kZXJIVE1MQ2FudmFzKE5vZGUqIG4p
Ci0gICAgOiBSZW5kZXJSZXBsYWNlZChuKQorUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENh
bnZhcyhOb2RlKiBub2RlKQorICAgIDogUmVuZGVyUmVwbGFjZWQobm9kZSkKIHsKIH0KIAotY29u
c3QgY2hhciogUmVuZGVySFRNTENhbnZhczo6cmVuZGVyTmFtZSgpIGNvbnN0Cit2b2lkIFJlbmRl
ckhUTUxDYW52YXM6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
IHsKLSAgICByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOwotfQotCi12b2lkIFJlbmRlckhUTUxD
YW52YXM6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpCi17Ci0gICAgaWYgKCFz
aG91bGRQYWludChpLCB0eCwgdHkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgeCA9IHR4ICsgbV94OwogICAgIGlu
dCB5ID0gdHkgKyBtX3k7CiAKLSAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIo
KSAmJiAoaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNlID09IFBhaW50
UGhhc2VTZWxlY3Rpb24pKSAKLSAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhpLCB4LCB5KTsK
KyAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiAocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlU2VsZWN0aW9uKSkgCisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB4
LCB5KTsKIAotICAgIGlmICgoaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBpLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBhaW50T3V0bGluZShp
LnAsIHgsIHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKKyAgICBpZiAoKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5w
LCB4LCB5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CiAgICAgCi0gICAgaWYgKGkucGhh
c2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0
aW9uKQorICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290KGkpKQorICAgIGlmICghc2hvdWxkUGFp
bnRXaXRoaW5Sb290KHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgZHJh
d1NlbGVjdGlvblRpbnQgPSBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUgJiYgIWRv
Y3VtZW50KCktPnByaW50aW5nKCk7Ci0gICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVj
dGlvbikgeworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikg
ewogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBkcmF3U2VsZWN0aW9uVGludCA9IGZhbHNlOwogICAgIH0K
IAogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykp
Ci0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oZWxlbWVudCgpKS0+cGFp
bnQoaS5wLAorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGVsZW1lbnQo
KSktPnBhaW50KHBhaW50SW5mby5wLAogICAgICAgICAgICAgSW50UmVjdCh4ICsgYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSwgeSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLCBjb250
ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSk7CiAKICAgICBpZiAoZHJhd1NlbGVjdGlvblRp
bnQpCi0gICAgICAgIGkucC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby5wLT5maWxsUmVjdChzZWxlY3Rpb25S
ZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJIVE1M
Q2FudmFzOjpsYXlvdXQoKQpAQCAtOTcsNCArOTIsNCBAQAogICAgIHNldE5lZWRzTGF5b3V0KGZh
bHNlKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgog
I2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NTYsNCArNTU2
LDQgQEAKIH0KICNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZsb3cu
Y3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMTggKzIwLDE3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICAqLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckFyZW5hLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIApAQCAtNzk5LDQgKzc5OCw0IEBACiAgICAgICAgICAgICAgICAgICAgb3cpOwog
fQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQlIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2aXNpb24gMTczOTApCisr
KyByZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2luZyBjb3B5KQpAQCAtMTksOSArMTksMTAgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBSRU5ERVJf
QlJfSAotI2RlZmluZSBSRU5ERVJfQlJfSAogCisjaWZuZGVmIFJlbmRlckJSX2gKKyNkZWZpbmUg
UmVuZGVyQlJfaAorCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogCiAvKgpAQCAtNTksMTMgKzYw
LDEyIEBACiAgICAgCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29y
ZGluYXRlcyhpbnQgeCwgaW50IHkpOwogCi0gICAgdmlydHVhbCBJbmxpbmVCb3gqIGlubGluZUJv
eChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNUUkVBTSk7CisgICAgdmlydHVh
bCBJbmxpbmVCb3gqIGlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgPSBVUFNUUkVBTSk7
CiAgICAgCiBwcml2YXRlOgogICAgIG11dGFibGUgc2hvcnQgbV9saW5lSGVpZ2h0OwotCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSRU5ERVJfQlJfSAorI2VuZGlm
IC8vIFJlbmRlckJSX2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMiArNTUsMTIgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIu
aCIgCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIu
aCIgCiAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC0yMzEy
LDQgKzIzMTIsNCBAQAogICAgIH0KIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9S
ZW5kZXJGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDkgQEAKICAg
ICByZXR1cm4gbWFyZ2luVG9wKCkgKyB3aWRnZXQoKS0+YmFzZWxpbmVQb3NpdGlvbihtX2hlaWdo
dCk7CiB9CiAKLXZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBz
KQordm9pZCBSZW5kZXJGb3JtRWxlbWVudDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQogewotICAgIFJlbmRlcldpZGdldDo6c2V0U3R5bGUocyk7CisgICAgUmVuZGVyV2lkZ2V0Ojpz
ZXRTdHlsZShuZXdTdHlsZSk7CiAKICAgICAvLyBEbyBub3QgcGFpbnQgYSBiYWNrZ3JvdW5kIG9y
IGJvcmRlciBmb3IgQXF1YSBmb3JtIGVsZW1lbnRzCiAgICAgc2V0U2hvdWxkUGFpbnRCYWNrZ3Jv
dW5kT3JCb3JkZXIoZmFsc2UpOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIGNhc2UgVEFB
VVRPOgogICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IEFs
aWduUmlnaHQgOiBBbGlnbkxlZnQ7CiAgICAgfQotICAgIEFTU0VSVChmYWxzZSk7IC8vIFNob3Vs
ZCBuZXZlciBiZSByZWFjaGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBTaG91bGQg
bmV2ZXIgYmUgcmVhY2hlZC4KICAgICByZXR1cm4gQWxpZ25MZWZ0OwogfQogCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTMgKzIxLDE1IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKwogI2luY2x1
ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKKyNpbmNsdWRlICJTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0ZvcmVp
Z25PYmplY3RFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTI0LDkgKzEy
Niw5IEBACiAgICAgdG90YWxUcmFuc2Zvcm0gKj0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7
CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJhbnNmb3JtLmludmVydCgp
Lm1hcCh4LCB5LCAmbG9jYWxYLCAmbG9jYWxZKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5v
ZGVBdFBvaW50KGluZm8sIChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSwgdHgsIHR5LCBoaXRUZXN0
QWN0aW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGluZm8sIHN0YXRp
Y19jYXN0PGludD4obG9jYWxYKSwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbFkpLCB0eCwgdHksIGhp
dFRlc3RBY3Rpb24pOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBTVkdfU1VQUE9SVApJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDI0ICsyMCwyMyBAQAog
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIFJFTkRFUl9D
T1VOVEVSX0hfCi0jZGVmaW5lIFJFTkRFUl9DT1VOVEVSX0hfCisjaWZuZGVmIFJlbmRlckNvdW50
ZXJfaAorI2RlZmluZSBSZW5kZXJDb3VudGVyX2gKIAogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiAgICAgY2xhc3MgQ291bnRlck5vZGU7CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNsYXNzIFJlbmRlckNvdW50ZXIgOiBwdWJsaWMgUmVuZGVy
VGV4dCB7Ci0KIHB1YmxpYzoKICAgICBSZW5kZXJDb3VudGVyKE5vZGUqLCBDb3VudGVyRGF0YSop
OwogICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJDb3VudGVyIjsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQ291bnRlcigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAKQEAgLTQ5LDYgKzQ4LDYgQEAKICAgICBD
b3VudGVyTm9kZSogbV9jb3VudGVyTm9kZTsKIH07CiAKLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyQ291bnRlcl9oCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQAogICAgIHNldElubGlu
ZShmYWxzZSk7IC8vIG91ciBvYmplY3QgaXMgbm90IElubGluZQogfQogCi12b2lkIFJlbmRlckxp
c3RJdGVtOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogX3N0eWxlKQordm9pZCBSZW5kZXJMaXN0SXRl
bTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIFJlbmRlckJsb2NrOjpz
ZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZShuZXdTdHlsZSk7CiAK
ICAgICBpZiAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpICE9IExOT05FIHx8CiAgICAgICAgIChz
dHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmICFzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5p
c0Vycm9ySW1hZ2UoKSkpIHsKQEAgLTI1MywxMiArMjUzLDEyIEBACiAgICAgfQogfQogCi12b2lk
IFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2
b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiB7CiAgICAgaWYgKCFtX2hlaWdodCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyQmxvY2s6OnBhaW50KGksIF90eCwgX3R5KTsKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFp
bnRJbmZvLCB0eCwgdHkpOwogfQogCiBEZXByZWNhdGVkU3RyaW5nIFJlbmRlckxpc3RJdGVtOjpt
YXJrZXJTdHJpbmdWYWx1ZSgpCkBAIC0yNjYsNCArMjY2LDQgQEAKICAgICByZXR1cm4gbV9tYXJr
ZXIgPyBtX21hcmtlci0+dGV4dCgpIDogIiI7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJBcmVuYS5oCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJBcmVu
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KICAqLwogCi0j
aWZuZGVmIFJFTkRFUkFSRU5BX0gKLSNkZWZpbmUgUkVOREVSQVJFTkFfSAorI2lmbmRlZiBSZW5k
ZXJBcmVuYV9oCisjZGVmaW5lIFJlbmRlckFyZW5hX2gKIAogI2luY2x1ZGUgIkFyZW5hLmgiCiAK
QEAgLTQzLDEyICs0MywxMiBAQAogCiBjbGFzcyBSZW5kZXJBcmVuYSB7CiBwdWJsaWM6Ci0gICBS
ZW5kZXJBcmVuYSh1bnNpZ25lZCBpbnQgYXJlbmFTaXplID0gNDA5Nik7CisgICAgUmVuZGVyQXJl
bmEodW5zaWduZWQgYXJlbmFTaXplID0gNDA5Nik7CiAgICAgflJlbmRlckFyZW5hKCk7CiAKICAg
Ly8gTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0gIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBz
aXplKTsKLSAgdm9pZCAgZnJlZShzaXplX3Qgc2l6ZSwgdm9pZCogcHRyKTsKKyAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQgZnJlZShzaXplX3QsIHZvaWQqKTsKIAogcHJpdmF0
ZToKICAgLy8gVW5kZXJseWluZyBhcmVuYSBwb29sCkBAIC01OSw2ICs1OSw2IEBACiAgIHZvaWQq
ICAgICAgIG1fcmVjeWNsZXJzW2dNYXhSZWN5Y2xlZFNpemUgPj4gMl07CiB9OwogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckFyZW5hX2gKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckJSLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVyQlIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRl
ckJSOjpSZW5kZXJCUihOb2RlKiBub2RlKQotICAgIDogUmVuZGVyVGV4dChub2RlLCBuZXcgU3Ry
aW5nSW1wbCgiXG4iKSksIG1fbGluZUhlaWdodCgtMSkKKyAgICA6IFJlbmRlclRleHQobm9kZSwg
bmV3IFN0cmluZ0ltcGwoIlxuIikpCisgICAgLCBtX2xpbmVIZWlnaHQoLTEpCiB7CiB9CiAKQEAg
LTgxLDkgKzgyLDkgQEAKICAgICByZXR1cm4gbV9saW5lSGVpZ2h0OwogfQogCi12b2lkIFJlbmRl
ckJSOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogX3N0eWxlKQordm9pZCBSZW5kZXJCUjo6c2V0U3R5
bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIFJlbmRlclRleHQ6OnNldFN0eWxlKF9z
dHlsZSk7CisgICAgUmVuZGVyVGV4dDo6c2V0U3R5bGUobmV3U3R5bGUpOwogICAgIG1fbGluZUhl
aWdodCA9IC0xOwogfQogCkBAIC0xMDIsMTQgKzEwMywxNCBAQAogICAgIHJldHVybiAxOwogfQog
Ci1WaXNpYmxlUG9zaXRpb24gUmVuZGVyQlI6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IF94
LCBpbnQgX3kpCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQlI6OnBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMoaW50IC8qeCovLCBpbnQgLyp5Ki8pCiB7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihl
bGVtZW50KCksIDAsIERPV05TVFJFQU0pOwogfQogCi1JbmxpbmVCb3ggKlJlbmRlckJSOjppbmxp
bmVCb3goaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQorSW5saW5lQm94KiBSZW5kZXJC
Ujo6aW5saW5lQm94KGludCAvKm9mZnNldCovLCBFQWZmaW5pdHkgLyphZmZpbml0eSovKQogewog
ICAgIHJldHVybiBmaXJzdFRleHRCb3goKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxOCBAQAogICoKICAqLwog
Ci0jaWZuZGVmIFJlbmRlckZyYW1lU2V0X0gKLSNkZWZpbmUgUmVuZGVyRnJhbWVTZXRfSAorI2lm
bmRlZiBSZW5kZXJGcmFtZVNldF9oCisjZGVmaW5lIFJlbmRlckZyYW1lU2V0X2gKIAotI2luY2x1
ZGUgIlJlbmRlckNvbnRhaW5lci5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJSZW5kZXJDb250YWluZXIuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnQ7CiBjbGFzcyBNb3VzZUV2ZW50OwogCi1jbGFzcyBS
ZW5kZXJGcmFtZVNldCA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIKLXsKK2NsYXNzIFJlbmRlckZy
YW1lU2V0IDogcHVibGljIFJlbmRlckNvbnRhaW5lciB7CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxG
cmFtZVNldEVsZW1lbnQ7CiBwdWJsaWM6CiAgICAgUmVuZGVyRnJhbWVTZXQoSFRNTEZyYW1lU2V0
RWxlbWVudCopOwpAQCAtNTYsOCArNTQsNyBAQAogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
bik7CiAKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKLSAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudCo+KFJlbmRlckNvbnRhaW5l
cjo6ZWxlbWVudCgpKTsgfQorICAgIEhUTUxGcmFtZVNldEVsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50Kj4oUmVuZGVyQ29udGFp
bmVyOjplbGVtZW50KCkpOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsK
QEAgLTgxLDYgKzc4LDYgQEAKICAgICBib29sIG1fY2xpZW50UmVzaXppbmc7CiB9OwogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckZyYW1lU2V0
X2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsNCArNTIxLDQg
QEAKICAgICByZXR1cm4gSW50UmVjdChhYnN4ICsgeFBvcygpLCBhYnN5ICsgcm9vdC0+c2VsZWN0
aW9uVG9wKCksIHdpZHRoKCksIHJvb3QtPnNlbGVjdGlvbkhlaWdodCgpKTsKIH0KIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkocmV2aXNpb24gMTczOTAp
CisrKyByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDkgQEAKIGNvbnN0IGludCBjTWFya2VyUGFkZGluZyA9IDc7CiAKIFJlbmRlckNvdW50ZXI6
OlJlbmRlckNvdW50ZXIoTm9kZSogbm9kZSwgQ291bnRlckRhdGEqIGNvdW50ZXIpCi0gICAgOiBS
ZW5kZXJUZXh0KG5vZGUsIDApLCBtX2NvdW50ZXIoY291bnRlciksIG1fY291bnRlck5vZGUoMCkK
KyAgICA6IFJlbmRlclRleHQobm9kZSwgMCkKKyAgICAsIG1fY291bnRlcihjb3VudGVyKQorICAg
ICwgbV9jb3VudGVyTm9kZSgwKQogewogfQogCkBAIC01Nyw5ICs1OSwxMCBAQAogICAgIGludCBk
ID0gMDsKICAgICBkbyB7CiAgICAgICAgIGludCBudW0gPSBudW1iZXIgJSAxMDsKLSAgICAgICAg
aWYgKG51bSAlIDUgPCA0KQorICAgICAgICBpZiAobnVtICUgNSA8IDQpIHsKICAgICAgICAgICAg
IGZvciAoaW50IGkgPSBudW0gJSA1OyBpID4gMDsgaS0tKQogICAgICAgICAgICAgICAgIHJvbWFu
Lmluc2VydCgmZGlnaXRzW2RdLCAxLCAwKTsKKyAgICAgICAgfQogICAgICAgICBpZiAobnVtID49
IDQgJiYgbnVtIDw9IDgpCiAgICAgICAgICAgICByb21hbi5pbnNlcnQoJmRpZ2l0c1tkICsgMV0s
IDEsIDApOwogICAgICAgICBpZiAobnVtID09IDkpCkBAIC0yMzAsOCArMjMzLDcgQEAKICAgICAg
ICAgd2hpbGUgIChjb3VudGVyLT5wYXJlbnQoKSAmJiAoZmlyc3QgfHwgIShjb3VudGVyLT5pc1Jl
c2V0KCkgJiYgY291bnRlci0+cGFyZW50KCktPmlzUm9vdCgpKSkpIHsKICAgICAgICAgICAgIHZh
bHVlID0gY291bnRlci0+Y291bnQoKSA/IGNvdW50ZXItPmNvdW50KCkgOiAxOwogICAgICAgICAg
ICAgdG90YWwgPSBjb3VudGVyLT5wYXJlbnQoKS0+dG90YWwoKTsKLSAgICAgICAgICAgIG1faXRl
bSA9IGNvbnZlcnRWYWx1ZVRvVHlwZSh2YWx1ZSwgdG90YWwsIG1fY291bnRlci0+bGlzdFN0eWxl
KCkpIAotICAgICAgICAgICAgICAgICsgbV9jb3VudGVyLT5zZXBhcmF0b3IoKSArIG1faXRlbTsK
KyAgICAgICAgICAgIG1faXRlbSA9IGNvbnZlcnRWYWx1ZVRvVHlwZSh2YWx1ZSwgdG90YWwsIG1f
Y291bnRlci0+bGlzdFN0eWxlKCkpICsgbV9jb3VudGVyLT5zZXBhcmF0b3IoKSArIG1faXRlbTsK
ICAgICAgICAgICAgIGNvdW50ZXIgPSBjb3VudGVyLT5wYXJlbnQoKTsKICAgICAgICAgICAgIGZp
cnN0ID0gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTczOTAp
CisrKyByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNCAr
NDMsMTQgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUmVuZGVySW1hZ2U6OlJl
bmRlckltYWdlKE5vZGUqIG4pCi0gICAgOiBSZW5kZXJSZXBsYWNlZChuKQorUmVuZGVySW1hZ2U6
OlJlbmRlckltYWdlKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQogICAg
ICwgbV9jYWNoZWRJbWFnZSgwKQorICAgICwgbV9pc0Fub255bW91c0ltYWdlKDApCiB7CiAgICAg
bV9zZWxlY3Rpb25TdGF0ZSA9IFNlbGVjdGlvbk5vbmU7CiAgICAgc2V0SW50cmluc2ljV2lkdGgo
MCk7CiAgICAgc2V0SW50cmluc2ljSGVpZ2h0KDApOwotICAgIG1faXNBbm9ueW1vdXNJbWFnZSA9
IDA7CiAgICAgdXBkYXRlQWx0VGV4dCgpOwogfQogCkBAIC02MCwxOSArNjAsMTggQEAKICAgICAg
ICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2U6OnNl
dFN0eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2b2lkIFJlbmRlckltYWdlOjpzZXRTdHlsZShS
ZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnNldFN0eWxlKF9z
dHlsZSk7Ci0gICAgCisgICAgUmVuZGVyUmVwbGFjZWQ6OnNldFN0eWxlKG5ld1N0eWxlKTsKICAg
ICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcih0cnVlKTsKIH0KIAotdm9pZCBSZW5k
ZXJJbWFnZTo6c2V0Q29udGVudE9iamVjdChDYWNoZWRSZXNvdXJjZSogY28pCit2b2lkIFJlbmRl
ckltYWdlOjpzZXRDb250ZW50T2JqZWN0KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkK
IHsKLSAgICBpZiAoY28gJiYgbV9jYWNoZWRJbWFnZSAhPSBjbykgeworICAgIGlmIChjYWNoZWRS
ZXNvdXJjZSAmJiBtX2NhY2hlZEltYWdlICE9IGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIGlm
IChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYodGhpcyk7
Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KGNvKTsK
KyAgICAgICAgbV9jYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4oY2FjaGVk
UmVzb3VyY2UpOwogICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgIG1fY2Fj
aGVkSW1hZ2UtPnJlZih0aGlzKTsKICAgICB9CkBAIC05NCw0NiArOTMsNDYgQEAKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogbykKK3ZvaWQg
UmVuZGVySW1hZ2U6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSogbmV3SW1hZ2UpCiB7CiAgICAg
aWYgKGRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG8gIT0gbV9jYWNoZWRJbWFnZSkgewotICAgICAgICBSZW5kZXJSZXBsYWNlZDo6aW1hZ2VDaGFu
Z2VkKG8pOworICAgIGlmIChuZXdJbWFnZSAhPSBtX2NhY2hlZEltYWdlKSB7CisgICAgICAgIFJl
bmRlclJlcGxhY2VkOjppbWFnZUNoYW5nZWQobmV3SW1hZ2UpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYm9vbCBpd2NoYW5nZWQgPSBmYWxzZTsKKyAgICBib29sIGltYWdlU2l6ZUNo
YW5nZWQgPSBmYWxzZTsKIAotICAgIGlmIChvLT5pc0Vycm9ySW1hZ2UoKSkgewotICAgICAgICBp
bnQgaXcgPSBvLT5pbWFnZSgpLT53aWR0aCgpICsgNDsKLSAgICAgICAgaW50IGloID0gby0+aW1h
Z2UoKS0+aGVpZ2h0KCkgKyA0OworICAgIGlmIChuZXdJbWFnZS0+aXNFcnJvckltYWdlKCkpIHsK
KyAgICAgICAgaW50IGltYWdlV2lkdGggPSBuZXdJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSArIDQ7
CisgICAgICAgIGludCBpbWFnZUhlaWdodCA9IG5ld0ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKSAr
IDQ7CiAKICAgICAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0IChp
dHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwot
ICAgICAgICAgICAgaXcgPSBtYXgoaXcsIG1pbihmb250LndpZHRoKFRleHRSdW4obV9hbHRUZXh0
LmNoYXJhY3RlcnMoKSwgbV9hbHRUZXh0Lmxlbmd0aCgpKSksIDEwMjQpKTsKLSAgICAgICAgICAg
IGloID0gbWF4KGloLCBtaW4oZm9udC5oZWlnaHQoKSwgMjU2KSk7CisgICAgICAgICAgICBpbWFn
ZVdpZHRoID0gbWF4KGltYWdlV2lkdGgsIG1pbihmb250LndpZHRoKFRleHRSdW4obV9hbHRUZXh0
LmNoYXJhY3RlcnMoKSwgbV9hbHRUZXh0Lmxlbmd0aCgpKSksIDEwMjQpKTsKKyAgICAgICAgICAg
IGltYWdlSGVpZ2h0ID0gbWF4KGltYWdlSGVpZ2h0LCBtaW4oZm9udC5oZWlnaHQoKSwgMjU2KSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXcgIT0gaW50cmluc2ljV2lkdGgoKSkgewotICAg
ICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgoaXcpOwotICAgICAgICAgICAgaXdjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgaWYgKGltYWdlV2lkdGggIT0gaW50cmluc2ljV2lkdGgoKSkgeworICAg
ICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgoaW1hZ2VXaWR0aCk7CisgICAgICAgICAgICBpbWFn
ZVNpemVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoaWggIT0gaW50cmlu
c2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChpaCk7Ci0gICAg
ICAgICAgICBpd2NoYW5nZWQgPSB0cnVlOworICAgICAgICBpZiAoaW1hZ2VIZWlnaHQgIT0gaW50
cmluc2ljSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChpbWFnZUhl
aWdodCk7CisgICAgICAgICAgICBpbWFnZVNpemVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGJvb2wgbmVlZGxheW91dCA9IGZhbHNlOworICAgIGJvb2wgbmVlZHNMYXlv
dXQgPSBmYWxzZTsKIAogICAgIC8vIEltYWdlIGRpbWVuc2lvbnMgaGF2ZSBiZWVuIGNoYW5nZWQs
IHNlZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUKLSAgICBpZiAoKG8tPmltYWdlU2l6ZSgpLndpZHRo
KCkgIT0gaW50cmluc2ljV2lkdGgoKSB8fCBvLT5pbWFnZVNpemUoKS5oZWlnaHQoKSAhPSBpbnRy
aW5zaWNIZWlnaHQoKSB8fCBpd2NoYW5nZWQpKSB7Ci0gICAgICAgIGlmKCFvLT5pc0Vycm9ySW1h
Z2UoKSkgewotICAgICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgoby0+aW1hZ2VTaXplKCkud2lk
dGgoKSk7Ci0gICAgICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoby0+aW1hZ2VTaXplKCkuaGVp
Z2h0KCkpOworICAgIGlmICgobmV3SW1hZ2UtPmltYWdlU2l6ZSgpLndpZHRoKCkgIT0gaW50cmlu
c2ljV2lkdGgoKSB8fCBuZXdJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkgIT0gaW50cmluc2lj
SGVpZ2h0KCkgfHwgaW1hZ2VTaXplQ2hhbmdlZCkpIHsKKyAgICAgICAgaWYgKCFuZXdJbWFnZS0+
aXNFcnJvckltYWdlKCkpIHsKKyAgICAgICAgICAgIHNldEludHJpbnNpY1dpZHRoKG5ld0ltYWdl
LT5pbWFnZVNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgICAgIHNldEludHJpbnNpY0hlaWdodChu
ZXdJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
SW4gdGhlIGNhc2Ugb2YgZ2VuZXJhdGVkIGltYWdlIGNvbnRlbnQgdXNpbmcgOmJlZm9yZS86YWZ0
ZXIsIHdlIG1pZ2h0IG5vdCBiZSBpbiB0aGUKQEAgLTE0NiwyMSArMTQ1LDIwIEBACiAgICAgICAg
ICAgICBjYWxjV2lkdGgoKTsKICAgICAgICAgICAgIGNhbGNIZWlnaHQoKTsKICAgICAKLSAgICAg
ICAgICAgIGlmKGl3Y2hhbmdlZCB8fCBtX3dpZHRoICE9IG9sZHdpZHRoIHx8IG1faGVpZ2h0ICE9
IG9sZGhlaWdodCkKLSAgICAgICAgICAgICAgICBuZWVkbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmKGltYWdlU2l6ZUNoYW5nZWQgfHwgbV93aWR0aCAhPSBvbGR3aWR0aCB8fCBtX2hlaWdo
dCAhPSBvbGRoZWlnaHQpCisgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwogICAg
IAogICAgICAgICAgICAgbV93aWR0aCA9IG9sZHdpZHRoOwogICAgICAgICAgICAgbV9oZWlnaHQg
PSBvbGRoZWlnaHQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobmVlZGxheW91dCkgewor
ICAgIGlmIChuZWVkc0xheW91dCkgewogICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpKQog
ICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgIGlmIChtaW5NYXhLbm93
bigpKQogICAgICAgICAgICAgc2V0TWluTWF4S25vd24oZmFsc2UpOwotICAgIH0KLSAgICBlbHNl
CisgICAgfSBlbHNlCiAgICAgICAgIC8vIEZJWE1FOiBXZSBhbHdheXMganVzdCBkbyBhIGNvbXBs
ZXRlIHJlcGFpbnQsIHNpbmNlIHdlIGFsd2F5cyBwYXNzIGluIHRoZSBmdWxsIGltYWdlCiAgICAg
ICAgIC8vIHJlY3QgYXQgdGhlIG1vbWVudCBhbnl3YXkuCiAgICAgICAgIHJlcGFpbnRSZWN0YW5n
bGUoSW50UmVjdChib3JkZXJMZWZ0KCkrcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkrcGFkZGlu
Z1RvcCgpLCBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSk7CkBAIC0xNzUsMzAgKzE3
MywzMSBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBp
LCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGlmICghc2hvdWxkUGFpbnQoaSwgX3R4
LCBfdHkpKSByZXR1cm47CisgICAgaWYgKCFzaG91bGRQYWludChwYWludEluZm8sIHR4LCB0eSkp
CisgICAgICAgIHJldHVybjsKIAotICAgIF90eCArPSBtX3g7Ci0gICAgX3R5ICs9IG1feTsKKyAg
ICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogICAgICAgICAKLSAgICBpZiAoc2hvdWxkUGFp
bnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYm
IGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAKLSAgICAgICAgcGFpbnRCb3hEZWNv
cmF0aW9ucyhpLCBfdHgsIF90eSk7CisgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9y
ZGVyKCkgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUpIAorICAgICAgICBwYWludEJveERlY29y
YXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGku
cDsKKyAgICBHcmFwaGljc0NvbnRleHQqIHAgPSBwYWludEluZm8ucDsKICAgICAKLSAgICBpZiAo
KGkucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBwYWludE91dGxpbmUocCwgX3R4LCBfdHksIHdpZHRo
KCksIGhlaWdodCgpLCBzdHlsZSgpKTsKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5l
KSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSkKKyAgICAgICAgcGFpbnRPdXRsaW5lKHAsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0
KCksIHN0eWxlKCkpOwogICAgIAotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKKyAgICBpZiAocGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXNob3VsZFBhaW50
V2l0aGluUm9vdChpKSkKKyAgICBpZiAoIXNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8p
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGJvb2wgaXNQcmludGluZyA9IGRvY3Vt
ZW50KCktPnByaW50aW5nKCk7CiAgICAgYm9vbCBkcmF3U2VsZWN0aW9uVGludCA9IGlzU2VsZWN0
ZWQoKSAmJiAhaXNQcmludGluZzsKLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0
aW9uKSB7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSB7
CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFsc2U7CkBAIC0yMTUs
MTggKzIxNCwxOSBAQAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fY2FjaGVkSW1hZ2Ug
fHwgaW1hZ2UoKS0+aXNOdWxsKCkgfHwgZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmIChp
LnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pCisgICAgICAgIGlmIChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBpZiAoY1dpZHRoID4gMiAmJiBjSGVpZ2h0ID4gMikgewogICAgICAgICAgICAgaWYgKCFlcnJv
ck9jY3VycmVkKCkpIHsKICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oQ29sb3I6OmxpZ2h0R3Jh
eSk7CiAgICAgICAgICAgICAgICAgcC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7
Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdChfdHggKyBsZWZ0Qm9yZGVyICsg
bGVmdFBhZCwgX3R5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQ
YWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBlcnJvclBpY3R1cmVEcmF3biA9
IGZhbHNlOwotICAgICAgICAgICAgaW50IGltYWdlWCA9IDAsIGltYWdlWSA9IDA7CisgICAgICAg
ICAgICBpbnQgaW1hZ2VYID0gMDsKKyAgICAgICAgICAgIGludCBpbWFnZVkgPSAwOwogICAgICAg
ICAgICAgaW50IHVzYWJsZVdpZHRoID0gY1dpZHRoOwogICAgICAgICAgICAgaW50IHVzYWJsZUhl
aWdodCA9IGNIZWlnaHQ7CiAgICAgICAgICAgICAKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAg
ICAgICAgICAgICAgICBjZW50ZXJZID0gMDsKICAgICAgICAgICAgICAgICBpbWFnZVggPSBsZWZ0
Qm9yZGVyICsgbGVmdFBhZCArIGNlbnRlclg7CiAgICAgICAgICAgICAgICAgaW1hZ2VZID0gdG9w
Qm9yZGVyICsgdG9wUGFkICsgY2VudGVyWTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3SW1hZ2Uo
aW1hZ2UoKSwgSW50UG9pbnQoX3R4ICsgaW1hZ2VYLCBfdHkgKyBpbWFnZVkpKTsKKyAgICAgICAg
ICAgICAgICBwLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgSW50UG9pbnQodHggKyBpbWFnZVgsIHR5ICsg
aW1hZ2VZKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJlRHJhd24gPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yNDksOCArMjQ5LDggQEAKICAgICAgICAgICAg
ICAgICB0ZXh0LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAg
ICAgICAgICAgICAgICBwLT5zZXRGb250KHN0eWxlKCktPmZvbnQoKSk7CiAgICAgICAgICAgICAg
ICAgcC0+c2V0UGVuKHN0eWxlKCktPmNvbG9yKCkpOwotICAgICAgICAgICAgICAgIGludCBheCA9
IF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkOwotICAgICAgICAgICAgICAgIGludCBheSA9IF90
eSArIHRvcEJvcmRlciArIHRvcFBhZDsKKyAgICAgICAgICAgICAgICBpbnQgYXggPSB0eCArIGxl
ZnRCb3JkZXIgKyBsZWZ0UGFkOworICAgICAgICAgICAgICAgIGludCBheSA9IHR5ICsgdG9wQm9y
ZGVyICsgdG9wUGFkOwogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgp
LT5mb250KCk7CiAgICAgICAgICAgICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7CiAg
ICAgICAgICAgICAgICAgCkBAIC0yNjcsMTEgKzI2NywxMSBAQAogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChtX2NhY2hlZEltYWdlKSB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpZiAo
c3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQoX3R4IC0gbV94LCBfdHkgLSBt
X3ksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICAgICAgaWYgKHN0eWxlKCktPmhp
Z2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQodHggLSBtX3gsIHR5IC0gbV95LCBz
dHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIAotICAgICAgICBJbnRSZWN0IHJl
Y3QoSW50UG9pbnQoX3R4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJvcmRlciAr
IHRvcFBhZCksIEludFNpemUoY1dpZHRoLCBjSGVpZ2h0KSk7CisgICAgICAgIEludFJlY3QgcmVj
dChJbnRQb2ludCh0eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkLCB0eSArIHRvcEJvcmRlciArIHRv
cFBhZCksIEludFNpemUoY1dpZHRoLCBjSGVpZ2h0KSk7CiAgICAgICAgIAogICAgICAgICBIVE1M
SW1hZ2VFbGVtZW50KiBpbWFnZUVsdCA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdO
YW1lKGltZ1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQoKSkg
OiAwOwogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdl
RWx0ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVy
OwpAQCAtMzA2LDIyICszMDYsMjIgQEAKIAogSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjpp
bWFnZU1hcCgpCiB7Ci0gICAgSFRNTEltYWdlRWxlbWVudCogaSA9IGVsZW1lbnQoKSAmJiBlbGVt
ZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQq
PihlbGVtZW50KCkpIDogMDsKLSAgICByZXR1cm4gaSA/IGktPmRvY3VtZW50KCktPmdldEltYWdl
TWFwKGktPmltYWdlTWFwKCkpIDogMDsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1l
bnQgPSBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKGltZ1RhZykgPyBzdGF0aWNf
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudCgpKSA6IDA7CisgICAgcmV0dXJuIGltYWdl
RWxlbWVudCA/IGltYWdlRWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0SW1hZ2VNYXAoaW1hZ2VFbGVt
ZW50LT5pbWFnZU1hcCgpKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50
KE5vZGVJbmZvJiBpbmZvLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoTm9k
ZUluZm8mIGluZm8sIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKIHsKLSAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2Rl
QXRQb2ludChpbmZvLCBfeCwgX3ksIF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBib29s
IGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChpbmZvLCB4LCB5LCB0eCwgdHks
IGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKGluc2lkZSAmJiBlbGVtZW50KCkpIHsKLSAgICAg
ICAgaW50IHR4ID0gX3R4ICsgbV94OwotICAgICAgICBpbnQgdHkgPSBfdHkgKyBtX3k7CisgICAg
ICAgIHR4ICs9IG1feDsKKyAgICAgICAgdHkgKz0gbV95OwogICAgICAgICAKICAgICAgICAgSFRN
TE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCk7CiAgICAgICAgIGlmIChtYXApIHsKICAgICAg
ICAgICAgIC8vIHdlJ3JlIGEgY2xpZW50IHNpZGUgaW1hZ2UgbWFwCi0gICAgICAgICAgICBpbnNp
ZGUgPSBtYXAtPm1hcE1vdXNlRXZlbnQoX3ggLSB0eCwgX3kgLSB0eSwgSW50U2l6ZShjb250ZW50
V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSwgaW5mbyk7CisgICAgICAgICAgICBpbnNpZGUgPSBt
YXAtPm1hcE1vdXNlRXZlbnQoeCAtIHR4LCB5IC0gdHksIEludFNpemUoY29udGVudFdpZHRoKCks
IGNvbnRlbnRIZWlnaHQoKSksIGluZm8pOwogICAgICAgICAgICAgaW5mby5zZXRJbm5lck5vblNo
YXJlZE5vZGUoZWxlbWVudCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzNCw0ICs0MzQsNCBA
QAogICAgIHJldHVybiAmc2hhcmVkTnVsbEltYWdlOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICoKICAqLwog
Ci0jaWZuZGVmIFJlbmRlckxpc3RCb3hfSAotI2RlZmluZSBSZW5kZXJMaXN0Qm94X0gKKyNpZm5k
ZWYgUmVuZGVyTGlzdEJveF9oCisjZGVmaW5lIFJlbmRlckxpc3RCb3hfaAogCiAjaW5jbHVkZSAi
UmVuZGVyQmxvY2suaCIKIApAQCAtMzUsNiArMzUsOCBAQAogICAgIFJlbmRlckxpc3RCb3goSFRN
TFNlbGVjdEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTGlzdEJveCgpOwogCisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RCb3giOyB9
CisKICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CkBAIC00MiwxMSArNDQs
MTAgQEAKICAgICB2b2lkIHNldFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBzZWxlY3Rpb25DaGFuZ2Vk
KSB7IG1fc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkNoYW5nZWQ7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0
Qm94IjsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJblNjcm9sbGJhcihOb2RlSW5mbyYs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllcj0xLjApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOwog
CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwogICAgIHZpcnR1YWwgc2hvcnQg
YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0OwpAQCAtNjYs
NiArNjcsMTMgQEAKICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwogCiBwcml2YXRlOgor
ICAgIGludCBzaXplKCkgY29uc3Q7CisgICAgaW50IG51bUl0ZW1zKCkgY29uc3Q7CisgICAgSW50
UmVjdCBpdGVtQm91bmRpbmdCb3hSZWN0KGludCB0eCwgaW50IHR5LCBpbnQgaW5kZXgpOworICAg
IHZvaWQgcGFpbnRTY3JvbGxiYXIoUGFpbnRJbmZvJik7CisgICAgdm9pZCBwYWludEl0ZW1Gb3Jl
Z3JvdW5kKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBpbnQgbGlzdEluZGV4KTsKKyAgICB2
b2lkIHBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIGludCBs
aXN0SW5kZXgpOworCiAgICAgYm9vbCBtX29wdGlvbnNDaGFuZ2VkOwogICAgIGludCBtX29wdGlv
bnNXaWR0aDsKICAgICBpbnQgbV9vcHRpb25zTWF4SGVpZ2h0OwpAQCAtNzMsMTYgKzgxLDkgQEAK
ICAgICBpbnQgbV9pbmRleE9mZnNldDsKICAgICBib29sIG1fc2VsZWN0aW9uQ2hhbmdlZDsKICAg
ICAKLSAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgIGludCBudW1JdGVtcygpIGNvbnN0OwotICAg
IEludFJlY3QgaXRlbUJvdW5kaW5nQm94UmVjdChpbnQgdHgsIGludCB0eSwgaW50IGluZGV4KTsK
LSAgICB2b2lkIHBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYpOwotICAgIHZvaWQgcGFpbnRJdGVt
Rm9yZWdyb3VuZChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgaW50IGxpc3RJbmRleCk7Ci0g
ICAgdm9pZCBwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBp
bnQgbGlzdEluZGV4KTsKLSAgICAKICAgICBTY3JvbGxiYXIqIG1fdkJhcjsKIH07CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyTGlzdEJveF9o
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uaAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwogCi0j
aWZuZGVmIFJlbmRlckxpc3RJdGVtX0gKLSNkZWZpbmUgUmVuZGVyTGlzdEl0ZW1fSAorI2lmbmRl
ZiBSZW5kZXJMaXN0SXRlbV9oCisjZGVmaW5lIFJlbmRlckxpc3RJdGVtX2gKIAogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCiAKQEAgLTMxLDE5ICszMSwxOCBAQAogCiBjbGFzcyBSZW5kZXJMaXN0
TWFya2VyOwogCi1jbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1YmxpYyBSZW5kZXJCbG9jawotewor
Y2xhc3MgUmVuZGVyTGlzdEl0ZW0gOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAg
IFJlbmRlckxpc3RJdGVtKE5vZGUqKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OwotCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlckxpc3RJdGVtIjsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0
eWxlKik7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAgdmlydHVhbCB2
b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CisKICAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAgICAgdm9pZCBzZXRWYWx1ZShpbnQgdikgeyBtX3ByZWRlZlZhbCA9
IHY7IH0KICAgICB2b2lkIGNhbGNWYWx1ZSgpOwpAQCAtNzAsNyArNjksNiBAQAogICAgIGludCBt
X3ZhbHVlOwogfTsKIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vbmFtZXNwYWNlCi0K
LSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckxpc3RJdGVtX2gKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShy
ZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxNSArMzMsMTggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVySW5s
aW5lOjpSZW5kZXJJbmxpbmUoTm9kZSogbm9kZSkKLTpSZW5kZXJGbG93KG5vZGUpLCBtX2lzQ29u
dGludWF0aW9uKGZhbHNlKQote30KKyAgICA6IFJlbmRlckZsb3cobm9kZSkKKyAgICAsIG1faXND
b250aW51YXRpb24oZmFsc2UpCit7Cit9CiAKIFJlbmRlcklubGluZTo6flJlbmRlcklubGluZSgp
Ci17fQoreworfQogCi12b2lkIFJlbmRlcklubGluZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIF9z
dHlsZSkKK3ZvaWQgUmVuZGVySW5saW5lOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUp
CiB7Ci0gICAgUmVuZGVyRmxvdzo6c2V0U3R5bGUoX3N0eWxlKTsKKyAgICBSZW5kZXJGbG93Ojpz
ZXRTdHlsZShuZXdTdHlsZSk7CiAgICAgc2V0SW5saW5lKHRydWUpOwogCiAgICAgLy8gRW5zdXJl
IHRoYXQgYWxsIG9mIHRoZSBzcGxpdCBpbmxpbmVzIHBpY2sgdXAgdGhlIG5ldyBzdHlsZS4gV2UK
QEAgLTIxOCw4ICsyMjEsNyBAQAogCiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgewogICAg
ICAgICBSZW5kZXJPYmplY3QqIG8gPSBib3hGaXJzdDsKLSAgICAgICAgd2hpbGUgKG8pCi0gICAg
ICAgIHsKKyAgICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8g
PSBvOwogICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgcHJl
LT5hcHBlbmRDaGlsZE5vZGUoYmxvY2stPnJlbW92ZUNoaWxkTm9kZShubykpOwpAQCAtMjQ4LDkg
KzI1MCw5IEBACiAgICAgcG9zdC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKIH0K
IAotdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90
eSkKK3ZvaWQgUmVuZGVySW5saW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpCiB7Ci0gICAgcGFpbnRMaW5lcyhpLCBfdHgsIF90eSk7CisgICAgcGFpbnRMaW5l
cyhwYWludEluZm8sIHR4LCB0eSk7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQpAQCAtMjU4LDkgKzI2
MCwxMCBAQAogICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICByZWN0cy5hcHBlbmQoSW50
UmVjdCh0eCArIGN1cnItPnhQb3MoKSwgdHkgKyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCks
IGN1cnItPmhlaWdodCgpKSk7CiAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBm
aXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQorICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpKQogICAgICAgICAgICAg
Y3Vyci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+
eVBvcygpKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKGNvbnRpbnVhdGlvbigpKQogICAgICAgICBj
b250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgCkBAIC0yODMsNyArMjg2LDggQEAK
ICAgICBzZXRNaW5NYXhLbm93bigpOwogfQogCi1ib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNM
YXllcigpIHsKK2Jvb2wgUmVuZGVySW5saW5lOjpyZXF1aXJlc0xheWVyKCkKK3sKICAgICByZXR1
cm4gaXNSb290KCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0eSgpIDwg
MS4wZjsKIH0KIApAQCAtMzM1LDEwICszMzksOSBAQAogICAgIHJldHVybiAiUmVuZGVySW5saW5l
IjsKIH0KIAotYm9vbCBSZW5kZXJJbmxpbmU6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpbmZvLCBp
bnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlcklubGluZTo6
bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICByZXR1cm4gaGl0VGVzdExpbmVz
KGluZm8sIF94LCBfeSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVybiBoaXRU
ZXN0TGluZXMoaW5mbywgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50
IHkpCkBAIC0zNTEsNCArMzU0LDQgQEAKICAgICByZXR1cm4gUmVuZGVyRmxvdzo6cG9zaXRpb25G
b3JDb29yZGluYXRlcyh4LCB5KTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSRU5ERVJf
SU1BR0VfSAotI2RlZmluZSBSRU5ERVJfSU1BR0VfSAorI2lmbmRlZiBSZW5kZXJJbWFnZV9oCisj
ZGVmaW5lIFJlbmRlckltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTM2LDggKzM2LDcgQEAKIGNsYXNzIERvY0xvYWRlcjsKIGNs
YXNzIEhUTUxNYXBFbGVtZW50OwogCi1jbGFzcyBSZW5kZXJJbWFnZSA6IHB1YmxpYyBSZW5kZXJS
ZXBsYWNlZAoteworY2xhc3MgUmVuZGVySW1hZ2UgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQgewog
cHVibGljOgogICAgIFJlbmRlckltYWdlKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJJbWFn
ZSgpOwpAQCAtNTMsOCArNTIsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2Fj
aGVkSW1hZ2UqKTsKICAgICAKICAgICAvLyBkb24ndCBldmVuIHRoaW5rIGFib3V0IG1ha2luZyB0
aGlzIG1ldGhvZCB2aXJ0dWFsIQotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihSZW5kZXJSZXBsYWNlZDo6
ZWxlbWVudCgpKTsgfQorICAgIEhUTUxFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihSZW5kZXJSZXBsYWNlZDo6ZWxlbWVudCgpKTsgfQog
CiAgICAgLy8gaG9vayB0byBrZWVwIFJlbmRlT2JqZWN0OjptX2lubGluZSgpIHVwIHRvIGRhdGUK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUgKnN0eWxlKTsKQEAgLTEwMyw2
ICsxMDEsNiBAQAogICAgIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7CiB9OwogCi19IC8vbmFt
ZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRl
ckltYWdlX2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZy
YWdtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpA
QCAtMzY3OSw0ICszNjc5LDMgQEAKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckZyYW1lLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVyRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICAqCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlbmRlckZyYW1lLmgiCiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVu
ZGVyaW5nL1JlbmRlckFwcGxldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSwxMSBAQAog
ICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVyQXBwbGV0KEhUTUxBcHBsZXRFbGVtZW50KiwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpOwogICAgICAgICB2aXJ0dWFsIH5SZW5k
ZXJBcHBsZXQoKTsKKwogICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyQXBwbGV0IjsgfQorCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0FwcGxldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7CiAgICAgICAgIHZpcnR1YWwgaW50IGludHJpbnNpY1dpZHRoKCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgaW50IGludHJpbnNpY0hlaWdodCgpIGNvbnN0OwpAQCAtNDcsNiArNTAs
NiBAQAogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2FyZ3M7CiAgICAgfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJBcHBs
ZXRfaApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVy
aW5nL1JlbmRlckZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAK
ICNpZm5kZWYgUmVuZGVyRm9ybUVsZW1lbnRfaAogI2RlZmluZSBSZW5kZXJGb3JtRWxlbWVudF9o
CiAKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxOSArMjIsMTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBS
RU5ERVJfSU5MSU5FX0gKLSNkZWZpbmUgUkVOREVSX0lOTElORV9ICisjaWZuZGVmIFJlbmRlcklu
bGluZV9oCisjZGVmaW5lIFJlbmRlcklubGluZV9oCiAKICNpbmNsdWRlICJSZW5kZXJGbG93Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIFBvc2l0aW9uOwotfQogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlcklubGluZSA6IHB1YmxpYyBSZW5kZXJGbG93
Ci17CitjbGFzcyBSZW5kZXJJbmxpbmUgOiBwdWJsaWMgUmVuZGVyRmxvdyB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVySW5saW5lKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJJbmxpbmUoKTsKQEAg
LTU3LDEwICs1NCw5IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkge30gLy8gRG8gbm90
aGluZyBmb3IgbGF5b3V0KCkKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiBpLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5m
byYgaW5mbywgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0
aCgpOwogCkBAIC04Niw3ICs4Miw2IEBACiAgICAgYm9vbCBtX2lzQ29udGludWF0aW9uIDogMTsg
Ly8gV2hldGhlciBvciBub3Qgd2UncmUgYSBjb250aW51YXRpb24gb2YgYW4gaW5saW5lLgogfTsK
IAotfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KKyNl
bmRpZiAvLyBSZW5kZXJJbmxpbmVfaApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIyICs3MiwyMSBAQAogewogICAgIGlmICht
X2J1dHRvbikKICAgICAgICAgbV9idXR0b24tPmRldGFjaCgpOwotICAgIGlmIChtX2ZpbGVDaG9v
c2VyKSB7CisgICAgaWYgKG1fZmlsZUNob29zZXIpCiAgICAgICAgIG1fZmlsZUNob29zZXItPmRp
c2Nvbm5lY3RVcGxvYWRDb250cm9sKCk7CiAgICAgfQotfQogCi12b2lkIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogcykKK3ZvaWQgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKICAgICAvLyBGb3Jj
ZSB0ZXh0LWFsaWduIHRvIG1hdGNoIHRoZSBkaXJlY3Rpb24KLSAgICBpZiAocy0+ZGlyZWN0aW9u
KCkgPT0gTFRSKQotICAgICAgICBzLT5zZXRUZXh0QWxpZ24oTEVGVCk7CisgICAgaWYgKG5ld1N0
eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgIG5ld1N0eWxlLT5zZXRUZXh0QWxpZ24o
TEVGVCk7CiAgICAgZWxzZQotICAgICAgICBzLT5zZXRUZXh0QWxpZ24oUklHSFQpOworICAgICAg
ICBuZXdTdHlsZS0+c2V0VGV4dEFsaWduKFJJR0hUKTsKICAgICAKLSAgICBSZW5kZXJCbG9jazo6
c2V0U3R5bGUocyk7CisgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKICAgICBp
ZiAobV9idXR0b24pCi0gICAgICAgIG1fYnV0dG9uLT5yZW5kZXJlcigpLT5zZXRTdHlsZShjcmVh
dGVCdXR0b25TdHlsZShzKSk7CisgICAgICAgIG1fYnV0dG9uLT5yZW5kZXJlcigpLT5zZXRTdHls
ZShjcmVhdGVCdXR0b25TdHlsZShuZXdTdHlsZSkpOwogCiAgICAgc2V0UmVwbGFjZWQoaXNJbmxp
bmUoKSk7CiB9CkBAIC0xNDAsMTkgKzEzOSwxOSBAQAogICAgIHJldHVybiBzdHlsZTsKIH0KIAot
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBpLCBp
bnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBQdXNoIGEg
Y2xpcC4KLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNl
ID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKKyAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKSB7CiAgICAgICAgIEludFJlY3QgY2xpcFJlY3Qo
dHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0g
Ym9yZGVyQm90dG9tKCkgLSBib3JkZXJUb3AoKSk7CiAgICAgICAgIGlmIChjbGlwUmVjdC53aWR0
aCgpID09IDAgfHwgY2xpcFJlY3QuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAgIGkucC0+Y2xpcChjbGlwUmVjdCk7CisgICAg
ICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5wLT5jbGlwKGNsaXBS
ZWN0KTsKICAgICB9CiAgICAgCi0gICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQpIHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7
CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheWVkRmlsZW5hbWUgPSBtX2ZpbGVDaG9vc2Vy
LT5iYXNlbmFtZUZvcldpZHRoKG1heEZpbGVuYW1lV2lkdGgoKSk7CiAgICAgICAgIFRleHRSdW4g
dGV4dFJ1bihkaXNwbGF5ZWRGaWxlbmFtZS5jaGFyYWN0ZXJzKCksIGRpc3BsYXllZEZpbGVuYW1l
Lmxlbmd0aCgpKTsKICAgICAgICAgCkBAIC0xNjgsMTEgKzE2NywxMSBAQAogICAgICAgICBSZW5k
ZXJCdXR0b24qIGJ1dHRvblJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQnV0dG9uKj4obV9i
dXR0b24tPnJlbmRlcmVyKCkpOwogICAgICAgICBpbnQgdGV4dFkgPSBidXR0b25SZW5kZXJlci0+
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS55KCkgKyBidXR0b25SZW5kZXJlci0+bWFyZ2luVG9w
KCkgKyBidXR0b25SZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyBidXR0b25SZW5kZXJlci0+cGFkZGlu
Z1RvcCgpICsgYnV0dG9uUmVuZGVyZXItPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgZmFsc2UpOwog
ICAgICAgICAKLSAgICAgICAgaS5wLT5zZXRGb250KHN0eWxlKCktPmZvbnQoKSk7Ci0gICAgICAg
IGkucC0+c2V0UGVuKHN0eWxlKCktPmNvbG9yKCkpOworICAgICAgICBwYWludEluZm8ucC0+c2V0
Rm9udChzdHlsZSgpLT5mb250KCkpOworICAgICAgICBwYWludEluZm8ucC0+c2V0UGVuKHN0eWxl
KCktPmNvbG9yKCkpOwogICAgICAgICAKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKLSAg
ICAgICAgaS5wLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKKyAg
ICAgICAgcGFpbnRJbmZvLnAtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0
WSkpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZmlsZUNob29zZXItPmljb24oKSkgewogICAg
ICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBpY29uIHNob3VsZCBiZSBwbGFjZWQKQEAg
LTE4NCwxNiArMTgzLDE2IEBACiAgICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCAr
IGNvbnRlbnRXaWR0aCgpIC0gbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgLSBhZnRlckJ1
dHRvblNwYWNpbmcgLSBpY29uV2lkdGg7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIERy
YXcgdGhlIGZpbGUgaWNvbgotICAgICAgICAgICAgbV9maWxlQ2hvb3Nlci0+aWNvbigpLT5wYWlu
dChpLnAsIEludFJlY3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKKyAg
ICAgICAgICAgIG1fZmlsZUNob29zZXItPmljb24oKS0+cGFpbnQocGFpbnRJbmZvLnAsIEludFJl
Y3QoaWNvblgsIGljb25ZLCBpY29uV2lkdGgsIGljb25IZWlnaHQpKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCi0gICAgUmVuZGVyQmxvY2s6OnBh
aW50T2JqZWN0KGksIHR4LCB0eSk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50
SW5mbywgdHgsIHR5KTsKICAgICAKICAgICAvLyBQb3AgdGhlIGNsaXAuCi0gICAgaWYgKGkucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRC
bG9ja0JhY2tncm91bmRzKQotICAgICAgICBpLnAtPnJlc3RvcmUoKTsKKyAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKQorICAgICAgICBwYWludEluZm8ucC0+cmVz
dG9yZSgpOwogfQogCiB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjYWxjTWluTWF4V2lk
dGgoKQpAQCAtMjQzLDQgKzI0Miw0IEBACiAgICAgcmV0dXJuIEhUTUxJbnB1dEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKGFyZW5hLCBzdHlsZSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwyOSArNzAsMjkgQEAKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckZpZWxkc2V0Ojpw
YWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
IHsKICAgICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRv
cEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOwogICAgIFJlbmRlck9iamVjdCogbGVnZW5k
ID0gZmluZExlZ2VuZCgpOwogICAgIGlmICghbGVnZW5kKQotICAgICAgICByZXR1cm4gUmVuZGVy
QmxvY2s6OnBhaW50Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBfdHkpOworICAgICAgICByZXR1cm4g
UmVuZGVyQmxvY2s6OnBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwogCiAg
ICAgaW50IHlPZmYgPSAobGVnZW5kLT55UG9zKCkgPiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQo
KS1ib3JkZXJUb3AoKSkvMjsKICAgICBoIC09IHlPZmY7Ci0gICAgX3R5ICs9IHlPZmYgLSBib3Jk
ZXJUb3BFeHRyYSgpOworICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgpOwogCi0gICAg
aW50IG15ID0gbWF4KF90eSwgaS5yLnkoKSk7Ci0gICAgaW50IGVuZCA9IG1pbihpLnIuYm90dG9t
KCksICBfdHkgKyBoKTsKKyAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yLnkoKSk7Cisg
ICAgaW50IGVuZCA9IG1pbihwYWludEluZm8uci5ib3R0b20oKSwgdHkgKyBoKTsKICAgICBpbnQg
bWggPSBlbmQgLSBteTsKIAotICAgIHBhaW50QmFja2dyb3VuZChpLnAsIHN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwgX3R4LCBf
dHksIHcsIGgpOworICAgIHBhaW50QmFja2dyb3VuZChwYWludEluZm8ucCwgc3R5bGUoKS0+YmFj
a2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgbXksIG1oLCB0eCwg
dHksIHcsIGgpOwogCiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpKQotICAgICAgICBwYWlu
dEJvcmRlck1pbnVzTGVnZW5kKGkucCwgX3R4LCBfdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+
eFBvcygpLCBsZWdlbmQtPndpZHRoKCkpOworICAgICAgICBwYWludEJvcmRlck1pbnVzTGVnZW5k
KHBhaW50SW5mby5wLCB0eCwgdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBvcygpLCBsZWdl
bmQtPndpZHRoKCkpOwogfQogCi12b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJvcmRlck1pbnVz
TGVnZW5kKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBo
LAordm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZ2VuZChHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBpbnQgbHgsIGludCBsdykKIHsKIApAQCAtMTEwLDE0ICsxMTAsMTQgQEAKICAg
ICBib29sIHJlbmRlcl9iID0gYnMgPiBCSElEREVOOwogCiAgICAgaWYgKHJlbmRlcl90KSB7Ci0g
ICAgICAgIGRyYXdCb3JkZXIocCwgX3R4LCBfdHksIF90eCArIGx4LCBfdHkgKyAgc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCksIEJTVG9wLCB0Yywgc3R5bGUtPmNvbG9yKCksIHRzLAorICAgICAgICBk
cmF3Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5LCB0eCArIGx4LCB0eSArIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpLCBCU1RvcCwgdGMsIHN0eWxlLT5jb2xvcigpLCB0cywKICAgICAgICAg
ICAgICAgICAgICAocmVuZGVyX2wgJiYgKGxzID09IERPVFRFRCB8fCBscyA9PSBEQVNIRUQgfHwg
bHMgPT0gRE9VQkxFKT9zdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCk6MCksIDApOwotICAgICAgICBk
cmF3Qm9yZGVyKHAsIF90eCtseCtsdywgX3R5LCBfdHggKyB3LCBfdHkgKyAgc3R5bGUtPmJvcmRl
clRvcFdpZHRoKCksIEJTVG9wLCB0Yywgc3R5bGUtPmNvbG9yKCksIHRzLAorICAgICAgICBkcmF3
Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwgdHggKyBseCArIGx3LCB0eSwgdHggKyB3LCB0eSArIHN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBCU1RvcCwgdGMsIHN0eWxlLT5jb2xvcigpLCB0cywKICAg
ICAgICAgICAgICAgICAgICAwLCAocmVuZGVyX3IgJiYgKHJzID09IERPVFRFRCB8fCBycyA9PSBE
QVNIRUQgfHwgcnMgPT0gRE9VQkxFKT9zdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpOjApKTsKICAg
ICB9CiAKICAgICBpZiAocmVuZGVyX2IpCi0gICAgICAgIGRyYXdCb3JkZXIocCwgX3R4LCBfdHkg
KyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIF90eCArIHcsIF90eSArIGgsIEJTQm90
dG9tLCBiYywgc3R5bGUtPmNvbG9yKCksIGJzLAorICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNz
Q29udGV4dCwgdHgsIHR5ICsgaCAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCB0eCArIHcs
IHR5ICsgaCwgQlNCb3R0b20sIGJjLCBzdHlsZS0+Y29sb3IoKSwgYnMsCiAgICAgICAgICAgICAg
ICAgICAgKHJlbmRlcl9sICYmIChscyA9PSBET1RURUQgfHwgbHMgPT0gREFTSEVEIHx8IGxzID09
IERPVUJMRSk/c3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpOjApLAogICAgICAgICAgICAgICAgICAg
IChyZW5kZXJfciAmJiAocnMgPT0gRE9UVEVEIHx8IHJzID09IERBU0hFRCB8fCBycyA9PSBET1VC
TEUpP3N0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCk6MCkpOwogCkBAIC0xMzQsOSArMTM0LDggQEAK
ICAgICAgICAgICAgIChscyA+PSBPVVRTRVQpICYmCiAgICAgICAgICAgICAoYnMgPT0gRE9UVEVE
IHx8IGJzID09IERBU0hFRCB8fCBicyA9PSBTT0xJRCB8fCBicyA9PSBJTlNFVCk7CiAKLSAgICAg
ICAgZHJhd0JvcmRlcihwLCBfdHgsIF90eSwgX3R4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgp
LCBfdHkgKyBoLCBCU0xlZnQsIGxjLCBzdHlsZS0+Y29sb3IoKSwgbHMsCi0gICAgICAgICAgICAg
ICAgICAgaWdub3JlX3RvcD8wOnN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgIGlnbm9yZV9ib3R0b20/MDpzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAg
ICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0LCB0eCwgdHksIHR4ICsgc3R5bGUtPmJvcmRl
ckxlZnRXaWR0aCgpLCB0eSArIGgsIEJTTGVmdCwgbGMsIHN0eWxlLT5jb2xvcigpLCBscywKKyAg
ICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LCBpZ25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICB9
CiAKICAgICBpZiAocmVuZGVyX3IpIHsKQEAgLTE1MiwxNSArMTUxLDE0IEBACiAgICAgICAgICAg
ICAocnMgPj0gRE9UVEVEIHx8IHJzID09IElOU0VUKSAmJgogICAgICAgICAgICAgKGJzID09IERP
VFRFRCB8fCBicyA9PSBEQVNIRUQgfHwgYnMgPT0gU09MSUQgfHwgYnMgPT0gSU5TRVQpOwogCi0g
ICAgICAgIGRyYXdCb3JkZXIocCwgX3R4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCks
IF90eSwgX3R4ICsgdywgX3R5ICsgaCwgQlNSaWdodCwgcmMsIHN0eWxlLT5jb2xvcigpLCBycywK
LSAgICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wPzA6c3R5bGUtPmJvcmRlclRvcFdpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgaWdub3JlX2JvdHRvbT8wOnN0eWxlLT5ib3JkZXJCb3R0b21X
aWR0aCgpKTsKKyAgICAgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRleHQsIHR4ICsgdyAtIHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHR5LCB0eCArIHcsIHR5ICsgaCwgQlNSaWdodCwgcmMs
IHN0eWxlLT5jb2xvcigpLCBycywKKyAgICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wID8gMCA6
IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRmllbGRzZXQ6OnNldFN0
eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2b2lkIFJlbmRlckZpZWxkc2V0OjpzZXRTdHlsZShS
ZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKF9zdHls
ZSk7CisgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKIAogICAgIC8vIFdpbklF
IHJlbmRlcnMgZmllbGRzZXRzIHdpdGggZGlzcGxheTppbmxpbmUgbGlrZSB0aGV5J3JlIGlubGlu
ZS1ibG9ja3MuICBGb3IgdXMsCiAgICAgLy8gYW4gaW5saW5lLWJsb2NrIGlzIGp1c3QgYSBibG9j
ayBlbGVtZW50IHdpdGggcmVwbGFjZWQgc2V0IHRvIHRydWUgYW5kIGlubGluZSBzZXQKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5oCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFJlbmRlckJsb2NrX0gKLSNkZWZpbmUgUmVuZGVyQmxvY2tfSAor
I2lmbmRlZiBSZW5kZXJCbG9ja19oCisjZGVmaW5lIFJlbmRlckJsb2NrX2gKIAogI2luY2x1ZGUg
IkdhcFJlY3RzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgpAQCAtNzMsMjAgKzczLDIyIEBA
CiAgICAgdmlydHVhbCBib29sIGlzVG9wTWFyZ2luUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX3Rv
cE1hcmdpblF1aXJrOyB9CiAgICAgdmlydHVhbCBib29sIGlzQm90dG9tTWFyZ2luUXVpcmsoKSBj
b25zdCB7IHJldHVybiBtX2JvdHRvbU1hcmdpblF1aXJrOyB9CiAKLSAgICB2aXJ0dWFsIGludCBt
YXhUb3BNYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeworICAgIHZpcnR1YWwgaW50IG1heFRv
cE1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKHBvc2l0aXZl
KQogICAgICAgICAgICAgcmV0dXJuIG1fbWF4VG9wUG9zTWFyZ2luOwotICAgICAgICBlbHNlCiAg
ICAgICAgICAgICByZXR1cm4gbV9tYXhUb3BOZWdNYXJnaW47CiAgICAgfQotICAgIHZpcnR1YWwg
aW50IG1heEJvdHRvbU1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7CisKKyAgICB2aXJ0dWFs
IGludCBtYXhCb3R0b21NYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QKKyAgICB7CiAgICAgICAg
IGlmIChwb3NpdGl2ZSkKICAgICAgICAgICAgIHJldHVybiBtX21heEJvdHRvbVBvc01hcmdpbjsK
LSAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG1fbWF4Qm90dG9tTmVnTWFyZ2luOwog
ICAgIH0KIAotICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygpIHsKKyAgICB2b2lkIGluaXRN
YXhNYXJnaW5WYWx1ZXMoKQorICAgIHsKICAgICAgICAgaWYgKG1fbWFyZ2luVG9wID49IDApIHsK
ICAgICAgICAgICAgIG1fbWF4VG9wUG9zTWFyZ2luID0gbV9tYXJnaW5Ub3A7CiAgICAgICAgICAg
ICBtX21heFRvcE5lZ01hcmdpbiA9IDA7CkBAIC0xNDgsMTYgKzE1MCwxNiBAQAogICAgIHZvaWQg
Y2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwogICAgIC8vIGVuZCBiaWRpLmNwcCBmdW5jdGlv
bnMKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGlu
dCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYgaSwgaW50IHR4
LCBpbnQgdHkpOwotICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5LCBib29sIHBhaW50U2VsZWN0aW9uID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRDaGls
ZHJlbihQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOwotICAgIHZvaWQgcGFpbnRFbGxp
cHNpc0JveGVzKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Ci0gICAgdm9pZCBwYWlu
dFNlbGVjdGlvbihQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOwotICAgIHZvaWQgcGFp
bnRDYXJldChQYWludEluZm8mIGksIENhcmV0VHlwZSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIGJvb2wgcGFpbnRTZWxlY3Rpb24gPSBmYWxzZSk7Cisg
ICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
b2lkIHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAg
dm9pZCBwYWludFNlbGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9p
ZCBwYWludENhcmV0KFBhaW50SW5mbyYsIENhcmV0VHlwZSk7CiAgICAgCi0gICAgdm9pZCBpbnNl
cnRGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QgKm8pOwotICAgIHZvaWQgcmVtb3ZlRmxvYXRp
bmdPYmplY3QoUmVuZGVyT2JqZWN0ICpvKTsKKyAgICB2b2lkIGluc2VydEZsb2F0aW5nT2JqZWN0
KFJlbmRlck9iamVjdCopOworICAgIHZvaWQgcmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyT2Jq
ZWN0Kik7CiAgICAgdm9pZCBzZXRQYWludHNGbG9hdGluZ09iamVjdChSZW5kZXJPYmplY3QqLCBi
b29sKTsKIAogICAgIC8vIGNhbGxlZCBmcm9tIGxpbmVXaWR0aCwgdG8gcG9zaXRpb24gdGhlIGZs
b2F0cyBhZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgpAQCAtMTcxLDcgKzE3Myw3IEBACiAgICAgLy8g
aXMgZW1wdHkuIEhvd2V2ZXIsIGxheW91dElubGluZUNoaWxkcmVuKCkgcmVsaWVzIG9uIHRoZSBj
dXJyZW50IGJlaGF2aW9yLgogICAgIC8vIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzM5NSNjMwogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygp
IHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzIT0wOyB9Ci0gICAgdmlydHVhbCBib29sIGNvbnRh
aW5zRmxvYXQoUmVuZGVyT2JqZWN0KiBvKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGbG9h
dChSZW5kZXJPYmplY3QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zsb2F0
cygpIHsgcmV0dXJuIGZsb2F0Qm90dG9tKCkgPiBtX2hlaWdodDsgfQogICAgIHZvaWQgYWRkSW50
cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQp
OwpAQCAtMTg5LDE5ICsxOTEsMTYgQEAKICAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVl
KSBjb25zdDsKIAogICAgIGludCByaWdodE9mZnNldCgpIGNvbnN0OwotICAgIGludCByaWdodFJl
bE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRy
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0UmVtYWluaW5nID0gMCkgY29u
c3Q7CisgICAgaW50IHJpZ2h0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wg
YXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBoZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsK
ICAgICBpbnQgcmlnaHRPZmZzZXQoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0UmVsT2Zmc2V0
KHksIHJpZ2h0T2Zmc2V0KCksIHRydWUpOyB9CiAKICAgICBpbnQgbGVmdE9mZnNldCgpIGNvbnN0
OwotICAgIGludCBsZWZ0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBw
bHlUZXh0SW5kZW50ID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodFJl
bWFpbmluZyA9IDApIGNvbnN0OworICAgIGludCBsZWZ0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4
ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBoZWlnaHRSZW1haW5p
bmcgPSAwKSBjb25zdDsKICAgICBpbnQgbGVmdE9mZnNldChpbnQgeSkgY29uc3QgeyByZXR1cm4g
bGVmdFJlbE9mZnNldCh5LCBsZWZ0T2Zmc2V0KCksIHRydWUpOyB9CiAKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNQb2ludEluU2Nyb2xsYmFyKE5vZGVJbmZvJiBpbmZvLCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluU2Nyb2xsYmFyKE5vZGVJbmZvJiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAgICAgCkBAIC0yMzUs
NyArMjM0LDggQEAKICAgICAgICAgU2VsZWN0aW9uU3RhdGUgbV9zdGF0ZTsKIAogICAgICAgICBC
bG9ja1NlbGVjdGlvbkluZm8oKSB7IG1fYmxvY2sgPSAwOyBtX3N0YXRlID0gU2VsZWN0aW9uTm9u
ZTsgfQotICAgICAgICBCbG9ja1NlbGVjdGlvbkluZm8oUmVuZGVyQmxvY2sqIGIpIHsgCisgICAg
ICAgIEJsb2NrU2VsZWN0aW9uSW5mbyhSZW5kZXJCbG9jayogYikKKyAgICAgICAgeyAKICAgICAg
ICAgICAgIG1fYmxvY2sgPSBiOwogICAgICAgICAgICAgbV9zdGF0ZSA9IG1fYmxvY2stPnNlbGVj
dGlvblN0YXRlKCk7CiAgICAgICAgICAgICBtX3JlY3RzID0gbV9ibG9jay0+c2VsZWN0aW9uR2Fw
UmVjdHMoKTsKQEAgLTI1MSwxNiArMjUxLDE4IEBACiAgICAgdmlydHVhbCBib29sIHNob3VsZFBh
aW50U2VsZWN0aW9uR2FwcygpIGNvbnN0OwogICAgIGJvb2wgaXNTZWxlY3Rpb25Sb290KCkgY29u
c3Q7CiAgICAgR2FwUmVjdHMgZmlsbFNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0
UmlnaHQsIGNvbnN0IFBhaW50SW5mbyogaSA9IDApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0
IFBhaW50SW5mbyogPSAwKTsKICAgICBHYXBSZWN0cyBmaWxsSW5saW5lU2VsZWN0aW9uR2FwcyhS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGlu
dCB0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RUb3As
IGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25zdCBQYWludEluZm8qIGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0
TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOwogICAgIEdhcFJlY3RzIGZp
bGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwg
aW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25z
dCBQYWludEluZm8qIGkpOwotICAgIEludFJlY3QgZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGlu
dCBsYXN0VG9wLCBpbnQgbGFzdExlZnQsIGludCBsYXN0UmlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBib3R0b21ZLCBSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBp
bnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBjb25zdCBQYWludEluZm8qIGkpOwotICAgIEludFJlY3Qg
ZmlsbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4UG9zLCBpbnQg
eVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50
IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogaSk7Ci0gICAgSW50UmVj
dCBmaWxsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4UG9zLCBp
bnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwg
aW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogaSk7Ci0gICAgSW50
UmVjdCBmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50
IHhQb3MsIGludCB5UG9zLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFBhaW50SW5mbyog
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RUb3AsIGlu
dCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKKyAgICBJbnRS
ZWN0IGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChpbnQgbGFzdFRvcCwgaW50IGxhc3RMZWZ0LCBp
bnQgbGFzdFJpZ2h0LCBpbnQgYm90dG9tWSwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwg
Y29uc3QgUGFpbnRJbmZvKik7CisgICAgSW50UmVjdCBmaWxsTGVmdFNlbGVjdGlvbkdhcChSZW5k
ZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJC
bG9jayogcm9vdEJsb2NrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi
bG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWludEluZm8qKTsKKyAg
ICBJbnRSZWN0IGZpbGxSaWdodFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50
IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJsb2NrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1gsIGludCBibG9ja1ksIGlu
dCB0eCwgaW50IHR5LCBjb25zdCBQYWludEluZm8qKTsKKyAgICBJbnRSZWN0IGZpbGxIb3Jpem9u
dGFsU2VsZWN0aW9uR2FwKFJlbmRlck9iamVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3Ms
IGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgUGFpbnRJbmZvKik7CiAKICAgICB2b2lkIGdl
dEhvcml6b250YWxTZWxlY3Rpb25HYXBJbmZvKFNlbGVjdGlvblN0YXRlIHN0YXRlLCBib29sJiBs
ZWZ0R2FwLCBib29sJiByaWdodEdhcCk7CiAgICAgaW50IGxlZnRTZWxlY3Rpb25PZmZzZXQoUmVu
ZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHkpOwpAQCAtMjcxLDkgKzI3Myw5IEBACiAjZW5kaWYK
IAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb21wdXRpbmcgbGluZSBjb3VudHMgYW5kIGhl
aWdodHMgZm9yIGxpbmUgY291bnRzLgotICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVBdEluZGV4KGlu
dCBpKTsKKyAgICBSb290SW5saW5lQm94KiBsaW5lQXRJbmRleChpbnQgaW5kZXgpOwogICAgIGlu
dCBsaW5lQ291bnQoKTsKLSAgICBpbnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCBsKTsKKyAgICBp
bnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCBsaW5lQ291bnQpOwogICAgIHZvaWQgY2xlYXJUcnVu
Y2F0aW9uKCk7CiAKIHByb3RlY3RlZDoKQEAgLTI4MSw3ICsyODMsNyBAQAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFBvc2l0aW9uIHBv
c2l0aW9uRm9yQm94KElubGluZUJveCAqYm94LCBib29sIHN0YXJ0PXRydWUpIGNvbnN0OworICAg
IFBvc2l0aW9uIHBvc2l0aW9uRm9yQm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBj
b25zdDsKICAgICBQb3NpdGlvbiBwb3NpdGlvbkZvclJlbmRlcmVyKFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIsIGJvb2wgc3RhcnQ9dHJ1ZSkgY29uc3Q7CiAgICAgICAgIAogcHJvdGVjdGVkOgpAQCAt
MjkxLDE0ICsyOTMsMTUgQEAKICAgICAgICAgICAgIEZsb2F0UmlnaHQKICAgICAgICAgfTsKIAot
ICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIG5vZGUgPSAw
OwotICAgICAgICAgICAgc3RhcnRZID0gMDsKLSAgICAgICAgICAgIGVuZFkgPSAwOwotICAgICAg
ICAgICAgbV90eXBlID0gdHlwZTsKLSAgICAgICAgICAgIGxlZnQgPSAwOwotICAgICAgICAgICAg
d2lkdGggPSAwOwotICAgICAgICAgICAgbm9QYWludCA9IGZhbHNlOworICAgICAgICBGbG9hdGlu
Z09iamVjdChUeXBlIHR5cGUpCisgICAgICAgICAgICA6IG5vZGUoMCkKKyAgICAgICAgICAgICwg
c3RhcnRZKDApCisgICAgICAgICAgICAsIGVuZFkoMCkKKyAgICAgICAgICAgICwgbGVmdCgwKQor
ICAgICAgICAgICAgLCB3aWR0aCgwKQorICAgICAgICAgICAgLCBtX3R5cGUoMCkKKyAgICAgICAg
ICAgICwgbm9QYWludChmYWxzZSkKKyAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBA
IC0zOTcsMjAgKzQwMCwyMCBAQAogICAgICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NNYXJnaW4gLSBtX25lZ01hcmdpbjsgfQogICAgIH07CiAgICAgCi0gICAgdm9pZCBhZGp1
c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYg
bWFyZ2luSW5mbyk7Ci0gICAgdm9pZCBhZGp1c3RGbG9hdGluZ0Jsb2NrKGNvbnN0IE1hcmdpbklu
Zm8mIG1hcmdpbkluZm8pOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlU3BlY2lhbENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIENvbXBhY3RJ
bmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFuZGxlZCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBoYW5k
bGVGbG9hdGluZ0NoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1h
cmdpbkluZm8sIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlUG9zaXRp
b25lZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbklu
Zm8sIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVjdCogaGFuZGxlQ29tcGFjdENoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbywgYm9vbCYgaGFu
ZGxlZCk7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVyT2JqZWN0KiBjaGls
ZCwgY29uc3QgTWFyZ2luSW5mbyYpOworICAgIHZvaWQgYWRqdXN0RmxvYXRpbmdCbG9jayhjb25z
dCBNYXJnaW5JbmZvJik7CisgICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVTcGVjaWFsQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIENvbXBhY3RJbmZvJiwgYm9vbCYg
aGFuZGxlZCk7CisgICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVGbG9hdGluZ0NoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBoYW5kbGVkKTsKKyAgICBSZW5k
ZXJPYmplY3QqIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25z
dCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVD
b21wYWN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgQ29tcGFjdEluZm8mLCBib29sJiBoYW5k
bGVkKTsKICAgICBSZW5kZXJPYmplY3QqIGhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgdm9pZCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IHlQb3NFc3RpbWF0ZSk7Ci0g
ICAgdm9pZCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIE1hcmdpbklu
Zm8mIG1hcmdpbkluZm8sIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJnaW4p
OwotICAgIHZvaWQgaW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQsIENv
bXBhY3RJbmZvJiBjb21wYWN0SW5mbyk7Ci0gICAgaW50IGVzdGltYXRlVmVydGljYWxQb3NpdGlv
bihSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBpbmZvKTsKKyAgICB2b2lk
IGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZvJiwgaW50IHlQ
b3NFc3RpbWF0ZSk7CisgICAgdm9pZCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlck9iamVjdCog
Y2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFy
Z2luKTsKKyAgICB2b2lkIGluc2VydENvbXBhY3RJZk5lZWRlZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBDb21wYWN0SW5mbyYpOworICAgIGludCBlc3RpbWF0ZVZlcnRpY2FsUG9zaXRpb24oUmVuZGVy
T2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIHZvaWQgZGV0ZXJtaW5lSG9y
aXpvbnRhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQpOwotICAgIHZvaWQgaGFuZGxlQm90
dG9tT2ZCbG9jayhpbnQgdG9wLCBpbnQgYm90dG9tLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKTsK
LSAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJnaW5JbmZvJiBtYXJn
aW5JbmZvKTsKKyAgICB2b2lkIGhhbmRsZUJvdHRvbU9mQmxvY2soaW50IHRvcCwgaW50IGJvdHRv
bSwgTWFyZ2luSW5mbyYpOworICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0
IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1
c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKIHByb3RlY3RlZDoKQEAgLTQzMiw3ICs0MzUs
NyBAQAogCiAgICAgLy8gSG93IG11Y2ggY29udGVudCBvdmVyZmxvd3Mgb3V0IG9mIG91ciBibG9j
ayB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseSAoYWxsIHdlIHN1cHBvcnQKICAgICAvLyBmb3Ig
bm93IGlzIHNwaWxsYWdlIG91dCBvZiB0aGUgYm90dG9tIGFuZCB0aGUgcmlnaHQsIHdoaWNoIGFy
ZSB0aGUgY29tbW9uIGNhc2VzKS4KLSAgICAvLyBYWFggR2VuZXJhbGl6ZSB0byB3b3JrIHdpdGgg
dG9wIGFuZCBsZWZ0IGFzIHdlbGwuCisgICAgLy8gRklYTUU6IEdlbmVyYWxpemUgdG8gd29yayB3
aXRoIHRvcCBhbmQgbGVmdCBhcyB3ZWxsLgogICAgIGludCBtX292ZXJmbG93SGVpZ2h0OwogICAg
IGludCBtX292ZXJmbG93V2lkdGg7CiAgICAgCkBAIC00NDcsNCArNDUwLDQgQEAKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVuZGVyQmxvY2tfSAorI2VuZGlmIC8vIFJl
bmRlckJsb2NrX2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGcmFtZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJGcmFtZS5oCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9S
ZW5kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyNyArMjIsMjUgQEAKICAqCiAgKi8K
IAotI2lmbmRlZiBSZW5kZXJGcmFtZV9ICi0jZGVmaW5lIFJlbmRlckZyYW1lX0gKKyNpZm5kZWYg
UmVuZGVyRnJhbWVfaAorI2RlZmluZSBSZW5kZXJGcmFtZV9oCiAKLSNpbmNsdWRlICJSZW5kZXJQ
YXJ0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclBh
cnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJGcmFtZSA6IHB1Ymxp
YyBSZW5kZXJQYXJ0Ci17CitjbGFzcyBSZW5kZXJGcmFtZSA6IHB1YmxpYyBSZW5kZXJQYXJ0IHsK
IHB1YmxpYzoKICAgICBSZW5kZXJGcmFtZShIVE1MRnJhbWVFbGVtZW50Kik7CiAKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRnJhbWUi
OyB9CiAKLSAgICBIVE1MRnJhbWVFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKLSAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KFJlbmRlclBhcnQ6OmVsZW1lbnQo
KSk7IH0KKyAgICBIVE1MRnJhbWVFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KFJlbmRlclBhcnQ6OmVsZW1lbnQoKSk7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgpOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJGcmFtZV9oCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjUgKzI4LDIzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVyLmgiCiAKLSNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIgLy8gRm9yIGFjY2Vzc2liaWxpdHkKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKLS8vIEZvciBhY2Nlc3NpYmlsaXR5
Ci0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBS
ZW5kZXJDb250YWluZXI6OlJlbmRlckNvbnRhaW5lcihOb2RlKiBub2RlKQogICAgIDogUmVuZGVy
Qm94KG5vZGUpCisgICAgLCBtX2ZpcnN0KDApCisgICAgLCBtX2xhc3QoMCkKIHsKLSAgICBtX2Zp
cnN0ID0gMDsKLSAgICBtX2xhc3QgPSAwOwogfQogCiAKQEAgLTYzOSw0ICs2MzcsNCBAQAogCiAj
dW5kZWYgREVCVUdfTEFZT1VUCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuaAkocmV2aXNpb24gMTczOTApCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5k
ZWYgUmVuZGVyTGlzdE1hcmtlcl9ICi0jZGVmaW5lIFJlbmRlckxpc3RNYXJrZXJfSAorI2lmbmRl
ZiBSZW5kZXJMaXN0TWFya2VyX2gKKyNkZWZpbmUgUmVuZGVyTGlzdE1hcmtlcl9oCiAKICNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBAIC0zNSwx
OSArMzUsMjEgQEAKIC8qIHVzZWQgdG8gcmVuZGVyIHRoZSBsaXN0cyBtYXJrZXIuCiAgICAgIFRo
aXMgY2xhc3MgYWx3YXlzIGhhcyB0byBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIFJlbmRlckxpc3RJ
dGVtIQogKi8KLWNsYXNzIFJlbmRlckxpc3RNYXJrZXIgOiBwdWJsaWMgUmVuZGVyQm94Ci17Citj
bGFzcyBSZW5kZXJMaXN0TWFya2VyIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyTGlzdE1hcmtlcihEb2N1bWVudCopOwogICAgIH5SZW5kZXJMaXN0TWFya2VyKCk7CiAK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyTGlzdE1hcmtlciI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RNYXJrZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5
bGUqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJMaXN0TWFya2VyIjsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgeG9mZiwgaW50IHlvZmYpOworCiAgICAgLy8gc28gdGhlIG1hcmtlciBnZXRzIHRv
IGxheW91dCBpdHNlbGYuIE9ubHkgbmVlZGVkIGZvcgogICAgIC8vIGxpc3Qtc3R5bGUtcG9zaXRp
b246IGluc2lkZQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB4b2Zm
LCBpbnQgeW9mZik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBjYWxjTWluTWF4V2lkdGgoKTsKIApAQCAtNTcsMTEgKzU5LDkgQEAKIAogICAgIHZpcnR1YWwg
SW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCwgYm9vbCk7CiAKLSAgICB2aXJ0
dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UpIGNv
bnN0OwotICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNS
b290TGluZUJveD1mYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJv
b2wsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNob3J0
IGJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLSAgICAKICAgICBDYWNoZWRJbWFnZSogbGlzdEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0SW1hZ2U7IH0KICAgICAKICAgICBSZW5kZXJMaXN0SXRlbSogbGlzdEl0ZW0oKSB7IHJldHVy
biBtX2xpc3RJdGVtOyB9CkBAIC04NSw2ICs4NSw2IEBACiAgICAgU2VsZWN0aW9uU3RhdGUgbV9z
ZWxlY3Rpb25TdGF0ZTsKIH07CiAKLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyTGlzdE1hcmtlcl9oCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiIAogI2luY2x1ZGUg
IlJlbmRlckJSLmgiCkBAIC00MzIsNCArNDMyLDQgQEAKICAgICByZXR1cm4gdmlldygpLT5mcmFt
ZVZpZXcoKS0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihlbmNsb3NpbmdMYXllcigpLCB0cnVlKTsK
IH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckhU
TUxDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCShy
ZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
UmVuZGVySFRNTENhbnZhc19ICi0jZGVmaW5lIFJlbmRlckhUTUxDYW52YXNfSAorI2lmbmRlZiBS
ZW5kZXJIVE1MQ2FudmFzX2gKKyNkZWZpbmUgUmVuZGVySFRNTENhbnZhc19oCiAKICNpbmNsdWRl
ICJSZW5kZXJSZXBsYWNlZC5oIgogCkBAIC0zMywxMSArMzMsMTMgQEAKICAgICBjbGFzcyBSZW5k
ZXJIVE1MQ2FudmFzIDogcHVibGljIFJlbmRlclJlcGxhY2VkIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFJlbmRlckhUTUxDYW52YXMoTm9kZSopOwotICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVySFRNTENhbnZhcyI7IH0KKwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJIVE1MQ2FudmFzX2gKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oCShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwyOSArNDEsNDIgQEAKICAqIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgogICovCiAKLSNpZm5k
ZWYgcmVuZGVyX2xheWVyX2gKLSNkZWZpbmUgcmVuZGVyX2xheWVyX2gKKyNpZm5kZWYgUmVuZGVy
TGF5ZXJfaAorI2RlZmluZSBSZW5kZXJMYXllcl9oCiAKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJTY3JvbGxCYXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUg
IlNjcm9sbEJhci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFJlc291
cmNlOwotY2xhc3MgUmVuZGVyVmlldzsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyOwogY2xhc3Mg
UmVuZGVyRnJhbWVTZXQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFJlbmRlclRhYmxlOwogY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFBsYXRmb3JtU2Ny
b2xsYmFyOworY2xhc3MgUmVuZGVyVmlldzsKIAorLy8gRklYTUU6IG1vdmUgdGhpcyB0byBpdCdz
IG93biBmaWxlCiBjbGFzcyBDbGlwUmVjdHMgewogcHVibGljOgotICAgIENsaXBSZWN0cyhjb25z
dCBJbnRSZWN0JiByKSA6bV9vdmVyZmxvd0NsaXBSZWN0KHIpLCBtX2ZpeGVkQ2xpcFJlY3Qociks
IG1fcG9zQ2xpcFJlY3QociksIG1fcmVmQ250KDApIHt9CisgICAgQ2xpcFJlY3RzKGNvbnN0IElu
dFJlY3QmIHIpCisgICAgICAgIDogbV9vdmVyZmxvd0NsaXBSZWN0KHIpCisgICAgICAgICwgbV9m
aXhlZENsaXBSZWN0KHIpCisgICAgICAgICwgbV9wb3NDbGlwUmVjdChyKQorICAgICAgICAsIG1f
cmVmQ250KDApCisgICAgeworICAgIH0KKwogICAgIENsaXBSZWN0cyhjb25zdCBJbnRSZWN0JiBv
LCBjb25zdCBJbnRSZWN0JiBmLCBjb25zdCBJbnRSZWN0JiBwKQotICAgICAgOm1fb3ZlcmZsb3dD
bGlwUmVjdChvKSwgbV9maXhlZENsaXBSZWN0KGYpLCBtX3Bvc0NsaXBSZWN0KHApLCBtX3JlZkNu
dCgwKSB7fQorICAgICAgICA6IG1fb3ZlcmZsb3dDbGlwUmVjdChvKQorICAgICAgICAsIG1fZml4
ZWRDbGlwUmVjdChmKQorICAgICAgICAsIG1fcG9zQ2xpcFJlY3QocCkKKyAgICAgICAgLCBtX3Jl
ZkNudCgwKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBJbnRSZWN0JiBvdmVyZmxvd0NsaXBS
ZWN0KCkgeyByZXR1cm4gbV9vdmVyZmxvd0NsaXBSZWN0OyB9CiAgICAgY29uc3QgSW50UmVjdCYg
Zml4ZWRDbGlwUmVjdCgpIHsgcmV0dXJuIG1fZml4ZWRDbGlwUmVjdDsgfQpAQCAtNzIsMTcgKzg1
LDE3IEBACiAgICAgdm9pZCByZWYoKSB7IG1fcmVmQ250Kys7IH0KICAgICB2b2lkIGRlcmVmKFJl
bmRlckFyZW5hKiByZW5kZXJBcmVuYSkgeyBpZiAoLS1tX3JlZkNudCA9PSAwKSBkZXN0cm95KHJl
bmRlckFyZW5hKTsgfQogICAgIAotICAgIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSogcmVuZGVy
QXJlbmEpOworICAgIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwogCiAgICAgLy8gT3Zlcmxv
YWRlZCBuZXcgb3BlcmF0b3IuCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgUmVu
ZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpOyAgICAKKyAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90LCBSZW5kZXJBcmVuYSopIHRocm93KCk7ICAgIAogCiAgICAgLy8gT3ZlcnJpZGRl
biB0byBwcmV2ZW50IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgotICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6ZV90IHN6KTsKKyAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKICAgICAgICAgCiBwcml2YXRlOgogICAgIC8vIFRo
ZSBub3JtYWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQgb24gYWxsIHJlbmRlciBvYmplY3Rz
LgotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3opIHRocm93KCk7CisgICAgdm9pZCog
b3BlcmF0b3IgbmV3KHNpemVfdCkgdGhyb3coKTsKIAogcHJpdmF0ZToKICAgICBJbnRSZWN0IG1f
b3ZlcmZsb3dDbGlwUmVjdDsKQEAgLTkxLDE0ICsxMDQsMTYgQEAKICAgICB1bnNpZ25lZCBtX3Jl
ZkNudDsKIH07CiAKKworLy8gRklYTUU6IG1vdmUgdGhpcyB0byBpdCdzIG93biBmaWxlCiAvLyBU
aGlzIGNsYXNzIGhhbmRsZXMgdGhlIGF1dG8tc2Nyb2xsaW5nIG9mIGxheWVycyB3aXRoIG92ZXJm
bG93OiBtYXJxdWVlLgotY2xhc3MgTWFycXVlZQoteworY2xhc3MgTWFycXVlZSB7CiBwdWJsaWM6
CiAgICAgTWFycXVlZShSZW5kZXJMYXllciopOwogCiAgICAgaW50IHNwZWVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVlZDsgfQogICAgIGludCBtYXJxdWVlU3BlZWQoKSBjb25zdDsKKwogICAgIEVN
YXJxdWVlRGlyZWN0aW9uIHJldmVyc2VEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxFTWFycXVlZURpcmVjdGlvbj4oLWRpcmVjdGlvbigpKTsgfQogICAgIEVNYXJxdWVlRGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwogCkBAIC0xMDgsNyArMTIzLDcgQEAKIAogICAgIEVX
aGl0ZVNwYWNlIHdoaXRlU3BhY2UoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFV2hpdGVTcGFjZT4o
bV93aGl0ZVNwYWNlKTsgfQogICAgIAotICAgIGludCBjb21wdXRlUG9zaXRpb24oRU1hcnF1ZWVE
aXJlY3Rpb24gZGlyLCBib29sIHN0b3BBdENsaWVudEVkZ2UpOworICAgIGludCBjb21wdXRlUG9z
aXRpb24oRU1hcnF1ZWVEaXJlY3Rpb24sIGJvb2wgc3RvcEF0Q2xpZW50RWRnZSk7CiAKICAgICB2
b2lkIHNldEVuZChpbnQgZW5kKSB7IG1fZW5kID0gZW5kOyB9CiAgICAgCkBAIC0xNzMsNyArMTg4
LDYgQEAKICAgICBSZW5kZXJMYXllciogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7
IH0KICAgICBSZW5kZXJMYXllciogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
cmV2aW91czsgfQogICAgIFJlbmRlckxheWVyKiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fbmV4dDsgfQotCiAgICAgUmVuZGVyTGF5ZXIqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0OyB9CiAgICAgUmVuZGVyTGF5ZXIqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdDsgfQogCkBAIC0xOTYsMjggKzIxMCwzMCBAQAogICAgIFJlbmRlckxheWVyKiB0cmFu
c3BhcmVudEFuY2VzdG9yKCk7CiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCi0gICAgY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3QoKSBjb25zdCB7CisgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3QoKSBjb25zdAor
ICAgIHsKICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGN1cnIgPSB0aGlzOwotICAgICAgICB3
aGlsZSAoY3Vyci0+cGFyZW50KCkpIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKKyAgICAgICAgd2hp
bGUgKGN1cnItPnBhcmVudCgpKQorICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwog
ICAgICAgICByZXR1cm4gY3VycjsKICAgICB9CiAgICAgCiAgICAgaW50IHhQb3MoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KICAgICBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAg
IHZvaWQgc2V0UG9zKGludCB4UG9zLCBpbnQgeVBvcykKKyAgICB7CisgICAgICAgIG1feCA9IHhQ
b3M7CisgICAgICAgIG1feSA9IHlQb3M7CisgICAgfQorCiAgICAgaW50IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aDsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hl
aWdodDsgfQotCiAgICAgdm9pZCBzZXRXaWR0aChpbnQgdykgeyBtX3dpZHRoID0gdzsgfQogICAg
IHZvaWQgc2V0SGVpZ2h0KGludCBoKSB7IG1faGVpZ2h0ID0gaDsgfQogCiAgICAgaW50IHNjcm9s
bFdpZHRoKCk7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpOwogICAgIAotICAgIHZvaWQgc2V0UG9z
KCBpbnQgeFBvcywgaW50IHlQb3MgKSB7Ci0gICAgICAgIG1feCA9IHhQb3M7Ci0gICAgICAgIG1f
eSA9IHlQb3M7Ci0gICAgfQotCiAgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0
aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCiAgICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50
JiB4LCBpbnQmIHkpOwogICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQm
IHkpOwpAQCAtMjI2LDI1ICsyNDIsMzYgQEAKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGludCB4
LCBpbnQgeSwgYm9vbCB1cGRhdGVTY3JvbGxiYXJzID0gdHJ1ZSwgYm9vbCByZXBhaW50ID0gdHJ1
ZSk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoeCwg
bV9zY3JvbGxZKTsgfQogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRv
T2Zmc2V0KG1fc2Nyb2xsWCArIG1fc2Nyb2xsT3JpZ2luWCwgeSk7IH0KLSAgICB2b2lkIHNjcm9s
bFJlY3RUb1Zpc2libGUoY29uc3QgSW50UmVjdCAmciwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBh
bGlnblggPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGln
blkgPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCk7CisgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxl
KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCA9IGdBbGlnbkNl
bnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSA9IGdBbGlnbkNlbnRl
cklmTmVlZGVkKTsKKwogICAgIEludFJlY3QgZ2V0UmVjdFRvRXhwb3NlKGNvbnN0IEludFJlY3Qg
JnZpc2libGVSZWN0LCAgY29uc3QgSW50UmVjdCAmZXhwb3NlUmVjdCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKTsgICAgCisKICAg
ICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7CiAgICAgdm9pZCBzZXRIYXNW
ZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKwogICAgIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwogICAgIHZvaWQgZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKICAgICBTY3JvbGxiYXIqIGhvcml6b250YWxT
Y3JvbGxiYXIoKSB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyKCkgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisKICAgICBQbGF0Zm9ybVNj
cm9sbGJhciogaG9yaXpvbnRhU2Nyb2xsYmFyV2lkZ2V0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1T
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyV2lkZ2V0KCkgY29uc3Q7CisKICAgICBpbnQgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwogICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgY29uc3Q7CisKICAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scygpOwog
ICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJbnRQb2ludCYpOwogICAgIElu
dFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCiAg
ICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworCiAgICAgdm9pZCB1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcj0x
LjApOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOwogICAgIHZvaWQgYXV0b3Njcm9sbCgpOworCiAg
ICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50U2l6ZSYp
OwogICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7
IH0KICAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBi
OyB9CkBAIC0yNTIsMTAgKzI3OSw5IEBACiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uKCk7
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhib29sIGRvRnVsbFJlcGFpbnQgPSBmYWxz
ZSwgYm9vbCBjaGVja0ZvclJlcGFpbnQ9dHJ1ZSk7CiAgICAgdm9pZCBjaGVja0ZvclJlcGFpbnRP
blJlc2l6ZSgpOwotICAgIHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgsIGlu
dCYgcmVsWSkgewotICAgICAgICByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7Ci0gICAg
fQogICAgICAKKyAgICB2b2lkIHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoaW50JiByZWxYLCBpbnQm
IHJlbFkpIHsgcmVsWCArPSBtX3JlbFg7IHJlbFkgKz0gbV9yZWxZOyB9CisKICAgICB2b2lkIGNs
ZWFyQ2xpcFJlY3RzKCk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0KCk7CiAKQEAgLTI3NCw3ICsz
MDAsNyBAQAogICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBvdmVyZmxvd0xpc3QoKSBjb25zdCB7
IHJldHVybiBtX292ZXJmbG93TGlzdDsgfQogICAgIAogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRl
bnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9Ci0gICAgdm9pZCBzZXRI
YXNWaXNpYmxlQ29udGVudChib29sIGIpOworICAgIHZvaWQgc2V0SGFzVmlzaWJsZUNvbnRlbnQo
Ym9vbCk7CiAgICAgdm9pZCBkaXJ0eVZpc2libGVDb250ZW50U3RhdHVzKCk7CiAKICAgICAvLyBH
ZXRzIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwb3NpdGlvbmVkIGFuY2VzdG9yIGxheWVyIChhbHNv
IGluY2x1ZGVzCkBAIC0zMTIsMTggKzMzOCwxOCBAQAogICAgIAogICAgIEludFJlY3QgcmVwYWlu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKLSAgICB2b2lkIGRlc3Ry
b3koUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKTsKKyAgICB2b2lkIGRlc3Ryb3koUmVuZGVyQXJl
bmEqKTsKIAogICAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4gIERlcml2ZWQgY2xhc3Nl
cyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwogICAgIC8vIGluIG9yZGVyIHRvIGFsbG9jYXRl
IG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz
eiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpOyAgICAKKyAgICB2b2lkKiBvcGVy
YXRvciBuZXcoc2l6ZV90LCBSZW5kZXJBcmVuYSopIHRocm93KCk7ICAgIAogCiAgICAgLy8gT3Zl
cnJpZGRlbiB0byBwcmV2ZW50IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgot
ICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6ZV90IHN6KTsKKyAgICB2b2lk
IG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUg
bm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkIG9uIGFsbCByZW5kZXIgb2JqZWN0cy4K
LSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6KSB0aHJvdygpOworICAgIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzaXplX3QpIHRocm93KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZXh0
U2libGluZyhSZW5kZXJMYXllciogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CkBAIC0zNTYsNyAr
MzgyLDYgQEAKICAgICBSZW5kZXJMYXllciogbV9wYXJlbnQ7CiAgICAgUmVuZGVyTGF5ZXIqIG1f
cHJldmlvdXM7CiAgICAgUmVuZGVyTGF5ZXIqIG1fbmV4dDsKLQogICAgIFJlbmRlckxheWVyKiBt
X2ZpcnN0OwogICAgIFJlbmRlckxheWVyKiBtX2xhc3Q7CiAKQEAgLTQyOCw2ICs0NTMsNiBAQAog
ICAgIE1hcnF1ZWUqIG1fbWFycXVlZTsgLy8gVXNlZCBieSBsYXllcnMgd2l0aCBvdmVyZmxvdzpt
YXJxdWVlCiB9OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJMYXllcl9oCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRm9y
ZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAsMjkgKzIwLDI5IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVu
ZGVyRm9yZWlnbk9iamVjdF9ICi0jZGVmaW5lIFJlbmRlckZvcmVpZ25PYmplY3RfSAorI2lmbmRl
ZiBSZW5kZXJGb3JlaWduT2JqZWN0X2gKKyNkZWZpbmUgUmVuZGVyRm9yZWlnbk9iamVjdF9oCiAj
aWZkZWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ7CiAKLWNsYXNz
IFJlbmRlckZvcmVpZ25PYmplY3QgOiBwdWJsaWMgUmVuZGVyQmxvY2sKLXsKK2NsYXNzIFJlbmRl
ckZvcmVpZ25PYmplY3QgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgotICAgIFJlbmRl
ckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKm5vZGUpOworICAgIFJlbmRl
ckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqKTsKICAgICAKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRm9yZWln
bk9iamVjdCI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CisKICAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wg
Zik7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3Qm
LCBib29sIGYpOwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogCkBAIC01MCwxMSArNTAsMTIgQEAKIAogIHByaXZhdGU6CiAgICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOworCiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKIH07
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0j
ZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJGb3JlaWduT2JqZWN0X2gKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVy
LmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFJlbmRlckNvbnRhaW5lcl9ICi0jZGVmaW5lIFJlbmRlckNvbnRh
aW5lcl9ICisjaWZuZGVmIFJlbmRlckNvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlckNvbnRhaW5l
cl9oCiAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKIApAQCAtMzIsOCArMzIsNyBAQAogLyoqCiAg
KiBCYXNlIGNsYXNzIGZvciByZW5kZXJpbmcgb2JqZWN0cyB0aGF0IGNhbiBoYXZlIGNoaWxkcmVu
CiAgKi8KLWNsYXNzIFJlbmRlckNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJCb3gKLXsKK2NsYXNz
IFJlbmRlckNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgogICAgIFJlbmRl
ckNvbnRhaW5lcihOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyQ29udGFpbmVyKCk7CkBAIC00
MywxMyArNDIsMTMgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0ICpuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QgKm9sZENoaWxkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZvaWQg
ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKICAgICAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CisgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNl
cnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmUpOwog
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwpAQCAtNjksMTAgKzY4LDEwIEBACiAgICAgdm9p
ZCBzZXRGaXJzdENoaWxkKFJlbmRlck9iamVjdCogZmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9
CiAgICAgdm9pZCBzZXRMYXN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBsYXN0KSB7IG1fbGFzdCA9IGxh
c3Q7IH0KIAotcHJvdGVjdGVkOgogICAgIFJlbmRlck9iamVjdCAqbV9maXJzdDsKICAgICBSZW5k
ZXJPYmplY3QgKm1fbGFzdDsKIH07CiAKLX0KLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gUmVuZGVyQ29udGFpbmVyX2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5o
CShyZXZpc2lvbiAxNzM5MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyRmxl
eGlibGVCb3hfSAotI2RlZmluZSBSZW5kZXJGbGV4aWJsZUJveF9ICisjaWZuZGVmIFJlbmRlckZs
ZXhpYmxlQm94X2gKKyNkZWZpbmUgUmVuZGVyRmxleGlibGVCb3hfaAogCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKIApAQCAtMzIsNiArMzIsOCBAQAogICAgIFJlbmRlckZsZXhpYmxlQm94KE5v
ZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJGbGV4aWJsZUJveCgpOwogCisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgY2FsY01p
bk1heFdpZHRoKCk7CiAgICAgdm9pZCBjYWxjSG9yaXpvbnRhbE1pbk1heFdpZHRoKCk7CiAgICAg
dm9pZCBjYWxjVmVydGljYWxNaW5NYXhXaWR0aCgpOwpAQCAtNDYsOCArNDgsNiBAQAogICAgIHZp
cnR1YWwgYm9vbCBpc0ZsZXhpbmdDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxleGluZ0No
aWxkcmVuOyB9CiAgICAgdmlydHVhbCBib29sIGlzU3RyZXRjaGluZ0NoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJldGNoaW5nQ2hpbGRyZW47IH0KIAotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0OwotCiAgICAgdm9pZCBwbGFjZUNoaWxkKFJlbmRlck9iamVj
dCogY2hpbGQsIGludCB4LCBpbnQgeSk7CiAKIHByb3RlY3RlZDoKQEAgLTYzLDQgKzYzLDQgQEAK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVuZGVyRmxleGlibGVCb3hf
SAorI2VuZGlmIC8vIFJlbmRlckZsZXhpYmxlQm94X2gKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJC
dXR0b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHJldmlzaW9u
IDE3MzkwKQorKysgcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCw4ICsyMCw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyQnV0dG9uX0gKLSNkZWZpbmUg
UmVuZGVyQnV0dG9uX0gKKyNpZm5kZWYgUmVuZGVyQnV0dG9uX2gKKyNkZWZpbmUgUmVuZGVyQnV0
dG9uX2gKIAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAKQEAgLTMwLDEzICszMCwx
NCBAQAogLy8gUmVuZGVyQnV0dG9ucyBhcmUganVzdCBsaWtlIG5vcm1hbCBmbGV4Ym94ZXMgZXhj
ZXB0IHRoYXQgdGhleSB3aWxsIGdlbmVyYXRlIGFuIGFub255bW91cyBibG9jayBjaGlsZC4KIC8v
IEZvciBpbnB1dHMsIHRoZXkgd2lsbCBhbHNvIGdlbmVyYXRlIGFuIGFub255bW91cyBSZW5kZXJU
ZXh0IGFuZCBrZWVwIGl0cyBzdHlsZSBhbmQgY29udGVudCB1cAogLy8gdG8gZGF0ZSBhcyB0aGUg
YnV0dG9uIGNoYW5nZXMuCi1jbGFzcyBSZW5kZXJCdXR0b24gOiBwdWJsaWMgUmVuZGVyRmxleGli
bGVCb3gKLXsKK2NsYXNzIFJlbmRlckJ1dHRvbiA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7
CiBwdWJsaWM6CiAgICAgUmVuZGVyQnV0dG9uKE5vZGUqKTsKIAorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJCdXR0b24iOyB9CisKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0ICpiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QqIG9sZENoaWxkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMo
KSB7fQogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIApAQCAtNDksOCArNTAsNiBAQAogCiAgICAgdm9pZCBzZXRUZXh0KGNv
bnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlJlbmRlckJ1dHRvbiI7IH0KLQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNTgsNiAr
NTcsNiBAQAogICAgIFJlbmRlckJsb2NrKiBtX2lubmVyOwogfTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJCdXR0b25faApJbmRleDogcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDE3MzkwKQorKysgcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDEzICsxOCwx
MiBAQAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlckZpbGVVcGxvYWRDb250cm9sX0gKLSNkZWZp
bmUgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2xfSAorI2lmbmRlZiBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbF9oCisjZGVmaW5lIFJlbmRlckZpbGVVcGxvYWRDb250cm9sX2gKIAotI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCi0KICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNoYXJl
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw2ICs0MCw4IEBACiAgICAgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2woTm9kZSopOwogICAgIH5SZW5kZXJGaWxlVXBsb2FkQ29udHJvbCgp
OwogCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sIjsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
KFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwpAQCAtNTAsOCArNTEsNiBAQAogCiAg
ICAgdm9pZCB2YWx1ZUNoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCI7IH0KLQogcHJv
dGVjdGVkOgogICAgIGludCBtYXhGaWxlbmFtZVdpZHRoKCk7CiAgICAgUmVuZGVyU3R5bGUqIGNy
ZWF0ZUJ1dHRvblN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwpAQCAtNjAsNiAr
NTksNiBAQAogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKIH07CiAKLX0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2xfaApJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuY3BwCShyZXZpc2lvbiAxNzM5MCkKKysr
IHJlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsx
MTAsOSBAQAogICAgIFJlbmRlckZvcm1FbGVtZW50OjpjYWxjTWluTWF4V2lkdGgoKTsKIH0KIAot
dm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKnMpCit2b2lkIFJlbmRl
ckxpbmVFZGl0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVy
Rm9ybUVsZW1lbnQ6OnNldFN0eWxlKHMpOworICAgIFJlbmRlckZvcm1FbGVtZW50OjpzZXRTdHls
ZShuZXdTdHlsZSk7CiAKICAgICBUZXh0RmllbGQqIHcgPSBzdGF0aWNfY2FzdDxUZXh0RmllbGQq
Pih3aWRnZXQoKSk7CiAgICAgdy0+c2V0QWxpZ25tZW50KHRleHRBbGlnbm1lbnQoKSk7CkBAIC0x
OTUsNyArMTk1LDcgQEAKICAgICBpbnQgc3RhcnQgPSBsaW5lRWRpdC0+c2VsZWN0aW9uU3RhcnQo
KTsKICAgICBpZiAoc3RhcnQgPT0gLTEpCiAgICAgICAgIHJldHVybiBsaW5lRWRpdC0+Y3Vyc29y
UG9zaXRpb24oKTsKLSAgICByZXR1cm4gc3RhcnQgKyAoaW50KWxpbmVFZGl0LT5zZWxlY3RlZFRl
eHQoKS5sZW5ndGgoKTsKKyAgICByZXR1cm4gc3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGxpbmVF
ZGl0LT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTGluZUVkaXQ6
OnNldFNlbGVjdGlvblN0YXJ0KGludCBzdGFydCkKSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE3MzkwKQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NzU5LDggKzg3NTksNiBAQAogCQlGNTIzRDJGMzAyREU0
NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKLQkJCQlBQkI1NDE5QzBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJv
eC5jcHAgKi8sCi0JCQkJQUJCNTQxOUQwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RCb3gu
aCAqLywKIAkJCQlBOENGRjA0QjBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNw
cCAqLywKIAkJCQlBOENGRjA0OTBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0Lmgg
Ki8sCiAJCQkJQkNFQTQ4MTMwOTdEOTMwMjAwOTRDOUU0IC8qIGJpZGkuY3BwICovLApAQCAtODgz
OCw2ICs4ODM2LDggQEAKIAkJCQlBOEVBNzNCRDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyTGVn
ZW5kLmggKi8sCiAJCQkJQThFQTczQkUwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckxpbmVFZGl0
LmNwcCAqLywKIAkJCQlBOEVBNzNCMTBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyTGluZUVkaXQu
aCAqLywKKwkJCQlBQkI1NDE5QzBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5jcHAg
Ki8sCisJCQkJQUJCNTQxOUQwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RCb3guaCAqLywK
IAkJCQlBOEVBN0E0ODBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uY3BwICovLAog
CQkJCUE4RUE3QTRDMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oICovLAogCQkJ
CUE4RUE3QTRCMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmNwcCAqLywKQEAg
LTEwNDk4LDcgKzEwNDk4LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2pl
Y3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtu
b3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTA1MTMsNyArMTA1MTIsNiBAQAogCQkJ
cHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICov
OwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7Ci0JCQlzaG91
bGRDaGVja0NvbXBhdGliaWxpdHkgPSAxOwogCQkJdGFyZ2V0cyA9ICgKIAkJCQk5M0YxOThBNTA4
MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5RDlEREJFMDAxMEFG
MkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IENoYW5nZUxvZwkocmV2aXNpb24gMTczOTApCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNTYgQEAKKzIwMDYtMTAtMjcgIFNhbSBXZWluaWcgIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDQxCisg
ICAgICAgIE1vcmUgcmVuZGVyaW5nIGNvZGUgY2xlYW5pbmcKKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBw
bGV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckFwcGxldDo6UmVuZGVyQXBwbGV0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3Nhcnkp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQXJlbmEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckFyZW5hOjpSZW5kZXJBcmVuYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJB
cmVuYTo6YWxsb2NhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXJlbmE6OmZyZWUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcmVuYS5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCUi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6UmVuZGVyQlIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQlI6OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6
OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJSOjpjYXJldE1pbk9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6aW5saW5lQm94KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQlIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Om1heFRvcE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF4
Qm90dG9tTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbml0TWF4TWFy
Z2luVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRIYXNNYXJrdXBU
cnVuY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpCbG9ja1NlbGVjdGlv
bkluZm86OkJsb2NrU2VsZWN0aW9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3Q6OkZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpwYWludE9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQnV0dG9uOjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6
cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OlJlbmRl
ckNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckNvbnRhaW5lcjo6Y2FsY01pbk1heFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpSZW5kZXJD
b3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUm9tYW4pOgorICAgICAgICAoV2ViQ29yZTo6
dG9IZWJyZXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6Y2FsY01pbk1heFdp
ZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVs
ZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVs
ZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZ2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
aWVsZHNldDo6c2V0U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
flJlbmRlckZpbGVVcGxvYWRDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckZpbGVVcGxvYWRDb250cm9sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6cmVuZGVyTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6UmVuZGVy
Rm9yZWlnbk9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0Ojpw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0
OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0OjpyZW5kZXJOYW1lKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRm9ybUVsZW1lbnQ6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcm1F
bGVtZW50OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9ybUVsZW1lbnQ6OnRl
eHRBbGlnbm1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVudC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZTo6ZWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0
OjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpSZW5kZXJIVE1MQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENh
bnZhczo6cmVuZGVyTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpSZW5kZXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OnNldENvbnRlbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
OnNldENhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjppbWFnZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckltYWdlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OmltYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbWFnZTo6ZWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OlJlbmRlcklubGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6On5SZW5kZXJJbmxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW5saW5lOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmFkZENoaWxkVG9GbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2xv
bmVJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdElubGluZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdEZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpj
YWxjTWluTWF4V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpyZXF1aXJl
c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6d2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpsYXlv
dXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdHM6OkNsaXBS
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bmV4dFNpYmxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpbmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lRWRpdDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVk
aXQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lRWRpdDo6c2V0
U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFNl
bGVjdGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0
aW9uUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cmVuZGVyTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpjYW5IYXZlQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFyZW50
T2ZGaXJzdExpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0
ZU1hcmtlckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwb3Np
dGlvbkxpc3RNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnJlbmRlck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6aXNMaXN0TWFya2VyKToK
KwogMjAwNi0xMC0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQmV0aC4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11279</attachid>
            <date>2006-10-29 18:50:21 -0800</date>
            <delta_ts>2006-10-30 09:57:55 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>cleanup4.diff</filename>
            <type>text/plain</type>
            <size>129890</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYwIEBACisyMDA2LTEwLTI5ICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ0MQorICAg
ICAgICBNb3JlIHJlbmRlcmluZyBjb2RlIGNsZWFuaW5nCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckFwcGxl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcHBsZXQ6OlJlbmRlckFwcGxldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckFyZW5hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJBcmVuYTo6UmVuZGVyQXJlbmEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXJl
bmE6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckFyZW5hOjpmcmVlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXJlbmEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OlJlbmRlckJSKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJSOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJSOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJSOjpz
ZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCUjo6Y2FyZXRNaW5PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OmlubGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJSLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjptYXhUb3BNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1heEJv
dHRvbU1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5pdE1heE1hcmdp
blZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNldEhhc01hcmt1cFRydW5jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkJsb2NrU2VsZWN0aW9uSW5mbzo6Qmxv
Y2tTZWxlY3Rpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpCbG9ja1Nl
bGVjdGlvbkluZm86OmJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpCbG9j
a1NlbGVjdGlvbkluZm86OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdDo6RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkNvbXBhY3RJbmZvOjpjbGVhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnJlbW92ZUNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCdXR0b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRv
bjo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnJlbW92ZUxl
ZnRvdmVyQW5vbnltb3VzQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWlu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpSZW5kZXJDb250YWlu
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJDb250YWluZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250
YWluZXI6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6UmVuZGVyQ291bnRlcik6
CisgICAgICAgIChXZWJDb3JlOjp0b1JvbWFuKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSGVicmV3
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNhbGNNaW5NYXhXaWR0aCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OnBh
aW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6OnBh
aW50Qm9yZGVyTWludXNMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmllbGRzZXQ6
OnNldFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6On5SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpjYWxjTWluTWF4V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OnJlbmRlck5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZvcmVpZ25P
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29sdXRlUmVw
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6bGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6cmVuZGVyTmFtZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcm1F
bGVtZW50OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JtRWxlbWVudDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcm1FbGVtZW50Ojp0ZXh0QWxpZ25t
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
cmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWU6OmVsZW1lbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6ZWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckhUTUxDYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnJl
bmRlck5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OnNldFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpz
ZXRDb250ZW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpzZXRDYWNo
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp1
cGRhdGVBbHRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjplbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6UmVuZGVy
SW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6flJlbmRlcklubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNldFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Zsb3cpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpjbG9uZUlubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0
Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbmxpbmU6OnJlcXVpcmVzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5l
Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW5saW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcFJlY3RzOjpDbGlwUmVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om5leHRTaWJsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzZXRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpbmVFZGl0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lRWRp
dDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6
OnNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVFZGl0OjpzZWxl
Y3Rpb25FbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlv
blN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25F
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJhbmdl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnJlbmRlck5hbWUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0SXRlbTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFyZW50T2ZG
aXJzdExpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1h
cmtlckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwb3NpdGlv
bkxpc3RNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnJlbmRlck5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6aXNMaXN0TWFya2VyKToKKwog
MjAwNi0xMC0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSBm
aXggYnVpbGQKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NzY4LDggKzg3NjgsNiBAQAogCQlGNTIzRDJGMzAy
REU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQlBQkI1NDE5QzBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlz
dEJveC5jcHAgKi8sCi0JCQkJQUJCNTQxOUQwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RC
b3guaCAqLywKIAkJCQlBOENGRjA0QjBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0
LmNwcCAqLywKIAkJCQlBOENGRjA0OTBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0
LmggKi8sCiAJCQkJQkNFQTQ4MTMwOTdEOTMwMjAwOTRDOUU0IC8qIGJpZGkuY3BwICovLApAQCAt
ODg0OSw2ICs4ODQ3LDggQEAKIAkJCQlBOEVBNzNCRDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVy
TGVnZW5kLmggKi8sCiAJCQkJQThFQTczQkUwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckxpbmVF
ZGl0LmNwcCAqLywKIAkJCQlBOEVBNzNCMTBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyTGluZUVk
aXQuaCAqLywKKwkJCQlBQkI1NDE5QzBBQ0RERkU0MDAyODIwRUIgLyogUmVuZGVyTGlzdEJveC5j
cHAgKi8sCisJCQkJQUJCNTQxOUQwQUNEREZFNDAwMjgyMEVCIC8qIFJlbmRlckxpc3RCb3guaCAq
LywKIAkJCQlBOEVBN0E0ODBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdEl0ZW0uY3BwICov
LAogCQkJCUE4RUE3QTRDMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oICovLAog
CQkJCUE4RUE3QTRCMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmNwcCAqLywK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIFJlbmRlckFwcGxldDo6UmVuZGVyQXBwbGV0KEhUTUxBcHBsZXRFbGVtZW50KiBhcHBsZXQs
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKQotICAgIDogUmVuZGVyV2lkZ2V0
KGFwcGxldCksIG1fYXJncyhhcmdzKQorICAgIDogUmVuZGVyV2lkZ2V0KGFwcGxldCkKKyAgICAs
IG1fYXJncyhhcmdzKQogewogICAgIHNldElubGluZSh0cnVlKTsKIH0KQEAgLTc0LDEzICs3NSwx
NCBAQCB2b2lkIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgICAgIG1f
d2lkdGggLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBh
ZGRpbmdSaWdodCgpOwogICAgIGludCBoZWlnaHQgPSBzdHlsZSgpLT5oZWlnaHQoKS5pc0ZpeGVk
KCkgPyBzdHlsZSgpLT5oZWlnaHQoKS52YWx1ZSgpIDoKICAgICAgICAgbV9oZWlnaHQgLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgp
OwotICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUo
KS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CiAgICAgICAgICAgICBI
VE1MUGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxk
KTsKICAgICAgICAgICAgIGlmICghcC0+bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBtX2FyZ3Muc2V0KHAtPm5hbWUoKSwgcC0+dmFsdWUoKSk7CiAgICAgICAgIH0KLSAgICAKKyAg
ICB9CisKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIEFTU0VS
VChmcmFtZSk7CiAgICAgc2V0V2lkZ2V0KGZyYW1lLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KElu
dFNpemUod2lkdGgsIGhlaWdodCksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLCBtX2Fy
Z3MpKTsKQEAgLTk5LDQgKzEwMSw0IEBAIHZvaWQgUmVuZGVyQXBwbGV0OjpsYXlvdXQoKQogICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlckFwcGxl
dChIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdz
KTsKICAgICAgICAgdmlydHVhbCB+UmVuZGVyQXBwbGV0KCk7CisKICAgICAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckFwcGxldCI7IH0K
KwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBcHBsZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIGludCBp
bnRyaW5zaWNXaWR0aCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGludCBpbnRyaW5zaWNIZWln
aHQoKSBjb25zdDsKQEAgLTQ3LDYgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2FyZ3M7CiAgICAgfTsKIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJBcHBsZXRfaApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJBcmVuYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAK
ICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAK
ICNkZWZpbmUgUk9VTkRVUCh4LHkpICgoKCh4KSsoKHkpLTEpKS8oeSkpKih5KSkKIApAQCAtNDks
MTQgKzQ5LDE0IEBAIGNvbnN0IGludCBzaWduYXR1cmUgPSAweERCQTAwQUVBOwogY29uc3QgaW50
IHNpZ25hdHVyZURlYWQgPSAweERCQTAwQUVEOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUmVu
ZGVyQXJlbmEgKmFyZW5hOworICAgIFJlbmRlckFyZW5hKiBhcmVuYTsKICAgICBzaXplX3Qgc2l6
ZTsKICAgICBpbnQgc2lnbmF0dXJlOwogfSBSZW5kZXJBcmVuYURlYnVnSGVhZGVyOwogCiAjZW5k
aWYKIAotUmVuZGVyQXJlbmE6OlJlbmRlckFyZW5hKHVuc2lnbmVkIGludCBhcmVuYVNpemUpCitS
ZW5kZXJBcmVuYTo6UmVuZGVyQXJlbmEodW5zaWduZWQgYXJlbmFTaXplKQogewogICAgIC8vIElu
aXRpYWxpemUgdGhlIGFyZW5hIHBvb2wKICAgICBJTklUX0FSRU5BX1BPT0woJm1fcG9vbCwgIlJl
bmRlckFyZW5hIiwgYXJlbmFTaXplKTsKQEAgLTc2LDggKzc2LDggQEAgdm9pZCogUmVuZGVyQXJl
bmE6OmFsbG9jYXRlKHNpemVfdCBzaXplKQogI2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2Ugc3Rh
bmRhcmQgbWFsbG9jIHNvIHRoYXQgbWVtb3J5IGRlYnVnZ2luZyB0b29scyB3b3JrLgogICAgIGFz
c2VydCh0aGlzKTsKLSAgICB2b2lkICpibG9jayA9IDo6bWFsbG9jKHNpemVvZihSZW5kZXJBcmVu
YURlYnVnSGVhZGVyKSArIHNpemUpOwotICAgIFJlbmRlckFyZW5hRGVidWdIZWFkZXIgKmhlYWRl
ciA9IChSZW5kZXJBcmVuYURlYnVnSGVhZGVyICopYmxvY2s7CisgICAgdm9pZCogYmxvY2sgPSA6
Om1hbGxvYyhzaXplb2YoUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlcikgKyBzaXplKTsKKyAgICBSZW5k
ZXJBcmVuYURlYnVnSGVhZGVyKiBoZWFkZXIgPSAoUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciopYmxv
Y2s7CiAgICAgaGVhZGVyLT5hcmVuYSA9IHRoaXM7CiAgICAgaGVhZGVyLT5zaXplID0gc2l6ZTsK
ICAgICBoZWFkZXItPnNpZ25hdHVyZSA9IHNpZ25hdHVyZTsKQEAgLTkwLDggKzkwLDggQEAgdm9p
ZCogUmVuZGVyQXJlbmE6OmFsbG9jYXRlKHNpemVfdCBzaXplKQogCiAgICAgLy8gQ2hlY2sgcmVj
eWNsZXJzIGZpcnN0CiAgICAgaWYgKHNpemUgPCBnTWF4UmVjeWNsZWRTaXplKSB7Ci0gICAgICAg
IGNvbnN0IGludCAgIGluZGV4ID0gc2l6ZSA+PiAyOwotICAgIAorICAgICAgICBjb25zdCBpbnQg
aW5kZXggPSBzaXplID4+IDI7CisKICAgICAgICAgcmVzdWx0ID0gbV9yZWN5Y2xlcnNbaW5kZXhd
OwogICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdG8g
dGhlIG5leHQgb2JqZWN0CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQqIFJlbmRlckFyZW5hOjphbGxv
Y2F0ZShzaXplX3Qgc2l6ZSkKICAgICAgICAgICAgIG1fcmVjeWNsZXJzW2luZGV4XSA9IG5leHQ7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAv
LyBBbGxvY2F0ZSBhIG5ldyBjaHVuayBmcm9tIHRoZSBhcmVuYQogICAgICAgICBBUkVOQV9BTExP
Q0FURShyZXN1bHQsICZtX3Bvb2wsIHNpemUpOwpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgUmVu
ZGVyQXJlbmE6OmZyZWUoc2l6ZV90IHNpemUsIHZvaWQKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAg
Ly8gVXNlIHN0YW5kYXJkIGZyZWUgc28gdGhhdCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzIHdvcmsu
Ci0gICAgUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciAqaGVhZGVyID0gKFJlbmRlckFyZW5hRGVidWdI
ZWFkZXIgKilwdHIgLSAxOworICAgIFJlbmRlckFyZW5hRGVidWdIZWFkZXIqIGhlYWRlciA9IChS
ZW5kZXJBcmVuYURlYnVnSGVhZGVyKilwdHIgLSAxOwogICAgIGFzc2VydChoZWFkZXItPnNpZ25h
dHVyZSA9PSBzaWduYXR1cmUpOwogICAgIGFzc2VydChoZWFkZXItPnNpemUgPT0gc2l6ZSk7CiAg
ICAgYXNzZXJ0KGhlYWRlci0+YXJlbmEgPT0gdGhpcyk7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQCB2
b2lkIFJlbmRlckFyZW5hOjpmcmVlKHNpemVfdCBzaXplLCB2b2lkCiAKICAgICAvLyBTZWUgaWYg
aXQncyBhIHNpemUgdGhhdCB3ZSByZWN5Y2xlCiAgICAgaWYgKHNpemUgPCBnTWF4UmVjeWNsZWRT
aXplKSB7Ci0gICAgICAgIGNvbnN0IGludCAgIGluZGV4ID0gc2l6ZSA+PiAyOwotICAgICAgICB2
b2lkKiAgICAgICBjdXJyZW50VG9wID0gbV9yZWN5Y2xlcnNbaW5kZXhdOworICAgICAgICBjb25z
dCBpbnQgaW5kZXggPSBzaXplID4+IDI7CisgICAgICAgIHZvaWQqIGN1cnJlbnRUb3AgPSBtX3Jl
Y3ljbGVyc1tpbmRleF07CiAgICAgICAgIG1fcmVjeWNsZXJzW2luZGV4XSA9IHB0cjsKICAgICAg
ICAgKigodm9pZCoqKXB0cikgPSBjdXJyZW50VG9wOwogICAgIH0KICNlbmRpZgogfQogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVu
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmgJKHJldmlz
aW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXJlbmEuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsOCBAQAogICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55
IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKi8KIAotI2lmbmRlZiBSRU5ERVJB
UkVOQV9ICi0jZGVmaW5lIFJFTkRFUkFSRU5BX0gKKyNpZm5kZWYgUmVuZGVyQXJlbmFfaAorI2Rl
ZmluZSBSZW5kZXJBcmVuYV9oCiAKICNpbmNsdWRlICJBcmVuYS5oIgogCkBAIC00MywyMiArNDMs
MjIgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBnTWF4UmVjeWNsZWRTaXplID0gNAogCiBjbGFzcyBS
ZW5kZXJBcmVuYSB7CiBwdWJsaWM6Ci0gICBSZW5kZXJBcmVuYSh1bnNpZ25lZCBpbnQgYXJlbmFT
aXplID0gNDA5Nik7CisgICAgUmVuZGVyQXJlbmEodW5zaWduZWQgYXJlbmFTaXplID0gNDA5Nik7
CiAgICAgflJlbmRlckFyZW5hKCk7CiAKLSAgLy8gTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25z
Ci0gIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplKTsKLSAgdm9pZCAgZnJlZShzaXplX3Qgc2l6
ZSwgdm9pZCogcHRyKTsKKyAgICAvLyBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQgZnJlZShzaXplX3QsIHZvaWQqKTsKIAog
cHJpdmF0ZToKLSAgLy8gVW5kZXJseWluZyBhcmVuYSBwb29sCi0gIEFyZW5hUG9vbCBtX3Bvb2w7
CisgICAgLy8gVW5kZXJseWluZyBhcmVuYSBwb29sCisgICAgQXJlbmFQb29sIG1fcG9vbDsKIAot
ICAvLyBUaGUgcmVjeWNsZXIgYXJyYXkgaXMgc3BhcnNlIHdpdGggdGhlIGluZGljZXMgYmVpbmcg
bXVsdGlwbGVzIG9mIDQsCi0gIC8vIGkuZS4sIDAsIDQsIDgsIDEyLCAxNiwgMjAsIC4uLgotICB2
b2lkKiAgICAgICBtX3JlY3ljbGVyc1tnTWF4UmVjeWNsZWRTaXplID4+IDJdOworICAgIC8vIFRo
ZSByZWN5Y2xlciBhcnJheSBpcyBzcGFyc2Ugd2l0aCB0aGUgaW5kaWNlcyBiZWluZyBtdWx0aXBs
ZXMgb2YgNCwKKyAgICAvLyBpLmUuLCAwLCA0LCA4LCAxMiwgMTYsIDIwLCAuLi4KKyAgICB2b2lk
KiBtX3JlY3ljbGVyc1tnTWF4UmVjeWNsZWRTaXplID4+IDJdOwogfTsKIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJBcmVuYV9oCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQlIuY3BwCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJSLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBSZW5kZXJCUjo6UmVuZGVyQlIoTm9kZSogbm9kZSkKLSAgICA6IFJlbmRl
clRleHQobm9kZSwgbmV3IFN0cmluZ0ltcGwoIlxuIikpLCBtX2xpbmVIZWlnaHQoLTEpCisgICAg
OiBSZW5kZXJUZXh0KG5vZGUsIG5ldyBTdHJpbmdJbXBsKCJcbiIpKQorICAgICwgbV9saW5lSGVp
Z2h0KC0xKQogewogfQogCkBAIC00OCw3ICs0OSw3IEBAIElubGluZUJveCogUmVuZGVyQlI6OmNy
ZWF0ZUlubGluZUJveChib28KICAgICByZXR1cm4gYm94OwogfQogCi1zaG9ydCBSZW5kZXJCUjo6
YmFzZWxpbmVQb3NpdGlvbiggYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29u
c3QKK3Nob3J0IFJlbmRlckJSOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29s
IGlzUm9vdExpbmVCb3gpIGNvbnN0CiB7CiAgICAgaWYgKGZpcnN0VGV4dEJveCgpICYmICFmaXJz
dFRleHRCb3goKS0+aXNUZXh0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzUsMjEgKzc2LDIx
IEBAIHNob3J0IFJlbmRlckJSOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW4KICAgICAgICAgICAg
IHJldHVybiBsaC5jYWxjTWluVmFsdWUocy0+Zm9udFNpemUoKSk7CiAgICAgICAgIHJldHVybiBs
aC52YWx1ZSgpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChtX2xpbmVIZWlnaHQgPT0gLTEpCiAg
ICAgICAgIG1fbGluZUhlaWdodCA9IFJlbmRlck9iamVjdDo6bGluZUhlaWdodChmYWxzZSk7CiAg
ICAgcmV0dXJuIG1fbGluZUhlaWdodDsKIH0KIAotdm9pZCBSZW5kZXJCUjo6c2V0U3R5bGUoUmVu
ZGVyU3R5bGUqIF9zdHlsZSkKK3ZvaWQgUmVuZGVyQlI6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJUZXh0OjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRl
clRleHQ6OnNldFN0eWxlKG5ld1N0eWxlKTsKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKIH0KIAog
aW50IFJlbmRlckJSOjpjYXJldE1pbk9mZnNldCgpIGNvbnN0IAogeyAKLSAgICByZXR1cm4gMDsg
CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBSZW5kZXJCUjo6Y2FyZXRNYXhPZmZzZXQoKSBjb25z
dCAKQEAgLTEwMiwxNCArMTAzLDE0IEBAIHVuc2lnbmVkIFJlbmRlckJSOjpjYXJldE1heFJlbmRl
cmVkT2Zmc2UKICAgICByZXR1cm4gMTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJSOjpw
b3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCBfeCwgaW50IF95KQorVmlzaWJsZVBvc2l0aW9uIFJl
bmRlckJSOjpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCAvKngqLywgaW50IC8qeSovKQogewog
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIH0K
IAotSW5saW5lQm94ICpSZW5kZXJCUjo6aW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBh
ZmZpbml0eSkKK0lubGluZUJveCogUmVuZGVyQlI6OmlubGluZUJveChpbnQgLypvZmZzZXQqLywg
RUFmZmluaXR5IC8qYWZmaW5pdHkqLykKIHsKICAgICByZXR1cm4gZmlyc3RUZXh0Qm94KCk7CiB9
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJSLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuaAkocmV2
aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw4ICsxOSw5IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
CiAgKi8KLSNpZm5kZWYgUkVOREVSX0JSX0gKLSNkZWZpbmUgUkVOREVSX0JSX0gKKworI2lmbmRl
ZiBSZW5kZXJCUl9oCisjZGVmaW5lIFJlbmRlckJSX2gKIAogI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKIApAQCAtNTYsMTYgKzU3LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjYXJldE1p
bk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7Ci0g
ICAgCisKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVz
KGludCB4LCBpbnQgeSk7CiAKLSAgICB2aXJ0dWFsIElubGluZUJveCogaW5saW5lQm94KGludCBv
ZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQU1RSRUFNKTsKLSAgICAKKyAgICB2aXJ0dWFs
IElubGluZUJveCogaW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSA9IFVQU1RSRUFNKTsK
KwogcHJpdmF0ZToKICAgICBtdXRhYmxlIHNob3J0IG1fbGluZUhlaWdodDsKLQogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUkVOREVSX0JSX0gKKyNlbmRpZiAvLyBS
ZW5kZXJCUl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNzQz
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTQgKzI4LDE0IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMzY4MCw0ICszNjgwLDMgQEAgdm9pZCBSZW5kZXJC
bG9jazo6ZHVtcChUZXh0U3RyZWFtICpzdHJlYQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxNzQzNCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDgg
KzIxLDggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYg
UmVuZGVyQmxvY2tfSAotI2RlZmluZSBSZW5kZXJCbG9ja19ICisjaWZuZGVmIFJlbmRlckJsb2Nr
X2gKKyNkZWZpbmUgUmVuZGVyQmxvY2tfaAogCiAjaW5jbHVkZSAiR2FwUmVjdHMuaCIKICNpbmNs
dWRlICJSZW5kZXJGbG93LmgiCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgdHdvIGZ1
bmN0aW9ucyBhcmUgb3ZlcnJpZGRlbiBmb3IgaW5saW5lLWJsb2NrLgotICAgIHZpcnR1YWwgc2hv
cnQgbGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxzZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5l
Qm94PWZhbHNlKSBjb25zdDsKLSAgICAKKyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9v
bCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGlu
ZUJveCA9IGZhbHNlKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Jsb2NrRmxvdygpIGNv
bnN0IHsgcmV0dXJuICghaXNJbmxpbmUoKSB8fCBpc1JlcGxhY2VkKCkpICYmICFpc1RhYmxlKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVGbG93KCkgY29uc3QgeyByZXR1cm4gaXNJbmxp
bmUoKSAmJiAhaXNSZXBsYWNlZCgpOyB9CiAgICAgdmlydHVhbCBib29sIGlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiBpc1JlcGxhY2VkKCk7
IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlbklubGluZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW5JbmxpbmU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5Jbmxp
bmUoYm9vbCBiKSB7IG1fY2hpbGRyZW5JbmxpbmUgPSBiOyB9CiAgICAgdm9pZCBtYWtlQ2hpbGRy
ZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNlcnRpb25Qb2ludCA9IDApOwpAQCAtNjEsMzIg
KzYxLDIzIEBAIHB1YmxpYzoKICAgICAvLyBUaGUgaGVpZ2h0IChhbmQgd2lkdGgpIG9mIGEgYmxv
Y2sgd2hlbiB5b3UgaW5jbHVkZSBvdmVyZmxvdyBzcGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbQog
ICAgIC8vIG9mIHRoZSBibG9jayAoZS5nLiwgYSA8ZGl2IHN0eWxlPSJoZWlnaHQ6MjVweCI+IHRo
YXQgaGFzIGEgMTAwcHggdGFsbCBpbWFnZSBpbnNpZGUKICAgICAvLyBpdCB3b3VsZCBoYXZlIGFu
IG92ZXJmbG93IGhlaWdodCBvZiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIDEwMHB4Lgot
ICAgIHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yPXRydWUp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93V2lkdGgoYm9vbCBpbmNsdWRlSW50ZXJp
b3I9dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dMZWZ0KGJvb2wgaW5jbHVk
ZUludGVyaW9yPXRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG92ZXJmbG93VG9wKGJvb2wg
aW5jbHVkZUludGVyaW9yPXRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxv
d1JlY3QoYm9vbCBpbmNsdWRlSW50ZXJpb3I9dHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
b3ZlcmZsb3dIZWlnaHQoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBvdmVyZmxvd1dpZHRoKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dMZWZ0KGJvb2wgaW5jbHVkZUludGVyaW9yID0g
dHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dUb3AoYm9vbCBpbmNsdWRlSW50
ZXJpb3IgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
b2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE92
ZXJmbG93SGVpZ2h0KGludCBoKSB7IG1fb3ZlcmZsb3dIZWlnaHQgPSBoOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldE92ZXJmbG93V2lkdGgoaW50IHcpIHsgbV9vdmVyZmxvd1dpZHRoID0gdzsgfQot
ICAgIAorCiAgICAgdmlydHVhbCBib29sIGlzU2VsZkNvbGxhcHNpbmdCbG9jaygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc1RvcE1hcmdpblF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV90b3BN
YXJnaW5RdWlyazsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JvdHRvbU1hcmdpblF1aXJrKCkgY29u
c3QgeyByZXR1cm4gbV9ib3R0b21NYXJnaW5RdWlyazsgfQogCi0gICAgdmlydHVhbCBpbnQgbWF4
VG9wTWFyZ2luKGJvb2wgcG9zaXRpdmUpIGNvbnN0IHsKLSAgICAgICAgaWYgKHBvc2l0aXZlKQot
ICAgICAgICAgICAgcmV0dXJuIG1fbWF4VG9wUG9zTWFyZ2luOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gbV9tYXhUb3BOZWdNYXJnaW47Ci0gICAgfQotICAgIHZpcnR1YWwgaW50
IG1heEJvdHRvbU1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7Ci0gICAgICAgIGlmIChwb3Np
dGl2ZSkKLSAgICAgICAgICAgIHJldHVybiBtX21heEJvdHRvbVBvc01hcmdpbjsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuIG1fbWF4Qm90dG9tTmVnTWFyZ2luOwotICAgIH0KKyAg
ICB2aXJ0dWFsIGludCBtYXhUb3BNYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeyByZXR1cm4g
cG9zaXRpdmUgPyBtX21heFRvcFBvc01hcmdpbiA6IG1fbWF4VG9wTmVnTWFyZ2luOyB9CisgICAg
dmlydHVhbCBpbnQgbWF4Qm90dG9tTWFyZ2luKGJvb2wgcG9zaXRpdmUpIGNvbnN0IHsgcmV0dXJu
IHBvc2l0aXZlID8gbV9tYXhCb3R0b21Qb3NNYXJnaW4gOiBtX21heEJvdHRvbU5lZ01hcmdpbjsg
fQogCi0gICAgdm9pZCBpbml0TWF4TWFyZ2luVmFsdWVzKCkgeworICAgIHZvaWQgaW5pdE1heE1h
cmdpblZhbHVlcygpCisgICAgewogICAgICAgICBpZiAobV9tYXJnaW5Ub3AgPj0gMCkgewogICAg
ICAgICAgICAgbV9tYXhUb3BQb3NNYXJnaW4gPSBtX21hcmdpblRvcDsKICAgICAgICAgICAgIG1f
bWF4VG9wTmVnTWFyZ2luID0gMDsKQEAgLTEyNiw3ICsxMTcsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBDYWxsZWQgdG8gbGF5IG91dCB0aGUgbGVnZW5kIGZvciBhIGZpZWxkc2V0LgogICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0KiBsYXlvdXRMZWdlbmQoYm9vbCByZWxheW91dENoaWxkcmVuKSB7IHJl
dHVybiAwOyB9OwotICAgIAorCiAgICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmb2xs
b3dpbmcgZnVuY3Rpb25zIGlzIGluIGJpZGkuY3BwCiAgICAgdm9pZCBiaWRpUmVvcmRlckxpbmUo
Y29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yJiBlbmQsIEJpZGlT
dGF0ZSYgYmlkaSk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihi
b29sIGZ1bGxMYXlvdXQsIEJpZGlJdGVyYXRvciYgc3RhcnQsIEJpZGlTdGF0ZSYgYmlkaSk7CkBA
IC0xMzYsOCArMTI3LDggQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3Qg
QmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzLCBCaWRpQ29udGV4
dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRvciYg
ZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLCBCaWRpQ29udGV4
dCogZW5kTGluZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94
KiYgZW5kTGluZSwgaW50JiBlbmRZUG9zLCBpbnQmIHJlcGFpbnRCb3R0b20sIGludCYgcmVwYWlu
dFRvcCk7Ci0gICAgaW50IHNraXBXaGl0ZXNwYWNlKEJpZGlJdGVyYXRvciYgLCBCaWRpU3RhdGUg
Jik7Ci0gICAgQmlkaUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKEJpZGlJdGVyYXRvciYgc3Rh
cnQsIEJpZGlTdGF0ZSAmaW5mbyApOworICAgIGludCBza2lwV2hpdGVzcGFjZShCaWRpSXRlcmF0
b3ImLCBCaWRpU3RhdGUmKTsKKyAgICBCaWRpSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoQmlk
aUl0ZXJhdG9yJiBzdGFydCwgQmlkaVN0YXRlJiBpbmZvKTsKICAgICBSb290SW5saW5lQm94KiBj
b25zdHJ1Y3RMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0IEJpZGlJdGVyYXRv
ciYgZW5kKTsKICAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0
Kik7CiAgICAgaW50IHRhYldpZHRoKGJvb2wgaXNXaGl0ZXNwYWNlUHJlKTsKQEAgLTE0NywzMSAr
MTM4LDMxIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAg
ICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7CiAgICAgLy8gZW5kIGJpZGkuY3Bw
IGZ1bmN0aW9ucworCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQg
dHksIGJvb2wgcGFpbnRTZWxlY3Rpb24gPSBmYWxzZSk7CisgICAgdm9pZCBwYWludENoaWxkcmVu
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3hl
cyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9pZCBwYWludFNlbGVjdGlvbihQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5m
byYsIENhcmV0VHlwZSk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYg
aSwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludElu
Zm8mIGksIGludCB0eCwgaW50IHR5KTsKLSAgICB2b2lkIHBhaW50RmxvYXRzKFBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSwgYm9vbCBwYWludFNlbGVjdGlvbiA9IGZhbHNlKTsKLSAgICB2
b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2
b2lkIHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpOwot
ICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsK
LSAgICB2b2lkIHBhaW50Q2FyZXQoUGFpbnRJbmZvJiBpLCBDYXJldFR5cGUpOwotICAgIAotICAg
IHZvaWQgaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyT2JqZWN0ICpvKTsKLSAgICB2b2lkIHJl
bW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlck9iamVjdCAqbyk7CisgICAgdm9pZCBpbnNlcnRGbG9h
dGluZ09iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0
KFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgc2V0UGFpbnRzRmxvYXRpbmdPYmplY3QoUmVuZGVy
T2JqZWN0KiwgYm9vbCk7CiAKICAgICAvLyBjYWxsZWQgZnJvbSBsaW5lV2lkdGgsIHRvIHBvc2l0
aW9uIHRoZSBmbG9hdHMgYWRkZWQgaW4gdGhlIGxhc3QgbGluZS4KICAgICB2b2lkIHBvc2l0aW9u
TmV3RmxvYXRzKCk7CiAgICAgdm9pZCBjbGVhckZsb2F0cygpOwotICAgIGludCBnZXRDbGVhckRl
bHRhKFJlbmRlck9iamVjdCAqY2hpbGQpOworICAgIGludCBnZXRDbGVhckRlbHRhKFJlbmRlck9i
amVjdCogY2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxv
YXRzRm9yTGF5b3V0KFJlbmRlck9iamVjdCogZmxvYXRUb1JlbW92ZSA9IDApOwogICAgIHZvaWQg
bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CiAKICAgICAvLyBGSVhNRTogY29udGFp
bnNGbG9hdHMoKSBzaG91bGQgbm90IHJldHVybiB0cnVlIGlmIHRoZSBmbG9hdGluZyBvYmplY3Rz
IGxpc3QKICAgICAvLyBpcyBlbXB0eS4gSG93ZXZlciwgbGF5b3V0SW5saW5lQ2hpbGRyZW4oKSBy
ZWxpZXMgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3IuCiAgICAgLy8gaHR0cDovL2J1Z3ppbGxhLm9w
ZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk1I2MzCi0gICAgdmlydHVhbCBib29sIGNv
bnRhaW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMhPTA7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqIG8pOworICAgIHZpcnR1YWwgYm9v
bCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzOyB9CisgICAgdmly
dHVhbCBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaGFzT3ZlcmhhbmdpbmdGbG9hdHMoKSB7IHJldHVybiBmbG9hdEJvdHRvbSgpID4gbV9oZWln
aHQ7IH0KICAgICB2b2lkIGFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50
IHhvZmZzZXQsIGludCB5b2Zmc2V0KTsKQEAgLTE4NCwyMSArMTc1LDE5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEludFJlY3QgZmxvYXRSZWN0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBs
aW5lV2lkdGgoaW50IHkpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJv
b2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVy
Zmxvd0ludGVyaW9yPXRydWUsIGJvb2wgaW5jbHVkZVNlbGY9dHJ1ZSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgbGVmdG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yPXRy
dWUsIGJvb2wgaW5jbHVkZVNlbGY9dHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbG93ZXN0
UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVk
ZVNlbGYgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbihi
b29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZiA9IHRy
dWUpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRl
T3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsK
IAogICAgIGludCByaWdodE9mZnNldCgpIGNvbnN0OwotICAgIGludCByaWdodFJlbE9mZnNldChp
bnQgeSwgaW50IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CisgICAg
aW50IHJpZ2h0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0
SW5kZW50ID0gdHJ1ZSwgaW50KiBoZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKICAgICBpbnQg
cmlnaHRPZmZzZXQoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0UmVsT2Zmc2V0KHksIHJpZ2h0
T2Zmc2V0KCksIHRydWUpOyB9CiAKICAgICBpbnQgbGVmdE9mZnNldCgpIGNvbnN0OwotICAgIGlu
dCBsZWZ0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5k
ZW50ID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodFJlbWFpbmluZyA9
IDApIGNvbnN0OworICAgIGludCBsZWZ0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQs
IGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBoZWlnaHRSZW1haW5pbmcgPSAwKSBj
b25zdDsKICAgICBpbnQgbGVmdE9mZnNldChpbnQgeSkgY29uc3QgeyByZXR1cm4gbGVmdFJlbE9m
ZnNldCh5LCBsZWZ0T2Zmc2V0KCksIHRydWUpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50SW5TY3JvbGxiYXIoSGl0VGVzdFJlc3VsdCYs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCkBAIC0yMTgsMTAgKzIwNywxMCBAQCBw
dWJsaWM6CiAgICAgLy8gY2hpbGRyZW4uCiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RM
aW5lQmxvY2soKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsK
LSAgICAKKwogICAgIGJvb2wgaW5Sb290QmxvY2tDb250ZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lk
IHNldEhhc01hcmt1cFRydW5jYXRpb24oYm9vbCBiPXRydWUpIHsgbV9oYXNNYXJrdXBUcnVuY2F0
aW9uID0gYjsgfQorICAgIHZvaWQgc2V0SGFzTWFya3VwVHJ1bmNhdGlvbihib29sIGIgPSB0cnVl
KSB7IG1faGFzTWFya3VwVHJ1bmNhdGlvbiA9IGI7IH0KICAgICBib29sIGhhc01hcmt1cFRydW5j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc01hcmt1cFRydW5jYXRpb247IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25TdGF0ZSAhPSBTZWxlY3Rpb25Ob25lOyB9CkBAIC0yMzMsNDYgKzIyMiw1NCBAQCBwdWJsaWM6
CiAgICAgICAgIEdhcFJlY3RzIG1fcmVjdHM7CiAgICAgICAgIFNlbGVjdGlvblN0YXRlIG1fc3Rh
dGU7CiAKLSAgICAgICAgQmxvY2tTZWxlY3Rpb25JbmZvKCkgeyBtX2Jsb2NrID0gMDsgbV9zdGF0
ZSA9IFNlbGVjdGlvbk5vbmU7IH0KLSAgICAgICAgQmxvY2tTZWxlY3Rpb25JbmZvKFJlbmRlckJs
b2NrKiBiKSB7IAotICAgICAgICAgICAgbV9ibG9jayA9IGI7Ci0gICAgICAgICAgICBtX3N0YXRl
ID0gbV9ibG9jay0+c2VsZWN0aW9uU3RhdGUoKTsKLSAgICAgICAgICAgIG1fcmVjdHMgPSBtX2Js
b2NrLT5zZWxlY3Rpb25HYXBSZWN0cygpOworICAgICAgICBCbG9ja1NlbGVjdGlvbkluZm8oKQor
ICAgICAgICAgICAgOiBtX2Jsb2NrKDApCisgICAgICAgICAgICAsIG1fc3RhdGUoU2VsZWN0aW9u
Tm9uZSkKKyAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIEJsb2NrU2Vs
ZWN0aW9uSW5mbyhSZW5kZXJCbG9jayogYikKKyAgICAgICAgICAgIDogbV9ibG9jayhiKQorICAg
ICAgICAgICAgLCBtX3JlY3RzKGItPnNlbGVjdGlvbkdhcFJlY3RzKCkpCisgICAgICAgICAgICAs
IG1fc3RhdGUoYi0+c2VsZWN0aW9uU3RhdGUoKSkKKyAgICAgICAgeyAKKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlckJsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAg
ICAgICAgR2FwUmVjdHMgcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAgICAg
IFNlbGVjdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgICAg
ICBSZW5kZXJCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgfTsK
LSAgICAKKwogICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCkgeyByZXR1cm4gc2Vs
ZWN0aW9uR2FwUmVjdHMoKTsgfQogICAgIEdhcFJlY3RzIHNlbGVjdGlvbkdhcFJlY3RzKCk7CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpIGNvbnN0OwogICAgIGJv
b2wgaXNTZWxlY3Rpb25Sb290KCkgY29uc3Q7Ci0gICAgR2FwUmVjdHMgZmlsbFNlbGVjdGlvbkdh
cHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4
LCBpbnQgdHksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwg
aW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50SW5mbyogaSA9IDApOwor
ICAgIEdhcFJlY3RzIGZpbGxTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGlu
dCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQs
IGNvbnN0IFBhaW50SW5mbyogPSAwKTsKICAgICBHYXBSZWN0cyBmaWxsSW5saW5lU2VsZWN0aW9u
R2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQg
dHgsIGludCB0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxh
c3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25zdCBQYWludEluZm8qIGkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50
JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50SW5mbyopOwogICAgIEdhcFJl
Y3RzIGZpbGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJs
b2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0
LCBjb25zdCBQYWludEluZm8qIGkpOwotICAgIEludFJlY3QgZmlsbFZlcnRpY2FsU2VsZWN0aW9u
R2FwKGludCBsYXN0VG9wLCBpbnQgbGFzdExlZnQsIGludCBsYXN0UmlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBib3R0b21ZLCBSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBjb25zdCBQYWludEluZm8qIGkpOwotICAgIElu
dFJlY3QgZmlsbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4UG9z
LCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2Nr
WCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogaSk7Ci0gICAg
SW50UmVjdCBmaWxsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4
UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJs
b2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyogaSk7Ci0g
ICAgSW50UmVjdCBmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNlbE9i
aiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFBhaW50
SW5mbyogaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RU
b3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKKyAg
ICBJbnRSZWN0IGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChpbnQgbGFzdFRvcCwgaW50IGxhc3RM
ZWZ0LCBpbnQgbGFzdFJpZ2h0LCBpbnQgYm90dG9tWSwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tYLCBpbnQgYmxv
Y2tZLCBjb25zdCBQYWludEluZm8qKTsKKyAgICBJbnRSZWN0IGZpbGxMZWZ0U2VsZWN0aW9uR2Fw
KFJlbmRlck9iamVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJl
bmRlckJsb2NrKiByb290QmxvY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyop
OworICAgIEludFJlY3QgZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlck9iamVjdCogc2VsT2Jq
LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRlckJsb2NrKiByb290QmxvY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrWCwgaW50IGJsb2Nr
WSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5mbyopOworICAgIEludFJlY3QgZmlsbEhv
cml6b250YWxTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4UG9zLCBpbnQg
eVBvcywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKIAotICAgIHZv
aWQgZ2V0SG9yaXpvbnRhbFNlbGVjdGlvbkdhcEluZm8oU2VsZWN0aW9uU3RhdGUgc3RhdGUsIGJv
b2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKTsKKyAgICB2b2lkIGdldEhvcml6b250YWxTZWxl
Y3Rpb25HYXBJbmZvKFNlbGVjdGlvblN0YXRlLCBib29sJiBsZWZ0R2FwLCBib29sJiByaWdodEdh
cCk7CiAgICAgaW50IGxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywg
aW50IHkpOwogICAgIGludCByaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgeSk7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4
dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtKiwgRGVwcmVjYXRlZFN0cmluZyBpbmQgPSAiIikg
Y29uc3Q7CiAjZW5kaWYKIAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb21wdXRpbmcgbGlu
ZSBjb3VudHMgYW5kIGhlaWdodHMgZm9yIGxpbmUgY291bnRzLgotICAgIFJvb3RJbmxpbmVCb3gq
IGxpbmVBdEluZGV4KGludCBpKTsKKyAgICBSb290SW5saW5lQm94KiBsaW5lQXRJbmRleChpbnQp
OwogICAgIGludCBsaW5lQ291bnQoKTsKLSAgICBpbnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCBs
KTsKKyAgICBpbnQgaGVpZ2h0Rm9yTGluZUNvdW50KGludCk7CiAgICAgdm9pZCBjbGVhclRydW5j
YXRpb24oKTsKIAogcHJvdGVjdGVkOgpAQCAtMjgwLDggKzI3Nyw4IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBQ
b3NpdGlvbiBwb3NpdGlvbkZvckJveChJbmxpbmVCb3ggKmJveCwgYm9vbCBzdGFydD10cnVlKSBj
b25zdDsKLSAgICBQb3NpdGlvbiBwb3NpdGlvbkZvclJlbmRlcmVyKFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIsIGJvb2wgc3RhcnQ9dHJ1ZSkgY29uc3Q7CisgICAgUG9zaXRpb24gcG9zaXRpb25Gb3JC
b3goSW5saW5lQm94KiwgYm9vbCBzdGFydCA9IHRydWUpIGNvbnN0OworICAgIFBvc2l0aW9uIHBv
c2l0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzdGFydCA9IHRydWUpIGNvbnN0
OwogICAgICAgICAKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgewpAQCAt
MjkwLDE2ICsyODcsMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgRmxvYXRSaWdodAogICAg
ICAgICB9OwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSkgewotICAgICAgICAg
ICAgbm9kZSA9IDA7Ci0gICAgICAgICAgICBzdGFydFkgPSAwOwotICAgICAgICAgICAgZW5kWSA9
IDA7Ci0gICAgICAgICAgICBtX3R5cGUgPSB0eXBlOwotICAgICAgICAgICAgbGVmdCA9IDA7Ci0g
ICAgICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgICAgICBub1BhaW50ID0gZmFsc2U7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSkKKyAgICAgICAgICAgIDogbm9kZSgwKQorICAg
ICAgICAgICAgLCBzdGFydFkoMCkKKyAgICAgICAgICAgICwgZW5kWSgwKQorICAgICAgICAgICAg
LCBsZWZ0KDApCisgICAgICAgICAgICAsIHdpZHRoKDApCisgICAgICAgICAgICAsIG1fdHlwZSh0
eXBlKQorICAgICAgICAgICAgLCBub1BhaW50KGZhbHNlKQorICAgICAgICB7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlw
ZT4obV90eXBlKTsgfQogCiAgICAgICAgIFJlbmRlck9iamVjdCogbm9kZTsKQEAgLTMxMCwxMiAr
MzA4LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgdW5zaWduZWQgbV90eXBlIDogMTsgLy8gVHlw
ZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQogICAgICAgICBib29sIG5vUGFpbnQgOiAxOwogICAg
IH07Ci0gICAgCisKICAgICAvLyBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0
cnVjdHMgYXJlIHVzZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KICAgICBjbGFzcyBDb21wYWN0
SW5mbyB7CiAgICAgICAgIC8vIEEgY29tcGFjdCBjaGlsZCB0aGF0IG5lZWRzIHRvIGJlIGNvbGxh
cHNlZCBpbnRvIHRoZSBtYXJnaW4gb2YgdGhlIGZvbGxvd2luZyBibG9jay4KICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBtX2NvbXBhY3Q7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRoZSBibG9jayB3
aXRoIHRoZSBvcGVuIG1hcmdpbiB0aGF0IHRoZSBjb21wYWN0IGNoaWxkIGlzIGdvaW5nIHRvIHBs
YWNlIGl0c2VsZiB3aXRoaW4uCiAgICAgICAgIFJlbmRlck9iamVjdCogbV9ibG9jazsKIApAQCAt
MzIzLDEwICszMjEsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBSZW5kZXJPYmplY3QqIGNvbXBh
Y3QoKSBjb25zdCB7IHJldHVybiBtX2NvbXBhY3Q7IH0KICAgICAgICAgUmVuZGVyT2JqZWN0KiBi
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICAgICAgYm9vbCBtYXRjaGVzKFJl
bmRlck9iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGFjdCAmJiBtX2Jsb2NrID09
IGNoaWxkOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNsZWFyKCkgeyBzZXQoMCwgMCk7ICB9
CisKKyAgICAgICAgdm9pZCBjbGVhcigpIHsgc2V0KDAsIDApOyB9CiAgICAgICAgIHZvaWQgc2V0
KFJlbmRlck9iamVjdCogYywgUmVuZGVyT2JqZWN0KiBiKSB7IG1fY29tcGFjdCA9IGM7IG1fYmxv
Y2sgPSBiOyB9Ci0gICAgICAgIAorCiAgICAgICAgIENvbXBhY3RJbmZvKCkgeyBjbGVhcigpOyB9
CiAgICAgfTsKIApAQCAtMzM1LDcgKzMzMyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBt
X2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuIDogMTsKICAgICAgICAgYm9vbCBtX2NhbkNvbGxhcHNl
VG9wV2l0aENoaWxkcmVuIDogMTsKICAgICAgICAgYm9vbCBtX2NhbkNvbGxhcHNlQm90dG9tV2l0
aENoaWxkcmVuIDogMTsKLSAgICAgICAgCisKICAgICAgICAgLy8gV2hldGhlciBvciBub3Qgd2Ug
YXJlIGEgcXVpcmt5IGNvbnRhaW5lciwgaS5lLiwgZG8gd2UgY29sbGFwc2UgYXdheSB0b3AgYW5k
IGJvdHRvbQogICAgICAgICAvLyBtYXJnaW5zIGluIG91ciBjb250YWluZXIuICBUYWJsZSBjZWxs
cyBhbmQgdGhlIGJvZHkgYXJlIHRoZSBjb21tb24gZXhhbXBsZXMuIFdlCiAgICAgICAgIC8vIGFs
c28gaGF2ZSBhIGN1c3RvbSBzdHlsZSBwcm9wZXJ0eSBmb3IgU2FmYXJpIFJTUyB0byBkZWFsIHdp
dGggVHlwZVBhZCBibG9nIGFydGljbGVzLgpAQCAtMzUzLDcgKzM1MSw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgLy8gSWYgb3VyIGxhc3Qgbm9ybWFsIGZsb3cgY2hpbGQgd2FzIGEgc2VsZi1jb2xs
YXBzaW5nIGJsb2NrIHRoYXQgY2xlYXJlZCBhIGZsb2F0LAogICAgICAgICAvLyB3ZSB0cmFjayBp
dCBpbiB0aGlzIHZhcmlhYmxlLgogICAgICAgICBib29sIG1fc2VsZkNvbGxhcHNpbmdCbG9ja0Ns
ZWFyZWRGbG9hdCA6IDE7Ci0gICAgCisKICAgICAgICAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1
c2VkIHRvIGRldGVjdCBxdWlya3kgbWFyZ2lucyB0aGF0IHdlIG5lZWQgdG8gY29sbGFwc2UgYXdh
eSAoaW4gdGFibGUgY2VsbHMKICAgICAgICAgLy8gYW5kIGluIHRoZSBib2R5IGVsZW1lbnQpLgog
ICAgICAgICBib29sIG1fdG9wUXVpcmsgOiAxOwpAQCAtMzY2LDcgKzM2NCw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHB1YmxpYzoKICAgICAgICAgTWFyZ2luSW5mbyhSZW5kZXJCbG9jayogYiwgaW50
IHRvcCwgaW50IGJvdHRvbSk7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQgc2V0QXRUb3BPZkJs
b2NrKGJvb2wgYikgeyBtX2F0VG9wT2ZCbG9jayA9IGI7IH0KICAgICAgICAgdm9pZCBzZXRBdEJv
dHRvbU9mQmxvY2soYm9vbCBiKSB7IG1fYXRCb3R0b21PZkJsb2NrID0gYjsgfQogICAgICAgICB2
b2lkIGNsZWFyTWFyZ2luKCkgeyBtX3Bvc01hcmdpbiA9IG1fbmVnTWFyZ2luID0gMDsgfQpAQCAt
Mzk1LDI3ICszOTMsMjcgQEAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgbmVnTWFyZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9uZWdNYXJnaW47IH0KICAgICAgICAgaW50IG1hcmdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zTWFyZ2luIC0gbV9uZWdNYXJnaW47IH0KICAgICB9OwotICAgIAotICAgIHZv
aWQgYWRqdXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdp
bkluZm8mIG1hcmdpbkluZm8pOwotICAgIHZvaWQgYWRqdXN0RmxvYXRpbmdCbG9jayhjb25zdCBN
YXJnaW5JbmZvJiBtYXJnaW5JbmZvKTsKLSAgICBSZW5kZXJPYmplY3QqIGhhbmRsZVNwZWNpYWxD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBD
b21wYWN0SW5mbyYgY29tcGFjdEluZm8sIGJvb2wmIGhhbmRsZWQpOwotICAgIFJlbmRlck9iamVj
dCogaGFuZGxlRmxvYXRpbmdDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5J
bmZvJiBtYXJnaW5JbmZvLCBib29sJiBoYW5kbGVkKTsKLSAgICBSZW5kZXJPYmplY3QqIGhhbmRs
ZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBt
YXJnaW5JbmZvLCBib29sJiBoYW5kbGVkKTsKLSAgICBSZW5kZXJPYmplY3QqIGhhbmRsZUNvbXBh
Y3RDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBDb21wYWN0SW5mbyYgY29tcGFjdEluZm8sIGJv
b2wmIGhhbmRsZWQpOworCisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYpOworICAgIHZvaWQgYWRqdXN0RmxvYXRpbmdC
bG9jayhjb25zdCBNYXJnaW5JbmZvJik7CisgICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVTcGVjaWFs
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYsIENvbXBhY3RJbmZv
JiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyT2JqZWN0KiBoYW5kbGVGbG9hdGluZ0NoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mLCBib29sJiBoYW5kbGVkKTsK
KyAgICBSZW5kZXJPYmplY3QqIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJPYmplY3QqIGNo
aWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgYm9vbCYgaGFuZGxlZCk7CisgICAgUmVuZGVyT2JqZWN0
KiBoYW5kbGVDb21wYWN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgQ29tcGFjdEluZm8mLCBi
b29sJiBoYW5kbGVkKTsKICAgICBSZW5kZXJPYmplY3QqIGhhbmRsZVJ1bkluQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgYm9vbCYgaGFuZGxlZCk7Ci0gICAgdm9pZCBjb2xsYXBzZU1hcmdpbnMo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IHlQb3NFc3Rp
bWF0ZSk7Ci0gICAgdm9pZCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlck9iamVjdCogY2hpbGQs
IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BO
ZWdNYXJnaW4pOwotICAgIHZvaWQgaW5zZXJ0Q29tcGFjdElmTmVlZGVkKFJlbmRlck9iamVjdCog
Y2hpbGQsIENvbXBhY3RJbmZvJiBjb21wYWN0SW5mbyk7Ci0gICAgaW50IGVzdGltYXRlVmVydGlj
YWxQb3NpdGlvbihSZW5kZXJPYmplY3QqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBpbmZvKTsK
KyAgICB2b2lkIGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJPYmplY3QqIGNoaWxkLCBNYXJnaW5JbmZv
JiwgaW50IHlQb3NFc3RpbWF0ZSk7CisgICAgdm9pZCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRl
ck9iamVjdCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xk
VG9wTmVnTWFyZ2luKTsKKyAgICB2b2lkIGluc2VydENvbXBhY3RJZk5lZWRlZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBDb21wYWN0SW5mbyYpOworICAgIGludCBlc3RpbWF0ZVZlcnRpY2FsUG9zaXRp
b24oUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIHZvaWQgZGV0
ZXJtaW5lSG9yaXpvbnRhbFBvc2l0aW9uKFJlbmRlck9iamVjdCogY2hpbGQpOwotICAgIHZvaWQg
aGFuZGxlQm90dG9tT2ZCbG9jayhpbnQgdG9wLCBpbnQgYm90dG9tLCBNYXJnaW5JbmZvJiBtYXJn
aW5JbmZvKTsKLSAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJnaW5J
bmZvJiBtYXJnaW5JbmZvKTsKKyAgICB2b2lkIGhhbmRsZUJvdHRvbU9mQmxvY2soaW50IHRvcCwg
aW50IGJvdHRvbSwgTWFyZ2luSW5mbyYpOworICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFy
Z2luKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQg
c3RydWN0cyB1c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKIHByb3RlY3RlZDoKICAgICBE
ZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOwogICAg
IERlcHJlY2F0ZWRQdHJMaXN0PFJlbmRlck9iamVjdD4qIG1fcG9zaXRpb25lZE9iamVjdHM7Ci0g
ICAgCisKICAgICBib29sIG1fY2hpbGRyZW5JbmxpbmUgOiAxOwogICAgIGJvb2wgbV9maXJzdExp
bmUgOiAxOwogICAgIHVuc2lnbmVkIG1fY2xlYXJTdGF0dXMgIDogMjsgLy8gRUNsZWFyCkBAIC00
MzEsMTkgKzQyOSwxOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBIb3cgbXVjaCBjb250ZW50IG92
ZXJmbG93cyBvdXQgb2Ygb3VyIGJsb2NrIHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5IChhbGwg
d2Ugc3VwcG9ydAogICAgIC8vIGZvciBub3cgaXMgc3BpbGxhZ2Ugb3V0IG9mIHRoZSBib3R0b20g
YW5kIHRoZSByaWdodCwgd2hpY2ggYXJlIHRoZSBjb21tb24gY2FzZXMpLgotICAgIC8vIFhYWCBH
ZW5lcmFsaXplIHRvIHdvcmsgd2l0aCB0b3AgYW5kIGxlZnQgYXMgd2VsbC4KKyAgICAvLyBGSVhN
RTogR2VuZXJhbGl6ZSB0byB3b3JrIHdpdGggdG9wIGFuZCBsZWZ0IGFzIHdlbGwuCiAgICAgaW50
IG1fb3ZlcmZsb3dIZWlnaHQ7CiAgICAgaW50IG1fb3ZlcmZsb3dXaWR0aDsKLSAgICAKKwogICAg
IC8vIExlZnQgYW5kIHRvcCBvdmVyZmxvdy4gIERvZXMgbm90IGFmZmVjdCBzY3JvbGxpbmcgZGlt
ZW5zaW9ucywgYnV0IHdlIGRvIGF0IGxlYXN0IHVzZSBpdAogICAgIC8vIHdoZW4gZGlydHkgcmVj
dCBjaGVja2luZyBhbmQgaGl0IHRlc3RpbmcuCiAgICAgaW50IG1fb3ZlcmZsb3dMZWZ0OwogICAg
IGludCBtX292ZXJmbG93VG9wOwotICAgIAorCiAgICAgLy8gZnVsbCB3aWR0aCBvZiBhIHRhYiBj
aGFyYWN0ZXIKICAgICBpbnQgbV90YWJXaWR0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIFJlbmRlckJsb2NrX0gKKyNlbmRpZiAvLyBSZW5kZXJCbG9ja19oCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDE3NDM0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsOCArNTgsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqCiAgICAgaWYgKG9sZENoaWxkID09IG1faW5uZXIgfHwgIW1f
aW5uZXIpIHsKICAgICAgICAgUmVuZGVyRmxleGlibGVCb3g6OnJlbW92ZUNoaWxkKG9sZENoaWxk
KTsKICAgICAgICAgbV9pbm5lciA9IDA7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UKICAg
ICAgICAgbV9pbm5lci0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogfQogCkBAIC0xMDksMjQgKzEw
OCwyNCBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6dXBkYXRlUHNldWRvQ2hpbGQoUmVuCiAgICAgICAg
IHVwZGF0ZVBzZXVkb0NoaWxkRm9yT2JqZWN0KHR5cGUsIHRoaXMpOwogfQogCi12b2lkIFJlbmRl
ckJ1dHRvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9p
ZCBSZW5kZXJCdXR0b246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsKICAgICAvLyBQdXNoIGEgY2xpcC4KLSAgICBpZiAobV9pbm5lciAmJiBpLnBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIEludFJlY3QgY2xpcFJlY3Qo
X3R4ICsgYm9yZGVyTGVmdCgpLCBfdHkgKyBib3JkZXJUb3AoKSwKKyAgICBpZiAobV9pbm5lciAm
JiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgSW50
UmVjdCBjbGlwUmVjdCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwKICAgICAg
ICAgICAgIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpLCBoZWlnaHQoKSAt
IGJvcmRlckJvdHRvbSgpIC0gYm9yZGVyVG9wKCkpOwogICAgICAgICBpZiAoY2xpcFJlY3Qud2lk
dGgoKSA9PSAwIHx8IGNsaXBSZWN0LmhlaWdodCgpID09IDApCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGkucC0+c2F2ZSgpOwotICAgICAgICBpLnAtPmNsaXAoY2xpcFJlY3QpOworICAg
ICAgICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgICAgICBwYWludEluZm8ucC0+Y2xpcChjbGlw
UmVjdCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gUGFpbnQgdGhlIGNoaWxkcmVuLgotICAgIFJl
bmRlckJsb2NrOjpwYWludE9iamVjdChpLCBfdHgsIF90eSk7Ci0gICAgCisgICAgUmVuZGVyQmxv
Y2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKKwogICAgIC8vIFBvcCB0aGUgY2xp
cC4KLSAgICBpZiAobV9pbm5lciAmJiBpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQot
ICAgICAgICBpLnAtPnJlc3RvcmUoKTsKKyAgICBpZiAobV9pbm5lciAmJiBwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3Jl
KCk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5oCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAgKgogICovCiAKLSNpZm5k
ZWYgUmVuZGVyQnV0dG9uX0gKLSNkZWZpbmUgUmVuZGVyQnV0dG9uX0gKKyNpZm5kZWYgUmVuZGVy
QnV0dG9uX2gKKyNkZWZpbmUgUmVuZGVyQnV0dG9uX2gKIAogI2luY2x1ZGUgIlJlbmRlckZsZXhp
YmxlQm94LmgiCiAKQEAgLTMwLDE0ICszMCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBS
ZW5kZXJCdXR0b25zIGFyZSBqdXN0IGxpa2Ugbm9ybWFsIGZsZXhib3hlcyBleGNlcHQgdGhhdCB0
aGV5IHdpbGwgZ2VuZXJhdGUgYW4gYW5vbnltb3VzIGJsb2NrIGNoaWxkLgogLy8gRm9yIGlucHV0
cywgdGhleSB3aWxsIGFsc28gZ2VuZXJhdGUgYW4gYW5vbnltb3VzIFJlbmRlclRleHQgYW5kIGtl
ZXAgaXRzIHN0eWxlIGFuZCBjb250ZW50IHVwCiAvLyB0byBkYXRlIGFzIHRoZSBidXR0b24gY2hh
bmdlcy4KLWNsYXNzIFJlbmRlckJ1dHRvbiA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveAotewor
Y2xhc3MgUmVuZGVyQnV0dG9uIDogcHVibGljIFJlbmRlckZsZXhpYmxlQm94IHsKIHB1YmxpYzoK
ICAgICBSZW5kZXJCdXR0b24oTm9kZSopOwogCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckJ1dHRvbiI7IH0KKwogICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9y
ZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCog
b2xkQ2hpbGQpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0JveGVz
KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQm94ZXMoKSB7IH0KICAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlc0Fub255bW91c1dyYXBwZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKQEAgLTQ5LDggKzUw
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOwogCi0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckJ1
dHRvbiI7IH0KLQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNTgsNiArNTcsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgUmVuZGVyQmxvY2sqIG1faW5uZXI7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckJ1dHRvbl9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjggKzI4LDI1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVyLmgiCiAKLSNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotCi0vLyBGb3IgYWNjZXNzaWJpbGl0eQotI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIg
CisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5k
ZXJDb250YWluZXI6OlJlbmRlckNvbnRhaW5lcihOb2RlKiBub2RlKQogICAgIDogUmVuZGVyQm94
KG5vZGUpCisgICAgLCBtX2ZpcnN0KDApCisgICAgLCBtX2xhc3QoMCkKIHsKLSAgICBtX2ZpcnN0
ID0gMDsKLSAgICBtX2xhc3QgPSAwOwogfQogCi0KIFJlbmRlckNvbnRhaW5lcjo6flJlbmRlckNv
bnRhaW5lcigpCiB7CiB9CkBAIC02MzksNCArNjM2LDQgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6
OmxpbmVCb3hSZWN0cyhWZWN0bwogCiAjdW5kZWYgREVCVUdfTEFZT1VUCiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCShyZXZp
c2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFJlbmRlckNvbnRhaW5lcl9ICi0jZGVmaW5lIFJlbmRlckNvbnRh
aW5lcl9ICisjaWZuZGVmIFJlbmRlckNvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlckNvbnRhaW5l
cl9oCiAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKIApAQCAtMzIsMjggKzMyLDI3IEBAIGNsYXNz
IFBvc2l0aW9uOwogLyoqCiAgKiBCYXNlIGNsYXNzIGZvciByZW5kZXJpbmcgb2JqZWN0cyB0aGF0
IGNhbiBoYXZlIGNoaWxkcmVuCiAgKi8KLWNsYXNzIFJlbmRlckNvbnRhaW5lciA6IHB1YmxpYyBS
ZW5kZXJCb3gKLXsKK2NsYXNzIFJlbmRlckNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJCb3ggewog
cHVibGljOgogICAgIFJlbmRlckNvbnRhaW5lcihOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVy
Q29udGFpbmVyKCk7CiAKLSAgICBSZW5kZXJPYmplY3QgKmZpcnN0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9Ci0gICAgUmVuZGVyT2JqZWN0ICpsYXN0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3Q7IH0KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9CisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3Q7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0ICpuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QgKm9sZENoaWxkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7CiAgICAgdm9pZCBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOwotICAg
IAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
KiBjaGlsZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3Qq
IGNoaWxkKTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVu
ZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCkgeyBzZXRNaW5NYXhLbm93biggdHJ1
ZSApOyB9CisgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpIHsgc2V0TWluTWF4S25v
d24odHJ1ZSk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jv
eGVzKCk7CiAKQEAgLTYyLDE3ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVQc2V1
ZG9DaGlsZEZvck9iamVjdChSZW5kZXJTdHlsZTo6UHNldWRvSWQsIFJlbmRlck9iamVjdCopOwog
CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQg
eCwgaW50IHkpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGxpbmVCb3hSZWN0cyhWZWN0b3I8
SW50UmVjdD4mKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChSZW5kZXJP
YmplY3QqIGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQogICAgIHZvaWQgc2V0TGFzdENoaWxk
KFJlbmRlck9iamVjdCogbGFzdCkgeyBtX2xhc3QgPSBsYXN0OyB9CiAKLXByb3RlY3RlZDoKLSAg
ICBSZW5kZXJPYmplY3QgKm1fZmlyc3Q7Ci0gICAgUmVuZGVyT2JqZWN0ICptX2xhc3Q7CisgICAg
UmVuZGVyT2JqZWN0KiBtX2ZpcnN0OworICAgIFJlbmRlck9iamVjdCogbV9sYXN0OwogfTsKIAot
fQotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJDb250
YWluZXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHJldmlzaW9uIDE3
NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY29uc3QgaW50IGNNYXJr
ZXJQYWRkaW5nID0gNzsKIAogUmVuZGVyQ291bnRlcjo6UmVuZGVyQ291bnRlcihOb2RlKiBub2Rl
LCBDb3VudGVyRGF0YSogY291bnRlcikKLSAgICA6IFJlbmRlclRleHQobm9kZSwgMCksIG1fY291
bnRlcihjb3VudGVyKSwgbV9jb3VudGVyTm9kZSgwKQorICAgIDogUmVuZGVyVGV4dChub2RlLCAw
KQorICAgICwgbV9jb3VudGVyKGNvdW50ZXIpCisgICAgLCBtX2NvdW50ZXJOb2RlKDApCiB7CiB9
CiAKQEAgLTU3LDkgKzU5LDEwIEBAIHN0YXRpYyBTdHJpbmcgdG9Sb21hbihpbnQgbnVtYmVyLCBi
b29sIHUKICAgICBpbnQgZCA9IDA7CiAgICAgZG8gewogICAgICAgICBpbnQgbnVtID0gbnVtYmVy
ICUgMTA7Ci0gICAgICAgIGlmIChudW0gJSA1IDwgNCkKKyAgICAgICAgaWYgKG51bSAlIDUgPCA0
KSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gbnVtICUgNTsgaSA+IDA7IGktLSkKICAgICAg
ICAgICAgICAgICByb21hbi5pbnNlcnQoJmRpZ2l0c1tkXSwgMSwgMCk7CisgICAgICAgIH0KICAg
ICAgICAgaWYgKG51bSA+PSA0ICYmIG51bSA8PSA4KQogICAgICAgICAgICAgcm9tYW4uaW5zZXJ0
KCZkaWdpdHNbZCArIDFdLCAxLCAwKTsKICAgICAgICAgaWYgKG51bSA9PSA5KQpAQCAtOTQsNyAr
OTcsNyBAQCBzdGF0aWMgU3RyaW5nIHRvSGVicmV3KGludCBudW1iZXIpCiB7CiAgICAgaWYgKG51
bWJlciA8IDEpCiAgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXIpOwotICAgIAor
CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHRlbkRpZ2l0W10gPSB7MTQ5NywgMTQ5OSwgMTUwMCwg
MTUwMiwgMTUwNCwgMTUwNSwgMTUwNiwgMTUwOCwgMTUxMH07CiAKICAgICBTdHJpbmcgbGV0dGVy
OwpAQCAtMjE3LDExICsyMjAsMTEgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjTWluTWF4V2lk
dGgoKQogICAgIGludCB2YWx1ZSA9IG1fY291bnRlck5vZGUtPmNvdW50KCk7CiAgICAgaWYgKG1f
Y291bnRlck5vZGUtPmlzUmVzZXQoKSkKICAgICAgICAgdmFsdWUgPSBtX2NvdW50ZXJOb2RlLT52
YWx1ZSgpOwotICAgIAorCiAgICAgaW50IHRvdGFsID0gdmFsdWU7CiAgICAgaWYgKG1fY291bnRl
ck5vZGUtPnBhcmVudCgpKQogICAgICAgICB0b3RhbCA9IG1fY291bnRlck5vZGUtPnBhcmVudCgp
LT50b3RhbCgpOwotICAgIAorCiAgICAgbV9pdGVtID0gY29udmVydFZhbHVlVG9UeXBlKHZhbHVl
LCB0b3RhbCwgbV9jb3VudGVyLT5saXN0U3R5bGUoKSk7CiAKICAgICBpZiAoaGFzU2VwYXJhdG9y
KSB7CkBAIC0yMzAsMTUgKzIzMywxNCBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OmNhbGNNaW5NYXhX
aWR0aCgpCiAgICAgICAgIHdoaWxlICAoY291bnRlci0+cGFyZW50KCkgJiYgKGZpcnN0IHx8ICEo
Y291bnRlci0+aXNSZXNldCgpICYmIGNvdW50ZXItPnBhcmVudCgpLT5pc1Jvb3QoKSkpKSB7CiAg
ICAgICAgICAgICB2YWx1ZSA9IGNvdW50ZXItPmNvdW50KCkgPyBjb3VudGVyLT5jb3VudCgpIDog
MTsKICAgICAgICAgICAgIHRvdGFsID0gY291bnRlci0+cGFyZW50KCktPnRvdGFsKCk7Ci0gICAg
ICAgICAgICBtX2l0ZW0gPSBjb252ZXJ0VmFsdWVUb1R5cGUodmFsdWUsIHRvdGFsLCBtX2NvdW50
ZXItPmxpc3RTdHlsZSgpKSAKLSAgICAgICAgICAgICAgICArIG1fY291bnRlci0+c2VwYXJhdG9y
KCkgKyBtX2l0ZW07CisgICAgICAgICAgICBtX2l0ZW0gPSBjb252ZXJ0VmFsdWVUb1R5cGUodmFs
dWUsIHRvdGFsLCBtX2NvdW50ZXItPmxpc3RTdHlsZSgpKSArIG1fY291bnRlci0+c2VwYXJhdG9y
KCkgKyBtX2l0ZW07CiAgICAgICAgICAgICBjb3VudGVyID0gY291bnRlci0+cGFyZW50KCk7CiAg
ICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RyID0g
bmV3IFN0cmluZ0ltcGwobV9pdGVtLmNoYXJhY3RlcnMoKSwgbV9pdGVtLmxlbmd0aCgpKTsKLSAg
ICAKKwogICAgIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aCgpOwogfQogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjQgKzIwLDIzIEBACiAg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgUkVOREVSX0NP
VU5URVJfSF8KLSNkZWZpbmUgUkVOREVSX0NPVU5URVJfSF8KKyNpZm5kZWYgUmVuZGVyQ291bnRl
cl9oCisjZGVmaW5lIFJlbmRlckNvdW50ZXJfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQ291bnRlck5vZGU7CiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitjbGFzcyBDb3VudGVyTm9kZTsKIAogY2xhc3MgUmVuZGVyQ291bnRl
ciA6IHB1YmxpYyBSZW5kZXJUZXh0IHsKLQogcHVibGljOgogICAgIFJlbmRlckNvdW50ZXIoTm9k
ZSosIENvdW50ZXJEYXRhKik7Ci0gICAgCisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyQ291bnRlciI7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwogCkBAIC00
OSw2ICs0OCw2IEBAIHByaXZhdGU6CiAgICAgQ291bnRlck5vZGUqIG1fY291bnRlck5vZGU7CiB9
OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2Vu
ZGlmIC8vIFJlbmRlckNvdW50ZXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmll
bGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDI5ICs3MCwyOSBAQCBSZW5kZXJPYmplY3QqIFJl
bmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVy
RmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KQordm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAg
IGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEo
KTsKICAgICBSZW5kZXJPYmplY3QqIGxlZ2VuZCA9IGZpbmRMZWdlbmQoKTsKICAgICBpZiAoIWxl
Z2VuZCkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwYWludEJveERlY29yYXRpb25zKGks
IF90eCwgX3R5KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwYWludEJveERlY29yYXRp
b25zKHBhaW50SW5mbywgdHgsIHR5KTsKIAotICAgIGludCB5T2ZmID0gKGxlZ2VuZC0+eVBvcygp
ID4gMCkgPyAwIDogKGxlZ2VuZC0+aGVpZ2h0KCktYm9yZGVyVG9wKCkpLzI7CisgICAgaW50IHlP
ZmYgPSAobGVnZW5kLT55UG9zKCkgPiAwKSA/IDAgOiAobGVnZW5kLT5oZWlnaHQoKSAtIGJvcmRl
clRvcCgpKSAvIDI7CiAgICAgaCAtPSB5T2ZmOwotICAgIF90eSArPSB5T2ZmIC0gYm9yZGVyVG9w
RXh0cmEoKTsKKyAgICB0eSArPSB5T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKIAotICAgIGludCBt
eSA9IG1heChfdHksIGkuci55KCkpOwotICAgIGludCBlbmQgPSBtaW4oaS5yLmJvdHRvbSgpLCAg
X3R5ICsgaCk7CisgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8uci55KCkpOworICAgIGlu
dCBlbmQgPSBtaW4ocGFpbnRJbmZvLnIuYm90dG9tKCksIHR5ICsgaCk7CiAgICAgaW50IG1oID0g
ZW5kIC0gbXk7CiAKLSAgICBwYWludEJhY2tncm91bmQoaS5wLCBzdHlsZSgpLT5iYWNrZ3JvdW5k
Q29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpLCBteSwgbWgsIF90eCwgX3R5LCB3
LCBoKTsKKyAgICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLnAsIHN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwgdHgsIHR5LCB3
LCBoKTsKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIoKSkKLSAgICAgICAgcGFpbnRCb3Jk
ZXJNaW51c0xlZ2VuZChpLnAsIF90eCwgX3R5LCB3LCBoLCBzdHlsZSgpLCBsZWdlbmQtPnhQb3Mo
KSwgbGVnZW5kLT53aWR0aCgpKTsKKyAgICAgICAgcGFpbnRCb3JkZXJNaW51c0xlZ2VuZChwYWlu
dEluZm8ucCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpLCBsZWdlbmQtPnhQb3MoKSwgbGVnZW5kLT53
aWR0aCgpKTsKIH0KIAotdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZ2Vu
ZChHcmFwaGljc0NvbnRleHQqIHAsIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQgaCwKK3Zv
aWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm9yZGVyTWludXNMZWdlbmQoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgaW50IGx4LCBpbnQgbHcpCiB7CiAKQEAgLTExMCwxNiArMTEwLDE2IEBAIHZvaWQgUmVu
ZGVyRmllbGRzZXQ6OnBhaW50Qm9yZGVyTWludXNMZWcKICAgICBib29sIHJlbmRlcl9iID0gYnMg
PiBCSElEREVOOwogCiAgICAgaWYgKHJlbmRlcl90KSB7Ci0gICAgICAgIGRyYXdCb3JkZXIocCwg
X3R4LCBfdHksIF90eCArIGx4LCBfdHkgKyAgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIEJTVG9w
LCB0Yywgc3R5bGUtPmNvbG9yKCksIHRzLAotICAgICAgICAgICAgICAgICAgIChyZW5kZXJfbCAm
JiAobHMgPT0gRE9UVEVEIHx8IGxzID09IERBU0hFRCB8fCBscyA9PSBET1VCTEUpP3N0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKTowKSwgMCk7Ci0gICAgICAgIGRyYXdCb3JkZXIocCwgX3R4K2x4K2x3
LCBfdHksIF90eCArIHcsIF90eSArICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgQlNUb3AsIHRj
LCBzdHlsZS0+Y29sb3IoKSwgdHMsCi0gICAgICAgICAgICAgICAgICAgMCwgKHJlbmRlcl9yICYm
IChycyA9PSBET1RURUQgfHwgcnMgPT0gREFTSEVEIHx8IHJzID09IERPVUJMRSk/c3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKTowKSk7CisgICAgICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0
LCB0eCwgdHksIHR4ICsgbHgsIHR5ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIEJTVG9wLCB0
Yywgc3R5bGUtPmNvbG9yKCksIHRzLAorICAgICAgICAgICAgICAgICAgIChyZW5kZXJfbCAmJiAo
bHMgPT0gRE9UVEVEIHx8IGxzID09IERBU0hFRCB8fCBscyA9PSBET1VCTEUpID8gc3R5bGUtPmJv
cmRlckxlZnRXaWR0aCgpIDogMCksIDApOworICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNzQ29u
dGV4dCwgdHggKyBseCArIGx3LCB0eSwgdHggKyB3LCB0eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0
aCgpLCBCU1RvcCwgdGMsIHN0eWxlLT5jb2xvcigpLCB0cywKKyAgICAgICAgICAgICAgICAgICAw
LCAocmVuZGVyX3IgJiYgKHJzID09IERPVFRFRCB8fCBycyA9PSBEQVNIRUQgfHwgcnMgPT0gRE9V
QkxFKSA/IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgOiAwKSk7CiAgICAgfQogCiAgICAgaWYg
KHJlbmRlcl9iKQotICAgICAgICBkcmF3Qm9yZGVyKHAsIF90eCwgX3R5ICsgaCAtIHN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpLCBfdHggKyB3LCBfdHkgKyBoLCBCU0JvdHRvbSwgYmMsIHN0eWxl
LT5jb2xvcigpLCBicywKLSAgICAgICAgICAgICAgICAgICAocmVuZGVyX2wgJiYgKGxzID09IERP
VFRFRCB8fCBscyA9PSBEQVNIRUQgfHwgbHMgPT0gRE9VQkxFKT9zdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCk6MCksCi0gICAgICAgICAgICAgICAgICAgKHJlbmRlcl9yICYmIChycyA9PSBET1RURUQg
fHwgcnMgPT0gREFTSEVEIHx8IHJzID09IERPVUJMRSk/c3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgo
KTowKSk7CisgICAgICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0LCB0eCwgdHkgKyBoIC0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHR4ICsgdywgdHkgKyBoLCBCU0JvdHRvbSwgYmMs
IHN0eWxlLT5jb2xvcigpLCBicywKKyAgICAgICAgICAgICAgICAgICAocmVuZGVyX2wgJiYgKGxz
ID09IERPVFRFRCB8fCBscyA9PSBEQVNIRUQgfHwgbHMgPT0gRE9VQkxFKSA/IHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSA6IDApLAorICAgICAgICAgICAgICAgICAgIChyZW5kZXJfciAmJiAocnMg
PT0gRE9UVEVEIHx8IHJzID09IERBU0hFRCB8fCBycyA9PSBET1VCTEUpID8gc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSA6IDApKTsKIAogICAgIGlmIChyZW5kZXJfbCkgewogICAgICAgICBjb25z
dCBDb2xvciYgbGMgPSBzdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCk7CkBAIC0xMzQsOSArMTM0LDgg
QEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3JkZXJNaW51c0xlZwogICAgICAgICAgICAg
KGxzID49IE9VVFNFVCkgJiYKICAgICAgICAgICAgIChicyA9PSBET1RURUQgfHwgYnMgPT0gREFT
SEVEIHx8IGJzID09IFNPTElEIHx8IGJzID09IElOU0VUKTsKIAotICAgICAgICBkcmF3Qm9yZGVy
KHAsIF90eCwgX3R5LCBfdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIF90eSArIGgsIEJT
TGVmdCwgbGMsIHN0eWxlLT5jb2xvcigpLCBscywKLSAgICAgICAgICAgICAgICAgICBpZ25vcmVf
dG9wPzA6c3R5bGUtPmJvcmRlclRvcFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgaWdub3Jl
X2JvdHRvbT8wOnN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAgICAgZHJhd0JvcmRl
cihncmFwaGljc0NvbnRleHQsIHR4LCB0eSwgdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCks
IHR5ICsgaCwgQlNMZWZ0LCBsYywgc3R5bGUtPmNvbG9yKCksIGxzLAorICAgICAgICAgICAgICAg
ICAgIGlnbm9yZV90b3AgPyAwIDogc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIGlnbm9yZV9ib3R0
b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIH0KIAogICAgIGlmIChy
ZW5kZXJfcikgewpAQCAtMTUyLDE1ICsxNTEsMTQgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFp
bnRCb3JkZXJNaW51c0xlZwogICAgICAgICAgICAgKHJzID49IERPVFRFRCB8fCBycyA9PSBJTlNF
VCkgJiYKICAgICAgICAgICAgIChicyA9PSBET1RURUQgfHwgYnMgPT0gREFTSEVEIHx8IGJzID09
IFNPTElEIHx8IGJzID09IElOU0VUKTsKIAotICAgICAgICBkcmF3Qm9yZGVyKHAsIF90eCArIHcg
LSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBfdHksIF90eCArIHcsIF90eSArIGgsIEJTUmln
aHQsIHJjLCBzdHlsZS0+Y29sb3IoKSwgcnMsCi0gICAgICAgICAgICAgICAgICAgaWdub3JlX3Rv
cD8wOnN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgIGlnbm9yZV9i
b3R0b20/MDpzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgIGRyYXdCb3JkZXIo
Z3JhcGhpY3NDb250ZXh0LCB0eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCB0eSwg
dHggKyB3LCB0eSArIGgsIEJTUmlnaHQsIHJjLCBzdHlsZS0+Y29sb3IoKSwgcnMsCisgICAgICAg
ICAgICAgICAgICAgaWdub3JlX3RvcCA/IDAgOiBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgaWdu
b3JlX2JvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgfQogfQog
Ci12b2lkIFJlbmRlckZpZWxkc2V0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogX3N0eWxlKQordm9p
ZCBSZW5kZXJGaWVsZHNldDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAg
IFJlbmRlckJsb2NrOjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRlckJsb2NrOjpzZXRTdHls
ZShuZXdTdHlsZSk7CiAKICAgICAvLyBXaW5JRSByZW5kZXJzIGZpZWxkc2V0cyB3aXRoIGRpc3Bs
YXk6aW5saW5lIGxpa2UgdGhleSdyZSBpbmxpbmUtYmxvY2tzLiAgRm9yIHVzLAogICAgIC8vIGFu
IGlubGluZS1ibG9jayBpcyBqdXN0IGEgYmxvY2sgZWxlbWVudCB3aXRoIHJlcGxhY2VkIHNldCB0
byB0cnVlIGFuZCBpbmxpbmUgc2V0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOb2RlKiBzaGFkb3dQYXJlbnROb2RlKCkgeyBy
ZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgICAgIE5vZGUqIG1f
c2hhZG93UGFyZW50OyAgICAKKyAgICBOb2RlKiBtX3NoYWRvd1BhcmVudDsgICAgCiB9OwogCiBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2woTm9kZSogbm9k
ZSkKQEAgLTcyLDIyICs3MiwyMSBAQCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6flJlbmRlckZp
bGVVcGxvCiB7CiAgICAgaWYgKG1fYnV0dG9uKQogICAgICAgICBtX2J1dHRvbi0+ZGV0YWNoKCk7
Ci0gICAgaWYgKG1fZmlsZUNob29zZXIpIHsKKyAgICBpZiAobV9maWxlQ2hvb3NlcikKICAgICAg
ICAgbV9maWxlQ2hvb3Nlci0+ZGlzY29ubmVjdFVwbG9hZENvbnRyb2woKTsKLSAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBzKQor
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0
eWxlKQogewogICAgIC8vIEZvcmNlIHRleHQtYWxpZ24gdG8gbWF0Y2ggdGhlIGRpcmVjdGlvbgot
ICAgIGlmIChzLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgIHMtPnNldFRleHRBbGlnbihM
RUZUKTsKKyAgICBpZiAobmV3U3R5bGUtPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgbmV3
U3R5bGUtPnNldFRleHRBbGlnbihMRUZUKTsKICAgICBlbHNlCi0gICAgICAgIHMtPnNldFRleHRB
bGlnbihSSUdIVCk7Ci0gICAgCi0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHMpOworICAgICAg
ICBuZXdTdHlsZS0+c2V0VGV4dEFsaWduKFJJR0hUKTsKKworICAgIFJlbmRlckJsb2NrOjpzZXRT
dHlsZShuZXdTdHlsZSk7CiAgICAgaWYgKG1fYnV0dG9uKQotICAgICAgICBtX2J1dHRvbi0+cmVu
ZGVyZXIoKS0+c2V0U3R5bGUoY3JlYXRlQnV0dG9uU3R5bGUocykpOworICAgICAgICBtX2J1dHRv
bi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUoY3JlYXRlQnV0dG9uU3R5bGUobmV3U3R5bGUpKTsKIAog
ICAgIHNldFJlcGxhY2VkKGlzSW5saW5lKCkpOwogfQpAQCAtMTQwLDIyICsxMzksMjIgQEAgUmVu
ZGVyU3R5bGUqIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjcgogICAgIHJldHVybiBzdHlsZTsK
IH0KIAotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBQ
dXNoIGEgY2xpcC4KLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBp
LnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKKyAgICBpZiAocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKSB7CiAgICAgICAgIEludFJlY3QgY2xp
cFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdo
dCgpIC0gYm9yZGVyQm90dG9tKCkgLSBib3JkZXJUb3AoKSk7CiAgICAgICAgIGlmIChjbGlwUmVj
dC53aWR0aCgpID09IDAgfHwgY2xpcFJlY3QuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAgIGkucC0+Y2xpcChjbGlwUmVjdCk7
CisgICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5wLT5jbGlw
KGNsaXBSZWN0KTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQpIHsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5ZWRGaWxlbmFtZSA9IG1fZmls
ZUNob29zZXItPmJhc2VuYW1lRm9yV2lkdGgobWF4RmlsZW5hbWVXaWR0aCgpKTsKICAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuKGRpc3BsYXllZEZpbGVuYW1lLmNoYXJhY3RlcnMoKSwgZGlzcGxheWVk
RmlsZW5hbWUubGVuZ3RoKCkpOwotICAgICAgICAKKwogICAgICAgICAvLyBEZXRlcm1pbmUgd2hl
cmUgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRlbnRMZWZ0
ID0gdHggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAgICBpbnQgYnV0dG9u
QW5kSWNvbldpZHRoID0gbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgKyBhZnRlckJ1dHRv
blNwYWNpbmcgKyAobV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZpbGVu
YW1lU3BhY2luZyA6IDApOwpAQCAtMTY3LDEzICsxNjYsMTMgQEAgdm9pZCBSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBi
dXR0b24ncyBiYXNlbGluZQogICAgICAgICBSZW5kZXJCdXR0b24qIGJ1dHRvblJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyQnV0dG9uKj4obV9idXR0b24tPnJlbmRlcmVyKCkpOwogICAgICAg
ICBpbnQgdGV4dFkgPSBidXR0b25SZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS55
KCkgKyBidXR0b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+Ym9yZGVy
VG9wKCkgKyBidXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpICsgYnV0dG9uUmVuZGVyZXItPmJh
c2VsaW5lUG9zaXRpb24odHJ1ZSwgZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgaS5wLT5zZXRG
b250KHN0eWxlKCktPmZvbnQoKSk7Ci0gICAgICAgIGkucC0+c2V0UGVuKHN0eWxlKCktPmNvbG9y
KCkpOwotICAgICAgICAKKworICAgICAgICBwYWludEluZm8ucC0+c2V0Rm9udChzdHlsZSgpLT5m
b250KCkpOworICAgICAgICBwYWludEluZm8ucC0+c2V0UGVuKHN0eWxlKCktPmNvbG9yKCkpOwor
CiAgICAgICAgIC8vIERyYXcgdGhlIGZpbGVuYW1lCi0gICAgICAgIGkucC0+ZHJhd1RleHQodGV4
dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7Ci0gICAgICAgIAorICAgICAgICBwYWludElu
Zm8ucC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CisKICAgICAg
ICAgaWYgKG1fZmlsZUNob29zZXItPmljb24oKSkgewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5l
IHdoZXJlIHRoZSBpY29uIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgICAgIGludCBpY29uWSA9
IHR5ICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyAoY29udGVudEhlaWdodCgpIC0gaWNv
bkhlaWdodCkgLyAyOwpAQCAtMTgyLDI1ICsxODEsMjUgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICAgICAgICAgIGljb25YID0gY29udGVudExlZnQg
KyBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZzsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29u
dGVudFdpZHRoKCkgLSBtX2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIGFmdGVyQnV0dG9u
U3BhY2luZyAtIGljb25XaWR0aDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBEcmF3
IHRoZSBmaWxlIGljb24KLSAgICAgICAgICAgIG1fZmlsZUNob29zZXItPmljb24oKS0+cGFpbnQo
aS5wLCBJbnRSZWN0KGljb25YLCBpY29uWSwgaWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7CisgICAg
ICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pY29uKCktPnBhaW50KHBhaW50SW5mby5wLCBJbnRSZWN0
KGljb25YLCBpY29uWSwgaWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCisKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCi0gICAgUmVuZGVyQmxvY2s6OnBh
aW50T2JqZWN0KGksIHR4LCB0eSk7Ci0gICAgCisgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0
KHBhaW50SW5mbywgdHgsIHR5KTsKKwogICAgIC8vIFBvcCB0aGUgY2xpcC4KLSAgICBpZiAoaS5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNlID09IFBhaW50UGhhc2VDaGls
ZEJsb2NrQmFja2dyb3VuZHMpCi0gICAgICAgIGkucC0+cmVzdG9yZSgpOworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpCisgICAgICAgIHBhaW50SW5mby5wLT5y
ZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNNaW5NYXhX
aWR0aCgpCiB7CiAgICAgbV9taW5XaWR0aCA9IDA7CiAgICAgbV9tYXhXaWR0aCA9IDA7Ci0gICAg
CisKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgo
KS52YWx1ZSgpID4gMCkKICAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxjQ29u
dGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7CkBAIC0y
MTAsNyArMjA5LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY01pbk1heAog
ICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSBzdHlsZSgpLT5mb250KCkuZmxvYXRXaWR0aChUZXh0
UnVuKCZjaCwgMSksIFRleHRTdHlsZSgwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSk7CiAg
ICAgICAgIG1fbWF4V2lkdGggPSAoaW50KWNlaWxmKGNoYXJXaWR0aCAqIGRlZmF1bHRXaWR0aE51
bUNoYXJzKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0Zp
eGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewogICAgICAgICBtX21h
eFdpZHRoID0gbWF4KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKQEAgLTIx
OCwxNiArMjE3LDE2IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNNaW5NYXgK
ICAgICAgICAgbV9taW5XaWR0aCA9IDA7CiAgICAgZWxzZQogICAgICAgICBtX21pbldpZHRoID0g
bV9tYXhXaWR0aDsKLSAgICAKKwogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CiAg
ICAgICAgIG1fbWF4V2lkdGggPSBtaW4obV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5XaWR0aCA9IG1pbiht
X21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSkpOwogICAgIH0KLSAgICAKKwogICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBwYWRk
aW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAgICAgbV9taW5XaWR0
aCArPSB0b0FkZDsKICAgICBtX21heFdpZHRoICs9IHRvQWRkOwotICAgIAorCiAgICAgc2V0TWlu
TWF4S25vd24oKTsKIH0KIApAQCAtMjQzLDQgKzI0Miw0IEBAIFJlbmRlck9iamVjdCogSFRNTEZp
bGVVcGxvYWRJbm5lckJ1dHRvbkUKICAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6Y3JlYXRl
UmVuZGVyZXIoYXJlbmEsIHN0eWxlKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZp
c2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDEzICsxOCwxMiBAQAogICoKICAqLwogCi0jaWZuZGVm
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sX0gKLSNkZWZpbmUgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2xfSAotCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpZm5kZWYgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2xfaAorI2RlZmluZSBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbF9oCiAKICNpbmNsdWRl
ICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNoYXJlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00MSw2ICs0MCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bChOb2RlKik7CiAgICAgflJlbmRlckZpbGVVcGxvYWRDb250cm9sKCk7CiAKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wiOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2FsY01pbk1heFdpZHRoKCk7CkBAIC01MCwxNiArNTEsMTQgQEAgcHVibGljOgogCiAgICAgdm9p
ZCB2YWx1ZUNoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCI7IH0KLQogcHJvdGVjdGVk
OgogICAgIGludCBtYXhGaWxlbmFtZVdpZHRoKCk7CiAgICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUJ1
dHRvblN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwotICAgIAorCiAgICAgUmVm
UHRyPEhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVtZW50PiBtX2J1dHRvbjsKICAgICBSZWZQ
dHI8RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckZpbGVVcGxvYWRDb250cm9sX2gKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gMTc0MzQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw4ICsyMCw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyRmxleGlibGVCb3hfSAot
I2RlZmluZSBSZW5kZXJGbGV4aWJsZUJveF9ICisjaWZuZGVmIFJlbmRlckZsZXhpYmxlQm94X2gK
KyNkZWZpbmUgUmVuZGVyRmxleGlibGVCb3hfaAogCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
IApAQCAtMzIsNiArMzIsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyRmxleGlibGVCb3goTm9kZSop
OwogICAgIHZpcnR1YWwgflJlbmRlckZsZXhpYmxlQm94KCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4
V2lkdGgoKTsKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsTWluTWF4V2lkdGgoKTsKICAgICB2b2lk
IGNhbGNWZXJ0aWNhbE1pbk1heFdpZHRoKCk7CkBAIC00Niw4ICs0OCw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGbGV4aW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2ZsZXhp
bmdDaGlsZHJlbjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1N0cmV0Y2hpbmdDaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyZXRjaGluZ0NoaWxkcmVuOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKLQogICAgIHZvaWQgcGxhY2VDaGlsZChSZW5kZXJP
YmplY3QqIGNoaWxkLCBpbnQgeCwgaW50IHkpOwogCiBwcm90ZWN0ZWQ6CkBAIC02Myw0ICs2Myw0
IEBAIHByb3RlY3RlZDoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVu
ZGVyRmxleGlibGVCb3hfSAorI2VuZGlmIC8vIFJlbmRlckZsZXhpYmxlQm94X2gKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxOCArMjAsMTcgQEAKICAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93Lmgi
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC03OTksNCArNzk4LDQgQEAg
dm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmVGb3JMaW5lKEdyYQogICAgICAgICAgICAgICAg
ICAgIG93KTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3cuaAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRl
ZiBSZW5kZXJGbG93X0gKLSNkZWZpbmUgUmVuZGVyRmxvd19ICisjaWZuZGVmIFJlbmRlckZsb3df
aAorI2RlZmluZSBSZW5kZXJGbG93X2gKIAogI2luY2x1ZGUgIlJlbmRlckNvbnRhaW5lci5oIgog
CkBAIC01Miw0MiArNTIsNDIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyRmxvdyogY29u
dGludWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250aW51YXRpb247IH0KICAgICB2b2lkIHNl
dENvbnRpbnVhdGlvbihSZW5kZXJGbG93KiBjKSB7IG1fY29udGludWF0aW9uID0gYzsgfQogICAg
IFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KTsKLSAgICAKKwogICAgIHZvaWQgYWRkQ2hpbGRXaXRoQ29udGludWF0aW9uKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZFRvRmxvdyhSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCAq
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCAqYmVmb3JlQ2hpbGQgPSAwKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApOwogCi0gICAgc3RhdGljIFJlbmRlckZsb3cqIGNyZWF0ZUFub255bW91c0Zsb3co
RG9jdW1lbnQqIGRvYywgUmVuZGVyU3R5bGUqIHN0eWxlKTsKKyAgICBzdGF0aWMgUmVuZGVyRmxv
dyogY3JlYXRlQW5vbnltb3VzRmxvdyhEb2N1bWVudCosIFJlbmRlclN0eWxlKik7CiAKLSAgICB2
b2lkIGV4dHJhY3RMaW5lQm94KElubGluZUZsb3dCb3gqIGxpbmVCb3gpOwotICAgIHZvaWQgYXR0
YWNoTGluZUJveChJbmxpbmVGbG93Qm94KiBsaW5lQm94KTsKLSAgICB2b2lkIHJlbW92ZUxpbmVC
b3goSW5saW5lRmxvd0JveCogbGluZUJveCk7CisgICAgdm9pZCBleHRyYWN0TGluZUJveChJbmxp
bmVGbG93Qm94Kik7CisgICAgdm9pZCBhdHRhY2hMaW5lQm94KElubGluZUZsb3dCb3gqKTsKKyAg
ICB2b2lkIHJlbW92ZUxpbmVCb3goSW5saW5lRmxvd0JveCopOwogICAgIHZvaWQgZGVsZXRlTGlu
ZUJveGVzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKTsKLSAgICAK
LSAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290
TGluZUJveD1mYWxzZSkgY29uc3Q7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWln
aHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKwog
ICAgIElubGluZUZsb3dCb3gqIGZpcnN0TGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RM
aW5lQm94OyB9CiAgICAgSW5saW5lRmxvd0JveCogbGFzdExpbmVCb3goKSBjb25zdCB7IHJldHVy
biBtX2xhc3RMaW5lQm94OyB9CiAKICAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5l
Qm94KGJvb2wgbWFrZVBsYWNlSG9sZGVyQm94LCBib29sIGlzUm9vdExpbmVCb3gsIGJvb2wgaXNP
bmx5UnVuPWZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxs
TGF5b3V0LCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSk7Ci0gICAgCi0gICAgdm9pZCBwYWlu
dExpbmVzKFBhaW50SW5mbyYsIGludCBfdHgsIGludCBfdHkpOworCisgICAgdm9pZCBwYWludExp
bmVzKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICBib29sIGhpdFRlc3RMaW5lcyhI
aXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
bik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwotICAg
IAotICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50
ZXJpb3I9dHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZj10cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCByaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yPXRydWUsIGJv
b2wgaW5jbHVkZVNlbGY9dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGVmdG1vc3RQb3Np
dGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yPXRydWUsIGJvb2wgaW5jbHVkZVNlbGY9
dHJ1ZSkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJbnRSZWN0IGNhcmV0UmVjdChpbnQgb2Zm
c2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNUUkVBTSwgaW50ICpleHRyYVdpZHRoVG9FbmRP
ZkxpbmUgPSAwKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGlj
c0NvbnRleHQqLCBpbnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2b2lkIHBhaW50T3V0bGluZUZvckxp
bmUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QgJnByZXZM
aW5lLCBjb25zdCBJbnRSZWN0ICZ0aGlzTGluZSwgY29uc3QgSW50UmVjdCAmbmV4dExpbmUpOwor
ICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJp
b3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgcmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUs
IGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsZWZ0bW9z
dFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1
ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGlu
dCBvZmZzZXQsIEVBZmZpbml0eSA9IFVQU1RSRUFNLCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDApOworCisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29u
dGV4dCosIGludCB0eCwgaW50IHR5KTsKKyAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3Jh
cGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QmIHByZXZMaW5lLCBj
b25zdCBJbnRSZWN0JiB0aGlzTGluZSwgY29uc3QgSW50UmVjdCYgbmV4dExpbmUpOwogICAgIHZv
aWQgcGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIAogcHJv
dGVjdGVkOgpAQCAtMTAyLDEwICsxMDIsMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIEZvciBpbmxp
bmUgZmxvd3MsIGVhY2ggYm94IHJlcHJlc2VudHMgYSBwb3J0aW9uIG9mIHRoYXQgaW5saW5lLgog
ICAgIElubGluZUZsb3dCb3gqIG1fZmlyc3RMaW5lQm94OwogICAgIElubGluZUZsb3dCb3gqIG1f
bGFzdExpbmVCb3g7Ci0gICAgCisKICAgICBtdXRhYmxlIHNob3J0IG1fbGluZUhlaWdodDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFJlbmRlckZsb3dfSAorI2Vu
ZGlmIC8vIFJlbmRlckZsb3dfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE3ICsyMSwxOSBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lmZGVmIFNWR19TVVBQT1JUCisKICNpbmNsdWRl
ICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAj
aW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGgu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJGb3JlaWduT2JqZWN0OjpSZW5kZXJG
b3JlaWduT2JqZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50ICpub2RlKSAKK1JlbmRlckZvcmVp
Z25PYmplY3Q6OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIG5v
ZGUpIAogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKIHsKIH0KQEAgLTQ3LDcgKzQ5LDcgQEAgdm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZgogICAgIGlmIChwYWludEluZm8u
cC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBLUmVuZGVyaW5n
RGV2aWNlICpkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKKyAgICBLUmVuZGVyaW5nRGV2aWNl
KiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQoKTsKICAgICBib29sIHNob3VsZFBv
cENvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoIWNvbnRleHQpIHsKQEAgLTc2LDcgKzc4LDcgQEAg
dm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZgogCiAgICAgaWYgKG9wYWNp
dHkgPCAxLjBmKQogICAgICAgICBwYWludEluZm8ucC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
LSAgICAKKwogICAgIGlmIChzaG91bGRQb3BDb250ZXh0KSB7CiAgICAgICAgIGRldmljZS0+cG9w
Q29udGV4dCgpOwogICAgICAgICBkZWxldGUgY29udGV4dDsKQEAgLTg5LDcgKzkxLDcgQEAgdm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlQWJzb2x1dAogewogICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGxvY2FsVHJhbnNm
b3JtKCk7CiAgICAgciA9IHRyYW5zZm9ybS5tYXBSZWN0KHIpOwotICAgIAorCiAgICAgUmVuZGVy
QmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYpOwogfQogCkBAIC0xMTQsNyAr
MTE2LDcgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQoKQogCiAgICAgaWYgKGNo
ZWNrRm9yUmVwYWludCkKICAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91
bmRzLCBvbGRCb3VuZHMpOwotICAgIAorCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQog
CkBAIC0xMjQsOSArMTI2LDkgQEAgYm9vbCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2lu
dChIaQogICAgIHRvdGFsVHJhbnNmb3JtICo9IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOwog
ICAgIGRvdWJsZSBsb2NhbFgsIGxvY2FsWTsKICAgICB0b3RhbFRyYW5zZm9ybS5pbnZlcnQoKS5t
YXAoeCwgeSwgJmxvY2FsWCwgJmxvY2FsWSk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChyZXN1bHQsIChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSwgdHgsIHR5LCBoaXRUZXN0
QWN0aW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlc3VsdCwgc3Rh
dGljX2Nhc3Q8aW50Pihsb2NhbFgpLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsWSksIHR4LCB0eSwg
aGl0VGVzdEFjdGlvbik7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVj
dC5oCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25P
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjkgKzIwLDI5IEBACiAgKgogICovCiAKLSNp
Zm5kZWYgUmVuZGVyRm9yZWlnbk9iamVjdF9ICi0jZGVmaW5lIFJlbmRlckZvcmVpZ25PYmplY3Rf
SAorI2lmbmRlZiBSZW5kZXJGb3JlaWduT2JqZWN0X2gKKyNkZWZpbmUgUmVuZGVyRm9yZWlnbk9i
amVjdF9oCiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDsKIAot
Y2xhc3MgUmVuZGVyRm9yZWlnbk9iamVjdCA6IHB1YmxpYyBSZW5kZXJCbG9jawoteworY2xhc3Mg
UmVuZGVyRm9yZWlnbk9iamVjdCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6Ci0gICAg
UmVuZGVyRm9yZWlnbk9iamVjdChTVkdGb3JlaWduT2JqZWN0RWxlbWVudCAqbm9kZSk7Ci0gICAg
Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlckZvcmVpZ25PYmplY3QiOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwotICAgIAorICAgIFJlbmRlckZv
cmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJGb3JlaWduT2JqZWN0
IjsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBp
bnQgcGFyZW50WSk7CisKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldExv
Y2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJhbnNm
b3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZik7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
cHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYsIGJvb2wgZml4ZWQpOwogICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCkBA
IC01MCwxMSArNTAsMTIgQEAgcHVibGljOgogCiAgcHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CisKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90
cmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwogfTsKIAotfQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLSNlbmRpZgorI2VuZGlm
IC8vIFJlbmRlckZvcmVpZ25PYmplY3RfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZv
cm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDkgQEAgc2hvcnQg
UmVuZGVyRm9ybUVsZW1lbnQ6OmJhc2VsaW5lUG9zaXRpbwogICAgIHJldHVybiBtYXJnaW5Ub3Ao
KSArIHdpZGdldCgpLT5iYXNlbGluZVBvc2l0aW9uKG1faGVpZ2h0KTsKIH0KIAotdm9pZCBSZW5k
ZXJGb3JtRWxlbWVudDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHMpCit2b2lkIFJlbmRlckZvcm1F
bGVtZW50OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyV2lk
Z2V0OjpzZXRTdHlsZShzKTsKKyAgICBSZW5kZXJXaWRnZXQ6OnNldFN0eWxlKG5ld1N0eWxlKTsK
IAogICAgIC8vIERvIG5vdCBwYWludCBhIGJhY2tncm91bmQgb3IgYm9yZGVyIGZvciBBcXVhIGZv
cm0gZWxlbWVudHMKICAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcihmYWxzZSk7
CkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmxheW91dCgpCiAKICAg
ICBjYWxjV2lkdGgoKTsKICAgICBjYWxjSGVpZ2h0KCk7Ci0gICAgCisKICAgICBzZXROZWVkc0xh
eW91dChmYWxzZSk7CiB9CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCBIb3Jpem9udGFsQWxpZ25tZW50
IFJlbmRlckZvcm1FbGVtZW50Ojp0CiAgICAgICAgIGNhc2UgVEFBVVRPOgogICAgICAgICAgICAg
cmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IEFsaWduUmlnaHQgOiBBbGlnbkxl
ZnQ7CiAgICAgfQotICAgIEFTU0VSVChmYWxzZSk7IC8vIFNob3VsZCBuZXZlciBiZSByZWFjaGVk
LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBBbGlnbkxlZnQ7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcm1FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTc0MzQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFJlbmRlckZvcm1FbGVtZW50X2gKICNkZWZpbmUg
UmVuZGVyRm9ybUVsZW1lbnRfaAogCi0jaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAJKHJldmlzaW9u
IDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
CiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuaAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyNyArMjIsMjUg
QEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJGcmFtZV9ICi0jZGVmaW5lIFJlbmRlckZyYW1l
X0gKKyNpZm5kZWYgUmVuZGVyRnJhbWVfaAorI2RlZmluZSBSZW5kZXJGcmFtZV9oCiAKLSNpbmNs
dWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1
ZGUgIlJlbmRlclBhcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJG
cmFtZSA6IHB1YmxpYyBSZW5kZXJQYXJ0Ci17CitjbGFzcyBSZW5kZXJGcmFtZSA6IHB1YmxpYyBS
ZW5kZXJQYXJ0IHsKIHB1YmxpYzoKICAgICBSZW5kZXJGcmFtZShIVE1MRnJhbWVFbGVtZW50Kik7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAi
UmVuZGVyRnJhbWUiOyB9CiAKLSAgICBIVE1MRnJhbWVFbGVtZW50KiBlbGVtZW50KCkgY29uc3QK
LSAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KFJlbmRlclBh
cnQ6OmVsZW1lbnQoKSk7IH0KKyAgICBIVE1MRnJhbWVFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KFJlbmRlclBhcnQ6OmVsZW1l
bnQoKSk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgpOwogfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJGcmFtZV9oCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAxNzQzNCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCisK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgogCkBAIC0z
MSwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NTcsNCArNTU4LDQgQEAgdm9pZCBSZW5kZXJGcmFt
ZVNldDo6ZHVtcChUZXh0U3RyZWFtKiBzdAogfQogI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkocmV2aXNpb24gMTc0
MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwyMCArMjIsMTggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJGcmFtZVNldF9I
Ci0jZGVmaW5lIFJlbmRlckZyYW1lU2V0X0gKKyNpZm5kZWYgUmVuZGVyRnJhbWVTZXRfaAorI2Rl
ZmluZSBSZW5kZXJGcmFtZVNldF9oCiAKLSNpbmNsdWRlICJSZW5kZXJDb250YWluZXIuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCi0KKyNpbmNsdWRlICJSZW5kZXJDb250YWlu
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50
OwogY2xhc3MgTW91c2VFdmVudDsKIAotY2xhc3MgUmVuZGVyRnJhbWVTZXQgOiBwdWJsaWMgUmVu
ZGVyQ29udGFpbmVyCi17CitjbGFzcyBSZW5kZXJGcmFtZVNldCA6IHB1YmxpYyBSZW5kZXJDb250
YWluZXIgewogICAgIGZyaWVuZCBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50OwogcHVibGljOgog
ICAgIFJlbmRlckZyYW1lU2V0KEhUTUxGcmFtZVNldEVsZW1lbnQqKTsKQEAgLTU2LDggKzU0LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIEhU
TUxGcmFtZVNldEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdAotICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50Kj4oUmVuZGVyQ29udGFpbmVyOjplbGVtZW50KCkp
OyB9CisgICAgSFRNTEZyYW1lU2V0RWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQqPihSZW5kZXJDb250YWluZXI6OmVsZW1lbnQo
KSk7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFt
KiBzdHJlYW0sIERlcHJlY2F0ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwpAQCAtODEsNiArNzgs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jbGllbnRSZXNpemluZzsKIH07CiAKLX0KK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyRnJhbWVTZXRfaApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDE3NDM0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDQ5ICszNSw0NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlckhUTUxDYW52YXM6OlJlbmRlckhUTUxDYW52YXMoTm9k
ZSogbikKLSAgICA6IFJlbmRlclJlcGxhY2VkKG4pCitSZW5kZXJIVE1MQ2FudmFzOjpSZW5kZXJI
VE1MQ2FudmFzKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQogewogfQog
Ci1jb25zdCBjaGFyKiBSZW5kZXJIVE1MQ2FudmFzOjpyZW5kZXJOYW1lKCkgY29uc3QKK3ZvaWQg
UmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5KQogewotICAgIHJldHVybiAiUmVuZGVySFRNTENhbnZhcyI7Ci19Ci0KLXZvaWQgUmVuZGVy
SFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICBp
ZiAoIXNob3VsZFBhaW50KGksIHR4LCB0eSkpCisgICAgaWYgKCFzaG91bGRQYWludChwYWludElu
Zm8sIHR4LCB0eSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCB4ID0gdHggKyBtX3g7CiAg
ICAgaW50IHkgPSB0eSArIG1feTsKIAotICAgIGlmIChzaG91bGRQYWludEJhY2tncm91bmRPckJv
cmRlcigpICYmIChpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IGkucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIHgs
IHkpOworICAgIGlmIChzaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpICYmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VTZWxlY3Rpb24pKSAKKyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludElu
Zm8sIHgsIHkpOwogCi0gICAgaWYgKChpLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGku
cGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgo
KSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRs
aW5lKGkucCwgeCwgeSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwotICAgIAotICAgIGlm
IChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIGkucGhhc2UgIT0gUGFpbnRQaGFz
ZVNlbGVjdGlvbikKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGlu
ZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgp
LT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAg
ICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5wLCB4LCB5LCB3aWR0aCgpLCBoZWlnaHQoKSwg
c3R5bGUoKSk7CisKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIXNob3VsZFBhaW50V2l0aGluUm9vdChpKSkKKyAgICBpZiAoIXNo
b3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICBi
b29sIGRyYXdTZWxlY3Rpb25UaW50ID0gc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25l
ICYmICFkb2N1bWVudCgpLT5wcmludGluZygpOwotICAgIGlmIChpLnBoYXNlID09IFBhaW50UGhh
c2VTZWxlY3Rpb24pIHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxl
Y3Rpb24pIHsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZHJhd1NlbGVjdGlvblRpbnQgPSBmYWxzZTsK
ICAgICB9CiAKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShjYW52
YXNUYWcpKQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGVsZW1lbnQo
KSktPnBhaW50KGkucCwKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihl
bGVtZW50KCkpLT5wYWludChwYWludEluZm8ucCwKICAgICAgICAgICAgIEludFJlY3QoeCArIGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
KSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQoKSkpOwogCiAgICAgaWYgKGRyYXdTZWxl
Y3Rpb25UaW50KQotICAgICAgICBpLnAtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICBwYWludEluZm8ucC0+ZmlsbFJlY3Qoc2Vs
ZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiB9CiAKIHZvaWQgUmVu
ZGVySFRNTENhbnZhczo6bGF5b3V0KCkKQEAgLTk3LDQgKzkyLDQgQEAgdm9pZCBSZW5kZXJIVE1M
Q2FudmFzOjpsYXlvdXQoKQogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
aAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgUmVuZGVySFRNTENhbnZhc19ICi0jZGVmaW5lIFJlbmRlckhUTUxDYW52YXNf
SAorI2lmbmRlZiBSZW5kZXJIVE1MQ2FudmFzX2gKKyNkZWZpbmUgUmVuZGVySFRNTENhbnZhc19o
CiAKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgogCkBAIC0zMywxMSArMzMsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlbmRlckhUTUxDYW52YXMgOiBwdWJsaWMgUmVu
ZGVyUmVwbGFjZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVySFRNTENhbnZhcyhOb2Rl
Kik7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OworCisg
ICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJIVE1MQ2FudmFzIjsgfQorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgor
I2VuZGlmIC8vIFJlbmRlckhUTUxDYW52YXNfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlckltYWdlOjpSZW5kZXJJbWFn
ZShOb2RlKiBuKQotICAgIDogUmVuZGVyUmVwbGFjZWQobikKK1JlbmRlckltYWdlOjpSZW5kZXJJ
bWFnZShOb2RlKiBub2RlKQorICAgIDogUmVuZGVyUmVwbGFjZWQobm9kZSkKICAgICAsIG1fY2Fj
aGVkSW1hZ2UoMCkKKyAgICAsIG1faXNBbm9ueW1vdXNJbWFnZSgwKQogewogICAgIG1fc2VsZWN0
aW9uU3RhdGUgPSBTZWxlY3Rpb25Ob25lOwogICAgIHNldEludHJpbnNpY1dpZHRoKDApOwogICAg
IHNldEludHJpbnNpY0hlaWdodCgwKTsKLSAgICBtX2lzQW5vbnltb3VzSW1hZ2UgPSAwOwogICAg
IHVwZGF0ZUFsdFRleHQoKTsKIH0KIApAQCAtNjEsMTkgKzYxLDE4IEBAIFJlbmRlckltYWdlOjp+
UmVuZGVySW1hZ2UoKQogICAgICAgICBtX2NhY2hlZEltYWdlLT5kZXJlZih0aGlzKTsKIH0KIAot
dm9pZCBSZW5kZXJJbWFnZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIF9zdHlsZSkKK3ZvaWQgUmVu
ZGVySW1hZ2U6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJS
ZXBsYWNlZDo6c2V0U3R5bGUoX3N0eWxlKTsKLSAgICAKKyAgICBSZW5kZXJSZXBsYWNlZDo6c2V0
U3R5bGUobmV3U3R5bGUpOwogICAgIHNldFNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKHRy
dWUpOwogfQogCi12b2lkIFJlbmRlckltYWdlOjpzZXRDb250ZW50T2JqZWN0KENhY2hlZFJlc291
cmNlKiBjbykKK3ZvaWQgUmVuZGVySW1hZ2U6OnNldENvbnRlbnRPYmplY3QoQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlKQogewotICAgIGlmIChjbyAmJiBtX2NhY2hlZEltYWdlICE9IGNv
KSB7CisgICAgaWYgKGNhY2hlZFJlc291cmNlICYmIG1fY2FjaGVkSW1hZ2UgIT0gY2FjaGVkUmVz
b3VyY2UpIHsKICAgICAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2NhY2hl
ZEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgbV9jYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0
PENhY2hlZEltYWdlKj4oY28pOworICAgICAgICBtX2NhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2UqPihjYWNoZWRSZXNvdXJjZSk7CiAgICAgICAgIGlmIChtX2NhY2hlZEltYWdl
KQogICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMpOwogICAgIH0KQEAgLTgzLDcg
KzgyLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6c2V0Q2FjaGVkSW1hZ2UoQ2FjaGVkSQogewogICAg
IGlmIChpc0Fub255bW91c0ltYWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlm
IChtX2NhY2hlZEltYWdlICE9IG5ld0ltYWdlKSB7CiAgICAgICAgIGlmIChtX2NhY2hlZEltYWdl
KQogICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYodGhpcyk7CkBAIC05NSw0NiArOTQs
NDYgQEAgdm9pZCBSZW5kZXJJbWFnZTo6c2V0Q2FjaGVkSW1hZ2UoQ2FjaGVkSQogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBvKQordm9pZCBS
ZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBuZXdJbWFnZSkKIHsKICAgICBp
ZiAoZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
byAhPSBtX2NhY2hlZEltYWdlKSB7Ci0gICAgICAgIFJlbmRlclJlcGxhY2VkOjppbWFnZUNoYW5n
ZWQobyk7CisgICAgaWYgKG5ld0ltYWdlICE9IG1fY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgUmVu
ZGVyUmVwbGFjZWQ6OmltYWdlQ2hhbmdlZChuZXdJbWFnZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBib29sIGl3Y2hhbmdlZCA9IGZhbHNlOworICAgIGJvb2wgaW1hZ2VTaXplQ2hh
bmdlZCA9IGZhbHNlOwogCi0gICAgaWYgKG8tPmlzRXJyb3JJbWFnZSgpKSB7Ci0gICAgICAgIGlu
dCBpdyA9IG8tPmltYWdlKCktPndpZHRoKCkgKyA0OwotICAgICAgICBpbnQgaWggPSBvLT5pbWFn
ZSgpLT5oZWlnaHQoKSArIDQ7CisgICAgaWYgKG5ld0ltYWdlLT5pc0Vycm9ySW1hZ2UoKSkgewor
ICAgICAgICBpbnQgaW1hZ2VXaWR0aCA9IG5ld0ltYWdlLT5pbWFnZSgpLT53aWR0aCgpICsgNDsK
KyAgICAgICAgaW50IGltYWdlSGVpZ2h0ID0gbmV3SW1hZ2UtPmltYWdlKCktPmhlaWdodCgpICsg
NDsKIAogICAgICAgICAvLyB3ZSBoYXZlIGFuIGFsdCBhbmQgdGhlIHVzZXIgbWVhbnQgaXQgKGl0
cyBub3QgYSB0ZXh0IHdlIGludmVudGVkKQogICAgICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0g
ICAgICAgICAgICBpdyA9IG1heChpdywgbWluKGZvbnQud2lkdGgoVGV4dFJ1bihtX2FsdFRleHQu
Y2hhcmFjdGVycygpLCBtX2FsdFRleHQubGVuZ3RoKCkpKSwgMTAyNCkpOwotICAgICAgICAgICAg
aWggPSBtYXgoaWgsIG1pbihmb250LmhlaWdodCgpLCAyNTYpKTsKKyAgICAgICAgICAgIGltYWdl
V2lkdGggPSBtYXgoaW1hZ2VXaWR0aCwgbWluKGZvbnQud2lkdGgoVGV4dFJ1bihtX2FsdFRleHQu
Y2hhcmFjdGVycygpLCBtX2FsdFRleHQubGVuZ3RoKCkpKSwgMTAyNCkpOworICAgICAgICAgICAg
aW1hZ2VIZWlnaHQgPSBtYXgoaW1hZ2VIZWlnaHQsIG1pbihmb250LmhlaWdodCgpLCAyNTYpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdyAhPSBpbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAg
ICAgICAgICBzZXRJbnRyaW5zaWNXaWR0aChpdyk7Ci0gICAgICAgICAgICBpd2NoYW5nZWQgPSB0
cnVlOworICAgICAgICBpZiAoaW1hZ2VXaWR0aCAhPSBpbnRyaW5zaWNXaWR0aCgpKSB7CisgICAg
ICAgICAgICBzZXRJbnRyaW5zaWNXaWR0aChpbWFnZVdpZHRoKTsKKyAgICAgICAgICAgIGltYWdl
U2l6ZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpaCAhPSBpbnRyaW5z
aWNIZWlnaHQoKSkgewotICAgICAgICAgICAgc2V0SW50cmluc2ljSGVpZ2h0KGloKTsKLSAgICAg
ICAgICAgIGl3Y2hhbmdlZCA9IHRydWU7CisgICAgICAgIGlmIChpbWFnZUhlaWdodCAhPSBpbnRy
aW5zaWNIZWlnaHQoKSkgeworICAgICAgICAgICAgc2V0SW50cmluc2ljSGVpZ2h0KGltYWdlSGVp
Z2h0KTsKKyAgICAgICAgICAgIGltYWdlU2l6ZUNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgYm9vbCBuZWVkbGF5b3V0ID0gZmFsc2U7CisgICAgYm9vbCBlbnN1cmVMYXlv
dXQgPSBmYWxzZTsKIAogICAgIC8vIEltYWdlIGRpbWVuc2lvbnMgaGF2ZSBiZWVuIGNoYW5nZWQs
IHNlZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUKLSAgICBpZiAoKG8tPmltYWdlU2l6ZSgpLndpZHRo
KCkgIT0gaW50cmluc2ljV2lkdGgoKSB8fCBvLT5pbWFnZVNpemUoKS5oZWlnaHQoKSAhPSBpbnRy
aW5zaWNIZWlnaHQoKSB8fCBpd2NoYW5nZWQpKSB7Ci0gICAgICAgIGlmKCFvLT5pc0Vycm9ySW1h
Z2UoKSkgewotICAgICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgoby0+aW1hZ2VTaXplKCkud2lk
dGgoKSk7Ci0gICAgICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoby0+aW1hZ2VTaXplKCkuaGVp
Z2h0KCkpOworICAgIGlmIChuZXdJbWFnZS0+aW1hZ2VTaXplKCkud2lkdGgoKSAhPSBpbnRyaW5z
aWNXaWR0aCgpIHx8IG5ld0ltYWdlLT5pbWFnZVNpemUoKS5oZWlnaHQoKSAhPSBpbnRyaW5zaWNI
ZWlnaHQoKSB8fCBpbWFnZVNpemVDaGFuZ2VkKSB7CisgICAgICAgIGlmICghbmV3SW1hZ2UtPmlz
RXJyb3JJbWFnZSgpKSB7CisgICAgICAgICAgICBzZXRJbnRyaW5zaWNXaWR0aChuZXdJbWFnZS0+
aW1hZ2VTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQobmV3
SW1hZ2UtPmltYWdlU2l6ZSgpLmhlaWdodCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElu
IHRoZSBjYXNlIG9mIGdlbmVyYXRlZCBpbWFnZSBjb250ZW50IHVzaW5nIDpiZWZvcmUvOmFmdGVy
LCB3ZSBtaWdodCBub3QgYmUgaW4gdGhlCkBAIC0xNDcsMjQgKzE0NiwyMyBAQCB2b2lkIFJlbmRl
ckltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hCiAgICAgICAgICAgICBjYWxjV2lkdGgoKTsK
ICAgICAgICAgICAgIGNhbGNIZWlnaHQoKTsKICAgICAKLSAgICAgICAgICAgIGlmKGl3Y2hhbmdl
ZCB8fCBtX3dpZHRoICE9IG9sZHdpZHRoIHx8IG1faGVpZ2h0ICE9IG9sZGhlaWdodCkKLSAgICAg
ICAgICAgICAgICBuZWVkbGF5b3V0ID0gdHJ1ZTsKLSAgICAKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemVDaGFuZ2VkIHx8IG1fd2lkdGggIT0gb2xkd2lkdGggfHwgbV9oZWlnaHQgIT0gb2xkaGVp
Z2h0KQorICAgICAgICAgICAgICAgIGVuc3VyZUxheW91dCA9IHRydWU7CisKICAgICAgICAgICAg
IG1fd2lkdGggPSBvbGR3aWR0aDsKICAgICAgICAgICAgIG1faGVpZ2h0ID0gb2xkaGVpZ2h0Owog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5lZWRsYXlvdXQpIHsKKyAgICBpZiAoZW5zdXJl
TGF5b3V0KSB7CiAgICAgICAgIGlmICghc2VsZk5lZWRzTGF5b3V0KCkpCiAgICAgICAgICAgICBz
ZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgaWYgKG1pbk1heEtub3duKCkpCiAgICAgICAg
ICAgICBzZXRNaW5NYXhLbm93bihmYWxzZSk7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UK
ICAgICAgICAgLy8gRklYTUU6IFdlIGFsd2F5cyBqdXN0IGRvIGEgY29tcGxldGUgcmVwYWludCwg
c2luY2Ugd2UgYWx3YXlzIHBhc3MgaW4gdGhlIGZ1bGwgaW1hZ2UKICAgICAgICAgLy8gcmVjdCBh
dCB0aGUgbW9tZW50IGFueXdheS4KLSAgICAgICAgcmVwYWludFJlY3RhbmdsZShJbnRSZWN0KGJv
cmRlckxlZnQoKStwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKStwYWRkaW5nVG9wKCksIGNvbnRl
bnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgcmVwYWludFJlY3RhbmdsZShJ
bnRSZWN0KGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGlu
Z1RvcCgpLCBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSk7CiB9CiAKIHZvaWQgUmVu
ZGVySW1hZ2U6OnJlc2V0QW5pbWF0aW9uKCkKQEAgLTE3NiwzMCArMTc0LDMxIEBAIHZvaWQgUmVu
ZGVySW1hZ2U6OnJlc2V0QW5pbWF0aW9uKCkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBpZiAo
IXNob3VsZFBhaW50KGksIF90eCwgX3R5KSkgcmV0dXJuOworICAgIGlmICghc2hvdWxkUGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpKQorICAgICAgICByZXR1cm47CiAKLSAgICBfdHggKz0gbV94Owot
ICAgIF90eSArPSBtX3k7CisgICAgdHggKz0gbV94OworICAgIHR5ICs9IG1feTsKICAgICAgICAg
Ci0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgJiYgaS5waGFzZSAhPSBQ
YWludFBoYXNlT3V0bGluZSAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgCi0g
ICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBfdHkpOworICAgIGlmIChzaG91bGRQ
YWludEJhY2tncm91bmRPckJvcmRlcigpICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAKKyAg
ICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQqIHAgPSBpLnA7Ci0gICAgCi0gICAgaWYgKChpLnBoYXNlID09IFBhaW50UGhh
c2VPdXRsaW5lIHx8IGkucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgp
LT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAg
ICAgICAgcGFpbnRPdXRsaW5lKHAsIF90eCwgX3R5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUo
KSk7Ci0gICAgCi0gICAgaWYgKGkucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgaS5w
aGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKQorICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IHBh
aW50SW5mby5wOworCisgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxp
bmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUo
KS0+b3V0bGluZVdpZHRoKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisg
ICAgICAgIHBhaW50T3V0bGluZShwLCB0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgp
KTsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290KGkpKQorICAgIGlmICghc2hvdWxkUGFp
bnRXaXRoaW5Sb290KHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Ym9vbCBpc1ByaW50aW5nID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKICAgICBib29sIGRyYXdT
ZWxlY3Rpb25UaW50ID0gaXNTZWxlY3RlZCgpICYmICFpc1ByaW50aW5nOwotICAgIGlmIChpLnBo
YXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pIHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VTZWxlY3Rpb24pIHsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0g
U2VsZWN0aW9uTm9uZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZHJhd1NlbGVjdGlv
blRpbnQgPSBmYWxzZTsKQEAgLTIxNiw0MiArMjE1LDQzIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50KFBhaW50SW5mbyYgaSwgaW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2NhY2hl
ZEltYWdlIHx8IGltYWdlKCktPmlzTnVsbCgpIHx8IGVycm9yT2NjdXJyZWQoKSkgewotICAgICAg
ICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKQorICAgICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgaWYgKGNXaWR0aCA+IDIgJiYgY0hlaWdodCA+IDIpIHsKICAgICAgICAgICAgIGlm
ICghZXJyb3JPY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKENvbG9yOjps
aWdodEdyYXkpOwogICAgICAgICAgICAgICAgIHAtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnQpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoX3R4ICsgbGVmdEJv
cmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0
KSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh0eCArIGxlZnRCb3JkZXIg
KyBsZWZ0UGFkLCB0eSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbCBlcnJvclBpY3R1
cmVEcmF3biA9IGZhbHNlOwotICAgICAgICAgICAgaW50IGltYWdlWCA9IDAsIGltYWdlWSA9IDA7
CisgICAgICAgICAgICBpbnQgaW1hZ2VYID0gMDsKKyAgICAgICAgICAgIGludCBpbWFnZVkgPSAw
OwogICAgICAgICAgICAgaW50IHVzYWJsZVdpZHRoID0gY1dpZHRoOwogICAgICAgICAgICAgaW50
IHVzYWJsZUhlaWdodCA9IGNIZWlnaHQ7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYg
KGVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2UoKS0+aXNOdWxsKCkgJiYgKHVzYWJsZVdpZHRoID49
IGltYWdlKCktPndpZHRoKCkpICYmICh1c2FibGVIZWlnaHQgPj0gaW1hZ2UoKS0+aGVpZ2h0KCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gQ2VudGVyIHRoZSBlcnJvciBpbWFnZSwgYWNjb3VudGlu
ZyBmb3IgYm9yZGVyIGFuZCBwYWRkaW5nLgotICAgICAgICAgICAgICAgIGludCBjZW50ZXJYID0g
KHVzYWJsZVdpZHRoIC0gaW1hZ2UoKS0+d2lkdGgoKSkvMjsKKyAgICAgICAgICAgICAgICBpbnQg
Y2VudGVyWCA9ICh1c2FibGVXaWR0aCAtIGltYWdlKCktPndpZHRoKCkpIC8gMjsKICAgICAgICAg
ICAgICAgICBpZiAoY2VudGVyWCA8IDApCiAgICAgICAgICAgICAgICAgICAgIGNlbnRlclggPSAw
OwotICAgICAgICAgICAgICAgIGludCBjZW50ZXJZID0gKHVzYWJsZUhlaWdodCAtIGltYWdlKCkt
PmhlaWdodCgpKS8yOworICAgICAgICAgICAgICAgIGludCBjZW50ZXJZID0gKHVzYWJsZUhlaWdo
dCAtIGltYWdlKCktPmhlaWdodCgpKSAvIDI7CiAgICAgICAgICAgICAgICAgaWYgKGNlbnRlclkg
PCAwKQogICAgICAgICAgICAgICAgICAgICBjZW50ZXJZID0gMDsKICAgICAgICAgICAgICAgICBp
bWFnZVggPSBsZWZ0Qm9yZGVyICsgbGVmdFBhZCArIGNlbnRlclg7CiAgICAgICAgICAgICAgICAg
aW1hZ2VZID0gdG9wQm9yZGVyICsgdG9wUGFkICsgY2VudGVyWTsKLSAgICAgICAgICAgICAgICBw
LT5kcmF3SW1hZ2UoaW1hZ2UoKSwgSW50UG9pbnQoX3R4ICsgaW1hZ2VYLCBfdHkgKyBpbWFnZVkp
KTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgSW50UG9pbnQodHggKyBp
bWFnZVgsIHR5ICsgaW1hZ2VZKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0dXJlRHJhd24g
PSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgh
bV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
dGV4dCA9IG1fYWx0VGV4dC5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgdGV4
dC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgICAgICAg
ICAgICAgcC0+c2V0Rm9udChzdHlsZSgpLT5mb250KCkpOwogICAgICAgICAgICAgICAgIHAtPnNl
dFBlbihzdHlsZSgpLT5jb2xvcigpKTsKLSAgICAgICAgICAgICAgICBpbnQgYXggPSBfdHggKyBs
ZWZ0Qm9yZGVyICsgbGVmdFBhZDsKLSAgICAgICAgICAgICAgICBpbnQgYXkgPSBfdHkgKyB0b3BC
b3JkZXIgKyB0b3BQYWQ7CisgICAgICAgICAgICAgICAgaW50IGF4ID0gdHggKyBsZWZ0Qm9yZGVy
ICsgbGVmdFBhZDsKKyAgICAgICAgICAgICAgICBpbnQgYXkgPSB0eSArIHRvcEJvcmRlciArIHRv
cFBhZDsKICAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgp
OwogICAgICAgICAgICAgICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgpOwogICAgICAgICAg
ICAgICAgIApAQCAtMjY4LDEyICsyNjgsMTIgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBpLCBpbgogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2NhY2hlZEltYWdlKSB7
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0g
bnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICAgICAgcGFpbnRD
dXN0b21IaWdobGlnaHQoX3R4IC0gbV94LCBfdHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hsaWdodCgp
LCB0cnVlKTsKKyAgICAgICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYm
ICFwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQodHggLSBtX3gsIHR5IC0gbV95LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1
ZSk7CiAjZW5kaWYKIAotICAgICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoX3R4ICsgbGVmdEJv
cmRlciArIGxlZnRQYWQsIF90eSArIHRvcEJvcmRlciArIHRvcFBhZCksIEludFNpemUoY1dpZHRo
LCBjSGVpZ2h0KSk7Ci0gICAgICAgIAorICAgICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQodHgg
KyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQpLCBJbnRTaXpl
KGNXaWR0aCwgY0hlaWdodCkpOworCiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWx0
ID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoaW1nVGFnKSkgPyBzdGF0aWNf
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1hZ2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9z
aXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgICAgIHAtPmRyYXdJbWFn
ZShpbWFnZSgpLCByZWN0LCBjb21wb3NpdGVPcGVyYXRvcik7CkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogdm9pZCBSZW5kZXJJbWFn
ZTo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCBt
aW5NYXhLbm93bigpICk7CisgICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgSW50UmVj
dCBvbGRCb3VuZHM7CiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnRE
dXJpbmdMYXlvdXQoKTsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFJlbmRlckltYWdlOjp1cGRh
dGVBbHRUZXh0KCkKIHsKICAgICBpZiAoIWVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKKwogICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAg
ICBtX2FsdFRleHQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCgpKS0+
YWx0VGV4dCgpOwogICAgIGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKQpA
QCAtNDM1LDQgKzQzNSw0IEBAIEltYWdlKiBSZW5kZXJJbWFnZTo6bnVsbEltYWdlKCkKICAgICBy
ZXR1cm4gJnNoYXJlZE51bGxJbWFnZTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBSRU5ERVJfSU1BR0VfSAotI2RlZmluZSBSRU5ERVJfSU1BR0Vf
SAorI2lmbmRlZiBSZW5kZXJJbWFnZV9oCisjZGVmaW5lIFJlbmRlckltYWdlX2gKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTM2LDggKzM2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRG9jTG9hZGVyOwogY2xhc3MgSFRNTE1h
cEVsZW1lbnQ7CiAKLWNsYXNzIFJlbmRlckltYWdlIDogcHVibGljIFJlbmRlclJlcGxhY2VkCi17
CitjbGFzcyBSZW5kZXJJbWFnZSA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVySW1hZ2UoTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRlckltYWdlKCk7CkBAIC01
MSwyNSArNTAsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqKTsKLSAgICAKKwogICAgIC8v
IGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgbWFraW5nIHRoaXMgbWV0aG9kIHZpcnR1YWwhCi0gICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdAotICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KFJlbmRlclJlcGxhY2VkOjplbGVtZW50KCkpOyB9CisgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KFJlbmRlclJlcGxhY2VkOjplbGVtZW50KCkpOyB9CiAKICAgICAvLyBob29rIHRvIGtlZXAgUmVu
ZGVPYmplY3Q6Om1faW5saW5lKCkgdXAgdG8gZGF0ZQotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHls
ZShSZW5kZXJTdHlsZSAqc3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJT
dHlsZSopOwogICAgIHZvaWQgdXBkYXRlQWx0VGV4dCgpOwotICAgIAorCiAgICAgdm9pZCBzZXRJ
c0Fub255bW91c0ltYWdlKGJvb2wgYW5vbikgeyBtX2lzQW5vbnltb3VzSW1hZ2UgPSBhbm9uOyB9
CiAgICAgYm9vbCBpc0Fub255bW91c0ltYWdlKCkgeyByZXR1cm4gbV9pc0Fub255bW91c0ltYWdl
OyB9Ci0gICAgCisKICAgICB2b2lkIHNldENhY2hlZEltYWdlKENhY2hlZEltYWdlKik7CiAgICAg
Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZTsg
fQotICAgIAorCiAgICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1f
Y2FjaGVkSW1hZ2UtPmltYWdlKCkgOiBudWxsSW1hZ2UoKTsgfQogCiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKLSAgICAKKwogICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZFdp
ZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7
CiAKQEAgLTgwLDkgKzc4LDkgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIHRvIHNldCBnZW5l
cmF0ZWQgY29udGVudCBpbWFnZXMgKGUuZy4sIDpiZWZvcmUvOmFmdGVyIGdlbmVyYXRlZCBpbWFn
ZXMpLgogICAgIHZvaWQgc2V0Q29udGVudE9iamVjdChDYWNoZWRSZXNvdXJjZSopOwotICAgIAor
CiAgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSAm
JiBtX2NhY2hlZEltYWdlLT5pc0Vycm9ySW1hZ2UoKTsgfQotICAgIAorCiAgICAgSFRNTE1hcEVs
ZW1lbnQqIGltYWdlTWFwKCk7CiAKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCk7CkBAIC0xMDMs
NiArMTAxLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwogfTsK
IAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRp
ZiAvLyBSZW5kZXJJbWFnZV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDE4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJl
bmRlcklubGluZTo6UmVuZGVySW5saW5lKE5vZGUqIG5vZGUpCi06UmVuZGVyRmxvdyhub2RlKSwg
bV9pc0NvbnRpbnVhdGlvbihmYWxzZSkKLXt9CisgICAgOiBSZW5kZXJGbG93KG5vZGUpCisgICAg
LCBtX2lzQ29udGludWF0aW9uKGZhbHNlKQoreworfQogCiBSZW5kZXJJbmxpbmU6On5SZW5kZXJJ
bmxpbmUoKQote30KK3sKK30KIAotdm9pZCBSZW5kZXJJbmxpbmU6OnNldFN0eWxlKFJlbmRlclN0
eWxlKiBfc3R5bGUpCit2b2lkIFJlbmRlcklubGluZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5l
d1N0eWxlKQogewotICAgIFJlbmRlckZsb3c6OnNldFN0eWxlKF9zdHlsZSk7CisgICAgUmVuZGVy
Rmxvdzo6c2V0U3R5bGUobmV3U3R5bGUpOwogICAgIHNldElubGluZSh0cnVlKTsKIAogICAgIC8v
IEVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgc3BsaXQgaW5saW5lcyBwaWNrIHVwIHRoZSBuZXcgc3R5
bGUuIFdlCkBAIC02Miw3ICs2NSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzZXRTdHlsZShSZW5k
ZXJTdHlsZSoKICAgICB9CiAKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKLSAgICAKKwogICAgIC8v
IFVwZGF0ZSBwc2V1ZG9zIGZvciA6YmVmb3JlIGFuZCA6YWZ0ZXIgbm93LgogICAgIHVwZGF0ZVBz
ZXVkb0NoaWxkKFJlbmRlclN0eWxlOjpCRUZPUkUpOwogICAgIHVwZGF0ZVBzZXVkb0NoaWxkKFJl
bmRlclN0eWxlOjpBRlRFUik7CkBAIC04NCwxMSArODcsMTEgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OmFkZENoaWxkVG9GbG93KFJlbmRlcgogICAgICAgICAvLyBpbmxpbmUgaW50byBjb250aW51YXRp
b25zLiAgVGhpcyBpbnZvbHZlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMgYmxvY2sgYm94IHRvIGhv
bGQKICAgICAgICAgLy8gfG5ld0NoaWxkfC4gIFdlIHRoZW4gbWFrZSB0aGF0IGJsb2NrIGJveCBh
IGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gIFdlIHRha2UgYWxsIG9mCiAgICAgICAgIC8v
IHRoZSBjaGlsZHJlbiBhZnRlciB8YmVmb3JlQ2hpbGR8IGFuZCBwdXQgdGhlbSBpbiBhIGNsb25l
IG9mIHRoaXMgb2JqZWN0LgotICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBuZXcgKHJl
bmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHls
ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKICAgICAgICAgbmV3U3R5bGUt
PmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9D
Syk7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sgKm5ld0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyQmxvY2soZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgYm94ICovKTsKKyAgICAgICAgUmVu
ZGVyQmxvY2sqIG5ld0JveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2soZG9jdW1l
bnQoKSAvKiBhbm9ueW1vdXMgYm94ICovKTsKICAgICAgICAgbmV3Qm94LT5zZXRTdHlsZShuZXdT
dHlsZSk7CiAgICAgICAgIFJlbmRlckZsb3cqIG9sZENvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlv
bigpOwogICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKQEAgLTEwMSw3ICsxMDQsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Zsb3coUmVuZGVyCiAgICAgICAgIGlmIChp
c0xhc3RDaGlsZCAmJiBiZWZvcmVDaGlsZCAhPSBsYXN0Q2hpbGQoKSkKICAgICAgICAgICAgIGJl
Zm9yZUNoaWxkID0gMDsgLy8gV2UgZGVzdHJveWVkIHRoZSBsYXN0IGNoaWxkLCBzbyBub3cgd2Ug
bmVlZCB0byB1cGRhdGUgb3VyIGluc2VydGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwb2ludCB0byBiZSAwLiAgSXQncyBqdXN0IGEgc3RyYWlnaHQgYXBwZW5kIG5vdy4KLSAg
ICAgICAgCisKICAgICAgICAgc3BsaXRGbG93KGJlZm9yZUNoaWxkLCBuZXdCb3gsIG5ld0NoaWxk
LCBvbGRDb250aW51YXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTEzLDcgKzEx
Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRvRmxvdyhSZW5kZXIKIAogUmVuZGVy
SW5saW5lKiBSZW5kZXJJbmxpbmU6OmNsb25lSW5saW5lKFJlbmRlckZsb3cqIHNyYykKIHsKLSAg
ICBSZW5kZXJJbmxpbmUgKm8gPSBuZXcgKHNyYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVySW5saW5l
KHNyYy0+ZWxlbWVudCgpKTsKKyAgICBSZW5kZXJJbmxpbmUqIG8gPSBuZXcgKHNyYy0+cmVuZGVy
QXJlbmEoKSkgUmVuZGVySW5saW5lKHNyYy0+ZWxlbWVudCgpKTsKICAgICBvLT5tX2lzQ29udGlu
dWF0aW9uID0gdHJ1ZTsKICAgICBvLT5zZXRTdHlsZShzcmMtPnN0eWxlKCkpOwogICAgIHJldHVy
biBvOwpAQCAtMTI2LDcgKzEyOSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMo
UmVuZGVyQmwKICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGlubGluZS4KICAgICBSZW5k
ZXJJbmxpbmUqIGNsb25lID0gY2xvbmVJbmxpbmUodGhpcyk7CiAgICAgY2xvbmUtPnNldENvbnRp
bnVhdGlvbihvbGRDb250KTsKLSAgICAKKwogICAgIC8vIE5vdyB0YWtlIGFsbCBvZiB0aGUgY2hp
bGRyZW4gZnJvbSBiZWZvcmVDaGlsZCB0byB0aGUgZW5kIGFuZCByZW1vdmUKICAgICAvLyB0aGVt
IGZyb20gfHRoaXN8IGFuZCBwbGFjZSB0aGVtIGluIHRoZSBjbG9uZS4KICAgICBSZW5kZXJPYmpl
Y3QqIG8gPSBiZWZvcmVDaGlsZDsKQEAgLTE2Miw3ICsxNjUsNyBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgIC8vIGhhcyB0byBtb3ZlIGludG8gdGhl
IGlubGluZSBjb250aW51YXRpb24uICBDYWxsIHVwZGF0ZVBzZXVkb0NoaWxkIHRvIGVuc3VyZSB0
aGF0IHRoZSBpbmxpbmUncyA6YWZ0ZXIKICAgICAgICAgLy8gY29udGVudCBnZXRzIHByb3Blcmx5
IGRlc3Ryb3llZC4KICAgICAgICAgY3Vyci0+dXBkYXRlUHNldWRvQ2hpbGQoUmVuZGVyU3R5bGU6
OkFGVEVSKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gdGFrZSBhbGwg
b2YgdGhlIGNoaWxkcmVuIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGNoaWxkCiAgICAgICAgIC8v
ICphZnRlciogY3VyckNoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwgdG8gdGhlIGNsb25lLgogICAg
ICAgICBvID0gY3VyckNoaWxkLT5uZXh0U2libGluZygpOwpAQCAtMjA4LDcgKzIxMSw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICB9CiAKICAgICBSZW5k
ZXJCbG9jayogcG9zdCA9IGJsb2NrLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgIAorCiAg
ICAgUmVuZGVyT2JqZWN0KiBib3hGaXJzdCA9IG1hZGVOZXdCZWZvcmVCbG9jayA/IGJsb2NrLT5m
aXJzdENoaWxkKCkgOiBwcmUtPm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKG1hZGVOZXdCZWZvcmVC
bG9jaykKICAgICAgICAgYmxvY2stPmluc2VydENoaWxkTm9kZShwcmUsIGJveEZpcnN0KTsKQEAg
LTIxOCw4ICsyMjEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVj
CiAKICAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCog
byA9IGJveEZpcnN0OwotICAgICAgICB3aGlsZSAobykKLSAgICAgICAgeworICAgICAgICB3aGls
ZSAobykgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9IG87CiAgICAgICAgICAgICBv
ID0gbm8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBwcmUtPmFwcGVuZENoaWxkTm9kZShi
bG9jay0+cmVtb3ZlQ2hpbGROb2RlKG5vKSk7CkBAIC0yMzksNyArMjQxLDcgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogICAgIC8vIGNvbm5lY3RlZCwgdGh1cyBh
bGxvd2luZyBuZXdDaGlsZCBhY2Nlc3MgdG8gYSByZW5kZXJBcmVuYSBzaG91bGQgaXQgbmVlZAog
ICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluIGFkZGl0aW9uYWwgYm94ZXMgKGUuZy4sIHRhYmxlIGNv
bnN0cnVjdGlvbikuCiAgICAgbmV3QmxvY2tCb3gtPmFkZENoaWxkVG9GbG93KG5ld0NoaWxkLCAw
KTsKLSAgICAKKwogICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEgZnVsbCBsYXlvdXQgaW4gb3JkZXIg
dG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyAoZXNwZWNpYWxseSB3cmFwcGVycyBmb3IgaW1hZ2Vz
KQogICAgIC8vIGdldCBkZWxldGVkIHByb3Blcmx5LiAgQmVjYXVzZSBvYmplY3RzIG1vdmVzIGZy
b20gdGhlIHByZSBibG9jayBpbnRvIHRoZSBwb3N0IGJsb2NrLCB3ZSB3YW50IHRvCiAgICAgLy8g
bWFrZSBuZXcgbGluZSBib3hlcyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG9sZCBsaW5lIGJveGVz
IGFyb3VuZC4KQEAgLTI0OCwyMCArMjUwLDIxIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZs
b3coUmVuZGVyT2JqZWMKICAgICBwb3N0LT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygp
OwogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5KQordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKLSAgICBwYWludExpbmVzKGksIF90eCwgX3R5KTsKKyAgICBwYWlu
dExpbmVzKHBhaW50SW5mbywgdHgsIHR5KTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAg
Zm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4ICsgY3Vy
ci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0
KCkpKTsKLSAgICAKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpCisKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSkKICAgICAgICAgICAgIGN1cnItPmFic29s
dXRlUmVjdHMocmVjdHMsIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSk7Ci0g
ICAgCisgICAgfQorCiAgICAgaWYgKGNvbnRpbnVhdGlvbigpKQogICAgICAgICBjb250aW51YXRp
b24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSArIGNvbnRpbnVhdGlvbigp
LT54UG9zKCksCkBAIC0yNzAsMTEgKzI3Myw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0
ZVJlY3RzKFZlY3RvcjwKIAogdm9pZCBSZW5kZXJJbmxpbmU6OmNhbGNNaW5NYXhXaWR0aCgpCiB7
Ci0gICAgQVNTRVJUKCAhbWluTWF4S25vd24oKSApOwotCi0jaWZkZWYgREVCVUdfTEFZT1VUCi0g
ICAga2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFJlbmRlcklubGluZSk6OmNh
bGNNaW5NYXhXaWR0aCgpIHRoaXM9IiA8PCB0aGlzIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICBBU1NF
UlQoIW1pbk1heEtub3duKCkpOwogCiAgICAgLy8gSXJyZWxldmFudCwgc2luY2Ugc29tZSBlbmNs
b3NpbmcgYmxvY2sgd2lsbCBhY3R1YWxseSBtZWFzdXJlIHVzIGFuZCBvdXIgY2hpbGRyZW4uCiAg
ICAgbV9taW5XaWR0aCA9IDA7CkBAIC0yODMsNyArMjgyLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgc2V0TWluTWF4S25vd24oKTsKIH0KIAotYm9vbCBSZW5k
ZXJJbmxpbmU6OnJlcXVpcmVzTGF5ZXIoKSB7Citib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNM
YXllcigpCit7CiAgICAgcmV0dXJuIGlzUm9vdCgpIHx8IGlzUmVsUG9zaXRpb25lZCgpIHx8IHN0
eWxlKCktPm9wYWNpdHkoKSA8IDEuMGY7CiB9CiAKQEAgLTI5OCwxNiArMjk4LDE1IEBAIGludCBS
ZW5kZXJJbmxpbmU6OndpZHRoKCkgY29uc3QKICAgICAgICAgaWYgKGN1cnIgPT0gZmlyc3RMaW5l
Qm94KCkgfHwgY3Vyci0+eFBvcygpICsgY3Vyci0+d2lkdGgoKSA+IHJpZ2h0U2lkZSkKICAgICAg
ICAgICAgIHJpZ2h0U2lkZSA9IGN1cnItPnhQb3MoKSArIGN1cnItPndpZHRoKCk7CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIHJpZ2h0U2lkZSAtIGxlZnRTaWRlOwogfQogCiBpbnQgUmVuZGVy
SW5saW5lOjpoZWlnaHQoKSBjb25zdAogewotICAgIGludCBoID0gMDsKICAgICBpZiAoZmlyc3RM
aW5lQm94KCkpCi0gICAgICAgIGggPSBsYXN0TGluZUJveCgpLT55UG9zKCkgKyBsYXN0TGluZUJv
eCgpLT5oZWlnaHQoKSAtIGZpcnN0TGluZUJveCgpLT55UG9zKCk7Ci0gICAgcmV0dXJuIGg7Cisg
ICAgICAgIHJldHVybiBsYXN0TGluZUJveCgpLT55UG9zKCkgKyBsYXN0TGluZUJveCgpLT5oZWln
aHQoKSAtIGZpcnN0TGluZUJveCgpLT55UG9zKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBS
ZW5kZXJJbmxpbmU6Om9mZnNldExlZnQoKSBjb25zdApAQCAtMzI2LDcgKzMyNSw3IEBAIGludCBS
ZW5kZXJJbmxpbmU6Om9mZnNldFRvcCgpIGNvbnN0CiAgICAgcmV0dXJuIHk7CiB9CiAKLWNvbnN0
IGNoYXIgKlJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGNvbnN0Citjb25zdCBjaGFyKiBSZW5k
ZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAgIGlmIChpc1JlbFBvc2l0aW9uZWQo
KSkKICAgICAgICAgcmV0dXJuICJSZW5kZXJJbmxpbmUgKHJlbGF0aXZlIHBvc2l0aW9uZWQpIjsK
QEAgLTMzNSwxNSArMzM0LDE0IEBAIGNvbnN0IGNoYXIgKlJlbmRlcklubGluZTo6cmVuZGVyTmFt
ZSgpIGMKICAgICByZXR1cm4gIlJlbmRlcklubGluZSI7CiB9CiAKLWJvb2wgUmVuZGVySW5saW5l
Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQg
X3R4LCBpbnQgX3R5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVySW5saW5lOjpub2RlQXRQb2ludChIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICByZXR1cm4gaGl0VGVzdExpbmVzKHJlc3VsdCwgX3gs
IF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIGhpdFRlc3RMaW5lcyhy
ZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7CiB9CiAKIFZpc2libGVQb3NpdGlv
biBSZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KQogewot
ICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjID0gY29udGludWF0aW9uKCk7IGM7IGMgPSBjLT5jb250
aW51YXRpb24oKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0gY29udGludWF0aW9uKCk7
IGM7IGMgPSBjLT5jb250aW51YXRpb24oKSkgewogICAgICAgICBpZiAoYy0+aXNJbmxpbmUoKSB8
fCBjLT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm4gYy0+cG9zaXRpb25Gb3JDb29y
ZGluYXRlcyh4LCB5KTsKICAgICB9CkBAIC0zNTEsNCArMzQ5LDQgQEAgVmlzaWJsZVBvc2l0aW9u
IFJlbmRlcklubGluZTo6cG9zaXRpb25GbwogICAgIHJldHVybiBSZW5kZXJGbG93Ojpwb3NpdGlv
bkZvckNvb3JkaW5hdGVzKHgsIHkpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNDUgKzIyLDQy
IEBACiAgKgogICovCiAKLSNpZm5kZWYgUkVOREVSX0lOTElORV9ICi0jZGVmaW5lIFJFTkRFUl9J
TkxJTkVfSAorI2lmbmRlZiBSZW5kZXJJbmxpbmVfaAorI2RlZmluZSBSZW5kZXJJbmxpbmVfaAog
CiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xh
c3MgUG9zaXRpb247Ci19CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBvc2l0aW9uOwog
Ci1jbGFzcyBSZW5kZXJJbmxpbmUgOiBwdWJsaWMgUmVuZGVyRmxvdwoteworY2xhc3MgUmVuZGVy
SW5saW5lIDogcHVibGljIFJlbmRlckZsb3cgewogcHVibGljOgogICAgIFJlbmRlcklubGluZShO
b2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVySW5saW5lKCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVGbG93KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlbklubGluZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUNvbnRpbnVhdGlv
bigpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkVG9GbG93KFJlbmRl
ck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIHZvaWQg
c3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2Nr
LCBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyRmxvdyogb2xkQ29udCk7CiAgICAgdm9pZCBzcGxp
dEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94
LAogICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlckZsb3cq
IG9sZENvbnQpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxl
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkge30gLy8gRG8gbm90aGluZyBmb3IgbGF5
b3V0KCkKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9IC8vIERvIG5vdGhpbmcg
Zm9yIGxheW91dCgpCisKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQm
LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbik7Ci0gICAg
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKwogICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKTsKIAogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKQEAgLTY4
LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKLSAgICAKKwogICAgIC8vIHVzZWQgdG8gY2Fs
Y3VsYXRlIG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5lcyAoUmVuZGVy
RmxvdykgdG8gcmV0dXJuCiAgICAgLy8gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBhIGdpdmVuIGxp
bmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUpLgogICAgIHZpcnR1YWwgaW50IG9m
ZnNldExlZnQoKSBjb25zdDsKQEAgLTc3LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7
Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgUmVuZGVySW5saW5lKiBjbG9uZUlubGlu
ZShSZW5kZXJGbG93KiBzcmMpOwogCkBAIC04NSw3ICs4Miw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzQ29udGludWF0aW9uIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UncmUgYSBjb250aW51
YXRpb24gb2YgYW4gaW5saW5lLgogfTsKIAotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNlbmRpZiAvLyBSZW5kZXJJbmxpbmVfaApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEyICs1NiwxMiBAQAog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxC
YXIuaCIgCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxC
YXIuaCIgCiAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC0y
MzEyLDQgKzIzMTIsNCBAQCB2b2lkIE1hcnF1ZWU6OnRpbWVyRmlyZWQoVGltZXI8TWFycXVlZT4q
CiAgICAgfQogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTkgKzUyLDMxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xh
c3MgUmVuZGVyVmlldzsKK2NsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyOwogY2xhc3MgUmVuZGVyRnJh
bWVTZXQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJl
bmRlclRhYmxlOwogY2xhc3MgUmVuZGVyVGV4dDsKLWNsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyOwor
Y2xhc3MgUmVuZGVyVmlldzsKIAogY2xhc3MgQ2xpcFJlY3RzIHsKIHB1YmxpYzoKLSAgICBDbGlw
UmVjdHMoY29uc3QgSW50UmVjdCYgcikgOm1fb3ZlcmZsb3dDbGlwUmVjdChyKSwgbV9maXhlZENs
aXBSZWN0KHIpLCBtX3Bvc0NsaXBSZWN0KHIpLCBtX3JlZkNudCgwKSB7fQorICAgIENsaXBSZWN0
cyhjb25zdCBJbnRSZWN0JiByKQorICAgICAgICA6IG1fb3ZlcmZsb3dDbGlwUmVjdChyKQorICAg
ICAgICAsIG1fZml4ZWRDbGlwUmVjdChyKQorICAgICAgICAsIG1fcG9zQ2xpcFJlY3QocikKKyAg
ICAgICAgLCBtX3JlZkNudCgwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgQ2xpcFJlY3RzKGNv
bnN0IEludFJlY3QmIG8sIGNvbnN0IEludFJlY3QmIGYsIGNvbnN0IEludFJlY3QmIHApCi0gICAg
ICA6bV9vdmVyZmxvd0NsaXBSZWN0KG8pLCBtX2ZpeGVkQ2xpcFJlY3QoZiksIG1fcG9zQ2xpcFJl
Y3QocCksIG1fcmVmQ250KDApIHt9CisgICAgICAgIDogbV9vdmVyZmxvd0NsaXBSZWN0KG8pCisg
ICAgICAgICwgbV9maXhlZENsaXBSZWN0KGYpCisgICAgICAgICwgbV9wb3NDbGlwUmVjdChwKQor
ICAgICAgICAsIG1fcmVmQ250KDApCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IEludFJlY3Qm
IG92ZXJmbG93Q2xpcFJlY3QoKSB7IHJldHVybiBtX292ZXJmbG93Q2xpcFJlY3Q7IH0KICAgICBj
b25zdCBJbnRSZWN0JiBmaXhlZENsaXBSZWN0KCkgeyByZXR1cm4gbV9maXhlZENsaXBSZWN0OyB9
CkBAIC03MiwxOCArODQsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCByZWYoKSB7IG1fcmVmQ250
Kys7IH0KICAgICB2b2lkIGRlcmVmKFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkgeyBpZiAoLS1t
X3JlZkNudCA9PSAwKSBkZXN0cm95KHJlbmRlckFyZW5hKTsgfQotICAgIAotICAgIHZvaWQgZGVz
dHJveShSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpOworCisgICAgdm9pZCBkZXN0cm95KFJlbmRl
ckFyZW5hKik7CiAKICAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4KLSAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7
ICAgIAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRlckFyZW5hKikgdGhyb3co
KTsgICAgCiAKICAgICAvLyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUg
ZnJvbSBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBz
aXplX3Qgc3opOwotICAgICAgICAKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6
ZV90KTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNh
bGxvd2VkIG9uIGFsbCByZW5kZXIgb2JqZWN0cy4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90IHN6KSB0aHJvdygpOworICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpIHRocm93KCk7
CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX292ZXJmbG93Q2xpcFJlY3Q7CkBAIC05MiwxNCAr
MTA0LDE2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9yZWZDbnQ7CiB9OwogCisKKy8vIEZJ
WE1FOiBtb3ZlIHRoaXMgdG8gaXQncyBvd24gZmlsZQogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRo
ZSBhdXRvLXNjcm9sbGluZyBvZiBsYXllcnMgd2l0aCBvdmVyZmxvdzogbWFycXVlZS4KLWNsYXNz
IE1hcnF1ZWUKLXsKK2NsYXNzIE1hcnF1ZWUgewogcHVibGljOgogICAgIE1hcnF1ZWUoUmVuZGVy
TGF5ZXIqKTsKIAogICAgIGludCBzcGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWQ7IH0KICAg
ICBpbnQgbWFycXVlZVNwZWVkKCkgY29uc3Q7CisKICAgICBFTWFycXVlZURpcmVjdGlvbiByZXZl
cnNlRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RU1hcnF1ZWVEaXJlY3Rp
b24+KC1kaXJlY3Rpb24oKSk7IH0KICAgICBFTWFycXVlZURpcmVjdGlvbiBkaXJlY3Rpb24oKSBj
b25zdDsKIApAQCAtMTA4LDggKzEyMiw4IEBAIHB1YmxpYzoKICAgICBpbnQgdW5mdXJsUG9zKCkg
Y29uc3QgeyByZXR1cm4gbV91bmZ1cmxQb3M7IH0KIAogICAgIEVXaGl0ZVNwYWNlIHdoaXRlU3Bh
Y2UoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFV2hpdGVTcGFjZT4obV93aGl0ZVNwYWNlKTsgfQot
ICAgIAotICAgIGludCBjb21wdXRlUG9zaXRpb24oRU1hcnF1ZWVEaXJlY3Rpb24gZGlyLCBib29s
IHN0b3BBdENsaWVudEVkZ2UpOworCisgICAgaW50IGNvbXB1dGVQb3NpdGlvbihFTWFycXVlZURp
cmVjdGlvbiwgYm9vbCBzdG9wQXRDbGllbnRFZGdlKTsKIAogICAgIHZvaWQgc2V0RW5kKGludCBl
bmQpIHsgbV9lbmQgPSBlbmQ7IH0KICAgICAKQEAgLTE2MiwxOSArMTc2LDE4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgU2Nyb2xsQWxpZ25tZW50IGdBbGlnbkNlbnRlckFsd2F5czsKICAg
ICBzdGF0aWMgY29uc3QgU2Nyb2xsQWxpZ25tZW50IGdBbGlnblRvcEFsd2F5czsKICAgICBzdGF0
aWMgY29uc3QgU2Nyb2xsQWxpZ25tZW50IGdBbGlnbkJvdHRvbUFsd2F5czsKLSAgICAKKwogICAg
IHN0YXRpYyBTY3JvbGxCZWhhdmlvciBnZXRWaXNpYmxlQmVoYXZpb3IoY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBzKSB7IHJldHVybiBzLm1fcmVjdFZpc2libGU7IH0KICAgICBzdGF0aWMgU2Nyb2xs
QmVoYXZpb3IgZ2V0UGFydGlhbEJlaGF2aW9yKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgcykgeyBy
ZXR1cm4gcy5tX3JlY3RQYXJ0aWFsOyB9CiAgICAgc3RhdGljIFNjcm9sbEJlaGF2aW9yIGdldEhp
ZGRlbkJlaGF2aW9yKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgcykgeyByZXR1cm4gcy5tX3JlY3RI
aWRkZW47IH0KLSAgICAKKwogICAgIFJlbmRlckxheWVyKFJlbmRlck9iamVjdCopOwogICAgIH5S
ZW5kZXJMYXllcigpOwotICAgIAorCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAgICAgUmVuZGVyTGF5ZXIqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZpb3VzU2libGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0KICAgICBSZW5kZXJMYXllciogbmV4dFNpYmxpbmco
KSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLQogICAgIFJlbmRlckxheWVyKiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQogICAgIFJlbmRlckxheWVyKiBsYXN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KIApAQCAtMTg1LDM5ICsxOTgsNDEgQEAgcHVibGlj
OgogICAgIHZvaWQgaW5zZXJ0T25seVRoaXNMYXllcigpOwogCiAgICAgdm9pZCByZXBhaW50SW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKLSAgICAKKwogICAgIHZvaWQgc3R5bGVDaGFuZ2VkKCk7Ci0g
ICAgCisKICAgICBNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlOyB9
CiAgICAgdm9pZCBzdXNwZW5kTWFycXVlZXMoKTsKIAogICAgIGJvb2wgaXNPdmVyZmxvd09ubHko
KSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcmZsb3dPbmx5OyB9Ci0gICAgCisKICAgICBib29sIGlz
VHJhbnNwYXJlbnQoKSBjb25zdDsKICAgICBSZW5kZXJMYXllciogdHJhbnNwYXJlbnRBbmNlc3Rv
cigpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIAotICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290KCkgY29u
c3QgeworCisgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3QoKSBjb25zdAorICAgIHsKICAgICAg
ICAgY29uc3QgUmVuZGVyTGF5ZXIqIGN1cnIgPSB0aGlzOwotICAgICAgICB3aGlsZSAoY3Vyci0+
cGFyZW50KCkpIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKGN1cnItPnBh
cmVudCgpKQorICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwogICAgICAgICByZXR1
cm4gY3VycjsKICAgICB9CiAgICAgCiAgICAgaW50IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3g7
IH0KICAgICBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQgc2V0UG9z
KGludCB4UG9zLCBpbnQgeVBvcykKKyAgICB7CisgICAgICAgIG1feCA9IHhQb3M7CisgICAgICAg
IG1feSA9IHlQb3M7CisgICAgfQorCiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aDsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotCiAg
ICAgdm9pZCBzZXRXaWR0aChpbnQgdykgeyBtX3dpZHRoID0gdzsgfQogICAgIHZvaWQgc2V0SGVp
Z2h0KGludCBoKSB7IG1faGVpZ2h0ID0gaDsgfQogCiAgICAgaW50IHNjcm9sbFdpZHRoKCk7CiAg
ICAgaW50IHNjcm9sbEhlaWdodCgpOwotICAgIAotICAgIHZvaWQgc2V0UG9zKCBpbnQgeFBvcywg
aW50IHlQb3MgKSB7Ci0gICAgICAgIG1feCA9IHhQb3M7Ci0gICAgICAgIG1feSA9IHlQb3M7Ci0g
ICAgfQogCiAgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3Jv
bGwgdGhlaXIgb3ZlcmZsb3cuCiAgICAgdm9pZCBzY3JvbGxPZmZzZXQoaW50JiB4LCBpbnQmIHkp
OwpAQCAtMjI3LDM2ICsyNDIsNDYgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQo
aW50IHgsIGludCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBib29sIHJlcGFpbnQg
PSB0cnVlKTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNl
dCh4LCBtX3Njcm9sbFkpOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Ny
b2xsVG9PZmZzZXQobV9zY3JvbGxYICsgbV9zY3JvbGxPcmlnaW5YLCB5KTsgfQotICAgIHZvaWQg
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0ICZyLCBjb25zdCBTY3JvbGxBbGlnbm1l
bnQmIGFsaWduWCA9IGdBbGlnbkNlbnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQm
IGFsaWduWSA9IGdBbGlnbkNlbnRlcklmTmVlZGVkKTsKLSAgICBJbnRSZWN0IGdldFJlY3RUb0V4
cG9zZShjb25zdCBJbnRSZWN0ICZ2aXNpYmxlUmVjdCwgIGNvbnN0IEludFJlY3QgJmV4cG9zZVJl
Y3QsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQm
IGFsaWduWSk7ICAgIAorICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0
JiwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblggPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCwg
Y29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkgPSBnQWxpZ25DZW50ZXJJZk5lZWRlZCk7CisK
KyAgICBJbnRSZWN0IGdldFJlY3RUb0V4cG9zZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
IGNvbnN0IEludFJlY3QgJmV4cG9zZVJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25Y
LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSk7ICAgIAorCiAgICAgdm9pZCBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwogICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoYm9vbCk7CisKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24pOworCiAgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgeyBy
ZXR1cm4gbV9oQmFyLmdldCgpOyB9CiAgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorCiAgICAgUGxhdGZvcm1TY3JvbGxiYXIqIGhvcml6
b250YVNjcm9sbGJhcldpZGdldCgpIGNvbnN0OwogICAgIFBsYXRmb3JtU2Nyb2xsYmFyKiB2ZXJ0
aWNhbFNjcm9sbGJhcldpZGdldCgpIGNvbnN0OworCiAgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSBjb25zdDsKICAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0
OworCiAgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoKTsKICAgICBib29sIGlzUG9p
bnRJblJlc2l6ZUNvbnRyb2woY29uc3QgSW50UG9pbnQmKTsKICAgICBJbnRTaXplIG9mZnNldEZy
b21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KTsKKwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7Ci0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXI9MS4wKTsKKworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxLjBmKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoKTsKKwogICAgIHZvaWQgcmVzaXpl
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFNpemUmKTsKICAgICBib29sIGlu
UmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CiAgICAgdm9pZCBz
ZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQogICAgIAogICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnMoYm9vbCBkb0Z1bGxSZXBhaW50ID0gZmFsc2UsIGJvb2wgY2hlY2tGb3JSZXBhaW50PXRydWUp
OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMoYm9vbCBkb0Z1bGxSZXBhaW50ID0gZmFs
c2UsIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gdHJ1ZSk7CiAgICAgdm9pZCBjaGVja0ZvclJlcGFp
bnRPblJlc2l6ZSgpOwotICAgIHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgs
IGludCYgcmVsWSkgewotICAgICAgICByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7Ci0g
ICAgfQotICAgICAKKworICAgIHZvaWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgs
IGludCYgcmVsWSkgeyByZWxYICs9IG1fcmVsWDsgcmVsWSArPSBtX3JlbFk7IH0KKwogICAgIHZv
aWQgY2xlYXJDbGlwUmVjdHMoKTsKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3QoKTsKIApAQCAtMjY5
LDIxICsyOTQsMjEgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlWk9yZGVyTGlzdHMoKTsKICAg
ICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zWk9yZGVyTGlzdDsgfQogICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9uZWdaT3JkZXJMaXN0OyB9Ci0gICAgCisKICAgICB2b2lkIGRp
cnR5T3ZlcmZsb3dMaXN0KCk7CiAgICAgdm9pZCB1cGRhdGVPdmVyZmxvd0xpc3QoKTsKICAgICBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogb3ZlcmZsb3dMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVy
Zmxvd0xpc3Q7IH0KLSAgICAKKwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9Ci0gICAgdm9pZCBzZXRIYXNWaXNpYmxlQ29u
dGVudChib29sIGIpOworICAgIHZvaWQgc2V0SGFzVmlzaWJsZUNvbnRlbnQoYm9vbCk7CiAgICAg
dm9pZCBkaXJ0eVZpc2libGVDb250ZW50U3RhdHVzKCk7CiAKICAgICAvLyBHZXRzIHRoZSBuZWFy
ZXN0IGVuY2xvc2luZyBwb3NpdGlvbmVkIGFuY2VzdG9yIGxheWVyIChhbHNvIGluY2x1ZGVzCiAg
ICAgLy8gdGhlIDxodG1sPiBsYXllciBhbmQgdGhlIHJvb3QgbGF5ZXIpLgogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0b3IoKSBjb25zdDsKLSAgICAKKwogICAgIHZv
aWQgY29udmVydFRvTGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIs
IGludCYgeCwgaW50JiB5KSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgaGFzQXV0b1pJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKTsgfQog
ICAgIGludCB6SW5kZXgoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5k
ZXgoKTsgfQogCkBAIC0zMTAsMjEgKzMzNSwyMSBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBhYnNv
bHV0ZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3Rh
dGUoSGl0VGVzdFJlc3VsdCYpOwotICAgIAorCiAgICAgSW50UmVjdCByZXBhaW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAotICAgIHZvaWQgZGVzdHJveShSZW5kZXJB
cmVuYSogcmVuZGVyQXJlbmEpOworICAgIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwogCiAg
ICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVyaXZlZCBjbGFzc2VzIG11c3Qgb3Zl
cnJpZGUgb3BlcmF0b3IgbmV3CiAgICAgLy8gaW4gb3JkZXIgdG8gYWxsb2NhdGUgb3V0IG9mIHRo
ZSBSZW5kZXJBcmVuYS4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJB
cmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7ICAgIAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3QsIFJlbmRlckFyZW5hKikgdGhyb3coKTsgICAgCiAKICAgICAvLyBPdmVycmlkZGVuIHRv
IHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJvbSBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBv
cGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opOworICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3JtYWwgb3Bl
cmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQgb24gYWxsIHJlbmRlciBvYmplY3RzLgotICAgIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3opIHRocm93KCk7CisgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCkgdGhyb3coKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldE5leHRTaWJsaW5nKFJl
bmRlckxheWVyKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KQEAgLTMzNiw3ICszNjEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgY29sbGVjdExheWVycyhWZWN0b3I8UmVuZGVyTGF5ZXIqPiomLCBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiomKTsKIAogICAgIHZvaWQgcGFpbnRMYXllcihSZW5kZXJMYXll
ciogcm9vdExheWVyLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5
UmVjdCwKLSAgICAgICAgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBQYWludFJlc3RyaWN0aW9uLCBS
ZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaGF2
ZVRyYW5zcGFyZW5jeSwgUGFpbnRSZXN0cmljdGlvbiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3QpOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0KTsKICAgICB2b2lk
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyID0gMCwgYm9vbCogbmVlZFZC
YXIgPSAwKTsKIApAQCAtMzQ2LDE4ICszNzEsMTcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dT
dGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7Ci0g
ICAgCisKICAgICB2b2lkIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBuZXdWaXNpYmlsaXR5
KTsKICAgICB2b2lkIGRpcnR5VmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKICAgICB2b2lkIHVw
ZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKLSAgICAgICAgCisKIHByb3RlY3RlZDogICAKICAgICBS
ZW5kZXJPYmplY3QqIG1fb2JqZWN0OwotICAgIAorCiAgICAgUmVuZGVyTGF5ZXIqIG1fcGFyZW50
OwogICAgIFJlbmRlckxheWVyKiBtX3ByZXZpb3VzOwogICAgIFJlbmRlckxheWVyKiBtX25leHQ7
Ci0KICAgICBSZW5kZXJMYXllciogbV9maXJzdDsKICAgICBSZW5kZXJMYXllciogbV9sYXN0Owog
CkBAIC0zNzcsMjEgKzQwMSwyMSBAQCBwcm90ZWN0ZWQ6ICAgCiAgICAgLy8gVGhlIGxheWVyJ3Mg
d2lkdGgvaGVpZ2h0CiAgICAgaW50IG1fd2lkdGg7CiAgICAgaW50IG1faGVpZ2h0OwotICAgIAor
CiAgICAgLy8gT3VyIHNjcm9sbCBvZmZzZXRzIGlmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLgogICAg
IGludCBtX3Njcm9sbFg7CiAgICAgaW50IG1fc2Nyb2xsWTsKICAgICBpbnQgbV9zY3JvbGxPcmln
aW5YOwogICAgIGludCBtX3Njcm9sbExlZnRPdmVyZmxvdzsKLSAgICAKKwogICAgIC8vIFRoZSB3
aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCiAgICAgaW50IG1fc2Nyb2xsV2lkdGg7
CiAgICAgaW50IG1fc2Nyb2xsSGVpZ2h0OwotICAgIAorCiAgICAgLy8gRm9yIGxheWVycyB3aXRo
IG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgogICAgIFJlZlB0cjxTY3Jv
bGxiYXI+IG1faEJhcjsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0gICAgCisKICAg
ICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXpp
bmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAg
Ym9vbCBtX2luUmVzaXplTW9kZTsKIApAQCAtNDAxLDcgKzQyNSw3IEBAIHByb3RlY3RlZDogICAK
ICAgICAvLyB6LWluZGljZXMuCiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fcG9zWk9yZGVy
TGlzdDsKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbV9uZWdaT3JkZXJMaXN0OwotICAgIAor
CiAgICAgLy8gVGhpcyBsaXN0IGNvbnRhaW5zIG91ciBvdmVyZmxvdyBjaGlsZCBsYXllcnMuCiAg
ICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fb3ZlcmZsb3dMaXN0OwogCkBAIC00MjUsMTAgKzQ0
OSwxMCBAQCBwcm90ZWN0ZWQ6ICAgCiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsK
ICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBt
X2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICAKKwogICAgIE1hcnF1ZWUqIG1fbWFycXVl
ZTsgLy8gVXNlZCBieSBsYXllcnMgd2l0aCBvdmVyZmxvdzptYXJxdWVlCiB9OwogCi19IC8vIG5h
bWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5k
ZXJMYXllcl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuY3BwCShyZXZpc2lv
biAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwLDkgKzExMCw5IEBAIHZvaWQgUmVuZGVyTGluZUVkaXQ6OmNhbGNNaW5N
YXhXaWR0aCgpCiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OmNhbGNNaW5NYXhXaWR0aCgpOwogfQog
Ci12b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqcykKK3ZvaWQgUmVu
ZGVyTGluZUVkaXQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBSZW5k
ZXJGb3JtRWxlbWVudDo6c2V0U3R5bGUocyk7CisgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OnNldFN0
eWxlKG5ld1N0eWxlKTsKIAogICAgIFRleHRGaWVsZCogdyA9IHN0YXRpY19jYXN0PFRleHRGaWVs
ZCo+KHdpZGdldCgpKTsKICAgICB3LT5zZXRBbGlnbm1lbnQodGV4dEFsaWdubWVudCgpKTsKQEAg
LTE0OSw3ICsxNDksNyBAQCB2b2lkIFJlbmRlckxpbmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCgp
CiAgICAgfQogCiAgICAgdy0+c2V0UmVhZE9ubHkoZS0+aXNSZWFkT25seUNvbnRyb2woKSk7Ci0g
ICAgCisKICAgICAvLyBIYW5kbGUgdXBkYXRpbmcgdGhlIHNlYXJjaCBhdHRyaWJ1dGVzLgogICAg
IHctPnNldFBsYWNlaG9sZGVyU3RyaW5nKGUtPmdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIp
LmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgaWYgKHctPnR5cGUoKSA9PSBUZXh0RmllbGQ6OlNl
YXJjaCkgewpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUmVuZGVyTGluZUVkaXQ6OnZhbHVlQ2hh
bmdlZChXaWRnZXQKIAogaW50IFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rpb25TdGFydCgpCiB7Ci0g
ICAgVGV4dEZpZWxkICpsaW5lRWRpdCA9IHN0YXRpY19jYXN0PFRleHRGaWVsZCAqPihtX3dpZGdl
dCk7CisgICAgVGV4dEZpZWxkKiBsaW5lRWRpdCA9IHN0YXRpY19jYXN0PFRleHRGaWVsZCo+KG1f
d2lkZ2V0KTsKICAgICBpbnQgc3RhcnQgPSBsaW5lRWRpdC0+c2VsZWN0aW9uU3RhcnQoKTsKICAg
ICBpZiAoc3RhcnQgPT0gLTEpCiAgICAgICAgIHN0YXJ0ID0gbGluZUVkaXQtPmN1cnNvclBvc2l0
aW9uKCk7CkBAIC0xOTEsMTggKzE5MSwxOCBAQCBpbnQgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlv
blN0YXJ0KCkKIAogaW50IFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rpb25FbmQoKQogewotICAgIFRl
eHRGaWVsZCAqbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxUZXh0RmllbGQgKj4obV93aWRnZXQpOwor
ICAgIFRleHRGaWVsZCogbGluZUVkaXQgPSBzdGF0aWNfY2FzdDxUZXh0RmllbGQqPihtX3dpZGdl
dCk7CiAgICAgaW50IHN0YXJ0ID0gbGluZUVkaXQtPnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0ID09IC0xKQogICAgICAgICByZXR1cm4gbGluZUVkaXQtPmN1cnNvclBvc2l0aW9uKCk7
Ci0gICAgcmV0dXJuIHN0YXJ0ICsgKGludClsaW5lRWRpdC0+c2VsZWN0ZWRUZXh0KCkubGVuZ3Ro
KCk7CisgICAgcmV0dXJuIHN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihsaW5lRWRpdC0+c2VsZWN0
ZWRUZXh0KCkubGVuZ3RoKCkpOwogfQogCiB2b2lkIFJlbmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rp
b25TdGFydChpbnQgc3RhcnQpCiB7CiAgICAgaW50IHJlYWxTdGFydCA9IG1heChzdGFydCwgMCk7
CiAgICAgaW50IGxlbmd0aCA9IG1heChzZWxlY3Rpb25FbmQoKSAtIHJlYWxTdGFydCwgMCk7Ci0g
ICAgc3RhdGljX2Nhc3Q8VGV4dEZpZWxkICo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9uKHJlYWxT
dGFydCwgbGVuZ3RoKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0RmllbGQqPihtX3dpZGdldCktPnNl
dFNlbGVjdGlvbihyZWFsU3RhcnQsIGxlbmd0aCk7CiB9CiAKIHZvaWQgUmVuZGVyTGluZUVkaXQ6
OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUmVuZGVy
TGluZUVkaXQ6OnNldFNlbGVjdGlvbkVuZChpbnQKICAgICAgICAgc3RhcnQgPSByZWFsRW5kOwog
ICAgICAgICBsZW5ndGggPSAwOwogICAgIH0KLSAgICBzdGF0aWNfY2FzdDxUZXh0RmllbGQgKj4o
bV93aWRnZXQpLT5zZXRTZWxlY3Rpb24oc3RhcnQsIGxlbmd0aCk7CisgICAgc3RhdGljX2Nhc3Q8
VGV4dEZpZWxkKj4obV93aWRnZXQpLT5zZXRTZWxlY3Rpb24oc3RhcnQsIGxlbmd0aCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdCgpCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBS
ZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UoaQogewogICAgIGludCByZWFsU3RhcnQg
PSBtYXgoc3RhcnQsIDApOwogICAgIGludCBsZW5ndGggPSBtYXgoZW5kIC0gcmVhbFN0YXJ0LCAw
KTsKLSAgICBzdGF0aWNfY2FzdDxUZXh0RmllbGQgKj4obV93aWRnZXQpLT5zZXRTZWxlY3Rpb24o
cmVhbFN0YXJ0LCBsZW5ndGgpOworICAgIHN0YXRpY19jYXN0PFRleHRGaWVsZCo+KG1fd2lkZ2V0
KS0+c2V0U2VsZWN0aW9uKHJlYWxTdGFydCwgbGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUVkaXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lRWRpdC5oCShyZXZpc2lvbiAxNzQz
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVFZGl0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgc2VsZWN0
aW9uRW5kKCk7CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKICAgICAgICAg
dm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbCBpc0Vk
aXRlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEVkaXRlZChib29sKTsKICAgICAgICAgYm9v
bCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIiAKQEAgLTQzMyw0ICs0MzMsNCBAQCBJ
bnRSZWN0IFJlbmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KCkgCiAgICAgcmV0dXJuIHZpZXco
KS0+ZnJhbWVWaWV3KCktPndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIoZW5jbG9zaW5nTGF5ZXIoKSwg
dHJ1ZSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAgKgogICovCiAK
LSNpZm5kZWYgUmVuZGVyTGlzdEJveF9ICi0jZGVmaW5lIFJlbmRlckxpc3RCb3hfSAorI2lmbmRl
ZiBSZW5kZXJMaXN0Qm94X2gKKyNkZWZpbmUgUmVuZGVyTGlzdEJveF9oCiAKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgogCkBAIC0zNSw2ICszNSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMaXN0
Qm94KEhUTUxTZWxlY3RFbGVtZW50Kik7CiAgICAgflJlbmRlckxpc3RCb3goKTsKIAorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0
Qm94IjsgfQorCiAgICAgdmlydHVhbCBib29sIGlzTGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwpAQCAtNDIs
NDcgKzQ0LDQ3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBz
ZWxlY3Rpb25DaGFuZ2VkKSB7IG1fc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkNoYW5nZWQ7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJMaXN0Qm94IjsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBh
aW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluU2Ny
b2xsYmFyKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXI9MS4wKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxLjBmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgo
KTsKLSAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCBpc1Jvb3RM
aW5lQm94KSBjb25zdDsKKyAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBm
aXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNh
bGNIZWlnaHQoKTsKICAgICB2b2lkIHNldE9wdGlvbnNDaGFuZ2VkKGJvb2wgYykgeyBtX29wdGlv
bnNDaGFuZ2VkID0gYzsgfQogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRl
eCk7Ci0gICAgCisKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1
YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCBJbnRSZWN0IHdp
bmRvd0NsaXBSZWN0KCkgY29uc3Q7CiAKICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uQXRQ
b2ludChpbnQgeCwgaW50IHkpOwotICAgIAorCiAgICAgYm9vbCBzY3JvbGxUb1JldmVhbEVsZW1l
bnRBdExpc3RJbmRleChpbnQgaW5kZXgpOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZEF1dG9zY3JvbGwoKSBjb25zdCB7IHJldHVybiBudW1JdGVtcygpID4gc2l6ZSgpOyB9CiAgICAg
dmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIG1fb3B0aW9u
c0NoYW5nZWQ7Ci0gICAgaW50IG1fb3B0aW9uc1dpZHRoOwotICAgIGludCBtX29wdGlvbnNNYXhI
ZWlnaHQ7Ci0gICAgaW50IG1fb3B0aW9uc1RvdGFsSGVpZ2h0OwotICAgIGludCBtX2luZGV4T2Zm
c2V0OwotICAgIGJvb2wgbV9zZWxlY3Rpb25DaGFuZ2VkOwotICAgIAogICAgIGludCBzaXplKCkg
Y29uc3Q7CiAgICAgaW50IG51bUl0ZW1zKCkgY29uc3Q7CiAgICAgSW50UmVjdCBpdGVtQm91bmRp
bmdCb3hSZWN0KGludCB0eCwgaW50IHR5LCBpbnQgaW5kZXgpOwogICAgIHZvaWQgcGFpbnRTY3Jv
bGxiYXIoUGFpbnRJbmZvJik7CiAgICAgdm9pZCBwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5LCBpbnQgbGlzdEluZGV4KTsKICAgICB2b2lkIHBhaW50SXRlbUJh
Y2tncm91bmQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpOwotICAg
IAorCisgICAgYm9vbCBtX29wdGlvbnNDaGFuZ2VkOworICAgIGludCBtX29wdGlvbnNXaWR0aDsK
KyAgICBpbnQgbV9vcHRpb25zTWF4SGVpZ2h0OworICAgIGludCBtX29wdGlvbnNUb3RhbEhlaWdo
dDsKKyAgICBpbnQgbV9pbmRleE9mZnNldDsKKyAgICBib29sIG1fc2VsZWN0aW9uQ2hhbmdlZDsK
KwogICAgIFNjcm9sbGJhciogbV92QmFyOwogfTsKIAotfQorfSAvLyBuYW1lcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckxpc3RCb3hfaApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMTc0MzQpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAgUmVu
ZGVyTGlzdEl0ZW06OlJlbmRlckxpc3RJdGVtKE5vZGUqIG5vZAogICAgIHNldElubGluZShmYWxz
ZSk7IC8vIG91ciBvYmplY3QgaXMgbm90IElubGluZQogfQogCi12b2lkIFJlbmRlckxpc3RJdGVt
OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogX3N0eWxlKQordm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0
U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIFJlbmRlckJsb2NrOjpzZXRTdHls
ZShfc3R5bGUpOworICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZShuZXdTdHlsZSk7CiAKICAgICBp
ZiAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpICE9IExOT05FIHx8CiAgICAgICAgIChzdHlsZSgp
LT5saXN0U3R5bGVJbWFnZSgpICYmICFzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5pc0Vycm9y
SW1hZ2UoKSkpIHsKQEAgLTE0MiwyOSArMTQyLDI5IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGdl
dFBhcmVudE9mRmlyc3RMaW4KICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5m
aXJzdENoaWxkKCk7CiAgICAgaWYgKCFmaXJzdENoaWxkKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgCisKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyckNoaWxkID0gZmlyc3RDaGlsZDsg
Y3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKGN1cnJDaGlsZCA9PSBtYXJrZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAorCiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzSW5saW5lKCkpCiAgICAgICAgICAg
ICByZXR1cm4gY3VycjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGN1cnJDaGlsZC0+aXNGbG9h
dGluZygpIHx8IGN1cnJDaGlsZC0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPmlzVGFibGUoKSB8fCAh
Y3VyckNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
CisKICAgICAgICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNo
aWxkLT5lbGVtZW50KCkgJiYKICAgICAgICAgICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFz
VGFnTmFtZSh1bFRhZyl8fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShvbFRhZykp
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwogICAgICAgICBSZW5kZXJPYmpl
Y3QqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChjdXJyQ2hpbGQsIG1hcmtlcik7
CiAgICAgICAgIGlmIChsaW5lQm94KQogICAgICAgICAgICAgcmV0dXJuIGxpbmVCb3g7CiAgICAg
fQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIFJl
bmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgbGluZUJveFBhcmVudCA9IHRoaXM7CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgaWYgKG1hcmtlclBhciAhPSBsaW5lQm94UGFyZW50IHx8ICFtX21hcmtlci0+bWlu
TWF4S25vd24oKSkgewogICAgICAgICAgICAgbV9tYXJrZXItPnJlbW92ZSgpOwogICAgICAgICAg
ICAgaWYgKCFsaW5lQm94UGFyZW50KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgUmVuZGVyTGlz
dEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKICAgICAgICAgICAgIHlPZmZzZXQgKz0gby0+eVBv
cygpOwogICAgICAgICAgICAgeE9mZnNldCArPSBvLT54UG9zKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IG1fbWFya2VyLT5pbmxpbmVCb3hX
cmFwcGVyKCktPnJvb3QoKTsKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikgewogICAgICAgICAgICAgaW50IGxlZnRMaW5lT2Zmc2V0ID0gbGVmdFJlbE9mZnNldCh5T2Zm
c2V0LCBsZWZ0T2Zmc2V0KHlPZmZzZXQpKTsKQEAgLTI1MywxMiArMjUzLDEyIEBAIHZvaWQgUmVu
ZGVyTGlzdEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
TGlzdEl0ZW06OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVu
ZGVyTGlzdEl0ZW06OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
IHsKICAgICBpZiAoIW1faGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCbG9j
azo6cGFpbnQoaSwgX3R4LCBfdHkpOworICAgIFJlbmRlckJsb2NrOjpwYWludChwYWludEluZm8s
IHR4LCB0eSk7CiB9CiAKIERlcHJlY2F0ZWRTdHJpbmcgUmVuZGVyTGlzdEl0ZW06Om1hcmtlclN0
cmluZ1ZhbHVlKCkKQEAgLTI2Niw0ICsyNjYsNCBAQCBEZXByZWNhdGVkU3RyaW5nIFJlbmRlckxp
c3RJdGVtOjptYXJrZXJTCiAgICAgcmV0dXJuIG1fbWFya2VyID8gbV9tYXJrZXItPnRleHQoKSA6
ICIiOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmgJKHJldmlzaW9uIDE3NDM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwog
Ci0jaWZuZGVmIFJlbmRlckxpc3RJdGVtX0gKLSNkZWZpbmUgUmVuZGVyTGlzdEl0ZW1fSAorI2lm
bmRlZiBSZW5kZXJMaXN0SXRlbV9oCisjZGVmaW5lIFJlbmRlckxpc3RJdGVtX2gKIAogI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCiAKQEAgLTMxLDE5ICszMSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFJlbmRlckxpc3RNYXJrZXI7CiAKLWNsYXNzIFJlbmRlckxpc3RJdGVtIDog
cHVibGljIFJlbmRlckJsb2NrCi17CitjbGFzcyBSZW5kZXJMaXN0SXRlbSA6IHB1YmxpYyBSZW5k
ZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyTGlzdEl0ZW0oTm9kZSopOwotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdEl0ZW0iOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RJ
dGVtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKKwogICAg
IGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICB2b2lkIHNldFZhbHVl
KGludCB2KSB7IG1fcHJlZGVmVmFsID0gdjsgfQogICAgIHZvaWQgY2FsY1ZhbHVlKCk7CkBAIC01
Nyw3ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkxpc3RNYXJr
ZXIoKTsKICAgICB2b2lkIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7Ci0gICAgCisKICAgICB2b2lk
IHNldE5vdEluTGlzdChib29sIG5vdEluTGlzdCkgeyBtX25vdEluTGlzdCA9IG5vdEluTGlzdDsg
fQogICAgIGJvb2wgbm90SW5MaXN0KCkgY29uc3QgeyByZXR1cm4gbV9ub3RJbkxpc3Q7IH0KIApA
QCAtNzAsNyArNjksNiBAQCBwcml2YXRlOgogICAgIGludCBtX3ZhbHVlOwogfTsKIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi19IC8vbmFtZXNwYWNlCi0KLSNlbmRpZgorI2VuZGlmIC8vIFJl
bmRlckxpc3RJdGVtX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsNCArNTIxLDQgQEAgSW50UmVjdCBSZW5kZXJMaXN0
TWFya2VyOjpzZWxlY3Rpb25SZWN0KAogICAgIHJldHVybiBJbnRSZWN0KGFic3ggKyB4UG9zKCks
IGFic3kgKyByb290LT5zZWxlY3Rpb25Ub3AoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVp
Z2h0KCkpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiAxNzQzNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
ICoKICAqLwogCi0jaWZuZGVmIFJlbmRlckxpc3RNYXJrZXJfSAotI2RlZmluZSBSZW5kZXJMaXN0
TWFya2VyX0gKKyNpZm5kZWYgUmVuZGVyTGlzdE1hcmtlcl9oCisjZGVmaW5lIFJlbmRlckxpc3RN
YXJrZXJfaAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgpAQCAtMzUsMTkgKzM1LDIxIEBAIGNsYXNzIFJlbmRlckxpc3RJdGVtOwogLyogdXNl
ZCB0byByZW5kZXIgdGhlIGxpc3RzIG1hcmtlci4KICAgICAgVGhpcyBjbGFzcyBhbHdheXMgaGFz
IHRvIGJlIGEgZGlyZWN0IGNoaWxkIG9mIGEgUmVuZGVyTGlzdEl0ZW0hCiAqLwotY2xhc3MgUmVu
ZGVyTGlzdE1hcmtlciA6IHB1YmxpYyBSZW5kZXJCb3gKLXsKK2NsYXNzIFJlbmRlckxpc3RNYXJr
ZXIgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKICAgICBSZW5kZXJMaXN0TWFya2VyKERv
Y3VtZW50Kik7CiAgICAgflJlbmRlckxpc3RNYXJrZXIoKTsKIAorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJMaXN0TWFya2VyIjsgfQor
CisgICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KwogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCi0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckxpc3RNYXJr
ZXIiOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB4b2ZmLCBpbnQg
eW9mZik7CisKICAgICAvLyBzbyB0aGUgbWFya2VyIGdldHMgdG8gbGF5b3V0IGl0c2VsZi4gT25s
eSBuZWVkZWQgZm9yCiAgICAgLy8gbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlCi0KLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHhvZmYsIGludCB5b2ZmKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgp
OwogCkBAIC01NywyMiArNTksMjAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbmxpbmVCb3gq
IGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sKTsKIAotICAgIHZpcnR1YWwgc2hvcnQg
bGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveD1mYWxzZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94
PWZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCwgYm9vbCBp
c1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OworICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQ
b3NpdGlvbihib29sLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNMaXN0TWFya2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAog
ICAgIENhY2hlZEltYWdlKiBsaXN0SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2xpc3RJbWFnZTsg
fQotICAgIAorCiAgICAgUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKCkgeyByZXR1cm4gbV9saXN0
SXRlbTsgfQogICAgIHZvaWQgc2V0TGlzdEl0ZW0oUmVuZGVyTGlzdEl0ZW0qIGxpc3RJdGVtKSB7
IG1fbGlzdEl0ZW0gPSBsaXN0SXRlbTsgfQotICAgIAorCiAgICAgY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbTsgfQogCiAgICAgYm9vbCBpc0luc2lk
ZSgpIGNvbnN0OwotICAgIAorCiAgICAgSW50UmVjdCBnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKTsK
LSAgICAKKwogICAgIHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9u
UmVjdCgpOwpAQCAtODUsNiArODUsNiBAQCBwcml2YXRlOgogICAgIFNlbGVjdGlvblN0YXRlIG1f
c2VsZWN0aW9uU3RhdGU7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlckxpc3RNYXJrZXJfaAo=
</data>
<flag name="review"
          id="3893"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>