<?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>156805</bug_id>
          
          <creation_ts>2016-04-20 12:17:42 -0700</creation_ts>
          <short_desc>Drop [UsePointersEvenForNonNullableObjectArguments] from Range</short_desc>
          <delta_ts>2016-04-21 09:07:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185505</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 12:17:42 -0700</bug_when>
    <thetext>Drop [UsePointersEvenForNonNullableObjectArguments] from Range</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185654</commentid>
    <comment_count>1</comment_count>
      <attachid>276884</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 19:13:38 -0700</bug_when>
    <thetext>Created attachment 276884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185662</commentid>
    <comment_count>2</comment_count>
      <attachid>276888</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 19:41:18 -0700</bug_when>
    <thetext>Created attachment 276888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185663</commentid>
    <comment_count>3</comment_count>
      <attachid>276889</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 19:47:59 -0700</bug_when>
    <thetext>Created attachment 276889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185664</commentid>
    <comment_count>4</comment_count>
      <attachid>276890</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 19:53:24 -0700</bug_when>
    <thetext>Created attachment 276890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185666</commentid>
    <comment_count>5</comment_count>
      <attachid>276892</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 19:57:09 -0700</bug_when>
    <thetext>Created attachment 276892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185669</commentid>
    <comment_count>6</comment_count>
      <attachid>276894</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 20:03:49 -0700</bug_when>
    <thetext>Created attachment 276894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185675</commentid>
    <comment_count>7</comment_count>
      <attachid>276895</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-20 20:50:25 -0700</bug_when>
    <thetext>Created attachment 276895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185721</commentid>
    <comment_count>8</comment_count>
      <attachid>276895</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-21 02:15:20 -0700</bug_when>
    <thetext>Comment on attachment 276895
Patch

r=me, some nits below.

View in context: https://bugs.webkit.org/attachment.cgi?id=276895&amp;action=review

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1639
&gt; +    return !range2 || range1-&gt;compareBoundaryPoints(Range::START_TO_START, *range2, IGNORE_EXCEPTION) &lt;= 0;

Do you know what is preventing range1 to be null?
Should we check it/assert it?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1758
&gt;          copyRange = Range::create(range-&gt;ownerDocument(), &amp;range-&gt;startContainer(), range-&gt;startOffset(), &amp;range-&gt;endContainer(), range-&gt;endOffset());

Is it possible to make copyRange a Ref&lt;Range&gt; and/or limit ref count churn here?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1761
&gt; +        copyRange-&gt;setStart(*node, nodeStartOffset.startIndex);

Why not making node a Node&amp; instead of a Node*?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleUtil.cpp:162
&gt;      Node* node = coreObject-&gt;node();

Add ASSERT(node)?

&gt; Source/WebCore/editing/htmlediting.cpp:1171
&gt;          return VisiblePosition(firstPositionInOrBeforeNode(node), DOWNSTREAM);

Could visiblePositionForIndexUsingCharacterIterator take a Node&amp; instead of a Node*, like you did for isNodeVisiblyContainedWithin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185800</commentid>
    <comment_count>9</comment_count>
      <attachid>276895</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 08:53:15 -0700</bug_when>
    <thetext>Comment on attachment 276895
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=276895&amp;action=review

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1639
&gt;&gt; +    return !range2 || range1-&gt;compareBoundaryPoints(Range::START_TO_START, *range2, IGNORE_EXCEPTION) &lt;= 0;
&gt; 
&gt; Do you know what is preventing range1 to be null?
&gt; Should we check it/assert it?

range1 was already being dereferenced so this is not new. An assertion would not bring much here because we would anyway crash right away when dereferencing range1 if range1 were null.
We would add a null-check for range1 but considering there was not one before and my patch did not change range1 in any way, I decided to leave it alone.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1758
&gt;&gt;          copyRange = Range::create(range-&gt;ownerDocument(), &amp;range-&gt;startContainer(), range-&gt;startOffset(), &amp;range-&gt;endContainer(), range-&gt;endOffset());
&gt; 
&gt; Is it possible to make copyRange a Ref&lt;Range&gt; and/or limit ref count churn here?

I don&apos;t see why not.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1761
&gt;&gt; +        copyRange-&gt;setStart(*node, nodeStartOffset.startIndex);
&gt; 
&gt; Why not making node a Node&amp; instead of a Node*?

Ok.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleUtil.cpp:162
&gt;&gt;      Node* node = coreObject-&gt;node();
&gt; 
&gt; Add ASSERT(node)?

It would anyway crash right away upon dereferencing in the line below.

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:1171
&gt;&gt;          return VisiblePosition(firstPositionInOrBeforeNode(node), DOWNSTREAM);
&gt; 
&gt; Could visiblePositionForIndexUsingCharacterIterator take a Node&amp; instead of a Node*, like you did for isNodeVisiblyContainedWithin?

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185801</commentid>
    <comment_count>10</comment_count>
      <attachid>276932</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 08:54:25 -0700</bug_when>
    <thetext>Created attachment 276932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185812</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-21 09:06:59 -0700</bug_when>
    <thetext>Committed r199817: &lt;http://trac.webkit.org/changeset/199817&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276884</attachid>
            <date>2016-04-20 19:13:38 -0700</date>
            <delta_ts>2016-04-20 19:41:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420191401.patch</filename>
            <type>text/plain</type>
            <size>94738</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjliZTE1OWFmY2ZiMTIx
OGFmLi44MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkK
IHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0CiB7CiAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAg
cmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0aGlzKSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5v
ZGUmPigqdGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRS
ZWN0cyhyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3NjFhYzRlMDNjZTMw
OGM3ZDUzNmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3ZWVmZDM4ODgyYjdk
NTk4MzFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBAQCBSZWY8UmFuZ2U+
IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhNRTogc3RhcnRDb250
YWluZXIgYW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVmPE5vZGU+JiYuCiBp
bmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5v
ZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5k
Q29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3VtZW50KG93bmVyRG9j
dW1lbnQpCiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMsOCArOTQsMTAgQEAg
aW5saW5lIFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxO
b2RlPiBzdGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBjb250
YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNr
aW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBjYWxsIHRob3Nl
IGZ1bmN0aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOwot
ICAgIHNldEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYgKHN0YXJ0Q29udGFp
bmVyKQorICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTsKKyAg
ICBpZiAoZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRhaW5lciwgZW5kT2Zm
c2V0KTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3Vt
ZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBh
c3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpAQCAtMTI5LDggKzEz
Miw4IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBB
U1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAgICAgbV9vd25lckRv
Y3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1lbnQgPSBkb2N1bWVu
dDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsKLSAgICBtX2VuZC5z
ZXRUb1N0YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2Rl
KGRvY3VtZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBt
X293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0xNTcsMTMgKzE2MCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIoY29u
c3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0Um9vdENvbnRhaW5l
ciAhPSBlbmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0
YXJ0LCBlbmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNl
dFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZOb2RlLCBpbnQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAg
ZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBib29sIGRpZE1v
dmVEb2N1bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkp
OwpAQCAtMTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQoUGFzc1JlZlB0cjxO
b2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAKICAg
ICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2Rl
LmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zm
c2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUpOworICAgIG1fc3Rh
cnQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsKIAogICAgIGlmIChk
aWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKG1fc3RhcnQs
IG1fZW5kKSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldEVu
ZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5
cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wgZGlkTW92ZURvY3Vt
ZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3Vt
ZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CkBAIC0x
OTUsMTEgKzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAKICAgICBlYyA9IDA7
Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLmdldCgpLCBv
ZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5v
ZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9l
bmQuc2V0KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2VuZC5zZXQoV1RGTW92
ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRpZE1vdmVEb2N1bWVu
dCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQogICAg
ICAgICBjb2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2b2lkIFJhbmdlOjpz
ZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQgPSBzdGFydC5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRBbmNob3JlZC5jb250
YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7
CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMg
PSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0U3RhcnQoKnBhcmVu
dEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0IFBvc2l0aW9uJiBl
bmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkID0g
ZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChwYXJlbnRBbmNob3Jl
ZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
LCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAg
ICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0RW5kKCpw
YXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFy
dCkKQEAgLTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0
KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6OmlzUG9pbnRJblJh
bmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBS
YW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9y
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1
bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQo
KSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTI0MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmIChlYykgewogICAg
ICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhlciByZWZOb2RlIGFu
ZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAgICAgICAgIC8vIGJ1
dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBo
ZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KHJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAgICAgZWMg
PSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCByZXN1bHQgPSBj
b21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwg
bV9zdGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYmIGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0
KCksIGVjKSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBv
aW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQo
KSwgZWMpID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVm
Tm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpLCBlYykgPD0gMCAm
JiAhZWM7CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVOVF9FUlIpOwogICAg
IGVjID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZVBv
aW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
c2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0
aGUgCiAgICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2RlIGlz
IGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLQotICAg
IGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3Vt
ZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgp
KSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgIGlm
IChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIXJlZk5vZGUtPmlu
RG9jdW1lbnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9kZSwgJnN0YXJ0Q29u
dGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgpICYmICFjb21tb25B
bmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAg
ICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAog
ICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZvcmUKLSAgICBpZiAo
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCks
IG1fc3RhcnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVCb3VuZGFyeVBvaW50
cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwg
ZWMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29tZXMgYWZ0ZXIKLSAg
ICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5l
cigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYgKGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNl
dCgpLCBlYykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvLyBwb2ludCBp
cyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMK
ICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21wYXJl
Tm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1JhbmdlOjpDb21w
YXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9k
b2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgMCwg
MSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLAogICAgIC8v
IGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVj
dGl2ZWx5CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPmlu
RG9jdW1lbnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
Ly8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCBy
ZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBpZiAo
JnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgeworICAgIGlmICgmcmVm
Tm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRmlyZWZv
eCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAu
CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVuc2lnbmVkIG5vZGVJ
bmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250YWluZXJOb2RlKiBw
YXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWduZWQgbm9kZUluZGV4
ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYgKCFwYXJlbnROb2Rl
KSB7CiAgICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1lbnQgd2Ugc2hvdWxk
IHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEwLDIyIEBAIFJhbmdl
OjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAK
LSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpIDwgMCkgeyAv
LyBzdGFydHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9k
ZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKKyAgICAvLyBzdGFy
dHMgYmVmb3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4LCBl
YykgPCAwKSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRl
eCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAgICAgICAgICByZXR1
cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7IC8v
IGVuZHMgYmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8vIHN0YXJ0cyBhdCBv
ciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnRO
b2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQotICAg
ICAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBOT0RFX0lOU0lERTsg
Ly8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0cyBhdCBvciBhZnRl
ciB0aGUgcmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2Rl
SW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQorICAgICAgICByZXR1
cm4gTk9ERV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVuZHMgaW5zaWRlIHRo
ZSByYW5nZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVI
b3cgaG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29u
c3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBp
ZiAoIXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKCk7Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VSYW5nZS5jb21tb25B
bmNlc3RvckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9jdW1lbnQoKSAhPSAm
c291cmNlQ29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VS
UjsKQEAgLTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2lu
dHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjCiAKICAgICBz
d2l0Y2ggKGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAgICAgICAgICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS0+bV9zdGFy
dCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0
LCBzb3VyY2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RBUlRfVE9fRU5EOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFu
Z2UtPm1fc3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2lu
dHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAgY2FzZSBFTkRfVE9f
RU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291
cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5
UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAgICBjYXNlIEVORF9U
T19TVEFSVDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFy
dCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7CiAgICAgfQogCiAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywg
Y29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3Nob3J0
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBj
b21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7CiAgICAgICAgIGVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2b2lkIFJhbmdlOjpk
ZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNzQ29udGVudHMoRGVs
ZXRlLCBlYyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9k
ZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2Rl
KSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5vZGUtPmRvY3VtZW50
KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgpIHx8
ICZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJlZk5vZGUtPnBhcmVu
dE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnRO
b2RlKCk7CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICB1
bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKIAogICAgIC8v
IElmIChwYXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVudCwgb2Zmc2V0ICsg
MSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVyd2lzZSwgcmV0dXJu
IGZhbHNlLgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2ludChwYXJlbnROb2Rl
LCBub2RlSW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0gY29tcGFyZVBvaW50
KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBjb21wYXJlRmlyc3Qg
PSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOworICAgIHNob3J0IGNv
bXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVj
KTsKIAogICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0gbV9lbmQgPyBjb21w
YXJlRmlyc3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBpc1NlY29uZEFmdGVy
U3RhcnQgPSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAgOiBjb21wYXJlU2Vj
b25kID49IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJh
bmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2VwdGlvbkNvZGUKICAg
ICBlYyA9IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUp
IHsKICAgICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0
aWFsU3RhcnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlhbFN0YXJ0LT5wYXJl
bnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOworICAg
ICAgICAgICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsU3Rh
cnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxzZSBpZiAocGFydGlh
bEVuZCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgpKSkKLSAgICAgICAg
ICAgIHNldFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlhbEVuZC0+Y29tcHV0
ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFydGlhbEVuZC0+cGFy
ZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKICAgICAgICAg
aWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fZW5kID0gbV9z
dGFydDsKQEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdl
OjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBwcm9jZXNzQ29u
dGVudHMoQ2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9k
ZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUmVm
PE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFub2RlKSB7Ci0g
ICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYm9v
bCBzdGFydElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0YXJ0Q29udGFpbmVy
KCkpOwogICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRDb250YWluZXIoKS5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CkBAIC04
NTksNyArODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiBub2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMgPSAwOwotICAgIGlm
ICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwgcmVmZXJlbmNlTm9k
ZS5nZXQoKSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0
eShub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEV2ZW50UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2b2lkIFJhbmdlOjpp
bnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2RlID09IG5vZGUpCisg
ICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAgcmVmZXJlbmNlTm9k
ZSA9IHJlZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2RlLT5yZW1vdmUoZWMp
OwpAQCAtODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9k
ZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5z
aWduZWQgbmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5vZGUtPmNvbXB1dGVO
b2RlSW5kZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgaWYgKGlzPERvY3Vt
ZW50RnJhZ21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRvd25jYXN0PERvY3Vt
ZW50RnJhZ21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBpZiAoaXM8RG9jdW1l
bnRGcmFnbWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCArPSBkb3duY2FzdDxE
b2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMoKTsKICAgICBlbHNl
CiAgICAgICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobm9kZS5y
ZWxlYXNlTm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7CisgICAgcGFyZW50LT5p
bnNlcnRCZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNlZCgpKQotICAgICAg
ICBzZXRFbmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAgICAgc2V0RW5kKFdU
Rk1vdmUocGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBSYW5nZTo6dG9TdHJp
bmcoKSBjb25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRldGFjaCgpCiAgICAg
Ly8gVGhpcyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZpY2F0aW9uLgogfQog
Ci1Ob2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUm
IG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIHN3aXRj
aCAobi0+bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAgICAgZWMgPSBJTlZB
TElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk2MCw3
ICs5MzEsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5U
X05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6
OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpuKS5sZW5ndGgo
KSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25j
YXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIGVjID0g
SU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgY2Fz
ZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBOb2RlKiBSYW5nZTo6
Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAgICAgICAgICAgIGlm
ICghb2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
Tm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKKyAg
ICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAgICAgICAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGlsZEJlZm9yZTsKQEAg
LTk4NCwxMDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QK
ICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZzdGFydENvbnRhaW5l
cigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsK
IH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVy
cm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0g
SU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0
U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRlTm9kZUluZGV4KCkg
KyAxLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNv
bXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0RW5kQmVmb3Jl
KE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kQmVm
b3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9k
ZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnROb2RlKCksIHJlZk5v
ZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnRO
b2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6
OnNldEVuZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
aWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJl
Zk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVudE5v
ZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOworICAgIHNldEVuZCgq
cmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMp
OwogfQogCi12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPnBhcmVudE5vZGUo
KSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBJTlZB
TElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoJm93
bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgc2V0RG9jdW1l
bnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJl
Zk5vZGUuZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgp
KTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgZWMg
PSAwOwotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5kZXgsIGVjKTsKKyAg
ICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5k
ZXggKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXggKyAx
LCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhOb2Rl
JiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAg
ICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
cmVmTm9kZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVmTm9kZS5pc0RvY3Vt
ZW50VHlwZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZO
b2RlLT5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgp
KTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQorICAg
ICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZOb2RlKHJlZk5vZGUp
OwogfQogCi12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8Tm9kZT4gcGFz
c05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRl
bnRzKE5vZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0
cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYgKCFuZXdQYXJlbnQp
IHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
UmVmPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAvLyBJTlZBTElEX1NU
QVRFX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0cyBhIG5vbi1UZXh0
IG5vZGUuCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tcmFuZ2Utc3Vy
cm91bmRjb250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBAIHZvaWQgUmFuZ2U6
OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSogbiA9IG5ld1BhcmVu
dC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpuZXdQ
YXJlbnQpLnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KG5ld1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEwODcsMTcgQEAgdm9p
ZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBhc3NOZXdQYXJlbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnQu
cmVsZWFzZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2VsZWN0
Tm9kZShuZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5ld1BhcmVudCwgZWMp
OwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZOb2RlLCBFeGNlcHRp
b25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5
cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBl
YyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRl
eCgpLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNv
bXB1dGVOb2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29u
c3QKQEAgLTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgUmFu
Z2UmIG90aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25l
ckRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJEb2N1
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3RhcnQg
PSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAmb3RoZXIsIEFT
U0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9IGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgc2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgZW5kVG9FbmQg
PSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90aGVyLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0KIApAQCAtMTU3NSwx
OSArMTUxMSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJh
bmdlKiBiKQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3Vt
ZW50KCkgIT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJEb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgc3Rh
cnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFS
VCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRvRW5kID0gYS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vjb25kIHJhbmdlLgog
ICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJh
bmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8PSAwKQorICAgIGlm
IChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKmIsIEFTU0VS
VF9OT19FWENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdl
LgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCkKKyAgICBp
ZiAoc3RhcnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpF
TkRfVE9fU1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUzMyw3IEBAIFJlZjxS
YW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVmPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQgZXhjZXB0aW9uID0g
MDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNlcHRpb24pOworICAg
IHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsKICAgICByZXR1cm4g
cmFuZ2U7CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJv
dW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXIKIHsKICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRhaW5lci5maXJzdENo
aWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9kZVRvQmVSZW1vdmVk
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09
IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9k
ZSgmY29udGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29u
dGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAo
Tm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAg
ICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAgICAgICAgICAgICAg
IGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSArMTY0Myw5IEBAIHZv
aWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKFJh
bmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5u
b2RlKCkpCi0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJs
aW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnku
c2V0KCpvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgp
ICsgb2Zmc2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGRO
b2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgpID09IG9sZE5vZGUu
aW5kZXgoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1Np
YmxpbmcoKSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUo
KS0+cHJldmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQgUmFuZ2U6OnRleHRO
b2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0x
NzMwLDcgKzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxp
dChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAgICAgICB1bnNpZ25l
ZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBib3Vu
ZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlPZmZz
ZXQgPiBzcGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLT5uZXh0
U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKKyAgICAgICAgICAg
IGJvdW5kYXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBz
cGxpdE9mZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byogcGFyZW50
ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3IEBAIHZvaWQgUmFu
Z2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAg
ICBlbmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsK
LSAgICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgc3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsK
LSAgICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVl
cEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKworICAg
IGlmICghc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAg
ZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0U3RhcnQoKnN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmICghZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9y
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRlZXBFcXVpdmFsZW50
KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0PiBSYW5nZTo6Z2V0
Q2xpZW50UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2NzJlYjJjYmJhNWJm
ZjZhMzVkMGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVmOGZlMjZmMjg3NGJm
MzE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1YmxpYzoKIAogICAg
IE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uQW5j
ZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWluZXIoKSk7IH0KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9k
ZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
PSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZChS
ZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJU
X05PX0VYQ0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRv
U3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVm
Tm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0IGNvbXBhcmVQb2lu
dChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZOb2RlLCBpbnQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUmIHJlZk5v
ZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBlbnVtIENvbXBhcmVS
ZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwg
Tk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3VsdHMgY29tcGFyZU5v
ZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGVudW0gQ29tcGFy
ZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19FTkQsIEVORF9UT19T
VEFSVCB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhD
b21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBz
aG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMo
Q29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CisgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQg
c2hvcnQgY29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBj
b250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50IG9mZnNldEIsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9p
bnQmIGJvdW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Ym91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJzZWN0c05vZGUoTm9k
ZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0c05v
ZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRl
Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBl
eHRyYWN0Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGluc2VydE5vZGUo
UmVmUHRyPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGluc2VydE5vZGUoUmVm
PE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsK
IAogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25l
UmFuZ2UoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihO
b2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUq
LCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2Rl
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRy
PE5vZGU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFy
dEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U3RhcnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlJiwgRXhjZXB0aW9u
Q29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEVuZEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhjZXB0aW9uQ29kZSYg
PSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5v
ZGVDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc3Vycm91bmRDb250
ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhcnRCZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNvbnN0IFBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQog
ICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Q
b3NpdGlvbigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0
RG9jdW1lbnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdPZmZzZXQoTm9kZSos
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2RlKiBjaGVja05vZGVX
T2Zmc2V0KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKICAgICBl
bnVtIEFjdGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBFeGNlcHRpb25Db2Rl
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2JkYWMxNGQ5YjIzMWNj
MGQxZGI0MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFhNDYyMzIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25zdHJ1Y3RvciwKICAg
ICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50ZXJzRXZlbkZvck5v
bk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUs
CiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFjZSBSYW5nZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhlODhjM2M2NmFkOTI5
YWY1YjRhZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2YjlhNWVhNGU0MWQz
Yzk0NDc3NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQ
b2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAt
NDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQg
c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJl
Zm9yZSk7CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBO
b2RlKiBjaGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCk7CiAKICAg
ICB2b2lkIHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0VG9BZnRlckNoaWxk
KE5vZGUmKTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPik7Ci0g
ICAgdm9pZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHNldFRv
U3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRPZk5vZGUoUmVmPE5v
ZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2b2lk
IGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDExIEBAIGlubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFy
eSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFBh
c3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSkK
K2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2RlPiYmIGNvbnRhaW5l
ciwgaW50IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNTRVJUKGNvbnRhaW5l
cik7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hpbGRCZWZvcmUgPT0g
KG9mZnNldCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkgOiAwKSk7
Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29udGFpbmVyTm9kZSA9
IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0Owog
ICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpAQCAtMTUxLDE4ICsx
NTAsMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyQ2hpbGQo
Tm9kZSYgY2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSA/IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5
UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIpCitpbmxp
bmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYg
Y29udGFpbmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9k
ZSA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7
CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5
ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0Vu
ZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2b2lkIFJhbmdlQm91
bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAg
IEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAg
ICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgaWYgKG1fY29udGFp
bmVyTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9vZmZzZXRJbkNvbnRh
aW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgICAgIG1f
Y2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1ZWRmMGI2YzJkM2U5
ZTdlMjU5OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2MjYyZDI2ZTRjMjlj
MmU5MjQ4MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5n
ZSogcmFuZ2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5h
dGl2ZSA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpLCBzdGFydFBv
c2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGVjKTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNv
bnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRl
cm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0
aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0ZmU4ZmJkOTQuLmFj
NDY0ODg5ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyArNzIyLDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdT
dHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAgIEVsZW1lbnQqIGVk
aXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChz
dGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChlZGl0YWJsZVJvb3Qg
JiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkK
KyAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAh
PSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqc3RhcnROb2Rl
LT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0
YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CmluZGV4IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgwMDAuLmNhNDdiYTgw
ZDQ4MWQ3NzFmZTVmYTNhMjdjNTkzNGJlMzkyZDM5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTE5NTAsMTQgKzE5NTAsMTYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAgICAgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRQb3NpdGlvbiA9IHBv
c2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgICAgICBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCks
IHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgIGlmIChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCkpCisgICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCgqcmFu
Z2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0
aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAg
ICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyAvLyB3b24ndCBuZWVkIHRvIHdyYXAKICAg
ICB9CiAgICAgCiAgICAgLy8gdG9wTm9kZSBkZWZpbmVzIHRoZSB3aG9sZSByYW5nZSB3ZSB3YW50
IHRvIG9wZXJhdGUgb24gCiAgICAgTm9kZSogdG9wTm9kZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cG9zaXRpb24pOwogICAgIC8vIEZJWE1FOiBsYXN0T2Zmc2V0Rm9yRWRpdGluZygpIGlzIHdyb25n
IGhlcmUgaWYgZWRpdGluZ0lnbm9yZXNDb250ZW50KGhpZ2hlc3RFZGl0YWJsZVJvb3QoKSkgcmV0
dXJucyB0cnVlIChlLmcuIGEgPHRhYmxlPikKLSAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRF
bmQodG9wTm9kZSwgbGFzdE9mZnNldEZvckVkaXRpbmcodG9wTm9kZSksIElHTk9SRV9FWENFUFRJ
T04pOworICAgIGlmICh0b3BOb2RlKQorICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRF
bmQoKnRvcE5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKHRvcE5vZGUpLCBJR05PUkVfRVhDRVBU
SU9OKTsKIAogICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ugc3RhcnRzIGluIHRoZSBtaWRk
bGUgb2YgYSB3b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQgc28gd2Ugc3RhcnQgY2hlY2tp
bmcKICAgICAvLyBhdCBhIHdvcmQgYm91bmRhcnkuIEdvaW5nIGJhY2sgYnkgb25lIGNoYXIgYW5k
IHRoZW4gZm9yd2FyZCBieSBhIHdvcmQgZG9lcyB0aGUgdHJpY2suCkBAIC0yMDExLDcgKzIwMTMs
NyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4
dCBtaXNzcGVsbGVkIHdvcmQKICAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJzKCpn
cmFtbWFyU2VhcmNoUmFuZ2UpOwogICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGlu
Z09mZnNldCk7Ci0gICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZCgmY2hhcnMu
cmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVu
ZChjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9m
ZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBpZiAo
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yMDIyLDkgKzIwMjQsMTAgQEAgdm9pZCBF
ZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KQogICAgIC8vIElmIHdlIGZvdW5kIG5laXRoZXIgYmFkIGdyYW1tYXIgbm9yIGEgbWlzc3BlbGxl
ZCB3b3JkLCB3cmFwIGFuZCB0cnkgYWdhaW4gKGJ1dCBkb24ndCBib3RoZXIgaWYgd2Ugc3RhcnRl
ZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgIC8vIGJsb2NrIHJhdGhlciB0aGFuIGF0IGEg
c2VsZWN0aW9uKS4KICAgICBpZiAoc3RhcnRlZFdpdGhTZWxlY3Rpb24gJiYgIW1pc3NwZWxsZWRX
b3JkICYmICFiYWRHcmFtbWFyUGhyYXNlKSB7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KHRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBpZiAodG9w
Tm9kZSkKKyAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCp0b3BOb2Rl
LCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgLy8gZ29pbmcgdW50aWwgdGhlIGVuZCBv
ZiB0aGUgdmVyeSBmaXJzdCBjaHVuayB3ZSB0ZXN0ZWQgaXMgZmFyIGVub3VnaAotICAgICAgICBz
cGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQoJnNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJj
aEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIHNwZWxsaW5n
U2VhcmNoUmFuZ2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZz
ZXRBZnRlcldyYXAsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAKICAgICAgICAgaWYgKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJh
bmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZSgpOwpAQCAtMjA0NSw3ICsyMDQ4
LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVm
b3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBv
ZiBuZXh0IG1pc3NwZWxsZWQgd29yZAogICAgICAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9y
IGNoYXJzKCpncmFtbWFyU2VhcmNoUmFuZ2UpOwogICAgICAgICAgICAgICAgIGNoYXJzLmFkdmFu
Y2UobWlzc3BlbGxpbmdPZmZzZXQpOwotICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5n
ZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBjaGFycy5yYW5nZSgp
LT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgICAgICBncmFt
bWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBj
aGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQpAQCAt
MzE2OCw5ICszMTcxLDkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5n
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmEKICAgICBSZWZQdHI8Tm9k
ZT4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5jZVJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgOiBudWxscHRyOwog
ICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAg
ICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIHNoYWRvd1RyZWVS
b290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5k
KCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVS
b290LmdldCgpLCAwKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93
VHJlZVJvb3QsIDApOwogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmlu
ZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOwpAQCAtMzE4Niw5ICsz
MTg5LDkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmEKIAogICAgICAgICBpZiAoc2hhZG93VHJl
ZVJvb3QpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgICAgIHNlYXJj
aFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIHNoYWRvd1RyZWVSb290LT5jb3Vu
dENoaWxkTm9kZXMoKSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hh
ZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1Ry
ZWVSb290LmdldCgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
KnNoYWRvd1RyZWVSb290LCAwKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdFJhbmdlID0g
ZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7CkBAIC0zMTk3LDEw
ICszMjAwLDEyIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhCiAgICAgLy8gSWYgbm90aGluZyB3
YXMgZm91bmQgaW4gdGhlIHNoYWRvdyB0cmVlLCBzZWFyY2ggaW4gbWFpbiBjb250ZW50IGZvbGxv
d2luZyB0aGUgc2hhZG93IHRyZWUuCiAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAm
JiBzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50
cyhkb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnRBZnRlcihzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVl
Um9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290LT5zaGFkb3dI
b3N0KCkpIHsKKyAgICAgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNlYXJj
aFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3Jl
KCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJl
c3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7
CiAgICAgfQpAQCAtMzIyMyw3ICszMjI4LDcgQEAgc3RhdGljIGJvb2wgaXNGcmFtZUluUmFuZ2Uo
RnJhbWUqIGZyYW1lLCBSYW5nZSogcmFuZ2UpCiAgICAgYm9vbCBpblJhbmdlID0gZmFsc2U7CiAg
ICAgZm9yIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGZyYW1lLT5vd25l
ckVsZW1lbnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRv
Y3VtZW50KCkub3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKCZvd25lckVsZW1lbnQtPmRv
Y3VtZW50KCkgPT0gJnJhbmdlLT5vd25lckRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGluUmFu
Z2UgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUob3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICAgICAgICAgIGluUmFuZ2UgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUoKm93bmVyRWxl
bWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KQEAgLTMyNTUsOCArMzI2MCw4IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzSW5TaGFkb3dUcmVl
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNoYWRvd0hvc3QoKSwg
SUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCZvcmln
aW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnJlc3VsdFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLnNoYWRvd0hvc3QoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKG9yaWdpbmFsRW5kQ29udGFpbmVyLCBvcmlnaW5hbEVuZE9m
ZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCkBAIC0zMjc1LDExICszMjgwLDExIEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAg
ICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxlUG9z
aXRpb24gaGVyZSwKICAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBhIFRl
eHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCiAgICAgICAgIC8vIHRleHQgbm9kZXMu
IAotICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoJnJlc3VsdFJhbmdlLT5lbmRDb250YWlu
ZXIoKSwgcmVzdWx0UmFuZ2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlc3VsdFJhbmdlLT5lbmRDb250YWluZXIoKSwgcmVz
dWx0UmFuZ2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgICAgICBOb2Rl
KiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zaGFkb3dSb290KCk7CiAgICAgICAgIGlm
IChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291
bnRDaGlsZE5vZGVzKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgc2VhcmNoUmFu
Z2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9k
ZXMoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfSB3aGlsZSAodHJ1ZSk7CiAKICAgICByZXR1
cm4gbWF0Y2hDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmlu
ZGV4IDkxYWQxNzY4NjZmNGYxM2MwNzRkN2QzMTQ4NDViZjM1YmFiN2QzMzkuLjgxYWEwMDA4MWM3
NmRmYTUzMzNiYWQ0NmQ5MDQ0YjVhOGIzZGU4OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcApAQCAtMjI4LDEyICsyMjgsMTEgQEAgc3RhdGljIHVuc2lnbmVkIHZl
cnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0KIAotc3RhdGljIFJl
ZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UqIGEsIFJhbmdlKiBiKQorc3RhdGljIFJl
ZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UmIGEsIFJhbmdlJiBiKQogewotICAgIFJh
bmdlKiBzdGFydCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBhIDogYjsKLSAgICBSYW5nZSogZW5k
ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKSA8PSAwID8gYiA6IGE7Ci0KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShh
LT5vd25lckRvY3VtZW50KCksICZzdGFydC0+c3RhcnRDb250YWluZXIoKSwgc3RhcnQtPnN0YXJ0
T2Zmc2V0KCksICZlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVuZE9mZnNldCgpKTsKKyAgICBS
YW5nZSYgc3RhcnQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBhIDogYjsKKyAgICBSYW5nZSYgZW5k
ID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIsIEFTU0VSVF9O
T19FWENFUFRJT04pIDw9IDAgPyBiIDogYTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShhLm93
bmVyRG9jdW1lbnQoKSwgJnN0YXJ0LnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LnN0YXJ0T2Zmc2V0
KCksICZlbmQuZW5kQ29udGFpbmVyKCksIGVuZC5lbmRPZmZzZXQoKSk7CiB9CiAKIC8vIEV4ZWN1
dGUgY29tbWFuZCBmdW5jdGlvbnMKQEAgLTM1Niw4ICszNTUsOCBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdAogewogICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmso
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZS5zZWxlY3Rpb24oKTsKLSAgICBpZiAobWFyaykgewotICAgICAgICBib29sIHNlbGVjdGVk
ID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwg
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwg
dHJ1ZSk7CisgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7
CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlv
bkRPTVJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCks
IERPV05TVFJFQU0sIHRydWUpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwogICAgICAgICBp
ZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAxMCw3ICsxMDA5
LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgc3lzdGVtQmVlcCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2VsZWN0aW9uLmdldCgpKS5nZXQo
KSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0s
IHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5kZXggYTAyNTZhNDAwYTkzZTRmNzZlODk4MTk1ZDc4
YjY4ZjUxNjk4MTM2My4uYWFhOTlhOGU4ZWQxNjFkMTEzMjA4NGJiNDI2Y2RhOTYyODIxYjNlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgIGlmICghcm9vdCB8fCAh
cmVmTm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc0VsZW1lbnRGb3JGb3JtYXRCbG9j
ayhyZWZOb2RlLT50YWdRTmFtZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxvY2soc3RhcnQpCi0g
ICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4ocmVmTm9kZSwgcmFuZ2UuZ2V0KCkpKQorICAgICAgICAmJiAoZW5kID09IGVuZE9m
QmxvY2soZW5kKSB8fCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpyZWZOb2RlLCByYW5n
ZS5nZXQoKSkpCiAgICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNjZW5k
YW50T2YocmVmTm9kZSkpIHsKICAgICAgICAgLy8gQWxyZWFkeSBpbiBhIGJsb2NrIGVsZW1lbnQg
dGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBjdXJyZW50IHBhcmFncmFwaAogICAgICAgICBpZiAocmVm
Tm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1lKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAppbmRleCA1YWMzMDc3N2VkZjhlNmE4NDUzYWQxNzQ3MzQzYjkzYjYwYjQz
NTdkLi4wMzllMzlmZGJjZTUyMmY5ZjU4NzU2ZTE0ZmVjMjA4ZWU5MzdjODQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDc0LDcgKzQ3NCw3IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwg
Ym9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0
VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAg
fSBlbHNlIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgp
KSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSYW5nZTo6Q29tcGFy
ZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZSgmbm9kZSwgZWMpOwor
ICAgICAgICBSYW5nZTo6Q29tcGFyZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9IHJhbmdlLT5jb21w
YXJlTm9kZShub2RlLCBlYyk7CiAgICAgICAgIGlmICghZWMgJiYgKGNvbXBhcmVSZXN1bHQgPT0g
UmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpO
T0RFX0lOU0lERSkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3RoaW5nIGhlcmUsIHdo
ZW4gdGhpcyBub2RlJ3MgcmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgdGhlIHJlY3QgdGhhdCBpdCAK
ICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVkLCBidXQsIHNlbGVj
dGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCBlZjRmNjIxOTMzOWU1YTZhZWM5OTAy
OTc3OGI2ODllMTRlOGM2YWZlLi42ZmY3YzFhZTkwOTM3YzNiNGEzNjU5NDE5ZjRmMTM5YmYyYWI2
MGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApA
QCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5n
bGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlIGVudGlyZSBsaXN0IGlzIHNlbGVjdGVkLCB0aGVu
IGNvbnZlcnQgdGhlIHdob2xlIGxpc3QuCi0gICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGxpc3ROb2RlLmdldCgpLCBjdXJyZW50U2VsZWN0
aW9uKSkgeworICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbigqbGlzdE5vZGUsIGN1cnJlbnRTZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICBi
b29sIHJhbmdlU3RhcnRJc0luTGlzdCA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobGlzdE5v
ZGUuZ2V0KCkpID09IGN1cnJlbnRTZWxlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAg
ICAgIGJvb2wgcmFuZ2VFbmRJc0luTGlzdCA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShsaXN0
Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+ZW5kUG9zaXRpb24oKTsKIApAQCAtMjQz
LDkgKzI0Myw5IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJh
Z3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAgICAgICAvLyBSZXN0
b3JlIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlvbiBpZiB0aGV5IHN0
YXJ0ZWQgaW5zaWRlIGxpc3ROb2RlCiAgICAgICAgICAgICAvLyBiZWNhdXNlIG1vdmVQYXJhZ3Jh
cGhXaXRoQ2xvbmVzIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLgogICAgICAgICAgICAgaWYgKHJh
bmdlU3RhcnRJc0luTGlzdCAmJiBuZXdMaXN0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxl
Y3Rpb24tPnNldFN0YXJ0KG5ld0xpc3QsIDAsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldFN0YXJ0KCpuZXdMaXN0LCAwLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICAgICAgICAgIGlmIChyYW5nZUVuZElzSW5MaXN0ICYmIG5ld0xpc3QpCi0g
ICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5kKG5ld0xpc3QsIGxhc3RPZmZz
ZXRJbk5vZGUobmV3TGlzdC5nZXQoKSksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgqbmV3TGlzdCwgbGFzdE9mZnNldEluTm9kZShu
ZXdMaXN0LmdldCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICAgICAgICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShuZXdMaXN0Lmdl
dCgpKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAKaW5kZXggNzUzNjkyMDBjMjk1NWIwNzVjODNiNTBjZDY1NzA3NzQ1Y2ZlYzhmNy4uYjY5NTJl
MmI4NmYxOWNlYzY2ZGNiYWZjZTk2NjIxYjZkNTExOTliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTc0LDggKzE3NCwxMyBAQCBQYXNz
UmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKGludCBjaGFyYWN0
ZXJPZmZzZXQsIGludCBjaGFyYQogaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8o
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKKyAgICBpZiAoIXBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCiAgICAgUmVmPFJhbmdlPiByYW5nZSA9IG9mZnNldEFzUmFuZ2UoKS0+Y2xvbmVSYW5nZSgp
OwotICAgIHJhbmdlLT5zZXRFbmQocG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKCpw
b3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDQ4M2E0ZDQ0MDBhNDQ1ZjU5YTJjYzgzNGZmODJk
OTE3YTk1MmZkNDYuLmYyYjJmYjcwN2Y5YWI2NWYyZTNjY2Q0MmQ4ZDQwYjViYjFiYmEwZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTE0NzksOCArMTQ3OSw4
IEBAIFJlZjxSYW5nZT4gQ2hhcmFjdGVySXRlcmF0b3I6OnJhbmdlKCkgY29uc3QKICAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFT
U0VSVCgmbm9kZSA9PSAmcmFuZ2UtPmVuZENvbnRhaW5lcigpKTsKICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKSArIG1fcnVuT2Zmc2V0OwotICAgICAgICAgICAg
cmFuZ2UtPnNldFN0YXJ0KCZub2RlLCBvZmZzZXQpOwotICAgICAgICAgICAgcmFuZ2UtPnNldEVu
ZCgmbm9kZSwgb2Zmc2V0ICsgMSk7CisgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQobm9kZSwgb2Zmc2V0ICsgMSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJhbmdlOwpAQCAtMTU2OSw4ICsxNTY5LDggQEAg
UmVmPFJhbmdlPiBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IHItPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgICAgICBB
U1NFUlQoJm5vZGUgPT0gJnItPmVuZENvbnRhaW5lcigpKTsKICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSByLT5lbmRPZmZzZXQoKSAtIG1fcnVuT2Zmc2V0OwotICAgICAgICAgICAgci0+c2V0U3Rh
cnQoJm5vZGUsIG9mZnNldCAtIDEpOwotICAgICAgICAgICAgci0+c2V0RW5kKCZub2RlLCBvZmZz
ZXQpOworICAgICAgICAgICAgci0+c2V0U3RhcnQobm9kZSwgb2Zmc2V0IC0gMSk7CisgICAgICAg
ICAgICByLT5zZXRFbmQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gcjsKQEAgLTI0NzksOCArMjQ3OSw4IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAg
CiAgICAgLy8gRklYTUU6IHRoZSBhdEVuZCgpIGNoZWNrIHNob3VsZG4ndCBiZSBuZWNlc3Nhcnks
IHdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
Mjg5Pi4KICAgICBpZiAoIXJhbmdlTG9jYXRpb24gJiYgIXJhbmdlTGVuZ3RoICYmIGl0LmF0RW5k
KCkpIHsKLSAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCksIDApOwotICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQo
dGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwKTsKKyAgICAgICAgcmVzdWx0UmFuZ2Ut
PnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOwogICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCkBAIC0yNDk4LDEyICsyNDk4LDEyIEBA
IFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChD
b250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgICAgICAgICAgaXQuYWR2YW5jZSgpOwog
ICAgICAgICAgICAgICAgIGlmICghaXQuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBS
ZWY8UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dFJ1
blJhbmdlLT5zZXRFbmQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKHJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcnVuU3RhcnQgPSB0ZXh0UnVu
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcnVu
RW5kID0gVmlzaWJsZVBvc2l0aW9uKHJ1blN0YXJ0KS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkVuZC5pc05vdE51bGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKHJ1bkVuZC5jb250YWluZXJOb2RlKCks
IHJ1bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQoKnJ1bkVuZC5jb250YWluZXJOb2RlKCksIHJ1
bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjUxMiwyNCArMjUxMiwyNCBAQCBSZWZQdHI8
UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGludAogICAgICAgICAgICAgc3RhcnRSYW5nZUZvdW5kID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmICh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNUZXh0Tm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHJhbmdlTG9jYXRpb24gLSBkb2NUZXh0
UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVu
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHJhbmdlTG9jYXRp
b24gPT0gZG9jVGV4dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+
c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0
KHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNl
dCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJh
bmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdl
LT5lbmRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFy
dCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEVuZCkgewog
ICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc1RleHROb2Rl
KCkpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VFbmQgLSBkb2NUZXh0UG9z
aXRpb247Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgmdGV4dFJ1blJhbmdl
LT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1blJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2VFbmQgPT0gZG9jVGV4
dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0
UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1blJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgmdGV4
dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1blJhbmdlLT5lbmRD
b250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBkb2NUZXh0UG9zaXRpb24gKz0gbGVuZ3RoOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yNTQyLDcgKzI1NDIsNyBAQCBSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVyTm9kZSogc2NvcGUsIGludAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAocmFuZ2VMZW5ndGggJiYgcmFuZ2VFbmQgPiBk
b2NUZXh0UG9zaXRpb24pIC8vIHJhbmdlRW5kIGlzIG91dCBvZiBib3VuZHMKLSAgICAgICAgcmVz
dWx0UmFuZ2UtPnNldEVuZCgmdGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJh
bmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1blJh
bmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgCiAg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0UmFuZ2UpOwogfQpAQCAtMjU2Niw3ICsyNTY2LDcgQEAg
Ym9vbCBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNj
b3BlLCBjb25zdCBSYW5nZSogcmFuZ2UKICAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250
YWluZXIoKSA9PSBzY29wZSk7CiAgICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHRlc3RSYW5nZS5wdHIoKSk7CiAKLSAgICB0ZXN0UmFuZ2UtPnNldEVuZCgmcmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAg
IHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNl
dCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250
YWluZXIoKSA9PSBzY29wZSk7CiAgICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aCh0ZXN0UmFuZ2UucHRyKCkpIC0gbG9jYXRpb247CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjIz
LDcgKzI2MjMsNyBAQCBzdGF0aWMgc2l6ZV90IGZpbmRQbGFpblRleHQoY29uc3QgUmFuZ2UmIHJh
bmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbgogCiAgICAgaWYgKGJ1ZmZlci5u
ZWVkc01vcmVDb250ZXh0KCkpIHsKICAgICAgICAgUmVmPFJhbmdlPiBiZWZvcmVTdGFydFJhbmdl
ID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGJlZm9yZVN0
YXJ0UmFuZ2UtPnNldEVuZCgmcmFuZ2Uuc3RhcnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZz
ZXQoKSk7CisgICAgICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNldEVuZChyYW5nZS5zdGFydENvbnRh
aW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKICAgICAgICAgZm9yIChTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJlZm9yZVN0YXJ0UmFuZ2UuZ2V0
KCkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5j
ZSgpKSB7CiAgICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRleHQoYmFja3dhcmRzSXRlcmF0
b3IudGV4dCgpKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCAyZmUyNmQ3
Y2YxNzBmOWZkOGVmN2ZlNWE5MmU1YjA4Nzk1Nzk2NjczLi40MjFlZTJiZTJlMTdiZDhjOGNmNmI2
MWU0YmEyYmY3ZjlhYTVhNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCkBAIC03MzAsMjQgKzczMCwzMiBAQCBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihyLT5lbmRQb3NpdGlvbigpLCBhZmZpbml0eSk7CiB9CiAKLWJvb2wg
c2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9u
KQorYm9vbCBzZXRTdGFydChSYW5nZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQogewotICAgIGlmICghcikKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaW50IGNvZGUgPSAwOwot
ICAgIHItPnNldFN0YXJ0KHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCBjb2RlKTsKLSAgICByZXR1cm4gY29kZSA9PSAwOworICAgIGlmICghcC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBlYyA9IDA7CisgICAgcmFu
Z2UtPnNldFN0YXJ0KCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKLWJvb2wgc2V0RW5kKFJhbmdlICpyLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKK2Jvb2wgc2V0RW5kKFJhbmdlKiBy
YW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYg
KCFyKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFBvc2l0
aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKLSAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0RW5kKHAuY29udGFpbmVy
Tm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKLSAgICByZXR1cm4gY29k
ZSA9PSAwOworICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGludCBlYyA9IDA7CisgICAgcmFuZ2UtPnNldEVuZCgqcC5jb250YWluZXJOb2Rl
KCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOwogfQog
CiAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgZGVwcmVjYXRlZCB0b28sIGxpa2UgdGhl
IHVuZGVybHlpbmcgZnVuY3Rpb24/CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmNwcAppbmRleCA3ZGE2NmExODg2YWVmOTE3MTY2YWM0MjhhZmJjMDQ3ZDRjMWZiODVl
Li5mOGQ5MDMzYTljNzFiOGQ0OGM1OTQ3NjhhZTVmZmM5MDM0YzZlZDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTIxMyw4ICsyMTMsOCBAQCBz
dGF0aWMgUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3QgUG9zaXRpb24mIHBvcykK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIFBvc2l0aW9uIHN0YXJ0KHBvcy5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250
ZW50cyhib3VuZGFyeSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5jb250
YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgc2Vh
cmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnksIGVjKTsKKyAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAgIGlmIChlYykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCBkZWI0MGZkMDFiOTA5ZjYwMWJl
OWQ0ZjE4MDQ5MDlmMmZhMGM3NmZlLi42MjJmNDM2Y2U1ZTcwN2Q3M2ZjMzFkYTE0YTYwYjc0NmM3
YjQ4MTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBAIC01Njks
NyArNTY5LDExIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgRG9jdW1lbnQmIGJvdW5k
YXJ5RG9jdW1lbnQgPSBib3VuZGFyeS0+ZG9jdW1lbnQoKTsKICAgICBQb3NpdGlvbiBzdGFydCA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihib3VuZGFyeSwgMCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gcG9zLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJv
dW5kYXJ5RG9jdW1lbnQpOworCisgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAgUmVmPFJhbmdlPiBz
ZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYm91bmRhcnlEb2N1bWVudCk7CiAgICAgCiAgICAg
VmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgc3VmZml4TGVuZ3RoID0g
MDsKQEAgLTU3NywxOSArNTgxLDE5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFy
eShjLmNoYXJhY3RlckJlZm9yZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGZvcndhcmRz
U2NhblJhbmdlKGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAgIGZvcndh
cmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOwotICAgICAgICBmb3J3YXJk
c1NjYW5SYW5nZS0+c2V0U3RhcnQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRB
ZnRlcigqYm91bmRhcnksIGVjKTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0
KCplbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVj
KTsKICAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNT
Y2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVj
KTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgq
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwg
ZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKmVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KCpzZWFyY2hSYW5nZSk7CisgICAgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CiAgICAgdW5zaWduZWQgbmV4
dCA9IGJhY2t3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcs
IHN1ZmZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogCiAgICAgaWYgKCFuZXh0KQpAQCAtNjAy
LDcgKzYwNiw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgfQogCiAgICAgLy8gVXNl
IHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8g
YSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpz
ZWFyY2hSYW5nZSk7CisgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJj
aFJhbmdlKTsKICAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3Ro
IC0gbmV4dCk7CiAgICAgLy8gRklYTUU6IGNoYXJJdCBjYW4gZ2V0IG91dCBvZiBzaGFkb3cgaG9z
dC4KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlv
bigpLCBET1dOU1RSRUFNKTsKQEAgLTYxNiw3ICs2MjAsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNo
RnVuYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBEb2N1bWVudCYg
Ym91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKKyAgICBSZWY8
UmFuZ2U+IHNlYXJjaFJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAg
IFBvc2l0aW9uIHN0YXJ0KHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAKICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKQEAgLTYyNCwyMCArNjI4LDIyIEBAIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91
bmRhcnlTZWFyY2hGdW5jCiAKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5
KGMuY2hhcmFjdGVyQWZ0ZXIoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWNrd2FyZHNT
Y2FuUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAgICAgICAgYmFja3dh
cmRzU2NhblJhbmdlLT5zZXRFbmQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmIChzdGFy
dC5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICAgICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRF
bmQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICBwcmVmaXhMZW5ndGggPSBwcmVmaXhMZW5n
dGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgc2Vh
cmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgSUdOT1JFX0VYQ0VQVElPTik7
Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwotICAgIFRleHRJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2Rl
Q29udGVudHMoKmJvdW5kYXJ5LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBpZiAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSkKKyAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UucHRyKCksIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICB1bnNp
Z25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihpdCwg
c3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKICAgICAKICAgICBpZiAoaXQu
YXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCiAgICAgICAgIHBvcyA9IHNlYXJjaFJh
bmdlLT5lbmRQb3NpdGlvbigpOwogICAgIGVsc2UgaWYgKG5leHQgPiBwcmVmaXhMZW5ndGgpIHsK
ICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBu
ZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgICAgIENoYXJhY3Rlckl0ZXJhdG9y
IGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5B
bGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNl
YXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucyk7CiAgICAgICAgIGNoYXJJdC5hZHZhbmNlKG5leHQgLSBwcmVmaXhMZW5ndGggLSAx
KTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZSA9IGNoYXJJdC5yYW5nZSgp
OwogICAgICAgICBwb3MgPSBjaGFyYWN0ZXJSYW5nZS0+ZW5kUG9zaXRpb24oKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggMjljOWFmODVlMGI2ZWUwYTMwNDM1YTk2
ZWVjZDcyZjg1MjgwZWU3OC4uNTgwODcyMDVmMDlkY2I4Nzc0NGYyNWUzODk1NmJiYTI0NjVkMDZh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTExNzEsNyArMTE3
MSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFj
dGVySXRlcmF0b3IoTm9kZSogbm9kZSwgaW50IGluCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKIAog
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCkp
OwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7
CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQoKnJhbmdlKTsKICAgICBpdC5hZHZhbmNlKGluZGV4
IC0gMSk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkgOiBpdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBVUFNUUkVBTSk7CkBAIC0x
MTg2LDIwICsxMTg2LDE5IEBAIGJvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29uc3QgUG9zaXRpb24m
IGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIg
YSBub2RlIGlzIGluc2lkZSBhIHJhbmdlIG9yIHZpc2libHkgc3RhcnRzIGFuZCBlbmRzIGF0IHRo
ZSBib3VuZGFyaWVzIG9mIHRoZSByYW5nZS4KIC8vIENhbGwgdGhpcyBmdW5jdGlvbiB0byBkZXRl
cm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJseSBmaXQgaW5zaWRlIHNlbGVjdGVkUmFuZ2UK
LWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2RlLCBjb25zdCBSYW5n
ZSogc2VsZWN0ZWRSYW5nZSkKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2Rl
JiBub2RlLCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5nZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7
CiAgICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwogICAgIC8vIElmIHRoZSBub2RlIGlzIGluc2lk
ZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRoaW4KICAgICBpZiAo
c2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gUmFu
Z2U6Ok5PREVfSU5TSURFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgc3RhcnRJ
c1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gc2VsZWN0
ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYm
IGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKSwgc2VsZWN0
ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkgPCAwKQorICAgIGJvb2wgc3RhcnRJc1Zpc3VhbGx5U2Ft
ZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoJm5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9z
aXRpb25zKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoJm5vZGUpLCBzZWxlY3RlZFJhbmdlLT5l
bmRQb3NpdGlvbigpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBlbmRJ
c1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBzZWxlY3Rl
ZFJhbmdlLT5lbmRQb3NpdGlvbigpOwotICAgIGlmIChlbmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21w
YXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUobm9kZSkpIDwgMCkKKyAgICBib29sIGVuZElzVmlzdWFsbHlTYW1lID0g
dmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCZub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3Np
dGlvbigpOworICAgIGlmIChlbmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHNl
bGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
Jm5vZGUpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIHN0YXJ0SXNW
aXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmgKaW5kZXggYzE1NDc5Yzk2YTQwZTFlMjA5YmE5Mjc1MGVkYTI4MjZlNmM1YjdlNy4u
ZjIxNTE2NDVkYzY3OGZiZGM0N2EwNjJjNDIxZjQyYjY2ZDEzOTIyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wgaXNUYWJsZVN0cnVj
dHVyZU5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBpc0xpc3RFbGVtZW50KE5vZGUqKTsKIGJvb2wg
aXNMaXN0SXRlbShjb25zdCBOb2RlKik7CiBib29sIGlzTm9kZVJlbmRlcmVkKGNvbnN0IE5vZGUq
KTsKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiwgY29uc3QgUmFuZ2Uq
KTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlJiwgY29uc3QgUmFuZ2Uq
KTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSop
OwogYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSopOwog
Ym9vbCBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDEyNWM1YTk4MGMyODRhMzk0ZDAz
NjQwNGFhODU1OTA3Y2ExNzU0ZjAuLjczYzVkYWNmNDUzNGM2ODY2ZDNkNDk5OTk3ZWYwMzE4NGIw
NmZjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTMxOCw3
ICszMTgsNyBAQCBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgp
CiAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKICAgICBhdXRvKiBlbmNsb3NpbmdBbmNob3Ig
PSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkFuY2Vz
dG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmIGNvbXBh
cmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydFBvc2l0
aW9uKCkuYW5jaG9yTm9kZSgpKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0gMCkKLSAgICAg
ICAgcmFuZ2UtPnNldFN0YXJ0KGVuY2xvc2luZ0FuY2hvciwgMCwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5jaG9yLCAwLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICByZXR1cm4gcmFuZ2U7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggMTQ0MjI1MmJkNTIxNWQ5MzU3N2U4
Y2Y0N2JhOWU1MWQ2M2UyODQzNC4uZWYyMmU1MjZiYmJiYjRjNTQ4Yjk0YTAxZmUzODkzMzc3NjMz
ODRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cApAQCAtNDEzLDcgKzQxMyw4IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIGlm
ICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2Ug
PSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2Vs
ZWN0Tm9kZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgICAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICAg
ICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCks
IElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIG1fY2xpZW50LnNwZWFrKHBs
YWluVGV4dChzZWxlY3RlZFJhbmdlLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IGUxMTlmNjRkOGI2N2ZiZmYzZDE1MzA3ZGZlYTg5
ODZmZjIxNjg5OGIuLmY2MDU2NjFiZDg1M2FhNzc5OGJhNGU3ZTU3NzUxZWQ3NWY3YzJlYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTM5MywxMCArMzkzLDEzIEBAIHZv
aWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICB9CiAKICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQs
IHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgeworICAgIGlmICghcmFuZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CiAg
ICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRv
bid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAg
aWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCByYW5nZS5n
ZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPiAtMSkgewotICAgICAgICAgICAgaWYgKHItPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9F
WENFUFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0xKSB7Cisg
ICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5E
LCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgLy8g
VGhlIG9yaWdpbmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4KICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24ubW92ZVRvKHItPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCksIERP
V05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQwNyw4ICs0MTAsOCBAQCB2b2lk
IERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIHIpCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8g
YW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0LgogICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgZWMpIDwgMSAmJiAhZWMpIHsKLSAgICAgICAg
ICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdl
LmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgeworICAgICAgICBpZiAoci0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpyYW5nZSwgZWMpIDwgMSAmJiAh
ZWMpIHsKKyAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMgci4KICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb24ubW92ZVRvKHJhbmdlLmdldCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDFjYzgzODRhNDk2MWUzODhhM2Yy
MWIwY2MyNGUwMjAyM2U2NTRmMTcuLjBjOTBiNDE0YjVhMmUwNmYwYTk5MWQ1MDdjZDU3ODY2NDIy
NGVjNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC03MTIsNyAr
NzEyLDcgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogc3RhdGlj
IHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZS0+
c2VsZWN0Tm9kZSgmZWxlbWVudCk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGUoZWxlbWVudCk7CiAg
ICAgZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMThjNDc1ZjFlZTgxN2U0ZTVmMTcwMmRiM2I0ZmEzOTkz
ZTAzNDRiZi4uMTc1MjIzNmM3YTY3OTkwYzNlMmRiN2NjYWYzYmU0NGU4NDM0MmM2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjUwNyw3ICsyNTA3LDcgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgTm9kZSogdGFyZ2UKICAgICAgICAgICAgICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2Vy
IGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKICAg
ICAgICAgICAgICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdp
bGwgY2FsbCBzZXRGb2N1c2VOb2RlSWZOZWVkZWQuCiAgICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS0+Y29tcGFyZU5vZGUoZWxlbWVudCwgSUdO
T1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFCisgICAgICAgICAgICAgICAgICAg
ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS0+Y29tcGFyZU5vZGUo
KmVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pID09IFJhbmdlOjpOT0RFX0lOU0lERQogICAgICAg
ICAgICAgICAgICAgICAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50
KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5MTUzZDA0NDJhNzA1
N2Q0YTgwZDA1MDAzYTAwZmYxMTZjYmMxY2UwLi44ZGYxZDM2MWYzNmZkNDE2NWViYTE5NjNjZGU2
ZmZjODQ1NmYyZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTYzMiwxNCArNjMyLDE0IEBAIHZv
aWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5n
ZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgICAgICBpZiAob3B0aW9ucyAmIEJhY2t3YXJkcykgewogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkgewotICAgICAgICAg
ICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19TVEFSVCwgbWF0Y2hSYW5nZXNbaSAtIDFdLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+
IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0sIElHTk9SRV9F
WENFUFRJT04pID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9
IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgbWF0Y2hSYW5nZXNbaV0uZ2V0KCksIElHTk9SRV9FWENFUFRJT04pIDwg
MCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldLCBJR05PUkVfRVhDRVBU
SU9OKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAxNzY4NGM1NzQ4ODMyODk2NzYwZjQ2ZWU5ZDFj
ZjFiODA4YzMwNjJhLi4yNmVmMzdjM2QyYmY0ZDAyNTFmMGRhNzUwYzYxMDBiZWQ3OWJkZjMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCBz
dGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMoY29uc3QgUmFuZ2UmIHJh
bmdlKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsK
ICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSAmJiBy
YW5nZS5pbnRlcnNlY3RzTm9kZShub2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSkKKyAgICAgICAg
aWYgKCghcmVuZGVyZXItPmlzSW5saW5lKCkgfHwgcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkgJiYg
cmFuZ2UuaW50ZXJzZWN0c05vZGUoKm5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDMyOTIwMzE5YmYxZDk2NzMxOGEz
NGQ2NTJmNmMxZWM1YjRhZmQxMjUuLmIzNmVhNGU4OTZhNWYxN2I1YzNiMjcyNDQ2YzBmNjUyZDhl
NWM4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dUaHJlYWQuY3BwCkBAIC02OTQsOCArNjk0LDggQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QK
ICAgICAgICAgICAgIGlmICghYm94SW50ZXJzZWN0c1JlZ2lvbihsb2dpY2FsVG9wRm9yUmVuZGVy
ZXIsIGxvZ2ljYWxCb3R0b21Gb3JSZW5kZXJlciwgbG9naWNhbFRvcEZvclJlZ2lvbiwgbG9naWNh
bEJvdHRvbUZvclJlZ2lvbikpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91bmRTdGFydFBvc2l0
aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnRzQWJvdmVSZWdpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdO
T1JFX0VYQ0VQVElPTikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVu
ZEJlZm9yZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyYW5nZS0+aW50ZXJzZWN0c05vZGUoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmRCZWZvcmUoKm5vZGUsIElHTk9S
RV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VPYmplY3RzLmFwcGVu
ZChyYW5nZS0+Y2xvbmVSYW5nZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShjb250ZW50RWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IHRydWU7CkBAIC03MDMsNyArNzAzLDcgQEAg
dm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBPdmVy
T3V0c2lkZU5vZGVzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKHNraXBPdmVyT3V0c2lkZU5vZGVzKQotICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0
U3RhcnRBZnRlcihub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAg
cmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAg
ICAgICAgIGZvdW5kU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQpAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRG
bG93VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVjdHMs
IGNvbnN0CiAgICAgICAgICAgICAgICAgLy8gdGhlIHJhbmdlIGlzIGNsb3NlZC4KICAgICAgICAg
ICAgICAgICBpZiAoc3RhcnRzQWJvdmVSZWdpb24pIHsKICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRzQWJvdmVSZWdpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldFN0
YXJ0QmVmb3JlKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICBy
YW5nZS0+c2V0U3RhcnRCZWZvcmUoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNraXBPdmVyT3V0c2lkZU5vZGVz
ICA9IGZhbHNlOwpAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVjdHMsIGNvbnN0CiAg
ICAgICAgICAgICAgICAgLy8gZm9yIGVsZW1lbnRzIHRoYXQgZW5kcyBpbnNpZGUgdGhlIHJlZ2lv
biwgc2V0IHRoZSBlbmQgcG9zaXRpb24gdG8gYmUgYWZ0ZXIgdGhlbQogICAgICAgICAgICAgICAg
IC8vIGFsbG93IHRoaXMgZW5kIHBvc2l0aW9uIHRvIGJlIGNoYW5nZWQgb25seSBieSBvdGhlciBl
bGVtZW50cyB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgdGhlIGN1cnJlbnQgZW5kIG5vZGUK
ICAgICAgICAgICAgICAgICBpZiAoZW5kc0JlbG93UmVnaW9uIHx8ICghZW5kc0JlbG93UmVnaW9u
ICYmICFub2RlLT5pc0Rlc2NlbmRhbnRPZihsYXN0RW5kTm9kZSkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJhbmdlLT5zZXRFbmRBZnRlcihub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFmdGVyKCpub2RlLCBJR05PUkVfRVhDRVBUSU9O
KTsKICAgICAgICAgICAgICAgICAgICAgZW5kc0JlbG93UmVnaW9uID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIGxhc3RFbmROb2RlID0gbm9kZTsKICAgICAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAwNjMzMDdjOTk5MzU2NDU0NjdmOWEz
NDkyYzA5NmMzYzQyMjVjMzliLi4xZjlmM2RkMWY0ODE5MzVhNGVhOWUzMzFlNTZjYzdiYWYyMDEw
OGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTg3MywxMSArODcz
LDEzIEBAIC0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOihE
T01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UKICAgICBuZXdTdGFydCA9IG5ld1N0YXJ0LnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwogICAgIG5ld0VuZCA9IG5ld0VuZC5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwotICAgIGludCBleGNlcHRpb24gPSAwOwot
ICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5ld1N0YXJ0Lm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJhbmdlLT5zZXRFbmQobmV3
U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
ZXhjZXB0aW9uKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBSZWY8UmFuZ2U+
IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2UoKTsK
KyAgICBpZiAobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGludCBleGNlcHRp
b24gPSAwOworICAgICAgICByYW5nZS0+c2V0U3RhcnQoKm5ld1N0YXJ0LmNvbnRhaW5lck5vZGUo
KSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7CisgICAgICAg
IHJhbmdlLT5zZXRFbmQoKm5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVybiBraXQocmFu
Z2UucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21l
bnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5n
OihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmlu
ZGV4IGUwODA2YmNiNmE3NzM0ZTJkMzQ0MTQ5NWIxNGVkNmZiMjdkMjI0OTkuLjkzZTg0OWY2M2Ix
NGIyZGM0ZDVhOTU0OTQ3MTFmMTAzNTE1ZWRmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdl
Lm1tCkBAIC02NSwxNiArNjUsMjAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpc2V0U3Rh
cnQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CiB7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUg
ZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBs
LT5zZXRTdGFydChXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOworICAg
IF9pbXBsLT5zZXRTdGFydCgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVj
KTsKIH0KIAogLSAodm9pZClzZXRFbmQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zm
c2V0CiB7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIF9pbXBsLT5zZXRFbmQoV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUp
LCBvZmZzZXQsIGVjKTsKKyAgICBfaW1wbC0+c2V0RW5kKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUo
bm9kZSksIG9mZnNldCwgZWMpOwogfQogCiAtICh2b2lkKWNvbGxhcHNlOihCT09MKXRvU3RhcnQK
QEAgLTg0LDE2ICs4OCwyMCBAQCAtICh2b2lkKWNvbGxhcHNlOihCT09MKXRvU3RhcnQKIAogLSAo
dm9pZClzZWxlY3ROb2RlOihXS0RPTU5vZGUgKilub2RlCiB7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0
aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBsLT5zZWxl
Y3ROb2RlKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOworICAgIF9pbXBsLT5zZWxl
Y3ROb2RlKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKIH0KIAogLSAodm9pZClz
ZWxlY3ROb2RlQ29udGVudHM6KFdLRE9NTm9kZSAqKW5vZGUKIHsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNl
cHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNl
bGVjdE5vZGVDb250ZW50cyhXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKKyAgICBf
aW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVj
KTsKIH0KIAogLSAoV0tET01Ob2RlICopc3RhcnRDb250YWluZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGFhMjc0YmFhMWNjODkwOTcy
NThkMTFhMjcwZDRhMDM4N2Y5YjdiMjcuLmRiMjJmMWU1ZGMxZTM1YWFiNTA3OTBjMTI5OGExZjM0
ZTAzNGNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIFN0cmluZyBXZWJGcmFtZTo6Y29udGVudHNBc1N0
cmluZygpIGNvbnN0CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVS
YW5nZSgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmFuZ2UtPnNlbGVjdE5v
ZGUoZG9jdW1lbnRFbGVtZW50LmdldCgpLCBlYyk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGUoKmRv
Y3VtZW50RWxlbWVudCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276888</attachid>
            <date>2016-04-20 19:41:18 -0700</date>
            <delta_ts>2016-04-20 19:47:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420194141.patch</filename>
            <type>text/plain</type>
            <size>96762</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVu
c2lvbnMubW0KaW5kZXggODZkNzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4u
NmI4ZWQ3Y2JlMjViY2UwMTk1OWQ0ZWVmYjIyZjYxNWI4NDYxNDViNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4
ICsxMTMsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJU
ZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwot
ICAgIHJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWlu
ZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYg
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5j
b250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
KyAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5k
LmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
IH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRB
ZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY4NzllZWUx
N2NmY2Q3ZWQ5ZTc0NWQyOWJlMTU5YWZjZmIxMjE4YWYuLjgzNjA5ODJhNzljY2MwYTY2Y2EyMTcy
ODAxYmMzY2NlODU1Yzg3MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTIzMTQsNyArMjMxNCw3IEBA
IHZvaWQgTm9kZTo6cmVtb3ZlZExhc3RSZWYoKQogdm9pZCBOb2RlOjp0ZXh0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cykgY29uc3QKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGNv
bnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByYW5nZS0+c2Vs
ZWN0Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSY+KCp0aGlzKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgcmFuZ2UtPmFic29sdXRlVGV4dFJlY3RzKHJlY3RzKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKaW5kZXggN2Y4Yjc2MWFjNGUwM2NlMzA4YzdkNTM2YzZiMDc1ZTM5ZTI0NmFmNy4uM2Rj
ZjZhODNlNWU2Njg2ZjVhMDdlZWZkMzg4ODJiN2Q1OTgzMWVjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
CkBAIC04MCw2ICs4MCw3IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3du
ZXJEb2N1bWVudCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSYW5nZShvd25lckRvY3VtZW50
KSk7CiB9CiAKKy8vIEZJWE1FOiBzdGFydENvbnRhaW5lciBhbmQgZW5kQ29udGFpbmVyIHNob3Vs
ZCBwcm9iYWJseSBiZSBSZWY8Tm9kZT4mJi4KIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQm
IG93bmVyRG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFy
dE9mZnNldCwgUGFzc1JlZlB0cjxOb2RlPiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpCiAg
ICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKICAgICAsIG1fc3RhcnQoJm93bmVy
RG9jdW1lbnQpCkBAIC05Myw4ICs5NCwxMCBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50
JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbgogCiAg
ICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9mZnNldHMgZGlyZWN0bHkg
d291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKICAgICAvLyB0aGF0IHNldFN0YXJ0IGFu
ZCBzZXRFbmQgZG8sIHNvIHdlIGNhbGwgdGhvc2UgZnVuY3Rpb25zLgotICAgIHNldFN0YXJ0KHN0
YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCk7Ci0gICAgc2V0RW5kKGVuZENvbnRhaW5lciwgZW5k
T2Zmc2V0KTsKKyAgICBpZiAoc3RhcnRDb250YWluZXIpCisgICAgICAgIHNldFN0YXJ0KCpzdGFy
dENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOworICAgIGlmIChlbmRDb250YWluZXIpCisgICAgICAg
IHNldEVuZCgqZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpOwogfQogCiBSZWY8UmFuZ2U+IFJhbmdl
OjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnRD
b250YWluZXIsIGludCBzdGFydE9mZnNldCwgUGFzc1JlZlB0cjxOb2RlPiBlbmRDb250YWluZXIs
IGludCBlbmRPZmZzZXQpCkBAIC0xMjksOCArMTMyLDggQEAgdm9pZCBSYW5nZTo6c2V0RG9jdW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIEFTU0VSVChtX293bmVyRG9jdW1lbnQucHRyKCkg
IT0gJmRvY3VtZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOwog
ICAgIG1fb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwotICAgIG1fc3RhcnQuc2V0VG9TdGFydE9m
Tm9kZSgmZG9jdW1lbnQpOwotICAgIG1fZW5kLnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsK
KyAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOworICAgIG1fZW5kLnNldFRv
U3RhcnRPZk5vZGUoZG9jdW1lbnQpOwogICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2Uo
dGhpcyk7CiB9CiAKQEAgLTE1NywxMyArMTYwLDggQEAgc3RhdGljIGlubGluZSBib29sIGNoZWNr
Rm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0YXIK
ICAgICByZXR1cm4gc3RhcnRSb290Q29udGFpbmVyICE9IGVuZFJvb3RDb250YWluZXIgfHwgKFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhcnQsIGVuZCwgQVNTRVJUX05PX0VYQ0VQVElP
TikgPiAwKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0
KFJlZjxOb2RlPiYmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGJvb2wgZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYg
KCZyZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0
RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CkBAIC0xNzEsMjMgKzE2OSwxOCBAQCB2b2lk
IFJhbmdlOjpzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIAogICAgIGVjID0gMDsKLSAgICBOb2RlKiBjaGlsZE5v
ZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5vZGUuZ2V0KCksIG9mZnNldCwgZWMpOworICAgIE5v
ZGUqIGNoaWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0LCBlYyk7CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0YXJ0LnNldChyZWZOb2RlLCBv
ZmZzZXQsIGNoaWxkTm9kZSk7CisgICAgbV9zdGFydC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zm
c2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRpZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRp
ZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQogICAgICAgICBjb2xsYXBzZSh0
cnVlKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmQoUmVmPE5v
ZGU+JiYgcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgYm9vbCBkaWRNb3ZlRG9jdW1lbnQgPSBmYWxzZTsKICAgICBpZiAoJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewogICAgICAgICBzZXREb2N1bWVu
dChyZWZOb2RlLT5kb2N1bWVudCgpKTsKQEAgLTE5NSwxMSArMTg4LDExIEBAIHZvaWQgUmFuZ2U6
OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIH0KIAogICAgIGVjID0gMDsKLSAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVj
a05vZGVXT2Zmc2V0KHJlZk5vZGUuZ2V0KCksIG9mZnNldCwgZWMpOworICAgIE5vZGUqIGNoaWxk
Tm9kZSA9IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2VuZC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGls
ZE5vZGUpOworICAgIG1fZW5kLnNldChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxkTm9k
ZSk7CiAKICAgICBpZiAoZGlkTW92ZURvY3VtZW50IHx8IGNoZWNrRm9yRGlmZmVyZW50Um9vdENv
bnRhaW5lcihtX3N0YXJ0LCBtX2VuZCkpCiAgICAgICAgIGNvbGxhcHNlKGZhbHNlKTsKQEAgLTIw
OCwxMyArMjAxLDIxIEBAIHZvaWQgUmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5v
ZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBSYW5nZTo6c2V0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBQb3NpdGlv
biBwYXJlbnRBbmNob3JlZCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAg
IHNldFN0YXJ0KHBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXBhcmVudEFuY2hvcmVkLmNv
bnRhaW5lck5vZGUoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzZXRTdGFydCgqcGFyZW50QW5jaG9yZWQuY29udGFpbmVyTm9kZSgpLCBw
YXJlbnRBbmNob3JlZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogfQogCiB2b2lkIFJh
bmdlOjpzZXRFbmQoY29uc3QgUG9zaXRpb24mIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCk7Ci0gICAgc2V0RW5kKHBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5j
aG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXBhcmVudEFuY2hv
cmVkLmNvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzZXRFbmQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUo
KSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9p
ZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0KQpAQCAtMjI1LDE0ICsyMjYsOSBAQCB2b2lk
IFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsK
IH0KIAotYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBy
ZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5v
ZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkg
eworICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjQxLDMwICsyMzcsMjQgQEAgYm9vbCBS
YW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgaWYgKGVjKSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1
cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBz
YW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9y
ZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAg
IGlmICghY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkp
KQorICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCZyZWZOb2RlLCAmc3RhcnRD
b250YWluZXIoKSkpCiAgICAgICAgICAgICBlYyA9IDA7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBib29sIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2Rl
LCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBlYykgPj0gMCAm
JiAhZWMKLSAgICAgICAgJiYgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwg
JmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpIDw9IDAgJiYgIWVjOworICAgIGJv
b2wgcmVzdWx0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFy
dENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBlYykgPj0gMCAmJiAhZWMKKyAgICAgICAg
JiYgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIo
KSwgbV9lbmQub2Zmc2V0KCksIGVjKSA8PSAwICYmICFlYzsKICAgICBBU1NFUlQoIWVjIHx8IGVj
ID09IFdST05HX0RPQ1VNRU5UX0VSUik7CiAgICAgZWMgPSAwOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAg
IC8vIGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFy
ZVBvaW50CiAgICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVuZGluZyBv
biBpZiB0aGUgcG9pbnQgZGVzY3JpYmVkIGJ5IHRoZSAKICAgICAvLyByZWZOb2RlIG5vZGUgYW5k
IGFuIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUgaXMgYmVmb3JlLCBzYW1lIGFzLCBvciBhZnRlciB0
aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5LgotCi0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVj
ID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgeworICAgIGlmICgmcmVmTm9kZS5k
b2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgZWMgPSBXUk9OR19ET0NV
TUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTI3NCw0OSArMjY0LDQ0IEBA
IHNob3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIC8vIERPTTQgc3Bl
YyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5l
ciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRo
ZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNh
c2UuCi0gICAgICAgIGlmICghcmVmTm9kZS0+aW5Eb2N1bWVudCgpICYmICFjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcihyZWZOb2RlLCAmc3RhcnRDb250YWluZXIoKSkpCisgICAgICAgIGlmICghcmVm
Tm9kZS5pbkRvY3VtZW50KCkgJiYgIWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCZyZWZOb2RlLCAm
c3RhcnRDb250YWluZXIoKSkpCiAgICAgICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gY29tcGFyZSB0byBzdGFydCwgYW5k
IHBvaW50IGNvbWVzIGJlZm9yZQotICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9k
ZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpIDwgMCkK
KyAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENv
bnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBlYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7
CiAKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gY29tcGFyZSB0byBl
bmQsIGFuZCBwb2ludCBjb21lcyBhZnRlcgotICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMo
cmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpLCBlYykgPiAw
ICYmICFlYykKKyAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQs
ICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCksIGVjKSA+IDAgJiYgIWVjKQogICAgICAg
ICByZXR1cm4gMTsKIAogICAgIC8vIHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyByYW5n
ZSwgb3Igb24gdGhlIGJvdW5kYXJ5IHBvaW50cwogICAgIHJldHVybiAwOwogfQogCi1SYW5nZTo6
Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAorUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21wYXJlTm9k
ZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVOb2RlCiAg
ICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyAwLCAxLCAyLCBvciAzIGJhc2VkIG9uIGlmIHRoZSBu
b2RlIGlzIGJlZm9yZSwgYWZ0ZXIsCiAgICAgLy8gYmVmb3JlIGFuZCBhZnRlcihzdXJyb3VuZHMp
LCBvciBpbnNpZGUgdGhlIHJhbmdlLCByZXNwZWN0aXZlbHkKIAotICAgIGlmICghcmVmTm9kZSkg
ewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwot
ICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+aW5Eb2N1bWVudCgpKSB7CisgICAgaWYgKCFyZWZO
b2RlLmluRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4g
ZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgMC4KICAgICAgICAgcmV0dXJuIE5P
REVfQkVGT1JFOwogICAgIH0KIAotICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CisgICAgaWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9j
dW1lbnQoKSkgewogICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9u
IGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgMC4KICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JF
OwogICAgIH0KIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSByZWZOb2RlLT5wYXJl
bnROb2RlKCk7Ci0gICAgdW5zaWduZWQgbm9kZUluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5vZGVJ
bmRleCgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5v
ZGUoKTsKKyAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKICAgICAKICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgLy8gaWYgdGhlIG5vZGUg
aXMgdGhlIHRvcCBkb2N1bWVudCB3ZSBzaG91bGQgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRF
UgpAQCAtMzI1LDI2ICszMTAsMjIgQEAgUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21w
YXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAg
cmV0dXJuIE5PREVfQkVGT1JFOwogICAgIH0KIAotICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50
Tm9kZSwgbm9kZUluZGV4LCBlYykgPCAwKSB7IC8vIHN0YXJ0cyBiZWZvcmUKLSAgICAgICAgaWYg
KGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRz
IGFmdGVyIHRoZSByYW5nZQorICAgIC8vIHN0YXJ0cyBiZWZvcmUKKyAgICBpZiAoY29tcGFyZVBv
aW50KCpwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKSA8IDApIHsKKyAgICAgICAgaWYgKGNvbXBh
cmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRl
ciB0aGUgcmFuZ2UKICAgICAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVI7CiAg
ICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsgLy8gZW5kcyBiZWZvcmUgb3IgaW4gdGhlIHJhbmdl
Ci0gICAgfSBlbHNlIHsgLy8gc3RhcnRzIGF0IG9yIGFmdGVyIHRoZSByYW5nZSBzdGFydAotICAg
ICAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDAp
IC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCi0gICAgICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsK
LSAgICAgICAgcmV0dXJuIE5PREVfSU5TSURFOyAvLyBlbmRzIGluc2lkZSB0aGUgcmFuZ2UKICAg
ICB9CisgICAgLy8gc3RhcnRzIGF0IG9yIGFmdGVyIHRoZSByYW5nZSBzdGFydAorICAgIGlmIChj
b21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMg
YWZ0ZXIgdGhlIHJhbmdlCisgICAgICAgIHJldHVybiBOT0RFX0FGVEVSOworICAgIHJldHVybiBO
T0RFX0lOU0lERTsgLy8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiB9CiAKLXNob3J0IFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VS
YW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmICghc291cmNlUmFuZ2UpIHsKLSAgICAgICAg
ZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIE5vZGUqIHRo
aXNDb250ID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBOb2RlKiBzb3VyY2VDb250
ID0gc291cmNlUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CisgICAgTm9kZSogc291
cmNlQ29udCA9IHNvdXJjZVJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CiAKICAgICBp
ZiAoJnRoaXNDb250LT5kb2N1bWVudCgpICE9ICZzb3VyY2VDb250LT5kb2N1bWVudCgpKSB7CiAg
ICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwpAQCAtMzY0LDIwICszNDUsMjAgQEAgc2hv
cnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFu
Z2UqIHNvdXJjZVJhbmdlLCBFeGMKIAogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgICAgIGNhc2Ug
U1RBUlRfVE9fU1RBUlQ6Ci0gICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KG1fc3RhcnQsIHNvdXJjZVJhbmdlLT5tX3N0YXJ0LCBlYyk7CisgICAgICAgICAgICByZXR1cm4g
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsK
ICAgICAgICAgY2FzZSBTVEFSVF9UT19FTkQ6Ci0gICAgICAgICAgICByZXR1cm4gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAg
ICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9zdGFy
dCwgZWMpOwogICAgICAgICBjYXNlIEVORF9UT19FTkQ6Ci0gICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS0+bV9lbmQsIGVjKTsKKyAgICAg
ICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1f
ZW5kLCBlYyk7CiAgICAgICAgIGNhc2UgRU5EX1RPX1NUQVJUOgotICAgICAgICAgICAgcmV0dXJu
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS0+bV9lbmQsIGVjKTsK
KyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNl
UmFuZ2UubV9lbmQsIGVjKTsKICAgICB9CiAKICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50
c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3Vy
Y2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgaWYgKGNvbXBhcmVIb3cg
PiBFTkRfVE9fU1RBUlQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKQEAgLTQ5
NSwyNiArNDc2LDIxIEBAIHZvaWQgUmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIHByb2Nlc3NDb250ZW50cyhEZWxldGUsIGVjKTsKIH0KIAotYm9vbCBSYW5nZTo6
aW50ZXJzZWN0c05vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Citi
b29sIFJhbmdlOjppbnRlcnNlY3RzTm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPmluRG9j
dW1lbnQoKSB8fCAmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQorICAg
IGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkgfHwgJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudE5vZGUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgdW5zaWduZWQgbm9kZUluZGV4ID0gcmVmTm9k
ZS0+Y29tcHV0ZU5vZGVJbmRleCgpOworICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUu
Y29tcHV0ZU5vZGVJbmRleCgpOwogCiAgICAgLy8gSWYgKHBhcmVudCwgb2Zmc2V0KSBpcyBiZWZv
cmUgZW5kIGFuZCAocGFyZW50LCBvZmZzZXQgKyAxKSBpcyBhZnRlciBzdGFydCwgcmV0dXJuIHRy
dWUuCiAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCi0gICAgc2hvcnQgY29tcGFyZUZp
cnN0ID0gY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwotICAgIHNob3J0
IGNvbXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwg
ZWMpOworICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4LCBlYyk7CisgICAgc2hvcnQgY29tcGFyZVNlY29uZCA9IGNvbXBhcmVQb2ludCgq
cGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpOwogCiAgICAgYm9vbCBpc0ZpcnN0QmVmb3Jl
RW5kID0gbV9zdGFydCA9PSBtX2VuZCA/IGNvbXBhcmVGaXJzdCA8IDAgOiBjb21wYXJlRmlyc3Qg
PD0gMDsKICAgICBib29sIGlzU2Vjb25kQWZ0ZXJTdGFydCA9IG1fc3RhcnQgPT0gbV9lbmQgPyBj
b21wYXJlU2Vjb25kID4gMCA6IGNvbXBhcmVTZWNvbmQgPj0gMDsKQEAgLTY0NSw5ICs2MjEsOSBA
QCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25U
eXBlIGFjdGlvbiwgRXhjZXB0aW9uQ29kZQogICAgIGVjID0gMDsKICAgICBpZiAoYWN0aW9uID09
IEV4dHJhY3QgfHwgYWN0aW9uID09IERlbGV0ZSkgewogICAgICAgICBpZiAocGFydGlhbFN0YXJ0
ICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKHBhcnRpYWxTdGFydC5nZXQoKSkpCi0gICAgICAgICAg
ICBzZXRTdGFydChwYXJ0aWFsU3RhcnQtPnBhcmVudE5vZGUoKSwgcGFydGlhbFN0YXJ0LT5jb21w
dXRlTm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFydGlhbFN0
YXJ0LT5wYXJlbnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwg
ZWMpOwogICAgICAgICBlbHNlIGlmIChwYXJ0aWFsRW5kICYmIGNvbW1vblJvb3QtPmNvbnRhaW5z
KHBhcnRpYWxFbmQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlhbEVuZC0+cGFy
ZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKKyAgICAgICAg
ICAgIHNldFN0YXJ0KCpwYXJ0aWFsRW5kLT5wYXJlbnROb2RlKCksIHBhcnRpYWxFbmQtPmNvbXB1
dGVOb2RlSW5kZXgoKSwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OwpAQCAtODM2LDEzICs4MTIsOCBAQCBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNsb25lQ29udGVudHMoRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgcmV0dXJuIHByb2Nlc3NDb250ZW50cyhDbG9uZSwgZWMpOwogfQogCi12b2lk
IFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWY8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBib29sIHN0YXJ0SXNDaGFyYWN0ZXJEYXRhID0gaXM8
Q2hhcmFjdGVyRGF0YT4oc3RhcnRDb250YWluZXIoKSk7CiAgICAgaWYgKHN0YXJ0SXNDaGFyYWN0
ZXJEYXRhICYmICFzdGFydENvbnRhaW5lcigpLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9
IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKQEAgLTg1OSw3ICs4MzAsNyBAQCB2b2lkIFJhbmdlOjpp
bnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIFJl
ZjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqcGFyZW50
Tm9kZSk7CiAKICAgICBlYyA9IDA7Ci0gICAgaWYgKCFwYXJlbnQtPmVuc3VyZVByZUluc2VydGlv
blZhbGlkaXR5KCpub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCisgICAgaWYgKCFwYXJl
bnQtPmVuc3VyZVByZUluc2VydGlvblZhbGlkaXR5KG5vZGUsIHJlZmVyZW5jZU5vZGUuZ2V0KCks
IGVjKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwpAQCAt
ODY5LDcgKzg0MCw3IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYgbm9k
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZSkKKyAgICBpZiAocmVmZXJlbmNlTm9kZSA9PSBub2Rl
LnB0cigpKQogICAgICAgICByZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlTm9kZS0+bmV4dFNpYmxp
bmcoKTsKIAogICAgIG5vZGUtPnJlbW92ZShlYyk7CkBAIC04NzcsMTcgKzg0OCwxNyBAQCB2b2lk
IFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBuZXdPZmZzZXQgPSByZWZlcmVuY2VO
b2RlID8gcmVmZXJlbmNlTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpIDogcGFyZW50LT5jb3VudENo
aWxkTm9kZXMoKTsKLSAgICBpZiAoaXM8RG9jdW1lbnRGcmFnbWVudD4oKm5vZGUpKQotICAgICAg
ICBuZXdPZmZzZXQgKz0gZG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4oKm5vZGUpLmNvdW50Q2hp
bGROb2RlcygpOworICAgIGlmIChpczxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKSkKKyAg
ICAgICAgbmV3T2Zmc2V0ICs9IGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KG5vZGUuZ2V0KCkp
LmNvdW50Q2hpbGROb2RlcygpOwogICAgIGVsc2UKICAgICAgICAgKytuZXdPZmZzZXQ7CiAKLSAg
ICBwYXJlbnQtPmluc2VydEJlZm9yZShub2RlLnJlbGVhc2VOb25OdWxsKCksIHJlZmVyZW5jZU5v
ZGUuZ2V0KCksIGVjKTsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShXVEZNb3ZlKG5vZGUpLCBy
ZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoY29sbGFwc2VkKCkpCi0gICAgICAgIHNldEVuZChwYXJlbnQucHRyKCksIG5ld09m
ZnNldCwgZWMpOworICAgICAgICBzZXRFbmQoV1RGTW92ZShwYXJlbnQpLCBuZXdPZmZzZXQsIGVj
KTsKIH0KIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZygpIGNvbnN0CkBAIC05NTAsOSArOTIxLDkg
QEAgdm9pZCBSYW5nZTo6ZGV0YWNoKCkKICAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBl
ciB0aGUgRE9NIHNwZWNpZmljYXRpb24uCiB9CiAKLU5vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zm
c2V0KE5vZGUqIG4sIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorTm9kZSog
UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChuLT5ub2RlVHlwZSgpKSB7CisgICAgc3dp
dGNoIChub2RlLm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBF
X05PREU6CiAgICAgICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtOTYwLDcgKzkzMSw3IEBAIE5vZGUqIFJhbmdlOjpjaGVj
a05vZGVXT2Zmc2V0KE5vZGUqIG4sIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogICAgICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpU
RVhUX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RF
OgotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpID4gZG93bmNh
c3Q8Q2hhcmFjdGVyRGF0YT4oKm4pLmxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihvZmZzZXQpID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVu
Z3RoKCkpCiAgICAgICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgpAQCAt
OTY5LDcgKzk0MCw3IEBAIE5vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUqIG4sIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICBjYXNlIE5vZGU6OkVM
RU1FTlRfTk9ERTogewogICAgICAgICAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBOb2RlKiBjaGlsZEJlZm9yZSA9IG4tPnRyYXZl
cnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpOworICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUg
PSBub2RlLnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpOwogICAgICAgICAgICAgaWYgKCFj
aGlsZEJlZm9yZSkKICAgICAgICAgICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkQmVmb3JlOwpAQCAtOTg0LDEwMSArOTU1LDcxIEBAIFJlZjxSYW5n
ZT4gUmFuZ2U6OmNsb25lUmFuZ2UoKSBjb25zdAogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG93
bmVyRG9jdW1lbnQoKSwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksICZlbmRD
b250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEFm
dGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0U3Rh
cnRBZnRlcihOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJl
Zk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIXJlZk5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRTdGFydChyZWZOb2RlLT5wYXJlbnROb2RlKCks
IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwog
fQogCi12b2lkIFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9y
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5W
QUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5k
KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7
CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUlu
ZGV4KCksIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSogcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmRBZnRlcihOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzZXRFbmQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRlTm9kZUlu
ZGV4KCkgKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9k
ZS5jb21wdXRlTm9kZUluZGV4KCkgKyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5v
ZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZWxlY3RO
b2RlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9k
ZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLT5k
b2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgpKTsKKyAg
ICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQorICAgICAgICBz
ZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCi0gICAgdW5zaWduZWQgaW5kZXggPSBy
ZWZOb2RlLT5jb21wdXRlTm9kZUluZGV4KCk7CisgICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2Rl
LmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICBlYyA9IDA7Ci0gICAgc2V0U3RhcnQocmVmTm9kZS0+
cGFyZW50Tm9kZSgpLCBpbmRleCwgZWMpOworICAgIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5v
ZGUoKSwgaW5kZXgsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRF
bmQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCBpbmRleCArIDEsIGVjKTsKKyAgICBzZXRFbmQoKnJl
Zk5vZGUucGFyZW50Tm9kZSgpLCBpbmRleCArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6c2Vs
ZWN0Tm9kZUNvbnRlbnRzKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBS
YW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZWZOb2RlLT5pc0RvY3VtZW50VHlwZU5vZGUo
KSkgeworICAgIGlmIChyZWZOb2RlLmlzRG9jdW1lbnRUeXBlTm9kZSgpKSB7CiAgICAgICAgIGVj
ID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUtPmRvY3VtZW50KCkpCi0gICAgICAgIHNl
dERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOworICAgIGlmICgmb3duZXJEb2N1bWVudCgp
ICE9ICZyZWZOb2RlLmRvY3VtZW50KCkpCisgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUuZG9j
dW1lbnQoKSk7CiAKICAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUocmVmTm9kZSk7CiAgICAg
bV9lbmQuc2V0VG9FbmRPZk5vZGUocmVmTm9kZSk7CiB9CiAKLXZvaWQgUmFuZ2U6OnN1cnJvdW5k
Q29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoTm9kZSYgcGFzc05ld1BhcmVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQ
YXJlbnQ7Ci0KLSAgICBpZiAoIW5ld1BhcmVudCkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWY8Tm9kZT4gbmV3UGFyZW50ID0gcGFzc05l
d1BhcmVudDsKIAogICAgIC8vIElOVkFMSURfU1RBVEVfRVJSOiBSYWlzZWQgaWYgdGhlIFJhbmdl
IHBhcnRpYWxseSBzZWxlY3RzIGEgbm9uLVRleHQgbm9kZS4KICAgICAvLyBodHRwczovL2RvbS5z
cGVjLndoYXR3Zy5vcmcvI2RvbS1yYW5nZS1zdXJyb3VuZGNvbnRlbnRzIChzdGVwIDEpLgpAQCAt
MTEzMyw3ICsxMDc0LDcgQEAgdm9pZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRy
PE5vZGU+IHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgZWMgPSAwOwog
ICAgIHdoaWxlIChOb2RlKiBuID0gbmV3UGFyZW50LT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAg
ZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5ld1BhcmVudCkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsK
KyAgICAgICAgZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obmV3UGFyZW50LmdldCgpKS5yZW1vdmVD
aGlsZCgqbiwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTE0NiwyMiArMTA4NywxNyBAQCB2b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBh
c3NSZWZQdHI8Tm9kZT4gcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbmV3
UGFyZW50LT5hcHBlbmRDaGlsZChmcmFnbWVudC5yZWxlYXNlKCksIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybjsKLSAgICBzZWxlY3ROb2RlKG5ld1BhcmVudC5nZXQoKSwgZWMpOwor
ICAgIHNlbGVjdE5vZGUobmV3UGFyZW50LCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldFN0YXJ0
QmVmb3JlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0
U3RhcnRCZWZvcmUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5v
ZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9k
ZSgpLCByZWZOb2RlLT5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKKyAgICBzZXRTdGFydCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAK
IE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdApAQCAtMTUzOSwxMSArMTQ3NSwxMSBAQCBi
b29sIFJhbmdlOjpjb250YWlucyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CiAgICAgaWYgKGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCktPm93bmVyRG9jdW1lbnQoKSAhPSBvdGhlci5jb21tb25B
bmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fU1RBUlQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hv
cnQgc3RhcnRUb1N0YXJ0ID0gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19T
VEFSVCwgb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIGlmIChzdGFydFRvU3RhcnQg
PiAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgJm90aGVyLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKKyAgICBzaG9ydCBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX0VORCwgb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIHJldHVybiBl
bmRUb0VuZCA+PSAwOwogfQogCkBAIC0xNTc1LDE5ICsxNTExLDE5IEBAIGJvb2wgcmFuZ2VzT3Zl
cmxhcChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCiAgICAgaWYgKGEtPmNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCktPm93bmVyRG9jdW1lbnQoKSAhPSBiLT5jb21tb25BbmNlc3RvckNv
bnRhaW5lcigpLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHNob3J0IHN0YXJ0VG9TdGFydCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RB
UlRfVE9fU1RBUlQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIHNob3J0IGVuZFRvRW5k
ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICBzaG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisgICAgc2hvcnQgZW5kVG9FbmQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAogICAgIC8vIEZpcnN0IHJhbmdl
IGNvbnRhaW5zIHRoZSBzZWNvbmQgcmFuZ2UuCiAgICAgaWYgKHN0YXJ0VG9TdGFydCA8PSAwICYm
IGVuZFRvRW5kID49IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRW5kIG9mIGZp
cnN0IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYgKGEtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA+
PSAwICYmIGVuZFRvRW5kIDw9IDApCisgICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6U1RBUlRfVE9fRU5ELCAqYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRU
b0VuZCA8PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFN0YXJ0IG9mIGZpcnN0
IHJhbmdlIGlzIGluc2lkZSBzZWNvbmQgcmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA+PSAw
ICYmIGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCBiLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKSA8PSAwKQorICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19F
WENFUFRJT04pIDw9IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTU5Nyw3ICsxNTMzLDcgQEAgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYg
bm9kZSkKIHsKICAgICBSZWY8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLmRvY3Vt
ZW50KCkpOwogICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29u
dGVudHMoJm5vZGUsIGV4Y2VwdGlvbik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhu
b2RlLCBleGNlcHRpb24pOwogICAgIHJldHVybiByYW5nZTsKIH0KIApAQCAtMTYyMSwxMyArMTU1
NywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5XaWxsQmVSZW1v
dmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcgogewogICAgIGZvciAoTm9kZSogbm9kZVRv
QmVSZW1vdmVkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgbm9kZVRvQmVSZW1vdmVkOyBub2Rl
VG9CZVJlbW92ZWQgPSBub2RlVG9CZVJlbW92ZWQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gbm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAgICAg
ICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAgICAgICAgICAg
Ym91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShjb250YWluZXIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChOb2RlKiBuID0gYm91bmRhcnkuY29udGFpbmVy
KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChuID09IG5vZGVU
b0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUo
JmNvbnRhaW5lcik7CisgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShj
b250YWluZXIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMTcwNyw5ICsxNjQzLDkgQEAgdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSog
dGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiBzdGF0aWMgaW5saW5lIHZv
aWQgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwg
Tm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewogICAgIGlmIChib3Vu
ZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5vZGUoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0
KG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgYm91bmRhcnkub2Zmc2V0KCkgKyBv
ZmZzZXQsIDApOworICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91
c1NpYmxpbmcoKSwgYm91bmRhcnkub2Zmc2V0KCkgKyBvZmZzZXQsIDApOwogICAgIGVsc2UgaWYg
KGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYg
Ym91bmRhcnkub2Zmc2V0KCkgPT0gb2xkTm9kZS5pbmRleCgpKQotICAgICAgICBib3VuZGFyeS5z
ZXQob2xkTm9kZS5ub2RlKCktPnByZXZpb3VzU2libGluZygpLCBvZmZzZXQsIDApOworICAgICAg
ICBib3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0
LCAwKTsKIH0KIAogdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTE3MzAsNyArMTY2Niw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRh
cnksIFRleHQqIG9sCiAgICAgICAgIHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0gb2xkTm9kZS0+bGVu
Z3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0
KCk7CiAgICAgICAgIGlmIChib3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KQotICAgICAgICAg
ICAgYm91bmRhcnkuc2V0KG9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0g
c3BsaXRPZmZzZXQsIDApOworICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLT5uZXh0
U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7CkBA
IC0xNzcxLDggKzE3MDcsMTcgQEAgdm9pZCBSYW5nZTo6ZXhwYW5kKGNvbnN0IFN0cmluZyYgdW5p
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVuZCA9IGVuZE9mRG9jdW1lbnQoZW5kKTsK
ICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwotICAgIHNldFN0YXJ0KHN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVP
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIHNldEVuZChlbmQuZGVlcEVxdWl2YWxl
bnQoKS5jb250YWluZXJOb2RlKCksIGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZWMpOworCisgICAgaWYgKCFzdGFydC5kZWVwRXF1aXZhbGVudCgp
LmNvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBzZXRTdGFydCgqc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWlu
ZXJOb2RlKCksIHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgaWYgKCFlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2Rl
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2V0RW5kKCplbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIGVuZC5kZWVw
RXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogfQogCiBS
ZWY8Q2xpZW50UmVjdExpc3Q+IFJhbmdlOjpnZXRDbGllbnRSZWN0cygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oCmluZGV4IGEyMmVkZTY3MmViMmNiYmE1YmZmNmEzNWQwZDIxYThhNjEyZjJmM2EuLjIzYWMz
NTc1OWU1ZTZmZjlkNDQ3NWY4ZmUyNmYyODc0YmYzMTllMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC02
NiwyNCArNjYsMjQgQEAgcHVibGljOgogCiAgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcigmc3RhcnRDb250YWlu
ZXIoKSwgJmVuZENvbnRhaW5lcigpKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOb2Rl
KiBjb21tb25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWlu
ZXJCKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4g
Y29udGFpbmVyLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJ
T04pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29u
dGFpbmVyLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04p
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVy
LCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNvbGxhcHNlKGJvb2wgdG9TdGFydCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJ
blJhbmdlKE5vZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBz
aG9ydCBjb21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIGVudW0gQ29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9B
RlRFUiwgTk9ERV9CRUZPUkVfQU5EX0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIENvbXBhcmVS
ZXN1bHRzIGNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CiAgICAgZW51bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJU
X1RPX0VORCwgRU5EX1RPX0VORCwgRU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3Vy
Y2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIHNob3J0IGNvbXBhcmVCb3VuZGFy
eVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdl
KiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291
cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBzaG9ydCBjb21wYXJlQm91bmRh
cnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5n
ZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBzdGF0aWMgc2hvcnQg
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2Rl
KiBjb250YWluZXJCLCBpbnQgb2Zmc2V0QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBz
aG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3Vu
ZGFyeUEsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlCLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3Q7
Ci0gICAgYm9vbCBpbnRlcnNlY3RzTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgYm9vbCBpbnRlcnNlY3RzTm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CiAgICAgdm9pZCBkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJik7CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGV4dHJhY3RDb250ZW50cyhFeGNlcHRpb25Db2Rl
Jik7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNsb25lQ29udGVudHMoRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgaW5zZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgaW5zZXJ0Tm9kZShSZWY8Tm9kZT4mJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0
OwpAQCAtOTQsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIFJlZjxSYW5nZT4gY2xvbmVSYW5nZSgpIGNvbnN0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VS
VF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kQmVmb3JlKE5v
ZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0RW5kQWZ0ZXIoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05P
X0VYQ0VQVElPTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3ROb2RlKE5vZGUqLCBF
eGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXJ0QmVmb3JlKE5vZGUqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUmLCBFeGNlcHRp
b25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0RW5kQmVmb3JlKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04p
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kQWZ0ZXIoTm9kZSYsIEV4Y2VwdGlvbkNv
ZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxl
Y3ROb2RlKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBzdXJyb3VuZENvbnRlbnRzKE5vZGUmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFydEJlZm9yZShOb2RlJiwgRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgY29uc3QgUG9zaXRpb24gc3RhcnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnQudG9Qb3NpdGlvbigpOyB9CiAgICAgY29uc3QgUG9zaXRpb24gZW5kUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2VuZC50b1Bvc2l0aW9uKCk7IH0KQEAgLTE1OSw3ICsxNTks
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCYpOwogCi0gICAg
Tm9kZSogY2hlY2tOb2RlV09mZnNldChOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OworICAgIE5vZGUqIGNoZWNrTm9kZVdPZmZzZXQoTm9kZSYsIGludCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKIAogICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0
cmFjdCwgQ2xvbmUgfTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcHJvY2Vzc0NvbnRl
bnRzKEFjdGlvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmluZGV4IGYy
M2FmOGM0NmNkMDYwN2RjYmRhYzE0ZDliMjMxY2MwZDFkYjQyMzcuLmE3NTg2ODM5MjdlYjEyNTQy
Zjc5MDIxNWQ3YTMzMjYzMWE0NjIzMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMjIsNyArMjIs
NiBAQAogWwogICAgIENvbnN0cnVjdG9yLAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1l
bnQsCi0gICAgVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMsCiAg
ICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VY
UE9SVCwKIF0gaW50ZXJmYWNlIFJhbmdlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZUJvdW5kYXJ5UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaAppbmRleCAyOGU4OGMzYzY2YWQ5MjlhZjViNGFkZDBiMjI0YjRhZjZkYzJkZWVjLi5i
ZjhmOWU0MTM3OWViMGRmMTZiOWE1ZWE0ZTQxZDNjOTQ0Nzc3NmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCkBAIC00NSwxMyArNDUsMTMgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBjbGVhcigpOwogCi0gICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWlu
ZXIsIGludCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKTsKKyAgICB2b2lkIHNldChSZWY8Tm9k
ZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKTsKICAgICB2b2lk
IHNldE9mZnNldChpbnQgb2Zmc2V0KTsKIAogICAgIHZvaWQgc2V0VG9CZWZvcmVDaGlsZChOb2Rl
Jik7CiAgICAgdm9pZCBzZXRUb0FmdGVyQ2hpbGQoTm9kZSYpOwotICAgIHZvaWQgc2V0VG9TdGFy
dE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIHNldFRvRW5kT2ZOb2RlKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgc2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7Cisg
ICAgdm9pZCBzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJik7CiAKICAgICB2b2lkIGNoaWxkQmVm
b3JlV2lsbEJlUmVtb3ZlZCgpOwogICAgIHZvaWQgaW52YWxpZGF0ZU9mZnNldCgpIGNvbnN0OwpA
QCAtMTE2LDEyICsxMTYsMTEgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpjbGVh
cigpCiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZv
aWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGlu
dCBvZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJl
Zm9yZSkKIHsKLSAgICBBU1NFUlQoY29udGFpbmVyKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDAp
OwogICAgIEFTU0VSVChjaGlsZEJlZm9yZSA9PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJz
ZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSA6IDApKTsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBjb250
YWluZXI7CisgICAgbV9jb250YWluZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1f
b2Zmc2V0SW5Db250YWluZXIgPSBvZmZzZXQ7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0g
Y2hpbGRCZWZvcmU7CiB9CkBAIC0xNTEsMTggKzE1MCwxNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJv
dW5kYXJ5UG9pbnQ6OnNldFRvQWZ0ZXJDaGlsZChOb2RlJiBjaGlsZCkKICAgICBtX29mZnNldElu
Q29udGFpbmVyID0gbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID8gaW52YWxpZE9mZnNldCA6IDA7CiB9
CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShQYXNz
UmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIpCiB7Ci0gICAgQVNTRVJUKGNv
bnRhaW5lcik7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29udGFp
bmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0g
MDsKICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBudWxscHRyOwogfQogCi1pbmxpbmUgdm9p
ZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gY29u
dGFpbmVyKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9kZShS
ZWY8Tm9kZT4mJiBjb250YWluZXIpCiB7Ci0gICAgQVNTRVJUKGNvbnRhaW5lcik7Ci0gICAgbV9j
b250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUo
Y29udGFpbmVyKTsKICAgICBpZiAobV9jb250YWluZXJOb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMo
KSkgewogICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jb250YWluZXJOb2RlLT5tYXhD
aGFyYWN0ZXJPZmZzZXQoKTsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCmluZGV4IDVlZGYwYjZjMmQzZTllN2UyNTk5ZWIyZGRmNTAxNjdmYWQxMGNlNjQu
LmIzZDA2OWJlZjgxZjkwOTYyNjJkMjZlNGMyOWMyZTkyNDgxZDgxMDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAt
MjU4LDcgKzI1OCw5IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRl
cm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSwKIAogICAgIFBvc2l0aW9uIHN0
YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5h
dGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZl
LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmICghc3RhcnRQb3Np
dGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1
cm47CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQo
KnN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSwgc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggN2I4OWUwZTdmY2Q1OGZj
ZTgwYzJiZGI0MTRmYmY2MjRmZThmYmQ5NC4uYWM0NjQ4ODllOTFmM2YxZTA5ZWUwNWFjNDUxZGQy
Y2Y1NGRmOTE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAKQEAgLTcyMiw3ICs3MjIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5n
ZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUAogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwg
c3RhcnQsIGVuZCk7CiAgICAgRWxlbWVudCogZWRpdGFibGVSb290ID0gc3RhcnROb2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCk7CiAgICAgaWYgKHN0YXJ0Tm9kZSAhPSBlZGl0YWJsZVJvb3QpIHsK
LSAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAh
PSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihzdGFydE5vZGUt
PnBhcmVudE5vZGUoKSwgcmFuZ2UuZ2V0KCkpKQorICAgICAgICB3aGlsZSAoZWRpdGFibGVSb290
ICYmIHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpICE9IGVkaXRhYmxlUm9vdCAmJiBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKCpzdGFydE5vZGUtPnBhcmVudE5vZGUoKSwgcmFuZ2UuZ2V0KCkp
KQogICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNjRiZGU3MjdlYjMyNzI2ZTE0MDhk
ZjNiODRjNWU5NGY4MTdkODAwMC4uY2E0N2JhODBkNDgxZDc3MWZlNWZhM2EyN2M1OTM0YmUzOTJk
MzllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTk1MCwxNCArMTk1MCwxNiBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBQb3NpdGlv
biByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCk7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJhbmdlQ29tcGxp
YW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHJh
bmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAgICAgIHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFs
c2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKICAgICAvLyB0b3BOb2RlIGRl
ZmluZXMgdGhlIHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAgICBOb2RlKiB0
b3BOb2RlID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CiAgICAgLy8gRklYTUU6IGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8dGFibGU+KQot
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zmc2V0Rm9yRWRp
dGluZyh0b3BOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHRvcE5vZGUpCisgICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9mZnNldEZvckVk
aXRpbmcodG9wTm9kZSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgLy8gSWYgc3BlbGxpbmdT
ZWFyY2hSYW5nZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFuY2UgdG8gdGhl
IG5leHQgd29yZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29yZCBib3VuZGFy
eS4gR29pbmcgYmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEgd29yZCBkb2Vz
IHRoZSB0cmljay4KQEAgLTIwMTEsNyArMjAxMyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9O
ZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIC8v
IFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAogICAgICAgICAg
ICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7CiAgICAgICAg
ICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgICAgIGdyYW1t
YXJTZWFyY2hSYW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBj
aGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFp
bmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwog
ICAgICAgICB9CiAgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
QEAgLTIwMjIsOSArMjAyNCwxMCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgd2UgZm91bmQgbmVpdGhl
ciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRyeSBhZ2FpbiAo
YnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAg
ICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlmIChzdGFydGVk
V2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQaHJhc2UpIHsK
LSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwgMCwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgIGlmICh0b3BOb2RlKQorICAgICAgICAgICAgc3BlbGxpbmdT
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAg
ICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRl
c3RlZCBpcyBmYXIgZW5vdWdoCi0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgm
c2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwLCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVu
ZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgICAgIAogICAgICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7
CiAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5j
bG9uZVJhbmdlKCk7CkBAIC0yMDQ1LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICAg
ICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCiAgICAg
ICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7
CiAgICAgICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJhbmdlKCktPnN0
YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENF
UFRJT04pOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJz
LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCks
IElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0zMTY4LDkgKzMxNzEsOSBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdl
KiByZWZlcmVuY2VSYQogICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9IHJlZmVyZW5j
ZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkubm9uQm91bmRhcnlTaGFk
b3dUcmVlUm9vdE5vZGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CiAg
ICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFk
b3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVl
Um9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAgfQogCiAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFy
Z2V0LCBvcHRpb25zKSk7CkBAIC0zMTg2LDkgKzMxODksOSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVu
Y2VSYQogCiAgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICAgICAgaWYgKGZv
cndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9v
dC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3Qt
PmNvdW50Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAgICAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93VHJlZVJvb3QsIDApOwogICAgICAg
ICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwg
dGFyZ2V0LCBvcHRpb25zKTsKQEAgLTMxOTcsMTAgKzMyMDAsMTIgQEAgUGFzc1JlZlB0cjxSYW5n
ZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVm
ZXJlbmNlUmEKICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUs
IHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KICAgICBp
ZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAg
IHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAo
Zm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRvd1Ry
ZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0RW5kQmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAg
ICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgICAgICAgICAgaWYgKGZv
cndhcmQpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnNoYWRv
d1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0
KCkpOworICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpz
ZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CkBAIC0zMjIzLDcgKzMyMjgsNyBA
QCBzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlKiByYW5nZSkK
ICAgICBib29sIGluUmFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93
bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgewog
ICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKSkgewotICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZShv
d25lckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaW5SYW5nZSA9IHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1NSw4ICszMjYwLDggQEAg
dW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAg
ICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoJm9yaWdpbmFsRW5kQ29udGFpbmVyLCBvcmlnaW5hbEVu
ZE9mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJ
R05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQob3JpZ2lu
YWxFbmRDb250YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBUSU9OKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMyNzUsMTEgKzMyODAsMTEgQEAg
dW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgLy8gcmVzdWx0IHJhbmdlLiBUaGVyZSBp
cyBubyBuZWVkIHRvIHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAogICAgICAgICAvLyBzaW5j
ZSBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdGhlIHZp
c2libGUKICAgICAgICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJhbmdlLT5zZXRT
dGFydCgmcmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0
KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVz
dWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9S
RV9FWENFUFRJT04pOwogCiAgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFu
Z2UtPnNoYWRvd1Jvb3QoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSAm
JiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93
VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwg
c2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAg
ICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOTFhZDE3Njg2NmY0ZjEzYzA3NGQ3ZDMx
NDg0NWJmMzViYWI3ZDMzOS4uODFhYTAwMDgxYzc2ZGZhNTMzM2JhZDQ2ZDkwNDRiNWE4YjNkZTg5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0yMjgsMTIg
KzIyOCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYg
ZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxiYXI6OnBhZ2VT
dGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhS
YW5nZSogYSwgUmFuZ2UqIGIpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhS
YW5nZSYgYSwgUmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UqIHN0YXJ0ID0gYS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCA/IGEgOiBiOwotICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBiIDogYTsK
LQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEtPm93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0LT5z
dGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgJmVuZC0+ZW5kQ29udGFpbmVy
KCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworICAgIFJhbmdlJiBzdGFydCA9IGEuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCA/IGEgOiBiOworICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IGIgOiBhOwor
ICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3RhcnQuc3RhcnRD
b250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWluZXIoKSwgZW5k
LmVuZE9mZnNldCgpKTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwpAQCAtMzU2
LDggKzM1NSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdl
PiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwotICAgIGlmICht
YXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAobWFyayAmJiBmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNl
bGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRp
dG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgICAg
IEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMDEwLDcgKzEwMDksNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2Vs
ZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25z
dAogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJr
LmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAq
c2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRl
eCBhMDI1NmE0MDBhOTNlNGY3NmU4OTgxOTVkNzhiNjhmNTE2OTgxMzYzLi5hYWE5OWE4ZThlZDE2
MWQxMTMyMDg0YmI0MjZjZGE5NjI4MjFiM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgRm9ybWF0Qmxv
Y2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQsCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1lKCkpICYmIHN0
YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2Nr
KGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihyZWZOb2RlLCByYW5nZS5nZXQo
KSkpCisgICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlD
b250YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKICAgICAgICAgJiYgcmVmTm9k
ZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgewogICAgICAgICAv
LyBBbHJlYWR5IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJl
bnQgcGFyYWdyYXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDVhYzMwNzc3
ZWRmOGU2YTg0NTNhZDE3NDczNDNiOTNiNjBiNDM1N2QuLjAzOWUzOWZkYmNlNTIyZjlmNTg3NTZl
MTRmZWMyMDhlZTkzN2M4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRv
Tm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAgICAg
ICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgp
LCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFu
Z2UtPmNvbXBhcmVOb2RlKCZub2RlLCBlYyk7CisgICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0
cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5vZGUsIGVjKTsKICAgICAgICAg
aWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVfQU5EX0FGVEVS
IHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSkgewogICAgICAgICAgICAg
Ly8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5kZXJlciB3YXMg
ZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAogICAgICAgICAgICAgLy8gb2NjdXBpZWQgd291
bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFuZ2UgYXMgYSBy
ZXN1bHQgb2YgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3Bw
CmluZGV4IGVmNGY2MjE5MzM5ZTVhNmFlYzk5MDI5Nzc4YjY4OWUxNGU4YzZhZmUuLjZmZjdjMWFl
OTA5MzdjM2I0YTM2NTk0MTlmNGYxMzliZjJhYjYwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRl
TGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBJZiB0aGUg
ZW50aXJlIGxpc3QgaXMgc2VsZWN0ZWQsIHRoZW4gY29udmVydCB0aGUgd2hvbGUgbGlzdC4KLSAg
ICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4o
bGlzdE5vZGUuZ2V0KCksIGN1cnJlbnRTZWxlY3Rpb24pKSB7CisgICAgICAgIGlmIChzd2l0Y2hM
aXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpsaXN0Tm9kZSwgY3VycmVu
dFNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGJvb2wgcmFuZ2VTdGFydElzSW5MaXN0ID0gdmlz
aWJsZVBvc2l0aW9uQmVmb3JlTm9kZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlv
bi0+c3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0g
dmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3ROb2RlLmdldCgpKSA9PSBjdXJyZW50U2VsZWN0
aW9uLT5lbmRQb3NpdGlvbigpOwogCkBAIC0yNDMsOSArMjQzLDkgQEAgdm9pZCBJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwg
Y29uc3QgSFQKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9m
IGN1cnJlbnQgc2VsZWN0aW9uIGlmIHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5vZGUKICAgICAg
ICAgICAgIC8vIGJlY2F1c2UgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQgaGF2ZSByZW1v
dmVkIHRoZW0uCiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3Qp
Ci0gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQobmV3TGlzdCwgMCwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0
U3RhcnQoKm5ld0xpc3QsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgaWYgKHJh
bmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0
aW9uLT5zZXRFbmQobmV3TGlzdCwgbGFzdE9mZnNldEluTm9kZShuZXdMaXN0LmdldCgpKSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5k
KCpuZXdMaXN0LCBsYXN0T2Zmc2V0SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpLCBJR05PUkVfRVhDRVBU
SU9OKTsKIAogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5Ob2RlKG5ld0xpc3QuZ2V0KCkpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA3NTM2OTIwMGMyOTU1YjA3NWM4
M2I1MGNkNjU3MDc3NDVjZmVjOGY3Li5iNjk1MmUyYjg2ZjE5Y2VjNjZkY2JhZmNlOTY2MjFiNmQ1
MTE5OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCkBAIC0xNzQsOCArMTc0LDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRDaGVja2luZ1Bh
cmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhCiBpbnQgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwor
ICAgIGlmICghcG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gVHlwZUVy
cm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBSZWY8UmFuZ2U+IHJhbmdlID0g
b2Zmc2V0QXNSYW5nZSgpLT5jbG9uZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNldEVuZChwb3NpdGlv
bi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOworICAgIHJhbmdlLT5zZXRFbmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9z
aXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZS5wdHIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXgg
NDgzYTRkNDQwMGE0NDVmNTlhMmNjODM0ZmY4MmQ5MTdhOTUyZmQ0Ni4uZjJiMmZiNzA3ZjlhYjY1
ZjJlM2NjZDQyZDhkNDBiNWJiMWJiYTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcApAQCAtMTQ3OSw4ICsxNDc5LDggQEAgUmVmPFJhbmdlPiBDaGFyYWN0ZXJJdGVy
YXRvcjo6cmFuZ2UoKSBjb25zdAogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IHJhbmdlLT5zdGFy
dENvbnRhaW5lcigpOwogICAgICAgICAgICAgQVNTRVJUKCZub2RlID09ICZyYW5nZS0+ZW5kQ29u
dGFpbmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgp
ICsgbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQoJm5vZGUsIG9mZnNl
dCk7Ci0gICAgICAgICAgICByYW5nZS0+c2V0RW5kKCZub2RlLCBvZmZzZXQgKyAxKTsKKyAgICAg
ICAgICAgIHJhbmdlLT5zZXRTdGFydChub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgcmFuZ2Ut
PnNldEVuZChub2RlLCBvZmZzZXQgKyAxKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
cmFuZ2U7CkBAIC0xNTY5LDggKzE1NjksOCBAQCBSZWY8UmFuZ2U+IEJhY2t3YXJkc0NoYXJhY3Rl
ckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gci0+c3Rh
cnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFTU0VSVCgmbm9kZSA9PSAmci0+ZW5kQ29udGFp
bmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHItPmVuZE9mZnNldCgpIC0gbV9ydW5P
ZmZzZXQ7Ci0gICAgICAgICAgICByLT5zZXRTdGFydCgmbm9kZSwgb2Zmc2V0IC0gMSk7Ci0gICAg
ICAgICAgICByLT5zZXRFbmQoJm5vZGUsIG9mZnNldCk7CisgICAgICAgICAgICByLT5zZXRTdGFy
dChub2RlLCBvZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIHItPnNldEVuZChub2RlLCBvZmZzZXQp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByOwpAQCAtMjQ3OSw4ICsyNDc5LDggQEAg
UmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENv
bnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAKICAgICAvLyBGSVhNRTogdGhlIGF0RW5kKCkg
Y2hlY2sgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgd29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODk+LgogICAgIGlmICghcmFuZ2VMb2NhdGlv
biAmJiAhcmFuZ2VMZW5ndGggJiYgaXQuYXRFbmQoKSkgewotICAgICAgICByZXN1bHRSYW5nZS0+
c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7Ci0gICAgICAgIHJl
c3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7Cisg
ICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIDApOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRD
b250YWluZXIoKSwgMCk7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdFJhbmdlKTsKICAg
ICB9CiAKQEAgLTI0OTgsMTIgKzI0OTgsMTIgQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAg
ICAgICAgICAgICAgICBpdC5hZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpdC5hdEVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgp
OwotICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgmcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dFJ1blJhbmdlLT5zZXRFbmQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFy
dE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBQb3NpdGlvbiBydW5TdGFydCA9IHRleHRSdW5SYW5nZS0+c3RhcnRQb3NpdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRpb24ocnVuU3Rh
cnQpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVu
RW5kLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5z
ZXRFbmQocnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVu
ZCgqcnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNTEyLDI0ICsyNTEyLDI0IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZy
b21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgICAg
ICBzdGFydFJhbmdlRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+
c3RhcnRDb250YWluZXIoKS5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gcmFuZ2VMb2NhdGlvbiAtIGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICBy
ZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zm
c2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXN1
bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQg
KyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBpZiAocmFuZ2VMb2NhdGlvbiA9PSBkb2NUZXh0UG9zaXRpb24pCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5l
cigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVuUmFuZ2Ut
PmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVy
KCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGZvdW5kRW5kKSB7CiAgICAgICAgICAgICBpZiAodGV4dFJ1blJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSByYW5nZUVuZCAtIGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCAr
IHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFu
Z2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRS
dW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIGlmIChyYW5nZUVuZCA9PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
dGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5n
ZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0
ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFu
Z2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVu
ZE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRvY1RleHRQb3NpdGlvbiAr
PSBsZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI1NDIsNyArMjU0Miw3IEBAIFJlZlB0
cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWlu
ZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGlm
IChyYW5nZUxlbmd0aCAmJiByYW5nZUVuZCA+IGRvY1RleHRQb3NpdGlvbikgLy8gcmFuZ2VFbmQg
aXMgb3V0IG9mIGJvdW5kcwotICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFu
Z2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVu
UmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRSYW5n
ZSk7CiB9CkBAIC0yNTY2LDcgKzI1NjYsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZQogICAg
IEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsb2Nh
dGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKIAotICAg
IHRlc3RSYW5nZS0+c2V0RW5kKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZz
ZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAg
IEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2NhdGlv
bjsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2MjMsNyArMjYyMyw3IEBAIHN0YXRpYyBzaXplX3Qg
ZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9uCiAKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkgewogICAgICAg
ICBSZWY8UmFuZ2U+IGJlZm9yZVN0YXJ0UmFuZ2UgPSByYW5nZS5vd25lckRvY3VtZW50KCkuY3Jl
YXRlUmFuZ2UoKTsKLSAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKCZyYW5nZS5zdGFy
dENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgYmVmb3JlU3RhcnRS
YW5nZS0+c2V0RW5kKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkp
OwogICAgICAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRz
SXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVu
ZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIGJ1ZmZlci5w
cmVwZW5kQ29udGV4dChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAgICAgICAgaWYg
KCFidWZmZXIubmVlZHNNb3JlQ29udGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCmluZGV4IDJmZTI2ZDdjZjE3MGY5ZmQ4ZWY3ZmU1YTkyZTViMDg3OTU3
OTY2NzMuLjQyMWVlMmJlMmUxN2JkOGM4Y2Y2YjYxZTRiYTJiZjdmOWFhNWE1YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCwyNCArNzMwLDMy
IEBAIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVB
ZmZpbml0eSBhZmZpbml0eSkKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZFBvc2l0
aW9uKCksIGFmZmluaXR5KTsKIH0KIAotYm9vbCBzZXRTdGFydChSYW5nZSAqciwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitib29sIHNldFN0YXJ0KFJhbmdlKiByYW5n
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYgKCFy
KQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFBvc2l0aW9u
IHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKLSAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0U3RhcnQocC5jb250YWluZXJO
b2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2Rl
ID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0U3RhcnQoKnAuY29udGFpbmVyTm9k
ZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKIH0K
IAotYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBv
c2l0aW9uKQorYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAoIXIpCisgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGludCBjb2RlID0g
MDsKLSAgICByLT5zZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5l
ck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsKKyAgICBy
YW5nZS0+c2V0RW5kKCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBkZXByZWNhdGVkIHRvbywgbGlrZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbj8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDdkYTY2YTE4ODZh
ZWY5MTcxNjZhYzQyOGFmYmMwNDdkNGMxZmI4NWUuLmY4ZDkwMzNhOWM3MWI4ZDQ4YzU5NDc2OGFl
NWZmYzkwMzRjNmVkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcApAQCAtMjEzLDggKzIxMyw4IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IG1ha2VTZWFy
Y2hSYW5nZShjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
CiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAg
ICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7Ci0gICAgc2Vh
cmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRz
KCpib3VuZGFyeSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFp
bmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogCiAgICAgQVNT
RVJUKCFlYyk7CiAgICAgaWYgKGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCmluZGV4IGRlYjQwZmQwMWI5MDlmNjAxYmU5ZDRmMTgwNDkwOWYyZmEwYzc2ZmUuLjYyMmY0
MzZjZTVlNzA3ZDczZmMzMWRhMTRhNjBiNzQ2YzdiNDgxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTU2OSw3ICs1NjksMTEgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2gKICAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1
bWVudCgpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBl
bmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYm91bmRhcnlEb2N1bWVudCk7CisKKyAgICBpZiAo
c3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CisKKyAgICBSZWY8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShi
b3VuZGFyeURvY3VtZW50KTsKICAgICAKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsK
ICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwpAQCAtNTc3LDE5ICs1ODEsMTkgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2gKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAo
cmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQmVmb3JlKCkpKSB7CiAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2FyZHNTY2FuUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5j
cmVhdGVSYW5nZSgpKTsKLSAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKGJv
dW5kYXJ5LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydChlbmQuZGVw
cmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAg
ICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKCpib3VuZGFyeSwgZWMpOworICAgICAg
ICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoKmVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBz
dWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAK
LSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQo
ZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7
CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldEVu
ZCgqZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
Yyk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQo
KnNlYXJjaFJhbmdlKTsKKyAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNl
YXJjaFJhbmdlKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFy
eVdpdGhUZXh0SXRlcmF0b3IoaXQsIHN0cmluZywgc3VmZml4TGVuZ3RoLCBzZWFyY2hGdW5jdGlv
bik7CiAKICAgICBpZiAoIW5leHQpCkBAIC02MDIsNyArNjA2LDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2gKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0
cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNrd2Fy
ZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHND
aGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UpOwogICAgIGNoYXJJdC5hZHZhbmNl
KHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKICAgICAvLyBGSVhNRTogY2hh
ckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0LgogICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpAQCAtNjE2LDcg
KzYyMCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKIAogICAgIERvY3VtZW50JiBib3VuZGFyeURvY3VtZW50ID0gYm91bmRhcnkt
PmRvY3VtZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShib3VuZGFyeURvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCkpOworICAgIFJlZjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBib3VuZGFy
eURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwpA
QCAtNjI0LDIwICs2MjgsMjIgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKIAogICAgIGlmIChy
ZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRlcigpKSkgewogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IGJhY2t3YXJkc1NjYW5SYW5nZShib3VuZGFyeURvY3VtZW50LmNy
ZWF0ZVJhbmdlKCkpOwotICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5k
ZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpCisgICAgICAg
ICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZCgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAg
ICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3YXJkc1NjYW5SYW5n
ZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRz
KGJvdW5kYXJ5LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgp
LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7
CisgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnksIElHTk9SRV9F
WENFUFRJT04pOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgIFRleHRJdGVyYXRvciBp
dChzZWFyY2hSYW5nZS5wdHIoKSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFs
bFZpc2libGVQb3NpdGlvbnMpOwogICAgIHVuc2lnbmVkIG5leHQgPSBmb3J3YXJkU2VhcmNoRm9y
Qm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcsIHByZWZpeExlbmd0aCwgc2VhcmNo
RnVuY3Rpb24pOwogICAgIAogICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNp
emUoKSkKICAgICAgICAgcG9zID0gc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CiAgICAgZWxz
ZSBpZiAobmV4dCA+IHByZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3Rl
ciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlv
bi4KLSAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0
ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgICAg
ICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFk
dmFuY2UobmV4dCAtIHByZWZpeExlbmd0aCAtIDEpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGNo
YXJhY3RlclJhbmdlID0gY2hhckl0LnJhbmdlKCk7CiAgICAgICAgIHBvcyA9IGNoYXJhY3RlclJh
bmdlLT5lbmRQb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApp
bmRleCAyOWM5YWY4NWUwYjZlZTBhMzA0MzVhOTZlZWNkNzJmODUyODBlZTc4Li41ODA4NzIwNWYw
OWRjYjg3NzQ0ZjI1ZTM4OTU2YmJhMjQ2NWQwNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihOb2RlKiBub2RlLCBpbnQg
aW4KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250
ZW50cyhub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRl
bnRzKCpub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdCgq
cmFuZ2UpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGl0LmF0RW5kKCkgPyByYW5nZS0+ZW5kUG9zaXRpb24oKSA6IGl0LnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCksIFVQU1RSRUFNKTsKQEAgLTExODYsMjAgKzExODYsMTkgQEAgYm9vbCBpc1Zp
c2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNv
bmQpCiAKIC8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3Ig
dmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgog
Ly8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNp
Ymx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQorYm9vbCBpc05v
ZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3Rl
ZFJhbmdlKQogewotICAgIEFTU0VSVChub2RlKTsKICAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7
CiAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkg
aXMgY29udGFpbmVkIHdpdGhpbgogICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZShu
b2RlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0
aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0g
ICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbklu
UGFyZW50QWZ0ZXJOb2RlKG5vZGUpLCBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDAp
CisgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZSgmbm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFy
dElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVy
Tm9kZSgmbm9kZSksIHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBib29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0
aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7Ci0gICAg
aWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKSkgPCAwKQor
ICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoJm5v
ZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZElzVmlzdWFs
bHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpIDwgMCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJc1Zpc3VhbGx5
U2FtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAppbmRleCBjMTU0NzljOTZhNDBl
MWUyMDliYTkyNzUwZWRhMjgyNmU2YzViN2U3Li5mMjE1MTY0NWRjNjc4ZmJkYzQ3YTA2MmM0MjFm
NDJiNjZkMTM5MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0xMTcs
NyArMTE3LDcgQEAgYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlKik7CiBib29s
IGlzTGlzdEVsZW1lbnQoTm9kZSopOwogYm9vbCBpc0xpc3RJdGVtKGNvbnN0IE5vZGUqKTsKIGJv
b2wgaXNOb2RlUmVuZGVyZWQoY29uc3QgTm9kZSopOwotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFp
bmVkV2l0aGluKE5vZGUqLCBjb25zdCBSYW5nZSopOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFp
bmVkV2l0aGluKE5vZGUmLCBjb25zdCBSYW5nZSopOwogYm9vbCBpc1JlbmRlcmVkQXNOb25Jbmxp
bmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKik7CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRz
KGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKik7CiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2Nr
RWxlbWVudChjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KaW5kZXggMTI1YzVhOTgwYzI4NGEzOTRkMDM2NDA0YWE4NTU5MDdjYTE3NTRmMC4uNzNjNWRh
Y2Y0NTM0YzY4NjZkM2Q0OTk5OTdlZjAzMTg0YjA2ZmM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMzE4LDcgKzMxOCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRp
dG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3Ip
OwogICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZp
cnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwogICAg
IGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5n
QW5jaG9yLCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpl
bmNsb3NpbmdBbmNob3IsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJldHVybiByYW5nZTsK
IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAppbmRleCAxNDQyMjUyYmQ1MjE1ZDkzNTc3ZThjZjQ3YmE5ZTUxZDYzZTI4NDM0Li5lZjIyZTUy
NmJiYmJiNGM1NDhiOTRhMDFmZTM4OTMzNzc2MzM4NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MTMsNyArNDEzLDggQEAgdm9pZCBD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51
QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVk
UmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBt
X2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
OwogICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2Rl
KCpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAg
IH0KICAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KHNlbGVjdGVkUmFuZ2UuZ2V0KCkp
KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXgg
ZTExOWY2NGQ4YjY3ZmJmZjNkMTUzMDdkZmVhODk4NmZmMjE2ODk4Yi4uZjYwNTY2MWJkODUzYWE3
Nzk4YmE0ZTdlNTc3NTFlZDc1ZjdjMmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcApAQCAtMzkzLDEwICszOTMsMTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJh
bmdlKiByKQogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJ
T04pID09IC0xKSB7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBk
aXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFu
Z2UgZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0x
KSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKKyAgICAgICAg
aWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqcmFuZ2Us
IElHTk9SRV9FWENFUFRJT04pID4gLTEpIHsKKyAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikg
PT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgYW5kIHIgaW50
ZXJzZWN0LgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oci0+c3RhcnRQb3NpdGlv
bigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVs
c2UgewpAQCAtNDA3LDggKzQxMCw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5n
ZSogcikKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRp
Z3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24n
dCBpbnRlcnNlY3QuCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIHJhbmdlLmdldCgp
LCBlYykgPCAxICYmICFlYykgewotICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09
IC0xKSB7CisgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19TVEFSVCwgKnJhbmdlLCBlYykgPCAxICYmICFlYykgeworICAgICAgICAgICAgaWYgKHItPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhD
RVBUSU9OKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBj
b250YWlucyByLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UuZ2V0KCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggMWNjODM4NGE0OTYxZTM4OGEzZjIxYjBjYzI0ZTAyMDIzZTY1NGYxNy4uMGM5MGI0
MTRiNWEyZTA2ZjBhOTkxZDUwN2NkNTc4NjY0MjI0ZWM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTcxMiw3ICs3MTIsNyBAQCBzdGF0aWMgSW1hZ2UqIGdldElt
YWdlKEVsZW1lbnQmIGVsZW1lbnQpCiBzdGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQo
KS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlKCZlbGVtZW50KTsKKyAgICBy
YW5nZS0+c2VsZWN0Tm9kZShlbGVtZW50KTsKICAgICBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dO
U1RSRUFNKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAxOGM0
NzVmMWVlODE3ZTRlNWYxNzAyZGIzYjRmYTM5OTNlMDM0NGJmLi4xNzUyMjM2YzdhNjc5OTBjM2Uy
ZGI3Y2NhZjNiZTQ0ZTg0MzQyYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CkBAIC0yNTA3LDcgKzI1MDcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZQogICAgICAgICAg
ICAgICAgIC8vIGZvY3VzZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93
ZXZlciwgYmVjYXVzZSB0aGUgbW91c2V1cAogICAgICAgICAgICAgICAgIC8vIHdpbGwgc2V0IGEg
c2VsZWN0aW9uIGluc2lkZSBpdCwgd2hpY2ggd2lsbCBjYWxsIHNldEZvY3VzZU5vZGVJZk5lZWRl
ZC4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLT5jb21wYXJlTm9kZShlbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9E
RV9JTlNJREUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZSgqZWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTikg
PT0gUmFuZ2U6Ok5PREVfSU5TSURFCiAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQtPmlz
RGVzY2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCmluZGV4IDkxNTNkMDQ0MmE3MDU3ZDRhODBkMDUwMDNhMDBmZjExNmNiYzFjZTAu
LjhkZjFkMzYxZjM2ZmQ0MTY1ZWJhMTk2M2NkZTZmZmM4NDU2ZjJmMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNjMyLDE0ICs2MzIsMTQgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdS
YW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zICYg
QmFja3dhcmRzKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6
ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCBtYXRjaFJhbmdlc1tpIC0g
MV0uZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChz
ZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwg
Km1hdGNoUmFuZ2VzW2kgLSAxXSwgSUdOT1JFX0VYQ0VQVElPTikgPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2Ut
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBtYXRjaFJhbmdlc1tp
XS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAq
bWF0Y2hSYW5nZXNbaV0sIElHTk9SRV9FWENFUFRJT04pIDwgMCkgewogICAgICAgICAgICAgICAg
ICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4
IDE3Njg0YzU3NDg4MzI4OTY3NjBmNDZlZTlkMWNmMWI4MDhjMzA2MmEuLjI2ZWYzN2MzZDJiZjRk
MDI1MWYwZGE3NTBjNjEwMGJlZDc5YmRmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBib29sIGhhc05vbklubGluZU9yUmVw
bGFjZWRFbGVtZW50cyhjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lubGluZSgpIHx8
IHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2RlKG5vZGUsIEFT
U0VSVF9OT19FWENFUFRJT04pKQorICAgICAgICBpZiAoKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8
fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSAmJiByYW5nZS5pbnRlcnNlY3RzTm9kZSgqbm9kZSwg
QVNTRVJUX05PX0VYQ0VQVElPTikpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAKaW5kZXggMzI5MjAzMTliZjFkOTY3MzE4YTM0ZDY1MmY2YzFlYzViNGFmZDEyNS4uYjM2ZWE0
ZTg5NmE1ZjE3YjVjM2IyNzI0NDZjMGY2NTJkOGU1Yzg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTY5NCw4ICs2OTQs
OCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8
UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgaWYgKCFib3hJbnRlcnNl
Y3RzUmVnaW9uKGxvZ2ljYWxUb3BGb3JSZW5kZXJlciwgbG9naWNhbEJvdHRvbUZvclJlbmRlcmVy
LCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKSkgewogICAgICAg
ICAgICAgICAgIGlmIChmb3VuZFN0YXJ0UG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdGFydHNBYm92ZVJlZ2lvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQmVmb3JlKG5vZGUsIElHTk9SRV9FWENFUFRJ
T04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgq
bm9kZSwgSUdOT1JFX0VYQ0VQVElPTikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFu
Z2UtPnNldEVuZEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZU9iamVjdHMuYXBwZW5kKHJhbmdlLT5jbG9uZVJhbmdlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNvbnRlbnRFbGVtZW50
LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c0Fib3ZlUmVnaW9u
ID0gdHJ1ZTsKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAg
ICAgICAgICAgICAgICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc2tpcE92ZXJPdXRzaWRlTm9kZXMpCi0g
ICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEFmdGVyKG5vZGUsIElHTk9SRV9FWENF
UFRJT04pOworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRBZnRlcigqbm9kZSwg
SUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgZm91bmRTdGFydFBvc2l0aW9uID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC03MzMs
NyArNzMzLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8
UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAvLyB0
aGUgcmFuZ2UgaXMgY2xvc2VkLgogICAgICAgICAgICAgICAgIGlmIChzdGFydHNBYm92ZVJlZ2lv
bikgewogICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRCZWZvcmUobm9kZSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEJlZm9yZSgqbm9kZSwg
SUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgID0gZmFsc2U7CkBAIC03NzAsNyArNzcwLDcg
QEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJh
bmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAvLyBmb3IgZWxlbWVu
dHMgdGhhdCBlbmRzIGluc2lkZSB0aGUgcmVnaW9uLCBzZXQgdGhlIGVuZCBwb3NpdGlvbiB0byBi
ZSBhZnRlciB0aGVtCiAgICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhpcyBlbmQgcG9zaXRpb24g
dG8gYmUgY2hhbmdlZCBvbmx5IGJ5IG90aGVyIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBkZXNjZW5k
YW50cyBvZiB0aGUgY3VycmVudCBlbmQgbm9kZQogICAgICAgICAgICAgICAgIGlmIChlbmRzQmVs
b3dSZWdpb24gfHwgKCFlbmRzQmVsb3dSZWdpb24gJiYgIW5vZGUtPmlzRGVzY2VuZGFudE9mKGxh
c3RFbmROb2RlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFmdGVyKG5v
ZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5k
QWZ0ZXIoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAgICAgICBlbmRz
QmVsb3dSZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgbGFzdEVuZE5vZGUgPSBu
b2RlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CmluZGV4IDA2MzMwN2M5OTkzNTY0NTQ2N2Y5YTM0OTJjMDk2YzNjNDIyNWMzOWIuLjFmOWYzZGQx
ZjQ4MTkzNWE0ZWE5ZTMzMWU1NmNjN2JhZjIwMTA4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtODczLDExICs4NzMsMTMgQEAgLSAoRE9NUmFuZ2UgKilfc21hcnRE
ZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZQogICAg
IG5ld1N0YXJ0ID0gbmV3U3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgbmV3
RW5kID0gbmV3RW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdl
KCk7Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0
LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2Vw
dGlvbik7Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5ld1N0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJldHVybiBraXQo
cmFuZ2UuZ2V0KCkpOworICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgIGlmIChuZXdTdGFydC5jb250YWluZXJO
b2RlKCkpIHsKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHJhbmdlLT5zZXRT
dGFydCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqbmV3U3RhcnQuY29u
dGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9u
KTsKKyAgICB9CisgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7CiB9CiAKIC0gKERPTURvY3Vt
ZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5n
ICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KaW5kZXggZTA4MDZiY2I2YTc3MzRlMmQzNDQxNDk1
YjE0ZWQ2ZmIyN2QyMjQ5OS4uOTNlODQ5ZjYzYjE0YjJkYzRkNWE5NTQ5NDcxMWYxMDM1MTVlZGY2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTY1LDE2ICs2NSwyMCBAQCAtICh2
b2lkKWRlYWxsb2MKIAogLSAodm9pZClzZXRTdGFydDooV0tET01Ob2RlICopbm9kZSBvZmZzZXQ6
KGludClvZmZzZXQKIHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBG
SVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNldFN0YXJ0KFdlYktpdDo6dG9XZWJDb3Jl
Tm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7CisgICAgX2ltcGwtPnNldFN0YXJ0KCpXZWJLaXQ6OnRv
V2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOwogfQogCiAtICh2b2lkKXNldEVuZDooV0tE
T01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQKIHsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRp
b24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNldEVu
ZChXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOworICAgIF9pbXBsLT5z
ZXRFbmQoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7CiB9CiAKIC0g
KHZvaWQpY29sbGFwc2U6KEJPT0wpdG9TdGFydApAQCAtODQsMTYgKzg4LDIwIEBAIC0gKHZvaWQp
Y29sbGFwc2U6KEJPT0wpdG9TdGFydAogCiAtICh2b2lkKXNlbGVjdE5vZGU6KFdLRE9NTm9kZSAq
KW5vZGUKIHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTog
RG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNlbGVjdE5vZGUoV2ViS2l0Ojp0b1dlYkNvcmVOb2Rl
KG5vZGUpLCBlYyk7CisgICAgX2ltcGwtPnNlbGVjdE5vZGUoKldlYktpdDo6dG9XZWJDb3JlTm9k
ZShub2RlKSwgZWMpOwogfQogCiAtICh2b2lkKXNlbGVjdE5vZGVDb250ZW50czooV0tET01Ob2Rl
ICopbm9kZQogeworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1F
OiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKFdlYktpdDo6dG9X
ZWJDb3JlTm9kZShub2RlKSwgZWMpOworICAgIF9pbXBsLT5zZWxlY3ROb2RlQ29udGVudHMoKldl
YktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOwogfQogCiAtIChXS0RPTU5vZGUgKilzdGFy
dENvbnRhaW5lcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAKaW5kZXggYWEyNzRiYWExY2M4OTA5NzI1OGQxMWEyNzBkNGEwMzg3ZjliN2IyNy4uZGIy
MmYxZTVkYzFlMzVhYWI1MDc5MGMxMjk4YTFmMzRlMDM0Y2ZmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC0zMzAsNyArMzMwLDcgQEAg
U3RyaW5nIFdlYkZyYW1lOjpjb250ZW50c0FzU3RyaW5nKCkgY29uc3QKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCk7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudEVsZW1lbnQuZ2V0KCksIGVj
KTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnRFbGVtZW50LCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276889</attachid>
            <date>2016-04-20 19:47:59 -0700</date>
            <delta_ts>2016-04-20 19:53:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420194822.patch</filename>
            <type>text/plain</type>
            <size>97486</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVu
c2lvbnMubW0KaW5kZXggODZkNzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4u
ZWFkYWE2YTFkMDBmNTQ1NDNlZTc4MDAwMTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4
ICsxMTMsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJU
ZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwot
ICAgIHJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWlu
ZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYg
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5j
b250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
KyAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5k
LmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
IH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRB
ZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpAQCAtMTI5LDggKzEzMSwxMCBAQCAtICh2b2lk
KWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByYW5nZS0+c2V0U3Rh
cnQoc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
aWdub3JlZCk7Ci0gICAgcmFuZ2UtPnNldEVuZChlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOworICAgIGlmIChzdGFydC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKGVuZC5jb250
YWluZXJOb2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CiB9CiAKIC0gKERPTU5vZGUg
KilmaXJzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjli
ZTE1OWFmY2ZiMTIxOGFmLi44MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92
ZWRMYXN0UmVmKCkKIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0
aGlzKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhj
b25zdF9jYXN0PE5vZGUmPigqdGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3
NjFhYzRlMDNjZTMwOGM3ZDUzNmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3
ZWVmZDM4ODgyYjdkNTk4MzFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBA
QCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhN
RTogc3RhcnRDb250YWluZXIgYW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVm
PE5vZGU+JiYuCiBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3Vt
ZW50KG93bmVyRG9jdW1lbnQpCiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMs
OCArOTQsMTAgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwg
UGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0
aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkg
b2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3
ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQpOwotICAgIHNldEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYg
KHN0YXJ0Q29udGFpbmVyKQorICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0
T2Zmc2V0KTsKKyAgICBpZiAoZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRh
aW5lciwgZW5kT2Zmc2V0KTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50
JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3Rh
cnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpA
QCAtMTI5LDggKzEzMiw4IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAg
ICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1l
bnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsK
LSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0x
NTcsMTMgKzE2MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RD
b250YWluZXIoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0
Um9vdENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXJ0LCBlbmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZv
aWQgUmFuZ2U6OnNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUp
IHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1l
bnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUt
PmRvY3VtZW50KCkpOwpAQCAtMTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQo
UGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09m
ZnNldChyZWZOb2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBj
aGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUp
OworICAgIG1fc3RhcnQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsK
IAogICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFp
bmVyKG1fc3RhcnQsIG1fZW5kKSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wg
ZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1l
bnQoKSk7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0
cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAK
ICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZO
b2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVX
T2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9lbmQuc2V0KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2Vu
ZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRp
ZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwg
bV9lbmQpKQogICAgICAgICBjb2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2
b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQg
PSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRB
bmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsK
KyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0
U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0
IFBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVu
dEFuY2hvcmVkID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChw
YXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2Rl
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVk
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNl
KGJvb2wgdG9TdGFydCkKQEAgLTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2Uo
Ym9vbCB0b1N0YXJ0KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6
OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVj
ID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5v
ZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTI0MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJh
bmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlm
IChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKHJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAg
ICAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9v
bCByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRD
b250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYm
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwg
bV9lbmQub2Zmc2V0KCksIGVjKSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBh
cmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9z
dGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFy
eVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgp
LCBlYykgPD0gMCAmJiAhZWM7CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVO
VF9FUlIpOwogICAgIGVjID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5n
ZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRl
c2NyaWJlZCBieSB0aGUgCiAgICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGlu
IHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3Rp
dmVseS4KLQotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29t
cGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogICAgIGlmIChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8g
Y2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSBy
b290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0
byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9k
ZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgp
ICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkp
KQogICAgICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZv
cmUKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0
Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVC
b3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgZWMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29t
ZXMgYWZ0ZXIKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwg
JmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYg
KGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCks
IG1fZW5kLm9mZnNldCgpLCBlYykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAg
ICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3Vu
ZGFyeSBwb2ludHMKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJh
bmdlOjpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K1JhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFm
dGVyLAogICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSBy
YW5nZSwgcmVzcGVjdGl2ZWx5CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhp
cyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9
CiAKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewor
ICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAg
ICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBp
dCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBD
b250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVu
c2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYg
KCFwYXJlbnROb2RlKSB7CiAgICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1l
bnQgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEw
LDIyIEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RTsKICAgICB9CiAKLSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwg
ZWMpIDwgMCkgeyAvLyBzdGFydHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UK
KyAgICAvLyBzdGFydHMgYmVmb3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4LCBlYykgPCAwKSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAg
ICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9E
RV9CRUZPUkU7IC8vIGVuZHMgYmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8v
IHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRo
ZSByYW5nZQotICAgICAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBO
T0RFX0lOU0lERTsgLy8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0
cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJl
bnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQor
ICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVu
ZHMgaW5zaWRlIHRoZSByYW5nZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJl
SG93IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VS
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9j
dW1lbnQoKSAhPSAmc291cmNlQ29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05H
X0RPQ1VNRU5UX0VSUjsKQEAgLTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwg
RXhjCiAKICAgICBzd2l0Y2ggKGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VS
YW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RB
UlRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2Vu
ZCwgc291cmNlUmFuZ2UtPm1fc3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
Qm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAg
Y2FzZSBFTkRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhtX2VuZCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAg
ICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQ
b2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1
cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7
CiAgICAgfQogCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9y
dCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQg
Y29tcGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3Nob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNp
Z25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2
b2lkIFJhbmdlOjpkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNz
Q29udGVudHMoRGVsZXRlLCBlYyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJz
ZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5E
b2N1bWVudCgpIHx8ICZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJl
Zk5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVm
Tm9kZS5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKTsKKyAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKIAogICAgIC8vIElmIChwYXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVu
dCwgb2Zmc2V0ICsgMSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVy
d2lzZSwgcmV0dXJuIGZhbHNlLgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2lu
dChwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0g
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBj
b21wYXJlRmlyc3QgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwor
ICAgIHNob3J0IGNvbXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJ
bmRleCArIDEsIGVjKTsKIAogICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0g
bV9lbmQgPyBjb21wYXJlRmlyc3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBp
c1NlY29uZEFmdGVyU3RhcnQgPSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAg
OiBjb21wYXJlU2Vjb25kID49IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUKICAgICBlYyA9IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlv
biA9PSBEZWxldGUpIHsKICAgICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5j
b250YWlucyhwYXJ0aWFsU3RhcnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlh
bFN0YXJ0LT5wYXJlbnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsg
MSwgZWMpOworICAgICAgICAgICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgp
LCBwYXJ0aWFsU3RhcnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxz
ZSBpZiAocGFydGlhbEVuZCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgp
KSkKLSAgICAgICAgICAgIHNldFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlh
bEVuZC0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFy
dGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVj
KTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKQEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBwcm9jZXNzQ29udGVudHMoQ2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omlu
c2VydE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgYm9vbCBzdGFydElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0
YXJ0Q29udGFpbmVyKCkpOwogICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRD
b250YWluZXIoKS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CkBAIC04NTksNyArODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8
Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMg
PSAwOwotICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwg
cmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNl
cnRpb25WYWxpZGl0eShub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2Rl
ID09IG5vZGUpCisgICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAg
cmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2Rl
LT5yZW1vdmUoZWMpOwpAQCAtODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5v
ZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAg
aWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRv
d25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBp
ZiAoaXM8RG9jdW1lbnRGcmFnbWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCAr
PSBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMo
KTsKICAgICBlbHNlCiAgICAgICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7Cisg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQo
KSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNl
ZCgpKQotICAgICAgICBzZXRFbmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAg
ICAgc2V0RW5kKFdURk1vdmUocGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBS
YW5nZTo6dG9TdHJpbmcoKSBjb25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRl
dGFjaCgpCiAgICAgLy8gVGhpcyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZp
Y2F0aW9uLgogfQogCi1Ob2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVX
T2Zmc2V0KE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTk2MCw3ICs5MzEsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
KiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBO
b2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+
KCpuKS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zm
c2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBO
b2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGlmICghb2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRv
Q2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAg
ICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGls
ZEJlZm9yZTsKQEAgLTk4NCwxMDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJh
bmdlKCkgY29uc3QKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZO
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6
c2V0RW5kQmVmb3JlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kQmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFy
ZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnRO
b2RlKCksIHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAK
LXZvaWQgUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsK
KyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5v
ZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwor
ICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpICsgMSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3Vt
ZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9k
ZS5kb2N1bWVudCgpKTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4
KCk7CiAgICAgZWMgPSAwOwotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5k
ZXgsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVu
dE5vZGUoKSwgaW5kZXggKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXggKyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhO
b2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVD
b250ZW50cyhOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJl
Zk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAocmVmTm9kZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVm
Tm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9U
WVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVu
dCgpICE9ICZyZWZOb2RlLT5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1
bWVudCgpKQorICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZO
b2RlKHJlZk5vZGUpOwogfQogCi12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpz
dXJyb3VuZENvbnRlbnRzKE5vZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYg
KCFuZXdQYXJlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUmVmPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAv
LyBJTlZBTElEX1NUQVRFX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0
cyBhIG5vbi1UZXh0IG5vZGUuCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNk
b20tcmFuZ2Utc3Vycm91bmRjb250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBA
IHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFy
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSog
biA9IG5ld1BhcmVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5l
ck5vZGU+KCpuZXdQYXJlbnQpLnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KG5ld1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAg
ICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEw
ODcsMTcgQEAgdm9pZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBh
c3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hp
bGQoZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
Ci0gICAgc2VsZWN0Tm9kZShuZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5l
d1BhcmVudCwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUm
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
cmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29t
cHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmly
c3ROb2RlKCkgY29uc3QKQEAgLTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFp
bnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRh
aW5lcigpLT5vd25lckRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
KS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBz
dGFydFRvU3RhcnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJU
LCAmb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hv
cnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90
aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0K
IApAQCAtMTU3NSwxOSArMTUxMSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LT5vd25lckRvY3VtZW50KCkgIT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRv
RW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vj
b25kIHJhbmdlLgogICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNp
ZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8
PSAwKQorICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCkKKyAgICBpZiAoc3RhcnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUz
Myw3IEBAIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVm
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQg
ZXhjZXB0aW9uID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNl
cHRpb24pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsK
ICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXIKIHsKICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRh
aW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9k
ZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGls
ZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0
VG9TdGFydE9mTm9kZSgmY29udGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3Rh
cnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAg
ICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSAr
MTY0Myw5IEBAIHZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5v
ZGVzTWVyZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkg
PT0gb2xkTm9kZS5ub2RlKCkpCi0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+
cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAg
ICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5k
YXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgp
ID09IG9sZE5vZGUuaW5kZXgoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgp
LT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpv
bGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQg
UmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCkBAIC0xNzMwLDcgKzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAo
Ym91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChv
bGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsK
KyAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRh
cnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3
IEBAIHZvaWQgUmFuZ2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICBlbmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybjsKLSAgICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5l
ck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKLSAgICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKworICAgIGlmICghc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c2V0U3RhcnQoKnN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IGlmICghZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0
PiBSYW5nZTo6Z2V0Q2xpZW50UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2
NzJlYjJjYmJhNWJmZjZhMzVkMGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVm
OGZlMjZmMjg3NGJmMzE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1
YmxpYzoKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWlu
ZXIoKSk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JD
b250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xs
YXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFu
Z2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0
IGNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50
KE5vZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBl
bnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JF
X0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9k
ZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3Vs
dHMgY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19F
TkQsIEVORF9UT19TVEFSVCB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91
bmRhcnlQb2ludHMoQ29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7CisgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhOb2RlKiBjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50
IG9mZnNldEIsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYm91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJz
ZWN0c05vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wg
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZvaWQgZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBleHRyYWN0Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGlu
c2VydE5vZGUoUmVmPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKIAogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhcnRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVu
ZEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVD
b250ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50
cyhQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFydEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2Rl
JiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c3Vycm91bmRDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNv
bnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9z
aXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdP
ZmZzZXQoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CiAKICAgICBlbnVtIEFjdGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2Jk
YWMxNGQ5YjIzMWNjMGQxZGI0MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFh
NDYyMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25z
dHJ1Y3RvciwKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50
ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9u
TGFja3NWVGFibGUsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFj
ZSBSYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhl
ODhjM2M2NmFkOTI5YWY1YjRhZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2
YjlhNWVhNGU0MWQzYzk0NDc3NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaApAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBO
b2RlKiBjaGlsZEJlZm9yZSk7CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBp
bnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9m
ZnNldCk7CiAKICAgICB2b2lkIHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0
VG9BZnRlckNoaWxkKE5vZGUmKTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0
cjxOb2RlPik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAg
ICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRP
Zk5vZGUoUmVmPE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQo
KTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDEx
IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNT
RVJUKGNvbnRhaW5lcik7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hp
bGRCZWZvcmUgPT0gKG9mZnNldCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0
IC0gMSkgOiAwKSk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29u
dGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVy
ID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpA
QCAtMTUxLDE4ICsxNTAsMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyQ2hpbGQoTm9kZSYgY2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250
YWluZXIpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUo
UmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1f
Y29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3Zl
KGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNv
bnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAg
aWYgKG1fY29udGFpbmVyTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9v
ZmZzZXRJbkNvbnRhaW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1
ZWRmMGI2YzJkM2U5ZTdlMjU5OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2
MjYyZDI2ZTRjMjljMmU5MjQ4MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShjb25zdCBSYW5nZSogcmFuZ2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFs
dGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZS
YW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdl
V2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0
ZmU4ZmJkOTQuLmFjNDY0ODg5ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyAr
NzIyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAg
IEVsZW1lbnQqIGVkaXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChl
ZGl0YWJsZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYm
IGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJh
bmdlLmdldCgpKSkKKyAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBh
cmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bigqc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgw
MDAuLmNhNDdiYTgwZDQ4MWQ3NzFmZTVmYTNhMjdjNTkzNGJlMzkyZDM5ZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE5NTAsMTQgKzE5NTAsMTYgQEAgdm9pZCBFZGl0b3I6OmFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRQ
b3NpdGlvbiA9IHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgICAgICBz
cGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmIChyYW5nZUNvbXBsaWFudFBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCkpCisgICAgICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5z
ZXRTdGFydCgqcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNv
bXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJ
T04pOwogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyAvLyB3b24ndCBuZWVk
IHRvIHdyYXAKICAgICB9CiAgICAgCiAgICAgLy8gdG9wTm9kZSBkZWZpbmVzIHRoZSB3aG9sZSBy
YW5nZSB3ZSB3YW50IHRvIG9wZXJhdGUgb24gCiAgICAgTm9kZSogdG9wTm9kZSA9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QocG9zaXRpb24pOwogICAgIC8vIEZJWE1FOiBsYXN0T2Zmc2V0Rm9yRWRpdGlu
ZygpIGlzIHdyb25nIGhlcmUgaWYgZWRpdGluZ0lnbm9yZXNDb250ZW50KGhpZ2hlc3RFZGl0YWJs
ZVJvb3QoKSkgcmV0dXJucyB0cnVlIChlLmcuIGEgPHRhYmxlPikKLSAgICBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5zZXRFbmQodG9wTm9kZSwgbGFzdE9mZnNldEZvckVkaXRpbmcodG9wTm9kZSksIElH
Tk9SRV9FWENFUFRJT04pOworICAgIGlmICh0b3BOb2RlKQorICAgICAgICBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5zZXRFbmQoKnRvcE5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKHRvcE5vZGUpLCBJ
R05PUkVfRVhDRVBUSU9OKTsKIAogICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ugc3RhcnRz
IGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQgc28gd2Ug
c3RhcnQgY2hlY2tpbmcKICAgICAvLyBhdCBhIHdvcmQgYm91bmRhcnkuIEdvaW5nIGJhY2sgYnkg
b25lIGNoYXIgYW5kIHRoZW4gZm9yd2FyZCBieSBhIHdvcmQgZG9lcyB0aGUgdHJpY2suCkBAIC0y
MDExLDcgKzIwMTMsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJv
b2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQg
c3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKICAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJh
dG9yIGNoYXJzKCpncmFtbWFyU2VhcmNoUmFuZ2UpOwogICAgICAgICAgICAgY2hhcnMuYWR2YW5j
ZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNl
dEVuZCgmY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3Rh
cnRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBncmFtbWFyU2VhcmNo
UmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBjaGFycy5yYW5n
ZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgIAog
ICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0yMDIyLDkgKzIwMjQs
MTAgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVm
b3JlU2VsZWN0aW9uKQogICAgIC8vIElmIHdlIGZvdW5kIG5laXRoZXIgYmFkIGdyYW1tYXIgbm9y
IGEgbWlzc3BlbGxlZCB3b3JkLCB3cmFwIGFuZCB0cnkgYWdhaW4gKGJ1dCBkb24ndCBib3RoZXIg
aWYgd2Ugc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgIC8vIGJsb2NrIHJhdGhl
ciB0aGFuIGF0IGEgc2VsZWN0aW9uKS4KICAgICBpZiAoc3RhcnRlZFdpdGhTZWxlY3Rpb24gJiYg
IW1pc3NwZWxsZWRXb3JkICYmICFiYWRHcmFtbWFyUGhyYXNlKSB7Ci0gICAgICAgIHNwZWxsaW5n
U2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJT04pOworICAg
ICAgICBpZiAodG9wTm9kZSkKKyAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0
YXJ0KCp0b3BOb2RlLCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgLy8gZ29pbmcgdW50
aWwgdGhlIGVuZCBvZiB0aGUgdmVyeSBmaXJzdCBjaHVuayB3ZSB0ZXN0ZWQgaXMgZmFyIGVub3Vn
aAotICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQoJnNlYXJjaEVuZE5vZGVBZnRl
cldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBz
ZWFyY2hFbmRPZmZzZXRBZnRlcldyYXAsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAKICAg
ICAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICAgICAgZ3Jh
bW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZSgpOwpAQCAt
MjA0NSw3ICsyMDQ4LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhi
b29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgICAgIC8vIFN0b3AgbG9va2lu
ZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAogICAgICAgICAgICAgICAgIENoYXJh
Y3Rlckl0ZXJhdG9yIGNoYXJzKCpncmFtbWFyU2VhcmNoUmFuZ2UpOwogICAgICAgICAgICAgICAg
IGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwotICAgICAgICAgICAgICAgIGdyYW1t
YXJTZWFyY2hSYW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBj
aGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
ICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENv
bnRhaW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9O
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpKQpAQCAtMzE2OCw5ICszMTcxLDkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpy
YW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmEKICAg
ICBSZWZQdHI8Tm9kZT4gc2hhZG93VHJlZVJvb3QgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVyZW5j
ZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkg
OiBudWxscHRyOwogICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBpZiAoZm9yd2Fy
ZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCks
IHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGRO
b2RlcygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0
KHNoYWRvd1RyZWVSb290LmdldCgpLCAwKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRT
dGFydCgqc2hhZG93VHJlZVJvb3QsIDApOwogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gcmVz
dWx0UmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucykpOwpA
QCAtMzE4Niw5ICszMTg5LDkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmEKIAogICAgICAgICBp
ZiAoc2hhZG93VHJlZVJvb3QpIHsKICAgICAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIHNoYWRvd1Ry
ZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldEVuZCgqc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMo
KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0
YXJ0KHNoYWRvd1RyZWVSb290LmdldCgpLCAwKTsKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKICAgICAgICAgfQogCiAgICAgICAgIHJl
c3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyk7
CkBAIC0zMTk3LDEwICszMjAwLDEyIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJhCiAgICAgLy8g
SWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRvdyB0cmVlLCBzZWFyY2ggaW4gbWFpbiBj
b250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUuCiAgICAgaWYgKHJlc3VsdFJhbmdlLT5j
b2xsYXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJh
bmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcihzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9z
dCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9y
ZShzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgaWYgKHNoYWRvd1RyZWVS
b290LT5zaGFkb3dIb3N0KCkpIHsKKyAgICAgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAg
ICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93
SG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0RW5kQmVmb3JlKCpzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKTsKKyAgICAgICAgfQog
CiAgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdl
dCwgb3B0aW9ucyk7CiAgICAgfQpAQCAtMzIyMyw3ICszMjI4LDcgQEAgc3RhdGljIGJvb2wgaXNG
cmFtZUluUmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSogcmFuZ2UpCiAgICAgYm9vbCBpblJhbmdl
ID0gZmFsc2U7CiAgICAgZm9yIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9
IGZyYW1lLT5vd25lckVsZW1lbnQoKTsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25l
ckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKCZvd25l
ckVsZW1lbnQtPmRvY3VtZW50KCkgPT0gJnJhbmdlLT5vd25lckRvY3VtZW50KCkpIHsKLSAgICAg
ICAgICAgIGluUmFuZ2UgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUob3duZXJFbGVtZW50LCBJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGluUmFuZ2UgPSByYW5nZS0+aW50ZXJzZWN0c05v
ZGUoKm93bmVyRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTMyNTUsOCArMzI2MCw4IEBAIHVuc2lnbmVkIEVkaXRvcjo6
Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBG
aW5kT3B0CiAgICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlz
SW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNo
YWRvd0hvc3QoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0RW5kKCZvcmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQsIElHTk9SRV9F
WENFUFRJT04pOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnJlc3Vs
dFJhbmdlLT5zdGFydENvbnRhaW5lcigpLnNoYWRvd0hvc3QoKSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKG9yaWdpbmFsRW5kQ29udGFpbmVyLCBv
cmlnaW5hbEVuZE9mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCkBAIC0zMjc1LDExICszMjgwLDExIEBAIHVuc2lnbmVkIEVkaXRvcjo6
Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBG
aW5kT3B0CiAgICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2Ug
YSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKICAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4dCB3
aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCiAgICAgICAgIC8v
IHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoJnJlc3VsdFJhbmdl
LT5lbmRDb250YWluZXIoKSwgcmVzdWx0UmFuZ2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlc3VsdFJhbmdlLT5lbmRDb250
YWluZXIoKSwgcmVzdWx0UmFuZ2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAog
ICAgICAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlYXJjaFJhbmdlLT5zaGFkb3dSb290KCk7
CiAgICAgICAgIGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3Qp
Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dU
cmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5j
b3VudENoaWxkTm9kZXMoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfSB3aGlsZSAodHJ1ZSk7
CiAKICAgICByZXR1cm4gbWF0Y2hDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IDkxYWQxNzY4NjZmNGYxM2MwNzRkN2QzMTQ4NDViZjM1YmFiN2QzMzku
LjgxYWEwMDA4MWM3NmRmYTUzMzNiYWQ0NmQ5MDQ0YjVhOGIzZGU4OWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMjI4LDEyICsyMjgsMTEgQEAgc3RhdGlj
IHVuc2lnbmVkIHZlcnRpY2FsU2Nyb2xsRGlzdGFuY2UoRnJhbWUmIGZyYW1lKQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oU2Nyb2xsYmFyOjpwYWdlU3RlcChoZWlnaHQpKTsKIH0K
IAotc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UqIGEsIFJhbmdlKiBi
KQorc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UmIGEsIFJhbmdlJiBi
KQogewotICAgIFJhbmdlKiBzdGFydCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fU1RBUlQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBhIDogYjsKLSAg
ICBSYW5nZSogZW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5E
LCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwID8gYiA6IGE7Ci0KLSAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZShhLT5vd25lckRvY3VtZW50KCksICZzdGFydC0+c3RhcnRDb250YWluZXIoKSwg
c3RhcnQtPnN0YXJ0T2Zmc2V0KCksICZlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVuZE9mZnNl
dCgpKTsKKyAgICBSYW5nZSYgc3RhcnQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fU1RBUlQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBhIDogYjsKKyAg
ICBSYW5nZSYgZW5kID0gYS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
IGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBiIDogYTsKKyAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShhLm93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0LnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0
LnN0YXJ0T2Zmc2V0KCksICZlbmQuZW5kQ29udGFpbmVyKCksIGVuZC5lbmRPZmZzZXQoKSk7CiB9
CiAKIC8vIEV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbnMKQEAgLTM1Niw4ICszNTUsOCBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JD
b21tYW5kU291cmNlLCBjb25zdAogewogICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLmVk
aXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKLSAgICBpZiAobWFyaykgewotICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
bWFyay5nZXQoKSwgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwg
RE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0
ZWRSYW5nZSgpKSB7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0
ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFu
Z2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQp
OwogICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTAxMCw3ICsxMDA5LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKICAgICAgICAgc3lzdGVt
QmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2VsZWN0aW9u
LmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCks
IERPV05TVFJFQU0sIHRydWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKaW5kZXggYTAyNTZhNDAwYTkzZTRm
NzZlODk4MTk1ZDc4YjY4ZjUxNjk4MTM2My4uYWFhOTlhOGU4ZWQxNjFkMTEzMjA4NGJiNDI2Y2Rh
OTYyODIxYjNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9j
a0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0
UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLAogICAgIGlm
ICghcm9vdCB8fCAhcmVmTm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayhyZWZOb2RlLT50YWdRTmFtZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxv
Y2soc3RhcnQpCi0gICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZp
c2libHlDb250YWluZWRXaXRoaW4ocmVmTm9kZSwgcmFuZ2UuZ2V0KCkpKQorICAgICAgICAmJiAo
ZW5kID09IGVuZE9mQmxvY2soZW5kKSB8fCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpy
ZWZOb2RlLCByYW5nZS5nZXQoKSkpCiAgICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9v
dC0+aXNEZXNjZW5kYW50T2YocmVmTm9kZSkpIHsKICAgICAgICAgLy8gQWxyZWFkeSBpbiBhIGJs
b2NrIGVsZW1lbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBjdXJyZW50IHBhcmFncmFwaAogICAg
ICAgICBpZiAocmVmTm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1lKCkpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA1YWMzMDc3N2VkZjhlNmE4NDUzYWQxNzQ3
MzQzYjkzYjYwYjQzNTdkLi4wMzllMzlmZGJjZTUyMmY5ZjU4NzU2ZTE0ZmVjMjA4ZWU5MzdjODQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDc0LDcg
KzQ3NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24o
Tm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAgICAgICAgICAgICBtX3NlbGVjdGlv
bi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3Rh
cnQoKSk7CiAgICAgfSBlbHNlIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBS
YW5nZTo6Q29tcGFyZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZSgm
bm9kZSwgZWMpOworICAgICAgICBSYW5nZTo6Q29tcGFyZVJlc3VsdHMgY29tcGFyZVJlc3VsdCA9
IHJhbmdlLT5jb21wYXJlTm9kZShub2RlLCBlYyk7CiAgICAgICAgIGlmICghZWMgJiYgKGNvbXBh
cmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0
ID09IFJhbmdlOjpOT0RFX0lOU0lERSkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3Ro
aW5nIGhlcmUsIHdoZW4gdGhpcyBub2RlJ3MgcmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgdGhlIHJl
Y3QgdGhhdCBpdCAKICAgICAgICAgICAgIC8vIG9jY3VwaWVkIHdvdWxkIGJlIGludmFsaWRhdGVk
LCBidXQsIHNlbGVjdGlvbiBnYXBzIHRoYXQgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCBlZjRmNjIxOTMz
OWU1YTZhZWM5OTAyOTc3OGI2ODllMTRlOGM2YWZlLi42ZmY3YzFhZTkwOTM3YzNiNGEzNjU5NDE5
ZjRmMTM5YmYyYWI2MGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RD
b21tYW5kLmNwcApAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRv
QXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlIGVudGlyZSBsaXN0IGlzIHNl
bGVjdGVkLCB0aGVuIGNvbnZlcnQgdGhlIHdob2xlIGxpc3QuCi0gICAgICAgIGlmIChzd2l0Y2hM
aXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGxpc3ROb2RlLmdldCgpLCBj
dXJyZW50U2VsZWN0aW9uKSkgeworICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2Rl
VmlzaWJseUNvbnRhaW5lZFdpdGhpbigqbGlzdE5vZGUsIGN1cnJlbnRTZWxlY3Rpb24pKSB7CiAg
ICAgICAgICAgICBib29sIHJhbmdlU3RhcnRJc0luTGlzdCA9IHZpc2libGVQb3NpdGlvbkJlZm9y
ZU5vZGUobGlzdE5vZGUuZ2V0KCkpID09IGN1cnJlbnRTZWxlY3Rpb24tPnN0YXJ0UG9zaXRpb24o
KTsKICAgICAgICAgICAgIGJvb2wgcmFuZ2VFbmRJc0luTGlzdCA9IHZpc2libGVQb3NpdGlvbkFm
dGVyTm9kZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+ZW5kUG9zaXRpb24o
KTsKIApAQCAtMjQzLDkgKzI0Myw5IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlG
b3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAg
ICAgICAvLyBSZXN0b3JlIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlv
biBpZiB0aGV5IHN0YXJ0ZWQgaW5zaWRlIGxpc3ROb2RlCiAgICAgICAgICAgICAvLyBiZWNhdXNl
IG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLgogICAgICAg
ICAgICAgaWYgKHJhbmdlU3RhcnRJc0luTGlzdCAmJiBuZXdMaXN0KQotICAgICAgICAgICAgICAg
IGN1cnJlbnRTZWxlY3Rpb24tPnNldFN0YXJ0KG5ld0xpc3QsIDAsIElHTk9SRV9FWENFUFRJT04p
OworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldFN0YXJ0KCpuZXdMaXN0LCAw
LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgICAgIGlmIChyYW5nZUVuZElzSW5MaXN0ICYm
IG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5kKG5ld0xp
c3QsIGxhc3RPZmZzZXRJbk5vZGUobmV3TGlzdC5nZXQoKSksIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgqbmV3TGlzdCwgbGFzdE9m
ZnNldEluTm9kZShuZXdMaXN0LmdldCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9k
ZShuZXdMaXN0LmdldCgpKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAKaW5kZXggNzUzNjkyMDBjMjk1NWIwNzVjODNiNTBjZDY1NzA3NzQ1Y2Zl
YzhmNy4uYjY5NTJlMmI4NmYxOWNlYzY2ZGNiYWZjZTk2NjIxYjZkNTExOTliOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTc0LDggKzE3
NCwxMyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdl
KGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYQogaW50IFRleHRDaGVja2luZ1BhcmFncmFw
aDo6b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKKyAgICBpZiAoIXBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCiAgICAgUmVmPFJhbmdlPiByYW5nZSA9IG9mZnNldEFzUmFuZ2UoKS0+
Y2xvbmVSYW5nZSgpOwotICAgIHJhbmdlLT5zZXRFbmQocG9zaXRpb24uY29udGFpbmVyTm9kZSgp
LCBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByYW5n
ZS0+c2V0RW5kKCpwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDQ4M2E0ZDQ0MDBhNDQ1ZjU5
YTJjYzgzNGZmODJkOTE3YTk1MmZkNDYuLmYyYjJmYjcwN2Y5YWI2NWYyZTNjY2Q0MmQ4ZDQwYjVi
YjFiYmEwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTE0
NzksOCArMTQ3OSw4IEBAIFJlZjxSYW5nZT4gQ2hhcmFjdGVySXRlcmF0b3I6OnJhbmdlKCkgY29u
c3QKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAg
ICAgICAgICAgIEFTU0VSVCgmbm9kZSA9PSAmcmFuZ2UtPmVuZENvbnRhaW5lcigpKTsKICAgICAg
ICAgICAgIGludCBvZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKSArIG1fcnVuT2Zmc2V0Owot
ICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCZub2RlLCBvZmZzZXQpOwotICAgICAgICAgICAg
cmFuZ2UtPnNldEVuZCgmbm9kZSwgb2Zmc2V0ICsgMSk7CisgICAgICAgICAgICByYW5nZS0+c2V0
U3RhcnQobm9kZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQobm9kZSwgb2Zm
c2V0ICsgMSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJhbmdlOwpAQCAtMTU2OSw4
ICsxNTY5LDggQEAgUmVmPFJhbmdlPiBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2Uo
KSBjb25zdAogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IHItPnN0YXJ0Q29udGFpbmVyKCk7CiAg
ICAgICAgICAgICBBU1NFUlQoJm5vZGUgPT0gJnItPmVuZENvbnRhaW5lcigpKTsKICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSByLT5lbmRPZmZzZXQoKSAtIG1fcnVuT2Zmc2V0OwotICAgICAgICAg
ICAgci0+c2V0U3RhcnQoJm5vZGUsIG9mZnNldCAtIDEpOwotICAgICAgICAgICAgci0+c2V0RW5k
KCZub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgci0+c2V0U3RhcnQobm9kZSwgb2Zmc2V0IC0g
MSk7CisgICAgICAgICAgICByLT5zZXRFbmQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gcjsKQEAgLTI0NzksOCArMjQ3OSw4IEBAIFJlZlB0cjxSYW5nZT4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29w
ZSwgaW50CiAgICAgCiAgICAgLy8gRklYTUU6IHRoZSBhdEVuZCgpIGNoZWNrIHNob3VsZG4ndCBi
ZSBuZWNlc3NhcnksIHdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02Mjg5Pi4KICAgICBpZiAoIXJhbmdlTG9jYXRpb24gJiYgIXJhbmdlTGVuZ3Ro
ICYmIGl0LmF0RW5kKCkpIHsKLSAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVu
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOwotICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5k
KCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1bHRSYW5n
ZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwKTsKKyAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOwog
ICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRSYW5nZSk7CiAgICAgfQogCkBAIC0yNDk4LDEy
ICsyNDk4LDEyIEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgICAgICAgICAgaXQu
YWR2YW5jZSgpOwogICAgICAgICAgICAgICAgIGlmICghaXQuYXRFbmQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBSZWY8UmFuZ2U+IHJhbmdlID0gaXQucmFuZ2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5n
ZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0
RW5kKHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcnVuU3Rh
cnQgPSB0ZXh0UnVuUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAg
UG9zaXRpb24gcnVuRW5kID0gVmlzaWJsZVBvc2l0aW9uKHJ1blN0YXJ0KS5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkVuZC5pc05vdE51bGwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKHJ1bkVuZC5jb250
YWluZXJOb2RlKCksIHJ1bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQoKnJ1bkVuZC5jb250YWlu
ZXJOb2RlKCksIHJ1bkVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjUxMiwyNCArMjUxMiwy
NCBAQCBSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5n
dGgoQ29udGFpbmVyTm9kZSogc2NvcGUsIGludAogICAgICAgICAgICAgc3RhcnRSYW5nZUZvdW5k
ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHJhbmdlTG9jYXRp
b24gLSBkb2NUZXh0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0
YXJ0KCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5n
ZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0
KHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5z
dGFydE9mZnNldCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYg
KHJhbmdlTG9jYXRpb24gPT0gZG9jVGV4dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4
dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFu
Z2UtPnNldFN0YXJ0KHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdl
LT5zdGFydE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwg
dGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJh
bmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2Ut
PmVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChm
b3VuZEVuZCkgewogICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIo
KS5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VFbmQg
LSBkb2NUZXh0UG9zaXRpb247Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgm
dGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1
blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zm
c2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2VF
bmQgPT0gZG9jVGV4dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+
c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+c3Rh
cnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4
dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkp
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2Ut
PnNldEVuZCgmdGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQodGV4dFJ1
blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBkb2NUZXh0UG9zaXRpb24gKz0gbGVuZ3RoOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yNTQyLDcgKzI1NDIsNyBAQCBSZWZQdHI8UmFuZ2U+IFRleHRJdGVy
YXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVyTm9kZSogc2NvcGUsIGlu
dAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAocmFuZ2VMZW5ndGggJiYg
cmFuZ2VFbmQgPiBkb2NUZXh0UG9zaXRpb24pIC8vIHJhbmdlRW5kIGlzIG91dCBvZiBib3VuZHMK
LSAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgmdGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIo
KSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRF
bmQodGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZzZXQo
KSk7CiAgICAgCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0UmFuZ2UpOwogfQpAQCAtMjU2Niw3
ICsyNTY2LDcgQEAgYm9vbCBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKE5vZGUqIHNjb3BlLCBjb25zdCBSYW5nZSogcmFuZ2UKICAgICBBU1NFUlQoJnRlc3RSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7CiAgICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7CiAKLSAgICB0ZXN0UmFuZ2UtPnNldEVu
ZCgmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENF
UFRJT04pOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFu
Z2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBBU1NFUlQoJnRlc3RSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7CiAgICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpIC0gbG9jYXRpb247CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yNjIzLDcgKzI2MjMsNyBAQCBzdGF0aWMgc2l6ZV90IGZpbmRQbGFpblRleHQoY29u
c3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbgogCiAgICAg
aWYgKGJ1ZmZlci5uZWVkc01vcmVDb250ZXh0KCkpIHsKICAgICAgICAgUmVmPFJhbmdlPiBiZWZv
cmVTdGFydFJhbmdlID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAg
ICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNldEVuZCgmcmFuZ2Uuc3RhcnRDb250YWluZXIoKSwgcmFu
Z2Uuc3RhcnRPZmZzZXQoKSk7CisgICAgICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNldEVuZChyYW5n
ZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKICAgICAgICAgZm9yIChT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJlZm9yZVN0
YXJ0UmFuZ2UuZ2V0KCkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRl
cmF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRleHQoYmFj
a3dhcmRzSXRlcmF0b3IudGV4dCgpKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyLm5lZWRzTW9y
ZUNvbnRleHQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApp
bmRleCAyZmUyNmQ3Y2YxNzBmOWZkOGVmN2ZlNWE5MmU1YjA4Nzk1Nzk2NjczLi40MjFlZTJiZTJl
MTdiZDhjOGNmNmI2MWU0YmEyYmY3ZjlhYTVhNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC03MzAsMjQgKzczMCwzMiBAQCBWaXNpYmxlUG9zaXRp
b24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkp
CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5lbmRQb3NpdGlvbigpLCBhZmZpbml0eSk7
CiB9CiAKLWJvb2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlz
aWJsZVBvc2l0aW9uKQorYm9vbCBzZXRTdGFydChSYW5nZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewotICAgIGlmICghcikKKyAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaW50
IGNvZGUgPSAwOwotICAgIHItPnNldFN0YXJ0KHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBjb2RlKTsKLSAgICByZXR1cm4gY29kZSA9PSAwOworICAgIGlmICgh
cC5jb250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBlYyA9
IDA7CisgICAgcmFuZ2UtPnNldFN0YXJ0KCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKLWJvb2wgc2V0RW5kKFJh
bmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKK2Jvb2wgc2V0
RW5kKFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CiB7Ci0gICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0RW5k
KHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKLSAg
ICByZXR1cm4gY29kZSA9PSAwOworICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGludCBlYyA9IDA7CisgICAgcmFuZ2UtPnNldEVuZCgqcC5j
b250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICByZXR1
cm4gIWVjOwogfQogCiAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgZGVwcmVjYXRlZCB0
b28sIGxpa2UgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24/CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCA3ZGE2NmExODg2YWVmOTE3MTY2YWM0MjhhZmJj
MDQ3ZDRjMWZiODVlLi5mOGQ5MDMzYTljNzFiOGQ0OGM1OTQ3NjhhZTVmZmM5MDM0YzZlZDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTIxMyw4
ICsyMTMsOCBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3QgUG9z
aXRpb24mIHBvcykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIAogICAgIFBvc2l0aW9uIHN0
YXJ0KHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNl
bGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBl
Yyk7CisgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnksIGVjKTsK
KyAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAgIGlm
IChlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCBkZWI0MGZk
MDFiOTA5ZjYwMWJlOWQ0ZjE4MDQ5MDlmMmZhMGM3NmZlLi42MjJmNDM2Y2U1ZTcwN2Q3M2ZjMzFk
YTE0YTYwYjc0NmM3YjQ4MTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCkBAIC01NjksNyArNTY5LDExIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgRG9j
dW1lbnQmIGJvdW5kYXJ5RG9jdW1lbnQgPSBib3VuZGFyeS0+ZG9jdW1lbnQoKTsKICAgICBQb3Np
dGlvbiBzdGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihib3VuZGFyeSwgMCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gcG9zLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGJvdW5kYXJ5RG9jdW1lbnQpOworCisgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8
IGVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAg
UmVmPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYm91bmRhcnlEb2N1bWVudCk7
CiAgICAgCiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgc3Vm
Zml4TGVuZ3RoID0gMDsKQEAgLTU3NywxOSArNTgxLDE5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2Vh
cmNoCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKHJlcXVpcmVzQ29udGV4dEZv
cldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckJlZm9yZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFu
Z2U+IGZvcndhcmRzU2NhblJhbmdlKGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7Ci0g
ICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOwotICAg
ICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVu
ZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgICAgIGZvcndhcmRzU2NhblJh
bmdlLT5zZXRFbmRBZnRlcigqYm91bmRhcnksIGVjKTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFu
Z2UtPnNldFN0YXJ0KCplbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCksIGVjKTsKICAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFu
Z2UoZm9yd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5kZXByZWNhdGVkTm9k
ZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdl
LT5zZXRTdGFydCgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKmVuZC5kZXByZWNhdGVk
Tm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogCiAgICAgQVNTRVJU
KCFlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAK
LSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KCpzZWFyY2hSYW5nZSk7Cisg
ICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CiAgICAg
dW5zaWduZWQgbmV4dCA9IGJhY2t3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9y
KGl0LCBzdHJpbmcsIHN1ZmZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogCiAgICAgaWYgKCFu
ZXh0KQpAQCAtNjAyLDcgKzYwNiw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgfQog
CiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0
IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KCpzZWFyY2hSYW5nZSk7CisgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3Ig
Y2hhckl0KHNlYXJjaFJhbmdlKTsKICAgICBjaGFySXQuYWR2YW5jZShzdHJpbmcuc2l6ZSgpIC0g
c3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgLy8gRklYTUU6IGNoYXJJdCBjYW4gZ2V0IG91dCBv
ZiBzaGFkb3cgaG9zdC4KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNoYXJJdC5yYW5nZSgp
LT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKQEAgLTYxNiw3ICs2MjAsNyBAQCBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJv
dW5kYXJ5U2VhcmNoRnVuYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAg
ICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAg
IFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgp
KTsKKyAgICBSZWY8UmFuZ2U+IHNlYXJjaFJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVS
YW5nZSgpOwogICAgIFBvc2l0aW9uIHN0YXJ0KHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSk7CiAKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKQEAgLTYyNCwyMCArNjI4LDIy
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9y
V29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdl
PiBiYWNrd2FyZHNTY2FuUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAg
ICAgICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRFbmQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICAgICAgYmFja3dhcmRzU2Nh
blJhbmdlLT5zZXRFbmQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICBwcmVmaXhMZW5ndGgg
PSBwcmVmaXhMZW5ndGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAg
fQogCi0gICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgSUdOT1JF
X0VYQ0VQVElPTik7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04p
OwotICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW1p
dHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgIHNlYXJjaFJhbmdl
LT5zZWxlY3ROb2RlQ29udGVudHMoKmJvdW5kYXJ5LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBp
ZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0
KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UucHRy
KCksIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25z
KTsKICAgICB1bnNpZ25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJ
dGVyYXRvcihpdCwgc3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKICAgICAK
ICAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCiAgICAgICAgIHBv
cyA9IHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpOwogICAgIGVsc2UgaWYgKG5leHQgPiBwcmVm
aXhMZW5ndGgpIHsKICAgICAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJh
bnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgICAgIENoYXJh
Y3Rlckl0ZXJhdG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAgICAgQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KHNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgICAgIGNoYXJJdC5hZHZhbmNlKG5leHQgLSBwcmVm
aXhMZW5ndGggLSAxKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZSA9IGNo
YXJJdC5yYW5nZSgpOwogICAgICAgICBwb3MgPSBjaGFyYWN0ZXJSYW5nZS0+ZW5kUG9zaXRpb24o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggMjljOWFmODVlMGI2
ZWUwYTMwNDM1YTk2ZWVjZDcyZjg1MjgwZWU3OC4uNTgwODcyMDVmMDlkY2I4Nzc0NGYyNWUzODk1
NmJiYTI0NjVkMDZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAg
LTExNzEsNyArMTE3MSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSogbm9kZSwgaW50IGluCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dO
U1RSRUFNKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUt
PmRvY3VtZW50KCkpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqbm9kZSwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQoKnJhbmdlKTsKICAgICBpdC5h
ZHZhbmNlKGluZGV4IC0gMSk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgp
ID8gcmFuZ2UtPmVuZFBvc2l0aW9uKCkgOiBpdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpLCBVUFNU
UkVBTSk7CkBAIC0xMTg2LDIwICsxMTg2LDE5IEBAIGJvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29u
c3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogCiAvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgYSBub2RlIGlzIGluc2lkZSBhIHJhbmdlIG9yIHZpc2libHkgc3RhcnRzIGFu
ZCBlbmRzIGF0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSByYW5nZS4KIC8vIENhbGwgdGhpcyBmdW5j
dGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJseSBmaXQgaW5zaWRlIHNl
bGVjdGVkUmFuZ2UKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5nZSkKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5l
ZFdpdGhpbihOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5nZSkKIHsKLSAgICBB
U1NFUlQobm9kZSk7CiAgICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwogICAgIC8vIElmIHRoZSBu
b2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRo
aW4KICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUobm9kZSwgSUdOT1JFX0VYQ0VQ
VElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGJvb2wgc3RhcnRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9k
ZSkgPT0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgIGlmIChzdGFydElzVmlz
dWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShu
b2RlKSwgc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkgPCAwKQorICAgIGJvb2wgc3RhcnRJ
c1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoJm5vZGUpID09IHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAm
JiBjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoJm5vZGUpLCBzZWxl
Y3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgYm9vbCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2Rl
KSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOwotICAgIGlmIChlbmRJc1Zpc3VhbGx5
U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSkpIDwgMCkKKyAgICBib29sIGVuZElzVmlz
dWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCZub2RlKSA9PSBzZWxlY3RlZFJh
bmdlLT5lbmRQb3NpdGlvbigpOworICAgIGlmIChlbmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJl
UG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb25JblBhcmVu
dEJlZm9yZU5vZGUoJm5vZGUpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0
dXJuIHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggYzE1NDc5Yzk2YTQwZTFlMjA5YmE5Mjc1MGVkYTI4
MjZlNmM1YjdlNy4uZjIxNTE2NDVkYzY3OGZiZGM0N2EwNjJjNDIxZjQyYjY2ZDEzOTIyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wg
aXNUYWJsZVN0cnVjdHVyZU5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBpc0xpc3RFbGVtZW50KE5v
ZGUqKTsKIGJvb2wgaXNMaXN0SXRlbShjb25zdCBOb2RlKik7CiBib29sIGlzTm9kZVJlbmRlcmVk
KGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlKiwg
Y29uc3QgUmFuZ2UqKTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlJiwg
Y29uc3QgUmFuZ2UqKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
Y29uc3QgTm9kZSopOwogYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlKiwgY29u
c3QgTm9kZSopOwogYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9k
ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDEyNWM1YTk4
MGMyODRhMzk0ZDAzNjQwNGFhODU1OTA3Y2ExNzU0ZjAuLjczYzVkYWNmNDUzNGM2ODY2ZDNkNDk5
OTk3ZWYwMzE4NGIwNmZjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KQEAgLTMxOCw3ICszMTgsNyBAQCBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpCiAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yKTsKICAgICBhdXRvKiBlbmNs
b3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2Rl
KGNvbW1vbkFuY2VzdG9yKSwgSFRNTE5hbWVzOjphVGFnKTsKICAgICBpZiAoZW5jbG9zaW5nQW5j
aG9yICYmIGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdl
LT5zdGFydFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSwgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkg
Pj0gMCkKLSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KGVuY2xvc2luZ0FuY2hvciwgMCwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5jaG9yLCAw
LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICByZXR1cm4gcmFuZ2U7CiB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggMTQ0MjI1MmJk
NTIxNWQ5MzU3N2U4Y2Y0N2JhOWU1MWQ2M2UyODQzNC4uZWYyMmU1MjZiYmJiYjRjNTQ4Yjk0YTAx
ZmUzODkzMzc3NjMzODRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcApAQCAtNDEzLDcgKzQxMyw4IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNv
CiAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQo
KSkgewogICAgICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RS
ZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIHNl
bGVjdGVkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSwgSUdOT1JFX0VY
Q0VQVElPTik7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCisg
ICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CiAgICAgICAgIG1fY2xp
ZW50LnNwZWFrKHBsYWluVGV4dChzZWxlY3RlZFJhbmdlLmdldCgpKSk7CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IGUxMTlmNjRkOGI2N2ZiZmYz
ZDE1MzA3ZGZlYTg5ODZmZjIxNjg5OGIuLmY2MDU2NjFiZDg1M2FhNzc5OGJhNGU3ZTU3NzUxZWQ3
NWY3YzJlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTM5MywxMCAr
MzkzLDEzIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICB9CiAK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RB
UlRfVE9fU1RBUlQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgeworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04p
ID09IC0xKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxl
Y3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2Vj
dC4KLSAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
RU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPiAtMSkgewotICAgICAgICAgICAg
aWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0
KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChyLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhDRVBUSU9O
KSA+IC0xKSB7CisgICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fRU5ELCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4KICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHItPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBv
c2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQwNyw4ICs0
MTAsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIHIpCiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4g
V2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0LgogICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgZWMpIDwgMSAmJiAhZWMp
IHsKLSAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgeworICAgICAgICBp
ZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpyYW5nZSwg
ZWMpIDwgMSAmJiAhZWMpIHsKKyAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMgci4KICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHJhbmdlLmdldCgpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDFjYzgzODRh
NDk2MWUzODhhM2YyMWIwY2MyNGUwMjAyM2U2NTRmMTcuLjBjOTBiNDE0YjVhMmUwNmYwYTk5MWQ1
MDdjZDU3ODY2NDIyNGVjNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CkBAIC03MTIsNyArNzEyLDcgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVt
ZW50KQogc3RhdGljIHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsK
LSAgICByYW5nZS0+c2VsZWN0Tm9kZSgmZWxlbWVudCk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGUo
ZWxlbWVudCk7CiAgICAgZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMThjNDc1ZjFlZTgxN2U0ZTVmMTcw
MmRiM2I0ZmEzOTkzZTAzNDRiZi4uMTc1MjIzNmM3YTY3OTkwYzNlMmRiN2NjYWYzYmU0NGU4NDM0
MmM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjUwNyw3ICsyNTA3
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2UKICAgICAgICAgICAgICAgICAvLyBmb2N1c2Vk
IGlmIHRoZSB1c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhl
IG1vdXNldXAKICAgICAgICAgICAgICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUg
aXQsIHdoaWNoIHdpbGwgY2FsbCBzZXRGb2N1c2VOb2RlSWZOZWVkZWQuCiAgICAgICAgICAgICAg
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpCi0gICAgICAgICAgICAgICAgICAg
ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS0+Y29tcGFyZU5vZGUo
ZWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFCisgICAgICAg
ICAgICAgICAgICAgICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS0+
Y29tcGFyZU5vZGUoKmVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pID09IFJhbmdlOjpOT0RFX0lO
U0lERQogICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2Zy
YW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5
MTUzZDA0NDJhNzA1N2Q0YTgwZDA1MDAzYTAwZmYxMTZjYmMxY2UwLi44ZGYxZDM2MWYzNmZkNDE2
NWViYTE5NjNjZGU2ZmZjODQ1NmYyZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTYzMiwxNCAr
NjMyLDE0IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgIFJlZlB0cjxSYW5nZT4g
c2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucyAmIEJhY2t3YXJkcykgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkg
ewotICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgbWF0Y2hSYW5nZXNbaSAtIDFdLmdldCgpLCBJR05PUkVf
RVhDRVBUSU9OKSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0g
MV0sIElHTk9SRV9FWENFUFRJT04pID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZv
clNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgbWF0Y2hSYW5nZXNbaV0uZ2V0KCksIElHTk9SRV9F
WENFUFRJT04pIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldLCBJ
R05PUkVfRVhDRVBUSU9OKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxl
Y3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAxNzY4NGM1NzQ4ODMyODk2
NzYwZjQ2ZWU5ZDFjZjFiODA4YzMwNjJhLi4yNmVmMzdjM2QyYmY0ZDAyNTFmMGRhNzUwYzYxMDBi
ZWQ3OWJkZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTEyNSw3
ICsxMjUsNyBAQCBzdGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMoY29u
c3QgUmFuZ2UmIHJhbmdlKQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBs
YWNlZCgpKSAmJiByYW5nZS5pbnRlcnNlY3RzTm9kZShub2RlLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KSkKKyAgICAgICAgaWYgKCghcmVuZGVyZXItPmlzSW5saW5lKCkgfHwgcmVuZGVyZXItPmlzUmVw
bGFjZWQoKSkgJiYgcmFuZ2UuaW50ZXJzZWN0c05vZGUoKm5vZGUsIEFTU0VSVF9OT19FWENFUFRJ
T04pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDMyOTIwMzE5
YmYxZDk2NzMxOGEzNGQ2NTJmNmMxZWM1YjRhZmQxMjUuLmIzNmVhNGU4OTZhNWYxN2I1YzNiMjcy
NDQ2YzBmNjUyZDhlNWM4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC02OTQsOCArNjk0LDggQEAgdm9pZCBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2Jq
ZWN0cywgY29uc3QKICAgICAgICAgICAgIGlmICghYm94SW50ZXJzZWN0c1JlZ2lvbihsb2dpY2Fs
VG9wRm9yUmVuZGVyZXIsIGxvZ2ljYWxCb3R0b21Gb3JSZW5kZXJlciwgbG9naWNhbFRvcEZvclJl
Z2lvbiwgbG9naWNhbEJvdHRvbUZvclJlZ2lvbikpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91
bmRTdGFydFBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnRzQWJvdmVS
ZWdpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS0+aW50ZXJzZWN0c05v
ZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UtPnNldEVuZEJlZm9yZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyYW5nZS0+aW50ZXJzZWN0c05vZGUoKm5vZGUsIElHTk9SRV9FWENF
UFRJT04pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmRCZWZvcmUo
Km5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VP
YmplY3RzLmFwcGVuZChyYW5nZS0+Y2xvbmVSYW5nZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShjb250ZW50RWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IHRydWU7CkBAIC03MDMs
NyArNzAzLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8
UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNraXBPdmVyT3V0c2lkZU5vZGVzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKHNraXBPdmVyT3V0c2lkZU5vZGVzKQotICAgICAgICAgICAgICAgICAg
ICByYW5nZS0+c2V0U3RhcnRBZnRlcihub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKm5vZGUsIElHTk9SRV9FWENFUFRJT04p
OwogICAgICAgICAgICAgICAgIGZvdW5kU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBy
YW5nZU9iamVjdHMsIGNvbnN0CiAgICAgICAgICAgICAgICAgLy8gdGhlIHJhbmdlIGlzIGNsb3Nl
ZC4KICAgICAgICAgICAgICAgICBpZiAoc3RhcnRzQWJvdmVSZWdpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRzQWJvdmVSZWdpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
cmFuZ2UtPnNldFN0YXJ0QmVmb3JlKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAg
ICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRCZWZvcmUoKm5vZGUsIElHTk9SRV9FWENFUFRJT04p
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNraXBPdmVy
T3V0c2lkZU5vZGVzICA9IGZhbHNlOwpAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVj
dHMsIGNvbnN0CiAgICAgICAgICAgICAgICAgLy8gZm9yIGVsZW1lbnRzIHRoYXQgZW5kcyBpbnNp
ZGUgdGhlIHJlZ2lvbiwgc2V0IHRoZSBlbmQgcG9zaXRpb24gdG8gYmUgYWZ0ZXIgdGhlbQogICAg
ICAgICAgICAgICAgIC8vIGFsbG93IHRoaXMgZW5kIHBvc2l0aW9uIHRvIGJlIGNoYW5nZWQgb25s
eSBieSBvdGhlciBlbGVtZW50cyB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgdGhlIGN1cnJl
bnQgZW5kIG5vZGUKICAgICAgICAgICAgICAgICBpZiAoZW5kc0JlbG93UmVnaW9uIHx8ICghZW5k
c0JlbG93UmVnaW9uICYmICFub2RlLT5pc0Rlc2NlbmRhbnRPZihsYXN0RW5kTm9kZSkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmRBZnRlcihub2RlLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFmdGVyKCpub2RlLCBJR05P
UkVfRVhDRVBUSU9OKTsKICAgICAgICAgICAgICAgICAgICAgZW5kc0JlbG93UmVnaW9uID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIGxhc3RFbmROb2RlID0gbm9kZTsKICAgICAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAwNjMzMDdjOTk5
MzU2NDU0NjdmOWEzNDkyYzA5NmMzYzQyMjVjMzliLi4xZjlmM2RkMWY0ODE5MzVhNGVhOWUzMzFl
NTZjYzdiYWYyMDEwOGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAg
LTg3MywxMSArODczLDEzIEBAIC0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9w
b3NlZFJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UKICAgICBuZXdTdGFydCA9IG5ld1N0
YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIG5ld0VuZCA9IG5ld0VuZC5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwotICAgIGludCBleGNl
cHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydC5jb250YWluZXJOb2RlKCks
IG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJhbmdl
LT5zZXRFbmQobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAg
ICBSZWY8UmFuZ2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y3Jl
YXRlUmFuZ2UoKTsKKyAgICBpZiAobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAg
IGludCBleGNlcHRpb24gPSAwOworICAgICAgICByYW5nZS0+c2V0U3RhcnQoKm5ld1N0YXJ0LmNv
bnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlv
bik7CisgICAgICAgIHJhbmdlLT5zZXRFbmQoKm5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3
U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJl
dHVybiBraXQocmFuZ2UucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBi
YXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVJhbmdlLm1tCmluZGV4IGUwODA2YmNiNmE3NzM0ZTJkMzQ0MTQ5NWIxNGVkNmZiMjdkMjI0OTku
LjkzZTg0OWY2M2IxNGIyZGM0ZDVhOTU0OTQ3MTFmMTAzNTE1ZWRmNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTVJhbmdlLm1tCkBAIC02NSwxNiArNjUsMjAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0g
KHZvaWQpc2V0U3RhcnQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CiB7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGlu
ZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIF9pbXBsLT5zZXRTdGFydChXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNl
dCwgZWMpOworICAgIF9pbXBsLT5zZXRTdGFydCgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUp
LCBvZmZzZXQsIGVjKTsKIH0KIAogLSAodm9pZClzZXRFbmQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zm
c2V0OihpbnQpb2Zmc2V0CiB7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAg
Ly8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBsLT5zZXRFbmQoV2ViS2l0Ojp0b1dlYkNv
cmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVjKTsKKyAgICBfaW1wbC0+c2V0RW5kKCpXZWJLaXQ6OnRv
V2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOwogfQogCiAtICh2b2lkKWNvbGxhcHNlOihC
T09MKXRvU3RhcnQKQEAgLTg0LDE2ICs4OCwyMCBAQCAtICh2b2lkKWNvbGxhcHNlOihCT09MKXRv
U3RhcnQKIAogLSAodm9pZClzZWxlY3ROb2RlOihXS0RPTU5vZGUgKilub2RlCiB7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91
dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IF9pbXBsLT5zZWxlY3ROb2RlKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOworICAg
IF9pbXBsLT5zZWxlY3ROb2RlKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKIH0K
IAogLSAodm9pZClzZWxlY3ROb2RlQ29udGVudHM6KFdLRE9NTm9kZSAqKW5vZGUKIHsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFi
b3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgX2ltcGwtPnNlbGVjdE5vZGVDb250ZW50cyhXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSks
IGVjKTsKKyAgICBfaW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpXZWJLaXQ6OnRvV2ViQ29yZU5v
ZGUobm9kZSksIGVjKTsKIH0KIAogLSAoV0tET01Ob2RlICopc3RhcnRDb250YWluZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGFhMjc0
YmFhMWNjODkwOTcyNThkMTFhMjcwZDRhMDM4N2Y5YjdiMjcuLmRiMjJmMWU1ZGMxZTM1YWFiNTA3
OTBjMTI5OGExZjM0ZTAzNGNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIFN0cmluZyBXZWJGcmFtZTo6
Y29udGVudHNBc1N0cmluZygpIGNvbnN0CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRvY3Vt
ZW50LT5jcmVhdGVSYW5nZSgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmFu
Z2UtPnNlbGVjdE5vZGUoZG9jdW1lbnRFbGVtZW50LmdldCgpLCBlYyk7CisgICAgcmFuZ2UtPnNl
bGVjdE5vZGUoKmRvY3VtZW50RWxlbWVudCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276890</attachid>
            <date>2016-04-20 19:53:24 -0700</date>
            <delta_ts>2016-04-20 19:57:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420195347.patch</filename>
            <type>text/plain</type>
            <size>98310</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVu
c2lvbnMubW0KaW5kZXggODZkNzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4u
ZWFkYWE2YTFkMDBmNTQ1NDNlZTc4MDAwMTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4
ICsxMTMsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJU
ZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwot
ICAgIHJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWlu
ZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYg
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5j
b250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
KyAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5k
LmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
IH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRB
ZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpAQCAtMTI5LDggKzEzMSwxMCBAQCAtICh2b2lk
KWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByYW5nZS0+c2V0U3Rh
cnQoc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
aWdub3JlZCk7Ci0gICAgcmFuZ2UtPnNldEVuZChlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOworICAgIGlmIChzdGFydC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKGVuZC5jb250
YWluZXJOb2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CiB9CiAKIC0gKERPTU5vZGUg
KilmaXJzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjli
ZTE1OWFmY2ZiMTIxOGFmLi44MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92
ZWRMYXN0UmVmKCkKIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0
aGlzKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhj
b25zdF9jYXN0PE5vZGUmPigqdGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3
NjFhYzRlMDNjZTMwOGM3ZDUzNmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3
ZWVmZDM4ODgyYjdkNTk4MzFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBA
QCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhN
RTogc3RhcnRDb250YWluZXIgYW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVm
PE5vZGU+JiYuCiBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3Vt
ZW50KG93bmVyRG9jdW1lbnQpCiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMs
OCArOTQsMTAgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwg
UGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0
aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkg
b2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3
ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQpOwotICAgIHNldEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYg
KHN0YXJ0Q29udGFpbmVyKQorICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0
T2Zmc2V0KTsKKyAgICBpZiAoZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRh
aW5lciwgZW5kT2Zmc2V0KTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50
JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3Rh
cnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpA
QCAtMTI5LDggKzEzMiw4IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAg
ICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1l
bnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsK
LSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0x
NTcsMTMgKzE2MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RD
b250YWluZXIoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0
Um9vdENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXJ0LCBlbmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZv
aWQgUmFuZ2U6OnNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUp
IHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1l
bnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUt
PmRvY3VtZW50KCkpOwpAQCAtMTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQo
UGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09m
ZnNldChyZWZOb2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBj
aGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUp
OworICAgIG1fc3RhcnQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsK
IAogICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFp
bmVyKG1fc3RhcnQsIG1fZW5kKSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wg
ZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1l
bnQoKSk7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0
cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAK
ICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZO
b2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVX
T2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9lbmQuc2V0KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2Vu
ZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRp
ZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwg
bV9lbmQpKQogICAgICAgICBjb2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2
b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQg
PSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRB
bmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsK
KyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0
U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0
IFBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVu
dEFuY2hvcmVkID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChw
YXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2Rl
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVk
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNl
KGJvb2wgdG9TdGFydCkKQEAgLTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2Uo
Ym9vbCB0b1N0YXJ0KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6
OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVj
ID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5v
ZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTI0MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJh
bmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlm
IChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKHJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAg
ICAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9v
bCByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRD
b250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYm
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwg
bV9lbmQub2Zmc2V0KCksIGVjKSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBh
cmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9z
dGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFy
eVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgp
LCBlYykgPD0gMCAmJiAhZWM7CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVO
VF9FUlIpOwogICAgIGVjID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5n
ZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRl
c2NyaWJlZCBieSB0aGUgCiAgICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGlu
IHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3Rp
dmVseS4KLQotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29t
cGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogICAgIGlmIChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8g
Y2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSBy
b290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0
byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9k
ZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgp
ICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkp
KQogICAgICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZv
cmUKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0
Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVC
b3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgZWMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29t
ZXMgYWZ0ZXIKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwg
JmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYg
KGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCks
IG1fZW5kLm9mZnNldCgpLCBlYykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAg
ICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3Vu
ZGFyeSBwb2ludHMKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJh
bmdlOjpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K1JhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFm
dGVyLAogICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSBy
YW5nZSwgcmVzcGVjdGl2ZWx5CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhp
cyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9
CiAKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewor
ICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAg
ICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBp
dCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBD
b250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVu
c2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYg
KCFwYXJlbnROb2RlKSB7CiAgICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1l
bnQgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEw
LDIyIEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RTsKICAgICB9CiAKLSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwg
ZWMpIDwgMCkgeyAvLyBzdGFydHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UK
KyAgICAvLyBzdGFydHMgYmVmb3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4LCBlYykgPCAwKSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAg
ICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9E
RV9CRUZPUkU7IC8vIGVuZHMgYmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8v
IHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRo
ZSByYW5nZQotICAgICAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBO
T0RFX0lOU0lERTsgLy8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0
cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJl
bnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQor
ICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVu
ZHMgaW5zaWRlIHRoZSByYW5nZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJl
SG93IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VS
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9j
dW1lbnQoKSAhPSAmc291cmNlQ29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05H
X0RPQ1VNRU5UX0VSUjsKQEAgLTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwg
RXhjCiAKICAgICBzd2l0Y2ggKGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VS
YW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RB
UlRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2Vu
ZCwgc291cmNlUmFuZ2UtPm1fc3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
Qm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAg
Y2FzZSBFTkRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhtX2VuZCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAg
ICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQ
b2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1
cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7
CiAgICAgfQogCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9y
dCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQg
Y29tcGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3Nob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNp
Z25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2
b2lkIFJhbmdlOjpkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNz
Q29udGVudHMoRGVsZXRlLCBlYyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJz
ZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5E
b2N1bWVudCgpIHx8ICZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJl
Zk5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVm
Tm9kZS5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKTsKKyAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKIAogICAgIC8vIElmIChwYXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVu
dCwgb2Zmc2V0ICsgMSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVy
d2lzZSwgcmV0dXJuIGZhbHNlLgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2lu
dChwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0g
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBj
b21wYXJlRmlyc3QgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwor
ICAgIHNob3J0IGNvbXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJ
bmRleCArIDEsIGVjKTsKIAogICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0g
bV9lbmQgPyBjb21wYXJlRmlyc3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBp
c1NlY29uZEFmdGVyU3RhcnQgPSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAg
OiBjb21wYXJlU2Vjb25kID49IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUKICAgICBlYyA9IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlv
biA9PSBEZWxldGUpIHsKICAgICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5j
b250YWlucyhwYXJ0aWFsU3RhcnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlh
bFN0YXJ0LT5wYXJlbnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsg
MSwgZWMpOworICAgICAgICAgICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgp
LCBwYXJ0aWFsU3RhcnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxz
ZSBpZiAocGFydGlhbEVuZCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgp
KSkKLSAgICAgICAgICAgIHNldFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlh
bEVuZC0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFy
dGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVj
KTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKQEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBwcm9jZXNzQ29udGVudHMoQ2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omlu
c2VydE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgYm9vbCBzdGFydElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0
YXJ0Q29udGFpbmVyKCkpOwogICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRD
b250YWluZXIoKS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CkBAIC04NTksNyArODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8
Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMg
PSAwOwotICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwg
cmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNl
cnRpb25WYWxpZGl0eShub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2Rl
ID09IG5vZGUpCisgICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAg
cmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2Rl
LT5yZW1vdmUoZWMpOwpAQCAtODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5v
ZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAg
aWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRv
d25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBp
ZiAoaXM8RG9jdW1lbnRGcmFnbWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCAr
PSBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMo
KTsKICAgICBlbHNlCiAgICAgICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7Cisg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQo
KSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNl
ZCgpKQotICAgICAgICBzZXRFbmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAg
ICAgc2V0RW5kKFdURk1vdmUocGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBS
YW5nZTo6dG9TdHJpbmcoKSBjb25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRl
dGFjaCgpCiAgICAgLy8gVGhpcyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZp
Y2F0aW9uLgogfQogCi1Ob2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVX
T2Zmc2V0KE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTk2MCw3ICs5MzEsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
KiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBO
b2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+
KCpuKS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zm
c2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBO
b2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGlmICghb2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRv
Q2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAg
ICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGls
ZEJlZm9yZTsKQEAgLTk4NCwxMDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJh
bmdlKCkgY29uc3QKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZO
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6
c2V0RW5kQmVmb3JlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kQmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFy
ZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnRO
b2RlKCksIHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAK
LXZvaWQgUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsK
KyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5v
ZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwor
ICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpICsgMSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3Vt
ZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9k
ZS5kb2N1bWVudCgpKTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4
KCk7CiAgICAgZWMgPSAwOwotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5k
ZXgsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVu
dE5vZGUoKSwgaW5kZXggKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXggKyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhO
b2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVD
b250ZW50cyhOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJl
Zk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAocmVmTm9kZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVm
Tm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9U
WVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVu
dCgpICE9ICZyZWZOb2RlLT5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1
bWVudCgpKQorICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZO
b2RlKHJlZk5vZGUpOwogfQogCi12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpz
dXJyb3VuZENvbnRlbnRzKE5vZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYg
KCFuZXdQYXJlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUmVmPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAv
LyBJTlZBTElEX1NUQVRFX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0
cyBhIG5vbi1UZXh0IG5vZGUuCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNk
b20tcmFuZ2Utc3Vycm91bmRjb250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBA
IHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFy
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSog
biA9IG5ld1BhcmVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5l
ck5vZGU+KCpuZXdQYXJlbnQpLnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KG5ld1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAg
ICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEw
ODcsMTcgQEAgdm9pZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBh
c3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hp
bGQoZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
Ci0gICAgc2VsZWN0Tm9kZShuZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5l
d1BhcmVudCwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUm
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
cmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29t
cHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmly
c3ROb2RlKCkgY29uc3QKQEAgLTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFp
bnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRh
aW5lcigpLT5vd25lckRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
KS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBz
dGFydFRvU3RhcnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJU
LCAmb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hv
cnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90
aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0K
IApAQCAtMTU3NSwxOSArMTUxMSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LT5vd25lckRvY3VtZW50KCkgIT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRv
RW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vj
b25kIHJhbmdlLgogICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNp
ZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8
PSAwKQorICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCkKKyAgICBpZiAoc3RhcnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUz
Myw3IEBAIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVm
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQg
ZXhjZXB0aW9uID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNl
cHRpb24pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsK
ICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXIKIHsKICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRh
aW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9k
ZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGls
ZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0
VG9TdGFydE9mTm9kZSgmY29udGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3Rh
cnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAg
ICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSAr
MTY0Myw5IEBAIHZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5v
ZGVzTWVyZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkg
PT0gb2xkTm9kZS5ub2RlKCkpCi0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+
cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAg
ICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5k
YXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgp
ID09IG9sZE5vZGUuaW5kZXgoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgp
LT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpv
bGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQg
UmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCkBAIC0xNzMwLDcgKzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAo
Ym91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChv
bGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsK
KyAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRh
cnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3
IEBAIHZvaWQgUmFuZ2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICBlbmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybjsKLSAgICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5l
ck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKLSAgICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKworICAgIGlmICghc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c2V0U3RhcnQoKnN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IGlmICghZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0
PiBSYW5nZTo6Z2V0Q2xpZW50UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2
NzJlYjJjYmJhNWJmZjZhMzVkMGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVm
OGZlMjZmMjg3NGJmMzE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1
YmxpYzoKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWlu
ZXIoKSk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JD
b250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xs
YXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFu
Z2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0
IGNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50
KE5vZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBl
bnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JF
X0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9k
ZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3Vs
dHMgY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19F
TkQsIEVORF9UT19TVEFSVCB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91
bmRhcnlQb2ludHMoQ29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7CisgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhOb2RlKiBjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50
IG9mZnNldEIsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYm91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJz
ZWN0c05vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wg
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZvaWQgZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBleHRyYWN0Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGlu
c2VydE5vZGUoUmVmPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKIAogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhcnRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVu
ZEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVD
b250ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50
cyhQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFydEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2Rl
JiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c3Vycm91bmRDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNv
bnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9z
aXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdP
ZmZzZXQoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CiAKICAgICBlbnVtIEFjdGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2Jk
YWMxNGQ5YjIzMWNjMGQxZGI0MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFh
NDYyMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25z
dHJ1Y3RvciwKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50
ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9u
TGFja3NWVGFibGUsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFj
ZSBSYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhl
ODhjM2M2NmFkOTI5YWY1YjRhZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2
YjlhNWVhNGU0MWQzYzk0NDc3NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaApAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBO
b2RlKiBjaGlsZEJlZm9yZSk7CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBp
bnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9m
ZnNldCk7CiAKICAgICB2b2lkIHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0
VG9BZnRlckNoaWxkKE5vZGUmKTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0
cjxOb2RlPik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAg
ICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRP
Zk5vZGUoUmVmPE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQo
KTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDEx
IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNT
RVJUKGNvbnRhaW5lcik7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hp
bGRCZWZvcmUgPT0gKG9mZnNldCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0
IC0gMSkgOiAwKSk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29u
dGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVy
ID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpA
QCAtMTUxLDE4ICsxNTAsMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyQ2hpbGQoTm9kZSYgY2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250
YWluZXIpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUo
UmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1f
Y29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3Zl
KGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNv
bnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAg
aWYgKG1fY29udGFpbmVyTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9v
ZmZzZXRJbkNvbnRhaW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1
ZWRmMGI2YzJkM2U5ZTdlMjU5OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2
MjYyZDI2ZTRjMjljMmU5MjQ4MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShjb25zdCBSYW5nZSogcmFuZ2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFs
dGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZS
YW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdl
V2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0
ZmU4ZmJkOTQuLmFjNDY0ODg5ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyAr
NzIyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAg
IEVsZW1lbnQqIGVkaXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChl
ZGl0YWJsZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYm
IGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJh
bmdlLmdldCgpKSkKKyAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBh
cmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bigqc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgw
MDAuLjYyZDA2ZjllNmI2M2NmOTk2NjMzNGJjMTFhZDVkYTZiY2FhOTQ3OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGlj
dGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgZAogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7ICAgIAogICAgIFJlZlB0cjxSYW5nZT4g
Y29udGV4dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICBjb250ZXh0LT5zZWxlY3RO
b2RlQ29udGVudHMoJmVsZW1lbnQsIGVjKTsKKyAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVu
dHMoZWxlbWVudCwgZWMpOwogCiAgICAgU3RyaW5nQnVpbGRlciBkaWN0YXRpb25QaHJhc2VzQnVp
bGRlcjsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBocmFzZXMp
CkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCogZWxlbSkKICAgICAgICAgICAgIGVsZW0tPnJl
bW92ZShlYyk7ICAgIAogICAgICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29udGV4
dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKGVsZW0sIGVjKTsKKyAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRz
KCplbGVtLCBlYyk7CiAgICAgICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQuZ2V0KCksIHRleHQpOwogICAgICAgICBlbGVt
LT5hcHBlbmRDaGlsZChXVEZNb3ZlKGZyYWdtZW50KSwgZWMpOwogICAgIApAQCAtMTk1MCwxNCAr
MTk1MCwxNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBQb3NpdGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJh
bmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgaWYgKHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpyYW5nZUNvbXBsaWFudFBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0
aW9uID0gZmFsc2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKICAgICAvLyB0
b3BOb2RlIGRlZmluZXMgdGhlIHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAg
ICBOb2RlKiB0b3BOb2RlID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CiAgICAgLy8g
RklYTUU6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8
dGFibGU+KQotICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zm
c2V0Rm9yRWRpdGluZyh0b3BOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHRvcE5v
ZGUpCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9m
ZnNldEZvckVkaXRpbmcodG9wTm9kZSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgLy8gSWYg
c3BlbGxpbmdTZWFyY2hSYW5nZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFu
Y2UgdG8gdGhlIG5leHQgd29yZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29y
ZCBib3VuZGFyeS4gR29pbmcgYmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEg
d29yZCBkb2VzIHRoZSB0cmljay4KQEAgLTIwMTEsNyArMjAxMyw3IEBAIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAg
ICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAog
ICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7
CiAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRh
aW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0
YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKQEAgLTIwMjIsOSArMjAyNCwxMCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCiAgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwg
MCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmICh0b3BOb2RlKQorICAgICAgICAgICAg
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJ
T04pOwogICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNo
dW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCi0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PnNldEVuZCgmc2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFw
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5k
KHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgIAogICAgICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpKSB7CiAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKCk7CkBAIC0yMDQ1LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
ICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3
b3JkCiAgICAgICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFy
Y2hSYW5nZSk7CiAgICAgICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJh
bmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0
RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0
T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0zMTY4LDkgKzMxNzEsOSBAQCBQ
YXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYQogICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9
IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkubm9uQm91
bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKHNoYWRvd1RyZWVS
b290KSB7CiAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dEVuZChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2Rl
cygpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CkBAIC0zMTg2LDkgKzMxODksOSBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdl
KiByZWZlcmVuY2VSYQogCiAgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFk
b3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAg
ICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93
VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOwor
ICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93VHJlZVJvb3QsIDAp
OwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFy
Y2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKQEAgLTMxOTcsMTAgKzMyMDAsMTIgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBS
YW5nZSogcmVmZXJlbmNlUmEKICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hh
ZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJl
ZS4KICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7
CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVy
KHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkp
OworICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0
ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5z
aGFkb3dIb3N0KCkpOworICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxh
aW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CkBAIC0zMjIzLDcg
KzMyMjgsNyBAQCBzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdl
KiByYW5nZSkKICAgICBib29sIGluUmFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOyBvd25lckVs
ZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKSkgewogICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRlcnNl
Y3RzTm9kZShvd25lckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaW5S
YW5nZSA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1NSw4ICsz
MjYwLDggQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoJm9yaWdpbmFsRW5kQ29udGFpbmVyLCBv
cmlnaW5hbEVuZE9mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93
SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMyNzUsMTEgKzMy
ODAsMTEgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgLy8gcmVzdWx0IHJhbmdl
LiBUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAogICAgICAg
ICAvLyBzaW5jZSBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92
ZXIgdGhlIHZpc2libGUKICAgICAgICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRTdGFydCgmcmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+
ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0
KCksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0g
c2VhcmNoUmFuZ2UtPnNoYWRvd1Jvb3QoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xs
YXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dU
cmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOTFhZDE3Njg2NmY0ZjEz
YzA3NGQ3ZDMxNDg0NWJmMzViYWI3ZDMzOS4uODFhYTAwMDgxYzc2ZGZhNTMzM2JhZDQ2ZDkwNDRi
NWE4YjNkZTg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBA
IC0yMjgsMTIgKzIyOCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5j
ZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxi
YXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSogYSwgUmFuZ2UqIGIpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UqIHN0YXJ0ID0gYS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAg
PyBiIDogYTsKLQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEtPm93bmVyRG9jdW1lbnQoKSwg
JnN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgJmVuZC0+ZW5k
Q29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworICAgIFJhbmdlJiBzdGFydCA9IGEuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOworICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/
IGIgOiBhOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3Rh
cnQuc3RhcnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWlu
ZXIoKSwgZW5kLmVuZE9mZnNldCgpKTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9u
cwpAQCAtMzU2LDggKzM1NSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAobWFy
ayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKKyAgICAgICAgYm9vbCBzZWxl
Y3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAq
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7
CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEwLDcgKzEwMDksNyBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdAogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJh
bmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVl
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2Vz
KCptYXJrLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcAppbmRleCBhMDI1NmE0MDBhOTNlNGY3NmU4OTgxOTVkNzhiNjhmNTE2OTgxMzYzLi5hYWE5
OWE4ZThlZDE2MWQxMTMyMDg0YmI0MjZjZGE5NjI4MjFiM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQg
Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1l
KCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihyZWZOb2RlLCBy
YW5nZS5nZXQoKSkpCisgICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKICAgICAgICAg
JiYgcmVmTm9kZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgewog
ICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMg
dGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRh
Z05hbWUoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4
IDVhYzMwNzc3ZWRmOGU2YTg0NTNhZDE3NDczNDNiOTNiNjBiNDM1N2QuLjAzOWUzOWZkYmNlNTIy
ZjlmNTg3NTZlMTRmZWMyMDhlZTkzN2M4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBi
b28KICAgICAgICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVz
dWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCZub2RlLCBlYyk7CisgICAgICAgIFJhbmdlOjpDb21w
YXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5vZGUsIGVjKTsK
ICAgICAgICAgaWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVf
QU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5k
ZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAogICAgICAgICAgICAgLy8gb2Nj
dXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFu
Z2UgYXMgYSByZXN1bHQgb2YgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuY3BwCmluZGV4IGVmNGY2MjE5MzM5ZTVhNmFlYzk5MDI5Nzc4YjY4OWUxNGU4YzZhZmUu
LjZmZjdjMWFlOTA5MzdjM2I0YTM2NTk0MTlmNGYxMzliZjJhYjYwZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAg
dm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZv
cmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAv
LyBJZiB0aGUgZW50aXJlIGxpc3QgaXMgc2VsZWN0ZWQsIHRoZW4gY29udmVydCB0aGUgd2hvbGUg
bGlzdC4KLSAgICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4obGlzdE5vZGUuZ2V0KCksIGN1cnJlbnRTZWxlY3Rpb24pKSB7CisgICAgICAgIGlm
IChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpsaXN0Tm9k
ZSwgY3VycmVudFNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGJvb2wgcmFuZ2VTdGFydElzSW5M
aXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVu
dFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgYm9vbCByYW5nZUVuZElz
SW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3ROb2RlLmdldCgpKSA9PSBjdXJy
ZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOwogCkBAIC0yNDMsOSArMjQzLDkgQEAgdm9pZCBJ
bnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3Jl
YXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0
aGUgZW5kIG9mIGN1cnJlbnQgc2VsZWN0aW9uIGlmIHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5v
ZGUKICAgICAgICAgICAgIC8vIGJlY2F1c2UgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQg
aGF2ZSByZW1vdmVkIHRoZW0uCiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYm
IG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQobmV3
TGlzdCwgMCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3VycmVudFNlbGVj
dGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAg
ICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJy
ZW50U2VsZWN0aW9uLT5zZXRFbmQobmV3TGlzdCwgbGFzdE9mZnNldEluTm9kZShuZXdMaXN0Lmdl
dCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlv
bi0+c2V0RW5kKCpuZXdMaXN0LCBsYXN0T2Zmc2V0SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpLCBJR05P
UkVfRVhDRVBUSU9OKTsKIAogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5ld0xpc3QuZ2V0KCkpKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA3NTM2OTIwMGMy
OTU1YjA3NWM4M2I1MGNkNjU3MDc3NDVjZmVjOGY3Li5iNjk1MmUyYjg2ZjE5Y2VjNjZkY2JhZmNl
OTY2MjFiNmQ1MTE5OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwCkBAIC0xNzQsOCArMTc0LDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRD
aGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJh
CiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIEFTU0VSVChtX2NoZWNraW5n
UmFuZ2UpOworICAgIGlmICghcG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBSZWY8UmFuZ2U+
IHJhbmdlID0gb2Zmc2V0QXNSYW5nZSgpLT5jbG9uZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNldEVu
ZChwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgZWMpOworICAgIHJhbmdlLT5zZXRFbmQoKnBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiAgICAg
aWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChyYW5nZS5wdHIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKaW5kZXggNDgzYTRkNDQwMGE0NDVmNTlhMmNjODM0ZmY4MmQ5MTdhOTUyZmQ0Ni4uZjJiMmZi
NzA3ZjlhYjY1ZjJlM2NjZDQyZDhkNDBiNWJiMWJiYTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTQ3OSw4ICsxNDc5LDggQEAgUmVmPFJhbmdlPiBDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICAgICAgQVNTRVJUKCZub2RlID09ICZyYW5n
ZS0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHJhbmdlLT5zdGFy
dE9mZnNldCgpICsgbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQoJm5v
ZGUsIG9mZnNldCk7Ci0gICAgICAgICAgICByYW5nZS0+c2V0RW5kKCZub2RlLCBvZmZzZXQgKyAx
KTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChub2RlLCBvZmZzZXQpOworICAgICAgICAg
ICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZzZXQgKyAxKTsKICAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gcmFuZ2U7CkBAIC0xNTY5LDggKzE1NjksOCBAQCBSZWY8UmFuZ2U+IEJhY2t3YXJk
c0NoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gci0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFTU0VSVCgmbm9kZSA9PSAmci0+
ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHItPmVuZE9mZnNldCgp
IC0gbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICByLT5zZXRTdGFydCgmbm9kZSwgb2Zmc2V0IC0g
MSk7Ci0gICAgICAgICAgICByLT5zZXRFbmQoJm5vZGUsIG9mZnNldCk7CisgICAgICAgICAgICBy
LT5zZXRTdGFydChub2RlLCBvZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIHItPnNldEVuZChub2Rl
LCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByOwpAQCAtMjQ3OSw4ICsy
NDc5LDggQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAKICAgICAvLyBGSVhNRTogdGhl
IGF0RW5kKCkgY2hlY2sgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgd29ya2Fyb3VuZCBmb3IgPGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODk+LgogICAgIGlmICghcmFu
Z2VMb2NhdGlvbiAmJiAhcmFuZ2VMZW5ndGggJiYgaXQuYXRFbmQoKSkgewotICAgICAgICByZXN1
bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7Ci0g
ICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgMCk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdFJh
bmdlKTsKICAgICB9CiAKQEAgLTI0OTgsMTIgKzI0OTgsMTIgQEAgUmVmUHRyPFJhbmdlPiBUZXh0
SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3Bl
LCBpbnQKICAgICAgICAgICAgICAgICBpdC5hZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYg
KCFpdC5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBp
dC5yYW5nZSgpOwotICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgmcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJh
bmdlLT5zdGFydE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBQb3NpdGlvbiBydW5TdGFydCA9IHRleHRSdW5SYW5nZS0+c3RhcnRQb3NpdGlv
bigpOwogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRp
b24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1
blJhbmdlLT5zZXRFbmQocnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFu
Z2UtPnNldEVuZCgqcnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0yNTEyLDI0ICsyNTEyLDI0IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAg
ICAgICAgICAgICBzdGFydFJhbmdlRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHRleHRS
dW5SYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gcmFuZ2VMb2NhdGlvbiAtIGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAg
ICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigp
LCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2VMb2NhdGlvbiA9PSBkb2NUZXh0UG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0
UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5SYW5nZS0+ZW5k
Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kRW5kKSB7CiAgICAgICAgICAgICBpZiAodGV4
dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSByYW5nZUVuZCAtIGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNl
dCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmIChyYW5nZUVuZCA9PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250
YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRl
eHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRh
aW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVu
UmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRvY1RleHRQ
b3NpdGlvbiArPSBsZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI1NDIsNyArMjU0Miw3
IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIGlmIChyYW5nZUxlbmd0aCAmJiByYW5nZUVuZCA+IGRvY1RleHRQb3NpdGlvbikgLy8g
cmFuZ2VFbmQgaXMgb3V0IG9mIGJvdW5kcwotICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0
ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsK
KyAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigp
LCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAKICAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHRSYW5nZSk7CiB9CkBAIC0yNTY2LDcgKzI1NjYsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6
Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiBy
YW5nZQogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsK
ICAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigp
KTsKIAotICAgIHRlc3RSYW5nZS0+c2V0RW5kKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdl
LT5lbmRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQo
cmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJ
T04pOwogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsK
ICAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkg
LSBsb2NhdGlvbjsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2MjMsNyArMjYyMyw3IEBAIHN0YXRp
YyBzaXplX3QgZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBGaW5kT3B0aW9uCiAKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkg
ewogICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0YXJ0UmFuZ2UgPSByYW5nZS5vd25lckRvY3Vt
ZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKCZy
YW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgYmVm
b3JlU3RhcnRSYW5nZS0+c2V0RW5kKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0
T2Zmc2V0KCkpOwogICAgICAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3Ig
YmFja3dhcmRzSXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVy
YXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgICAg
IGJ1ZmZlci5wcmVwZW5kQ29udGV4dChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXIubmVlZHNNb3JlQ29udGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDJmZTI2ZDdjZjE3MGY5ZmQ4ZWY3ZmU1YTky
ZTViMDg3OTU3OTY2NzMuLjQyMWVlMmJlMmUxN2JkOGM4Y2Y2YjYxZTRiYTJiZjdmOWFhNWE1YzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCwy
NCArNzMwLDMyIEBAIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFu
Z2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHIt
PmVuZFBvc2l0aW9uKCksIGFmZmluaXR5KTsKIH0KIAotYm9vbCBzZXRTdGFydChSYW5nZSAqciwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitib29sIHNldFN0YXJ0KFJh
bmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0g
ICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0U3RhcnQocC5j
b250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJl
dHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0U3RhcnQoKnAuY29u
dGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJu
ICFlYzsKIH0KIAotYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
dmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAoIXIpCisgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGlu
dCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgaWYgKCFw
LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGVjID0g
MDsKKyAgICByYW5nZS0+c2V0RW5kKCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKIC8vIEZJWE1FOiBNYXliZSB0
aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywgbGlrZSB0aGUgdW5kZXJseWluZyBmdW5jdGlv
bj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDdk
YTY2YTE4ODZhZWY5MTcxNjZhYzQyOGFmYmMwNDdkNGMxZmI4NWUuLmY4ZDkwMzNhOWM3MWI4ZDQ4
YzU5NDc2OGFlNWZmYzkwMzRjNmVkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlU2VsZWN0aW9uLmNwcApAQCAtMjEzLDggKzIxMyw4IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+
IG1ha2VTZWFyY2hSYW5nZShjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogCiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpKTsKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7
Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpib3VuZGFyeSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3Rh
cnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwog
CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlVW5pdHMuY3BwCmluZGV4IGRlYjQwZmQwMWI5MDlmNjAxYmU5ZDRmMTgwNDkwOWYyZmEwYzc2
ZmUuLjYyMmY0MzZjZTVlNzA3ZDczZmMzMWRhMTRhNjBiNzQ2YzdiNDgxOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTU2OSw3ICs1NjksMTEgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YywgQm91bmRhcnlTZWFyY2gKICAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5k
YXJ5LT5kb2N1bWVudCgpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQ
b3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgUmVmUHRy
PFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYm91bmRhcnlEb2N1bWVudCk7CisK
KyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSZWY8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKICAgICAKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+
IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwpAQCAtNTc3LDE5ICs1ODEs
MTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQmVmb3Jl
KCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2FyZHNTY2FuUmFuZ2UoYm91bmRhcnlE
b2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVu
ZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFy
dChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVj
KTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKCpib3VuZGFyeSwgZWMp
OworICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoKmVuZC5kZXByZWNhdGVkTm9k
ZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAgICBzdWZmaXhM
ZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsK
ICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwotICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9k
ZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFu
Z2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IgaXQoKnNlYXJjaFJhbmdlKTsKKyAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJh
dG9yIGl0KHNlYXJjaFJhbmdlKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gYmFja3dhcmRTZWFyY2hG
b3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoaXQsIHN0cmluZywgc3VmZml4TGVuZ3RoLCBzZWFy
Y2hGdW5jdGlvbik7CiAKICAgICBpZiAoIW5leHQpCkBAIC02MDIsNyArNjA2LDcgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YywgQm91bmRhcnlTZWFyY2gKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVy
YXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAg
ICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlKTsKKyAgICBC
YWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UpOwogICAgIGNoYXJJ
dC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKICAgICAvLyBG
SVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0LgogICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpA
QCAtNjE2LDcgKzYyMCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIERvY3VtZW50JiBib3VuZGFyeURvY3VtZW50ID0g
Ym91bmRhcnktPmRvY3VtZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShib3Vu
ZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOworICAgIFJlZjxSYW5nZT4gc2VhcmNoUmFuZ2Ug
PSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgUG9zaXRpb24gc3RhcnQocG9z
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4g
c3RyaW5nOwpAQCAtNjI0LDIwICs2MjgsMjIgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKIAog
ICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRlcigp
KSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhY2t3YXJkc1NjYW5SYW5nZShib3VuZGFyeURv
Y3VtZW50LmNyZWF0ZVJhbmdlKCkpOwotICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVu
ZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkp
CisgICAgICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZCgqc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3YXJk
c1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKGJvdW5kYXJ5LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJh
bmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucyk7CisgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnks
IElHTk9SRV9FWENFUFRJT04pOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpKQorICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgIFRleHRJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZS5wdHIoKSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAgIHVuc2lnbmVkIG5leHQgPSBmb3J3YXJk
U2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcsIHByZWZpeExlbmd0
aCwgc2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0g
c3RyaW5nLnNpemUoKSkKICAgICAgICAgcG9zID0gc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCk7
CiAgICAgZWxzZSBpZiAobmV4dCA+IHByZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhl
IGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERP
TSBwb3NpdGlvbi4KLSAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5n
ZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMp
OworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAg
Y2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExlbmd0aCAtIDEpOwogICAgICAgICBSZWZQdHI8
UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhckl0LnJhbmdlKCk7CiAgICAgICAgIHBvcyA9IGNo
YXJhY3RlclJhbmdlLT5lbmRQb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAppbmRleCAyOWM5YWY4NWUwYjZlZTBhMzA0MzVhOTZlZWNkNzJmODUyODBlZTc4Li41
ODA4NzIwNWYwOWRjYjg3NzQ0ZjI1ZTM4OTU2YmJhMjQ2NWQwNmFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihOb2RlKiBu
b2RlLCBpbnQgaW4KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogCiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVj
dE5vZGVDb250ZW50cyhub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKCpub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBDaGFyYWN0ZXJJdGVy
YXRvciBpdCgqcmFuZ2UpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGl0LmF0RW5kKCkgPyByYW5nZS0+ZW5kUG9zaXRpb24oKSA6IGl0LnJh
bmdlKCktPmVuZFBvc2l0aW9uKCksIFVQU1RSRUFNKTsKQEAgLTExODYsMjAgKzExODYsMTkgQEAg
Ym9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0
aW9uJiBzZWNvbmQpCiAKIC8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEg
cmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhl
IHJhbmdlLgogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9k
ZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQotYm9vbCBpc05vZGVWaXNpYmx5
Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQor
Ym9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdl
KiBzZWxlY3RlZFJhbmdlKQogewotICAgIEFTU0VSVChub2RlKTsKICAgICBBU1NFUlQoc2VsZWN0
ZWRSYW5nZSk7CiAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBp
dCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbgogICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21w
YXJlTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlz
aWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0
aW9uKCk7Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhw
b3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpLCBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlv
bigpKSA8IDApCisgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9u
QmVmb3JlTm9kZSgmbm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAg
IGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBh
cmVudEFmdGVyTm9kZSgmbm9kZSksIHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlz
aWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9u
KCk7Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0
ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2Rl
KSkgPCAwKQorICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRl
ck5vZGUoJm5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVu
ZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpIDwgMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJ
c1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAppbmRleCBjMTU0
NzljOTZhNDBlMWUyMDliYTkyNzUwZWRhMjgyNmU2YzViN2U3Li5mMjE1MTY0NWRjNjc4ZmJkYzQ3
YTA2MmM0MjFmNDJiNjZkMTM5MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5o
CkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2Rl
Kik7CiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSopOwogYm9vbCBpc0xpc3RJdGVtKGNvbnN0IE5v
ZGUqKTsKIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29uc3QgTm9kZSopOwotYm9vbCBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKE5vZGUqLCBjb25zdCBSYW5nZSopOworYm9vbCBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25zdCBSYW5nZSopOwogYm9vbCBpc1JlbmRlcmVk
QXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKik7CiBib29sIGFyZUlkZW50aWNh
bEVsZW1lbnRzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKik7CiBib29sIGlzTm9uVGFibGVDZWxs
SFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0KaW5kZXggMTI1YzVhOTgwYzI4NGEzOTRkMDM2NDA0YWE4NTU5MDdjYTE3NTRm
MC4uNzNjNWRhY2Y0NTM0YzY4NjZkM2Q0OTk5OTdlZjAzMTg0YjA2ZmM5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMzE4LDcgKzMxOCw3IEBAIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICBBU1NFUlQoY29tbW9u
QW5jZXN0b3IpOwogICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFU
YWcpOwogICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkp
LCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQo
ZW5jbG9zaW5nQW5jaG9yLCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgcmFuZ2UtPnNl
dFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJldHVy
biByYW5nZTsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAppbmRleCAxNDQyMjUyYmQ1MjE1ZDkzNTc3ZThjZjQ3YmE5ZTUxZDYzZTI4NDM0
Li5lZjIyZTUyNmJiYmJiNGM1NDhiOTRhMDFmZTM4OTMzNzc2MzM4NGE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MTMsNyArNDEzLDgg
QEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8
IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5k
b2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGlmIChkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5z
ZWxlY3ROb2RlKCpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSwgSUdOT1JFX0VYQ0VQVElPTik7
CiAgICAgICAgIH0KICAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KHNlbGVjdGVkUmFu
Z2UuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5j
cHAKaW5kZXggZTExOWY2NGQ4YjY3ZmJmZjNkMTUzMDdkZmVhODk4NmZmMjE2ODk4Yi4uZjYwNTY2
MWJkODUzYWE3Nzk4YmE0ZTdlNTc3NTFlZDc1ZjdjMmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
U2VsZWN0aW9uLmNwcApAQCAtMzkzLDEwICszOTMsMTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmFk
ZFJhbmdlKFJhbmdlKiByKQogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoci0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIElHTk9S
RV9FWENFUFRJT04pID09IC0xKSB7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQs
ICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qg
c3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYg
ciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBU
SU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsK
KyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5E
LCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID4gLTEpIHsKKyAgICAgICAgICAgIGlmIChyLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VY
Q0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2Ug
YW5kIHIgaW50ZXJzZWN0LgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oci0+c3Rh
cnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtNDA3LDggKzQxMCw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRS
YW5nZShSYW5nZSogcikKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0
IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCBy
YW5nZSBkb24ndCBpbnRlcnNlY3QuCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIHJh
bmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewotICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENF
UFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OkVORF9UT19TVEFSVCwgKnJhbmdlLCBlYykgPCAxICYmICFlYykgeworICAgICAgICAgICAg
aWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKnJhbmdlLCBJ
R05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5h
bCByYW5nZSBjb250YWlucyByLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFu
Z2UuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKaW5kZXggMWNjODM4NGE0OTYxZTM4OGEzZjIxYjBjYzI0ZTAyMDIzZTY1NGYx
Ny4uMGM5MGI0MTRiNWEyZTA2ZjBhOTkxZDUwN2NkNTc4NjY0MjI0ZWM2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTcxMiw3ICs3MTIsNyBAQCBzdGF0aWMgSW1h
Z2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiBzdGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQu
ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlKCZlbGVtZW50
KTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVtZW50KTsKICAgICBlbGVtZW50LmRvY3VtZW50
KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJh
bmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCAxOGM0NzVmMWVlODE3ZTRlNWYxNzAyZGIzYjRmYTM5OTNlMDM0NGJmLi4xNzUyMjM2Yzdh
Njc5OTBjM2UyZGI3Y2NhZjNiZTQ0ZTg0MzQyYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC0yNTA3LDcgKzI1MDcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0
Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZQog
ICAgICAgICAgICAgICAgIC8vIGZvY3VzZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3Zl
ciBpdCwgaG93ZXZlciwgYmVjYXVzZSB0aGUgbW91c2V1cAogICAgICAgICAgICAgICAgIC8vIHdp
bGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwgd2hpY2ggd2lsbCBjYWxsIHNldEZvY3VzZU5v
ZGVJZk5lZWRlZC4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShlbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKSA9PSBS
YW5nZTo6Tk9ERV9JTlNJREUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZSgqZWxlbWVudCwgSUdOT1JFX0VY
Q0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFCiAgICAgICAgICAgICAgICAgICAgICYmIGVs
ZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDkxNTNkMDQ0MmE3MDU3ZDRhODBkMDUwMDNhMDBmZjEx
NmNiYzFjZTAuLjhkZjFkMzYxZjM2ZmQ0MTY1ZWJhMTk2M2NkZTZmZmM4NDU2ZjJmMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcApAQCAtNjMyLDE0ICs2MzIsMTQgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5n
TWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMs
IGkKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0
aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChv
cHRpb25zICYgQmFja3dhcmRzKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hS
YW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVk
UmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCBtYXRjaFJh
bmdlc1tpIC0gMV0uZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID4gMCkgeworICAgICAgICAgICAg
ICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9U
T19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSwgSUdOT1JFX0VYQ0VQVElPTikgPiAwKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hS
YW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVj
dGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBtYXRj
aFJhbmdlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPCAwKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0sIElHTk9SRV9FWENFUFRJT04pIDwgMCkgewogICAgICAg
ICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCmluZGV4IDE3Njg0YzU3NDg4MzI4OTY3NjBmNDZlZTlkMWNmMWI4MDhjMzA2MmEuLjI2ZWYz
N2MzZDJiZjRkMDI1MWYwZGE3NTBjNjEwMGJlZDc5YmRmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBib29sIGhhc05vbklu
bGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lu
bGluZSgpIHx8IHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2Rl
KG5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pKQorICAgICAgICBpZiAoKCFyZW5kZXJlci0+aXNJ
bmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSAmJiByYW5nZS5pbnRlcnNlY3RzTm9k
ZSgqbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTikpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAKaW5kZXggMzI5MjAzMTliZjFkOTY3MzE4YTM0ZDY1MmY2YzFlYzViNGFmZDEy
NS4uYjM2ZWE0ZTg5NmE1ZjE3YjVjM2IyNzI0NDZjMGY2NTJkOGU1Yzg4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTY5
NCw4ICs2OTQsOCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3Rv
cjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgaWYgKCFi
b3hJbnRlcnNlY3RzUmVnaW9uKGxvZ2ljYWxUb3BGb3JSZW5kZXJlciwgbG9naWNhbEJvdHRvbUZv
clJlbmRlcmVyLCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKSkg
ewogICAgICAgICAgICAgICAgIGlmIChmb3VuZFN0YXJ0UG9zaXRpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdGFydHNBYm92ZVJlZ2lvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQmVmb3JlKG5vZGUsIElHTk9S
RV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNl
Y3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZ2UtPnNldEVuZEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZU9iamVjdHMuYXBwZW5kKHJhbmdlLT5jbG9uZVJhbmdl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNvbnRl
bnRFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0c0Fi
b3ZlUmVnaW9uID0gdHJ1ZTsKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBj
b25zdAogICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc2tpcE92ZXJPdXRzaWRl
Tm9kZXMpCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEFmdGVyKG5vZGUsIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRBZnRl
cigqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgZm91bmRTdGFydFBv
c2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdl
cyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAg
ICAgICAvLyB0aGUgcmFuZ2UgaXMgY2xvc2VkLgogICAgICAgICAgICAgICAgIGlmIChzdGFydHNB
Ym92ZVJlZ2lvbikgewogICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRCZWZvcmUobm9kZSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEJlZm9y
ZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgID0gZmFsc2U7CkBAIC03NzAs
NyArNzcwLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8
UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAvLyBm
b3IgZWxlbWVudHMgdGhhdCBlbmRzIGluc2lkZSB0aGUgcmVnaW9uLCBzZXQgdGhlIGVuZCBwb3Np
dGlvbiB0byBiZSBhZnRlciB0aGVtCiAgICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhpcyBlbmQg
cG9zaXRpb24gdG8gYmUgY2hhbmdlZCBvbmx5IGJ5IG90aGVyIGVsZW1lbnRzIHRoYXQgYXJlIG5v
dCBkZXNjZW5kYW50cyBvZiB0aGUgY3VycmVudCBlbmQgbm9kZQogICAgICAgICAgICAgICAgIGlm
IChlbmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVsb3dSZWdpb24gJiYgIW5vZGUtPmlzRGVzY2Vu
ZGFudE9mKGxhc3RFbmROb2RlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVu
ZEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0RW5kQWZ0ZXIoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAg
ICAgICBlbmRzQmVsb3dSZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgbGFzdEVu
ZE5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCmluZGV4IDA2MzMwN2M5OTkzNTY0NTQ2N2Y5YTM0OTJjMDk2YzNjNDIyNWMzOWIu
LjFmOWYzZGQxZjQ4MTkzNWE0ZWE5ZTMzMWU1NmNjN2JhZjIwMTA4YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODczLDExICs4NzMsMTMgQEAgLSAoRE9NUmFuZ2Ug
Kilfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRS
YW5nZQogICAgIG5ld1N0YXJ0ID0gbmV3U3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
CiAgICAgbmV3RW5kID0gbmV3RW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNy
ZWF0ZVJhbmdlKCk7Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0
KG5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGV4Y2VwdGlvbik7Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5jb250YWluZXJOb2Rl
KCksIG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJl
dHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgIGlmIChuZXdTdGFydC5j
b250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHJh
bmdlLT5zZXRTdGFydCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqbmV3
U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
ZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7CiB9CiAKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6
KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVS
TFN0cmluZyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KaW5kZXggZTA4MDZiY2I2YTc3MzRl
MmQzNDQxNDk1YjE0ZWQ2ZmIyN2QyMjQ5OS4uOTNlODQ5ZjYzYjE0YjJkYzRkNWE5NTQ5NDcxMWYx
MDM1MTVlZGY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTY1LDE2ICs2NSwy
MCBAQCAtICh2b2lkKWRlYWxsb2MKIAogLSAodm9pZClzZXRTdGFydDooV0tET01Ob2RlICopbm9k
ZSBvZmZzZXQ6KGludClvZmZzZXQKIHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
ICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNldFN0YXJ0KFdlYktpdDo6
dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7CisgICAgX2ltcGwtPnNldFN0YXJ0KCpX
ZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOwogfQogCiAtICh2b2lkKXNl
dEVuZDooV0tET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQKIHsKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRo
ZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2lt
cGwtPnNldEVuZChXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOworICAg
IF9pbXBsLT5zZXRFbmQoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7
CiB9CiAKIC0gKHZvaWQpY29sbGFwc2U6KEJPT0wpdG9TdGFydApAQCAtODQsMTYgKzg4LDIwIEBA
IC0gKHZvaWQpY29sbGFwc2U6KEJPT0wpdG9TdGFydAogCiAtICh2b2lkKXNlbGVjdE5vZGU6KFdL
RE9NTm9kZSAqKW5vZGUKIHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKICAgICAv
LyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2ltcGwtPnNlbGVjdE5vZGUoV2ViS2l0Ojp0b1dl
YkNvcmVOb2RlKG5vZGUpLCBlYyk7CisgICAgX2ltcGwtPnNlbGVjdE5vZGUoKldlYktpdDo6dG9X
ZWJDb3JlTm9kZShub2RlKSwgZWMpOwogfQogCiAtICh2b2lkKXNlbGVjdE5vZGVDb250ZW50czoo
V0tET01Ob2RlICopbm9kZQogeworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAg
IC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKFdl
YktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOworICAgIF9pbXBsLT5zZWxlY3ROb2RlQ29u
dGVudHMoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOwogfQogCiAtIChXS0RPTU5v
ZGUgKilzdGFydENvbnRhaW5lcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAKaW5kZXggYWEyNzRiYWExY2M4OTA5NzI1OGQxMWEyNzBkNGEwMzg3Zjli
N2IyNy4uZGIyMmYxZTVkYzFlMzVhYWI1MDc5MGMxMjk4YTFmMzRlMDM0Y2ZmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC0zMzAsNyAr
MzMwLDcgQEAgU3RyaW5nIFdlYkZyYW1lOjpjb250ZW50c0FzU3RyaW5nKCkgY29uc3QKICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudEVsZW1lbnQu
Z2V0KCksIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnRFbGVtZW50LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276892</attachid>
            <date>2016-04-20 19:57:09 -0700</date>
            <delta_ts>2016-04-20 20:03:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420195732.patch</filename>
            <type>text/plain</type>
            <size>100102</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVu
c2lvbnMubW0KaW5kZXggODZkNzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4u
ZWFkYWE2YTFkMDBmNTQ1NDNlZTc4MDAwMTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4
ICsxMTMsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJU
ZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwot
ICAgIHJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWlu
ZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYg
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5j
b250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
KyAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5k
LmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
IH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRB
ZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpAQCAtMTI5LDggKzEzMSwxMCBAQCAtICh2b2lk
KWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByYW5nZS0+c2V0U3Rh
cnQoc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
aWdub3JlZCk7Ci0gICAgcmFuZ2UtPnNldEVuZChlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOworICAgIGlmIChzdGFydC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKGVuZC5jb250
YWluZXJOb2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CiB9CiAKIC0gKERPTU5vZGUg
KilmaXJzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjli
ZTE1OWFmY2ZiMTIxOGFmLi44MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92
ZWRMYXN0UmVmKCkKIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0
aGlzKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhj
b25zdF9jYXN0PE5vZGUmPigqdGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3
NjFhYzRlMDNjZTMwOGM3ZDUzNmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3
ZWVmZDM4ODgyYjdkNTk4MzFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBA
QCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhN
RTogc3RhcnRDb250YWluZXIgYW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVm
PE5vZGU+JiYuCiBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3Vt
ZW50KG93bmVyRG9jdW1lbnQpCiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMs
OCArOTQsMTAgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwg
UGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0
aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkg
b2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3
ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQpOwotICAgIHNldEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYg
KHN0YXJ0Q29udGFpbmVyKQorICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0
T2Zmc2V0KTsKKyAgICBpZiAoZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRh
aW5lciwgZW5kT2Zmc2V0KTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50
JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3Rh
cnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpA
QCAtMTI5LDggKzEzMiw4IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAg
ICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1l
bnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsK
LSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0x
NTcsMTMgKzE2MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RD
b250YWluZXIoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0
Um9vdENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXJ0LCBlbmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZv
aWQgUmFuZ2U6OnNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUp
IHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1l
bnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUt
PmRvY3VtZW50KCkpOwpAQCAtMTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQo
UGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09m
ZnNldChyZWZOb2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBj
aGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUp
OworICAgIG1fc3RhcnQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsK
IAogICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFp
bmVyKG1fc3RhcnQsIG1fZW5kKSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wg
ZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1l
bnQoKSk7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0
cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAK
ICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZO
b2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVX
T2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9lbmQuc2V0KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2Vu
ZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRp
ZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwg
bV9lbmQpKQogICAgICAgICBjb2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2
b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQg
PSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRB
bmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsK
KyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0
U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0
IFBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVu
dEFuY2hvcmVkID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChw
YXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2Rl
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVk
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNl
KGJvb2wgdG9TdGFydCkKQEAgLTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2Uo
Ym9vbCB0b1N0YXJ0KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6
OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVj
ID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5v
ZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTI0MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJh
bmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlm
IChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKHJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAg
ICAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9v
bCByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRD
b250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYm
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwg
bV9lbmQub2Zmc2V0KCksIGVjKSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBh
cmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9z
dGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFy
eVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgp
LCBlYykgPD0gMCAmJiAhZWM7CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVO
VF9FUlIpOwogICAgIGVjID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5n
ZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRl
c2NyaWJlZCBieSB0aGUgCiAgICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGlu
IHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3Rp
dmVseS4KLQotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29t
cGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogICAgIGlmIChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8g
Y2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSBy
b290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0
byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9k
ZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgp
ICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkp
KQogICAgICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZv
cmUKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0
Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVC
b3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgZWMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29t
ZXMgYWZ0ZXIKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwg
JmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYg
KGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCks
IG1fZW5kLm9mZnNldCgpLCBlYykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAg
ICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3Vu
ZGFyeSBwb2ludHMKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJh
bmdlOjpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K1JhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFm
dGVyLAogICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSBy
YW5nZSwgcmVzcGVjdGl2ZWx5CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhp
cyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9
CiAKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewor
ICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAg
ICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBp
dCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBD
b250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVu
c2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYg
KCFwYXJlbnROb2RlKSB7CiAgICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1l
bnQgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEw
LDIyIEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RTsKICAgICB9CiAKLSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwg
ZWMpIDwgMCkgeyAvLyBzdGFydHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UK
KyAgICAvLyBzdGFydHMgYmVmb3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4LCBlYykgPCAwKSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAg
ICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9E
RV9CRUZPUkU7IC8vIGVuZHMgYmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8v
IHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRo
ZSByYW5nZQotICAgICAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBO
T0RFX0lOU0lERTsgLy8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0
cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJl
bnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQor
ICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVu
ZHMgaW5zaWRlIHRoZSByYW5nZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJl
SG93IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VS
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9j
dW1lbnQoKSAhPSAmc291cmNlQ29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05H
X0RPQ1VNRU5UX0VSUjsKQEAgLTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwg
RXhjCiAKICAgICBzd2l0Y2ggKGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VS
YW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RB
UlRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2Vu
ZCwgc291cmNlUmFuZ2UtPm1fc3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
Qm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAg
Y2FzZSBFTkRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhtX2VuZCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAg
ICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQ
b2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1
cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7
CiAgICAgfQogCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9y
dCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQg
Y29tcGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3Nob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNp
Z25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2
b2lkIFJhbmdlOjpkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNz
Q29udGVudHMoRGVsZXRlLCBlYyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJz
ZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5E
b2N1bWVudCgpIHx8ICZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJl
Zk5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVm
Tm9kZS5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKTsKKyAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKIAogICAgIC8vIElmIChwYXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVu
dCwgb2Zmc2V0ICsgMSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVy
d2lzZSwgcmV0dXJuIGZhbHNlLgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2lu
dChwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0g
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBj
b21wYXJlRmlyc3QgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwor
ICAgIHNob3J0IGNvbXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJ
bmRleCArIDEsIGVjKTsKIAogICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0g
bV9lbmQgPyBjb21wYXJlRmlyc3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBp
c1NlY29uZEFmdGVyU3RhcnQgPSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAg
OiBjb21wYXJlU2Vjb25kID49IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUKICAgICBlYyA9IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlv
biA9PSBEZWxldGUpIHsKICAgICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5j
b250YWlucyhwYXJ0aWFsU3RhcnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlh
bFN0YXJ0LT5wYXJlbnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsg
MSwgZWMpOworICAgICAgICAgICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgp
LCBwYXJ0aWFsU3RhcnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxz
ZSBpZiAocGFydGlhbEVuZCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgp
KSkKLSAgICAgICAgICAgIHNldFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlh
bEVuZC0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFy
dGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVj
KTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKQEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBwcm9jZXNzQ29udGVudHMoQ2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omlu
c2VydE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgYm9vbCBzdGFydElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0
YXJ0Q29udGFpbmVyKCkpOwogICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRD
b250YWluZXIoKS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CkBAIC04NTksNyArODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8
Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMg
PSAwOwotICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwg
cmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNl
cnRpb25WYWxpZGl0eShub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2Rl
ID09IG5vZGUpCisgICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAg
cmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2Rl
LT5yZW1vdmUoZWMpOwpAQCAtODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5v
ZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAg
aWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRv
d25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBp
ZiAoaXM8RG9jdW1lbnRGcmFnbWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCAr
PSBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMo
KTsKICAgICBlbHNlCiAgICAgICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7Cisg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQo
KSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNl
ZCgpKQotICAgICAgICBzZXRFbmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAg
ICAgc2V0RW5kKFdURk1vdmUocGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBS
YW5nZTo6dG9TdHJpbmcoKSBjb25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRl
dGFjaCgpCiAgICAgLy8gVGhpcyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZp
Y2F0aW9uLgogfQogCi1Ob2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVX
T2Zmc2V0KE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTk2MCw3ICs5MzEsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
KiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBO
b2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+
KCpuKS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zm
c2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBO
b2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGlmICghb2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRv
Q2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAg
ICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGls
ZEJlZm9yZTsKQEAgLTk4NCwxMDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJh
bmdlKCkgY29uc3QKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZO
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6
c2V0RW5kQmVmb3JlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kQmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFy
ZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnRO
b2RlKCksIHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAK
LXZvaWQgUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsK
KyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5v
ZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwor
ICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpICsgMSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3Vt
ZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9k
ZS5kb2N1bWVudCgpKTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4
KCk7CiAgICAgZWMgPSAwOwotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5k
ZXgsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVu
dE5vZGUoKSwgaW5kZXggKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXggKyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhO
b2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVD
b250ZW50cyhOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJl
Zk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAocmVmTm9kZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVm
Tm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9U
WVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVu
dCgpICE9ICZyZWZOb2RlLT5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1
bWVudCgpKQorICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZO
b2RlKHJlZk5vZGUpOwogfQogCi12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpz
dXJyb3VuZENvbnRlbnRzKE5vZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYg
KCFuZXdQYXJlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUmVmPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAv
LyBJTlZBTElEX1NUQVRFX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0
cyBhIG5vbi1UZXh0IG5vZGUuCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNk
b20tcmFuZ2Utc3Vycm91bmRjb250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBA
IHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFy
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSog
biA9IG5ld1BhcmVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5l
ck5vZGU+KCpuZXdQYXJlbnQpLnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KG5ld1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAg
ICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEw
ODcsMTcgQEAgdm9pZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBh
c3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hp
bGQoZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
Ci0gICAgc2VsZWN0Tm9kZShuZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5l
d1BhcmVudCwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUm
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
cmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29t
cHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmly
c3ROb2RlKCkgY29uc3QKQEAgLTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFp
bnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRh
aW5lcigpLT5vd25lckRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
KS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBz
dGFydFRvU3RhcnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJU
LCAmb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hv
cnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90
aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0K
IApAQCAtMTU3NSwxOSArMTUxMSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LT5vd25lckRvY3VtZW50KCkgIT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRv
RW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vj
b25kIHJhbmdlLgogICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNp
ZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8
PSAwKQorICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCkKKyAgICBpZiAoc3RhcnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUz
Myw3IEBAIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVm
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQg
ZXhjZXB0aW9uID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNl
cHRpb24pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsK
ICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXIKIHsKICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRh
aW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9k
ZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGls
ZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0
VG9TdGFydE9mTm9kZSgmY29udGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3Rh
cnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAg
ICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSAr
MTY0Myw5IEBAIHZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5v
ZGVzTWVyZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkg
PT0gb2xkTm9kZS5ub2RlKCkpCi0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+
cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAg
ICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5k
YXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgp
ID09IG9sZE5vZGUuaW5kZXgoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgp
LT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpv
bGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQg
UmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCkBAIC0xNzMwLDcgKzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAo
Ym91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChv
bGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsK
KyAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRh
cnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3
IEBAIHZvaWQgUmFuZ2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICBlbmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybjsKLSAgICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5l
ck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKLSAgICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKworICAgIGlmICghc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c2V0U3RhcnQoKnN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IGlmICghZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0
PiBSYW5nZTo6Z2V0Q2xpZW50UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2
NzJlYjJjYmJhNWJmZjZhMzVkMGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVm
OGZlMjZmMjg3NGJmMzE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1
YmxpYzoKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWlu
ZXIoKSk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JD
b250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xs
YXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFu
Z2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0
IGNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50
KE5vZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBl
bnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JF
X0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9k
ZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3Vs
dHMgY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19F
TkQsIEVORF9UT19TVEFSVCB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91
bmRhcnlQb2ludHMoQ29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7CisgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhOb2RlKiBjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50
IG9mZnNldEIsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYm91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJz
ZWN0c05vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wg
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZvaWQgZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBleHRyYWN0Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGlu
c2VydE5vZGUoUmVmPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKIAogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhcnRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVu
ZEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVD
b250ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50
cyhQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFydEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2Rl
JiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c3Vycm91bmRDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNv
bnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9z
aXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdP
ZmZzZXQoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CiAKICAgICBlbnVtIEFjdGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2Jk
YWMxNGQ5YjIzMWNjMGQxZGI0MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFh
NDYyMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25z
dHJ1Y3RvciwKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50
ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9u
TGFja3NWVGFibGUsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFj
ZSBSYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhl
ODhjM2M2NmFkOTI5YWY1YjRhZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2
YjlhNWVhNGU0MWQzYzk0NDc3NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaApAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBO
b2RlKiBjaGlsZEJlZm9yZSk7CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBp
bnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9m
ZnNldCk7CiAKICAgICB2b2lkIHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0
VG9BZnRlckNoaWxkKE5vZGUmKTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0
cjxOb2RlPik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAg
ICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRP
Zk5vZGUoUmVmPE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQo
KTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDEx
IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNT
RVJUKGNvbnRhaW5lcik7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hp
bGRCZWZvcmUgPT0gKG9mZnNldCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0
IC0gMSkgOiAwKSk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29u
dGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVy
ID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpA
QCAtMTUxLDE4ICsxNTAsMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyQ2hpbGQoTm9kZSYgY2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250
YWluZXIpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUo
UmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1f
Y29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3Zl
KGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNv
bnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAg
aWYgKG1fY29udGFpbmVyTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9v
ZmZzZXRJbkNvbnRhaW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1
ZWRmMGI2YzJkM2U5ZTdlMjU5OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2
MjYyZDI2ZTRjMjljMmU5MjQ4MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShjb25zdCBSYW5nZSogcmFuZ2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFs
dGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZS
YW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdl
V2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0
ZmU4ZmJkOTQuLmFjNDY0ODg5ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyAr
NzIyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAg
IEVsZW1lbnQqIGVkaXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChl
ZGl0YWJsZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYm
IGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJh
bmdlLmdldCgpKSkKKyAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBh
cmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bigqc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgw
MDAuLjYyZDA2ZjllNmI2M2NmOTk2NjMzNGJjMTFhZDVkYTZiY2FhOTQ3OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGlj
dGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgZAogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7ICAgIAogICAgIFJlZlB0cjxSYW5nZT4g
Y29udGV4dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICBjb250ZXh0LT5zZWxlY3RO
b2RlQ29udGVudHMoJmVsZW1lbnQsIGVjKTsKKyAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVu
dHMoZWxlbWVudCwgZWMpOwogCiAgICAgU3RyaW5nQnVpbGRlciBkaWN0YXRpb25QaHJhc2VzQnVp
bGRlcjsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBocmFzZXMp
CkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCogZWxlbSkKICAgICAgICAgICAgIGVsZW0tPnJl
bW92ZShlYyk7ICAgIAogICAgICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29udGV4
dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKGVsZW0sIGVjKTsKKyAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRz
KCplbGVtLCBlYyk7CiAgICAgICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQuZ2V0KCksIHRleHQpOwogICAgICAgICBlbGVt
LT5hcHBlbmRDaGlsZChXVEZNb3ZlKGZyYWdtZW50KSwgZWMpOwogICAgIApAQCAtMTk1MCwxNCAr
MTk1MCwxNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBQb3NpdGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJh
bmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgaWYgKHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpyYW5nZUNvbXBsaWFudFBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0
aW9uID0gZmFsc2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKICAgICAvLyB0
b3BOb2RlIGRlZmluZXMgdGhlIHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAg
ICBOb2RlKiB0b3BOb2RlID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CiAgICAgLy8g
RklYTUU6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8
dGFibGU+KQotICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zm
c2V0Rm9yRWRpdGluZyh0b3BOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHRvcE5v
ZGUpCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9m
ZnNldEZvckVkaXRpbmcodG9wTm9kZSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgLy8gSWYg
c3BlbGxpbmdTZWFyY2hSYW5nZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFu
Y2UgdG8gdGhlIG5leHQgd29yZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29y
ZCBib3VuZGFyeS4gR29pbmcgYmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEg
d29yZCBkb2VzIHRoZSB0cmljay4KQEAgLTIwMTEsNyArMjAxMyw3IEBAIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAg
ICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAog
ICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7
CiAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRh
aW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0
YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKQEAgLTIwMjIsOSArMjAyNCwxMCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCiAgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwg
MCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmICh0b3BOb2RlKQorICAgICAgICAgICAg
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJ
T04pOwogICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNo
dW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCi0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PnNldEVuZCgmc2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFw
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5k
KHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgIAogICAgICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpKSB7CiAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKCk7CkBAIC0yMDQ1LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
ICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3
b3JkCiAgICAgICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFy
Y2hSYW5nZSk7CiAgICAgICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJh
bmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0
RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0
T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0zMTY4LDkgKzMxNzEsOSBAQCBQ
YXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYQogICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9
IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkubm9uQm91
bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKHNoYWRvd1RyZWVS
b290KSB7CiAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dEVuZChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2Rl
cygpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CkBAIC0zMTg2LDkgKzMxODksOSBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdl
KiByZWZlcmVuY2VSYQogCiAgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFk
b3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAg
ICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93
VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOwor
ICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93VHJlZVJvb3QsIDAp
OwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFy
Y2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKQEAgLTMxOTcsMTAgKzMyMDAsMTIgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBS
YW5nZSogcmVmZXJlbmNlUmEKICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hh
ZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJl
ZS4KICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7
CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVy
KHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkp
OworICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0
ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5z
aGFkb3dIb3N0KCkpOworICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxh
aW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CkBAIC0zMjIzLDcg
KzMyMjgsNyBAQCBzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdl
KiByYW5nZSkKICAgICBib29sIGluUmFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOyBvd25lckVs
ZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKSkgewogICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRlcnNl
Y3RzTm9kZShvd25lckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaW5S
YW5nZSA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1NSw4ICsz
MjYwLDggQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoJm9yaWdpbmFsRW5kQ29udGFpbmVyLCBv
cmlnaW5hbEVuZE9mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93
SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMyNzUsMTEgKzMy
ODAsMTEgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgLy8gcmVzdWx0IHJhbmdl
LiBUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAogICAgICAg
ICAvLyBzaW5jZSBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92
ZXIgdGhlIHZpc2libGUKICAgICAgICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRTdGFydCgmcmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+
ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0
KCksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0g
c2VhcmNoUmFuZ2UtPnNoYWRvd1Jvb3QoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xs
YXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dU
cmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOTFhZDE3Njg2NmY0ZjEz
YzA3NGQ3ZDMxNDg0NWJmMzViYWI3ZDMzOS4uODFhYTAwMDgxYzc2ZGZhNTMzM2JhZDQ2ZDkwNDRi
NWE4YjNkZTg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBA
IC0yMjgsMTIgKzIyOCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5j
ZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxi
YXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSogYSwgUmFuZ2UqIGIpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UqIHN0YXJ0ID0gYS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAg
PyBiIDogYTsKLQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEtPm93bmVyRG9jdW1lbnQoKSwg
JnN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgJmVuZC0+ZW5k
Q29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworICAgIFJhbmdlJiBzdGFydCA9IGEuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOworICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/
IGIgOiBhOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3Rh
cnQuc3RhcnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWlu
ZXIoKSwgZW5kLmVuZE9mZnNldCgpKTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9u
cwpAQCAtMzU2LDggKzM1NSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAobWFy
ayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKKyAgICAgICAgYm9vbCBzZWxl
Y3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAq
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7
CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEwLDcgKzEwMDksNyBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdAogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJh
bmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVl
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2Vz
KCptYXJrLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcAppbmRleCBhMDI1NmE0MDBhOTNlNGY3NmU4OTgxOTVkNzhiNjhmNTE2OTgxMzYzLi5hYWE5
OWE4ZThlZDE2MWQxMTMyMDg0YmI0MjZjZGE5NjI4MjFiM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQg
Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1l
KCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihyZWZOb2RlLCBy
YW5nZS5nZXQoKSkpCisgICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKICAgICAgICAg
JiYgcmVmTm9kZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgewog
ICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMg
dGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRh
Z05hbWUoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4
IDVhYzMwNzc3ZWRmOGU2YTg0NTNhZDE3NDczNDNiOTNiNjBiNDM1N2QuLjhiMGIyYjUxYzNjZDI0
N2IxNGE3YzkzNjg2NDhkNGRkNjU5YzhlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBi
b28KICAgICAgICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVz
dWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCZub2RlLCBlYyk7CisgICAgICAgIFJhbmdlOjpDb21w
YXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5vZGUsIGVjKTsK
ICAgICAgICAgaWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVf
QU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5k
ZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAogICAgICAgICAgICAgLy8gb2Nj
dXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFu
Z2UgYXMgYSByZXN1bHQgb2YgCkBAIC0yNjA1LDcgKzI2MDUsNyBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFt
b3VudCkgYwogICAgIHJldHVybiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEFsdGVy
YXRpb25FeHRlbmQsIGFtb3VudCk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJh
bmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUqIG5v
ZGUpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewogICAgIFJlZlB0cjxSYW5n
ZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCmluZGV4IDY5YjVjOWY4MzY5MmEyMDBmOGRkYzkyY2NiOWM4ZjkxMWYyOWZmMTguLjk1YWMz
Nzc0YjgwMjQ1MGRiOWQ4ZmZlZDk3OWRkMjM4ZDA1ZjVlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTIzMCw3ICsyMzAsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9u
KGludCBhbW91bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+
IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vs
ZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9k
ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGVmNGY2MjE5MzM5ZTVh
NmFlYzk5MDI5Nzc4YjY4OWUxNGU4YzZhZmUuLjZmZjdjMWFlOTA5MzdjM2I0YTM2NTk0MTlmNGYx
MzliZjJhYjYwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBs
eUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBJZiB0aGUgZW50aXJlIGxpc3QgaXMgc2VsZWN0
ZWQsIHRoZW4gY29udmVydCB0aGUgd2hvbGUgbGlzdC4KLSAgICAgICAgaWYgKHN3aXRjaExpc3RU
eXBlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4obGlzdE5vZGUuZ2V0KCksIGN1cnJl
bnRTZWxlY3Rpb24pKSB7CisgICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKCpsaXN0Tm9kZSwgY3VycmVudFNlbGVjdGlvbikpIHsKICAgICAg
ICAgICAgIGJvb2wgcmFuZ2VTdGFydElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJO
b2RlKGxpc3ROb2RlLmdldCgpKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOwog
CkBAIC0yNDMsOSArMjQzLDkgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIGN1cnJlbnQgc2VsZWN0aW9uIGlm
IHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5vZGUKICAgICAgICAgICAgIC8vIGJlY2F1c2UgbW92
ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQgaGF2ZSByZW1vdmVkIHRoZW0uCiAgICAgICAgICAg
ICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3Vy
cmVudFNlbGVjdGlvbi0+c2V0U3RhcnQobmV3TGlzdCwgMCwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDAsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3
TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQobmV3TGlzdCwg
bGFzdE9mZnNldEluTm9kZShuZXdMaXN0LmdldCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5kKCpuZXdMaXN0LCBsYXN0T2Zmc2V0
SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5l
d0xpc3QuZ2V0KCkpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAppbmRleCA3NTM2OTIwMGMyOTU1YjA3NWM4M2I1MGNkNjU3MDc3NDVjZmVjOGY3
Li5iNjk1MmUyYjg2ZjE5Y2VjNjZkY2JhZmNlOTY2MjFiNmQ1MTE5OWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xNzQsOCArMTc0LDEz
IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50
IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpv
ZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOworICAgIGlmICghcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKICAgICBSZWY8UmFuZ2U+IHJhbmdlID0gb2Zmc2V0QXNSYW5nZSgpLT5jbG9u
ZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBv
c2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJhbmdlLT5z
ZXRFbmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggNDgzYTRkNDQwMGE0NDVmNTlhMmNj
ODM0ZmY4MmQ5MTdhOTUyZmQ0Ni4uZjJiMmZiNzA3ZjlhYjY1ZjJlM2NjZDQyZDhkNDBiNWJiMWJi
YTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTQ3OSw4
ICsxNDc5LDggQEAgUmVmPFJhbmdlPiBDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAog
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgICAg
ICAgICAgQVNTRVJUKCZub2RlID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAg
ICAgaW50IG9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpICsgbV9ydW5PZmZzZXQ7Ci0gICAg
ICAgICAgICByYW5nZS0+c2V0U3RhcnQoJm5vZGUsIG9mZnNldCk7Ci0gICAgICAgICAgICByYW5n
ZS0+c2V0RW5kKCZub2RlLCBvZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFy
dChub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZzZXQg
KyAxKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CkBAIC0xNTY5LDggKzE1
NjksOCBAQCBSZWY8UmFuZ2U+IEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNv
bnN0CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gci0+c3RhcnRDb250YWluZXIoKTsKICAgICAg
ICAgICAgIEFTU0VSVCgmbm9kZSA9PSAmci0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAg
aW50IG9mZnNldCA9IHItPmVuZE9mZnNldCgpIC0gbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICBy
LT5zZXRTdGFydCgmbm9kZSwgb2Zmc2V0IC0gMSk7Ci0gICAgICAgICAgICByLT5zZXRFbmQoJm5v
ZGUsIG9mZnNldCk7CisgICAgICAgICAgICByLT5zZXRTdGFydChub2RlLCBvZmZzZXQgLSAxKTsK
KyAgICAgICAgICAgIHItPnNldEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiByOwpAQCAtMjQ3OSw4ICsyNDc5LDggQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBp
bnQKICAgICAKICAgICAvLyBGSVhNRTogdGhlIGF0RW5kKCkgY2hlY2sgc2hvdWxkbid0IGJlIG5l
Y2Vzc2FyeSwgd29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyODk+LgogICAgIGlmICghcmFuZ2VMb2NhdGlvbiAmJiAhcmFuZ2VMZW5ndGggJiYg
aXQuYXRFbmQoKSkgewotICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgMCk7Ci0gICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRl
eHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5z
ZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CiAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdFJhbmdlKTsKICAgICB9CiAKQEAgLTI0OTgsMTIgKzI0
OTgsMTIgQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAgICAgICAgICAgICBpdC5hZHZh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpdC5hdEVuZCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgpOwotICAgICAgICAgICAgICAgICAg
ICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQo
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5TdGFydCA9
IHRleHRSdW5SYW5nZS0+c3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBQb3Np
dGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRpb24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZh
bGVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLmNvbnRhaW5l
ck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgqcnVuRW5kLmNvbnRhaW5lck5v
ZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTEyLDI0ICsyNTEyLDI0IEBA
IFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChD
b250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgICAgICBzdGFydFJhbmdlRm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VMb2NhdGlvbiAt
IGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQo
JnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4
dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0
T2Zmc2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFu
Z2VMb2NhdGlvbiA9PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVu
UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+
c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0
UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2Ut
PnNldFN0YXJ0KHRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5k
T2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5k
RW5kKSB7CiAgICAgICAgICAgICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlz
VGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSByYW5nZUVuZCAtIGRv
Y1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0
UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQo
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChyYW5nZUVuZCA9
PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRF
bmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVu
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0
RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFu
Z2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGRvY1RleHRQb3NpdGlvbiArPSBsZW5ndGg7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI1NDIsNyArMjU0Miw3IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGlmIChyYW5nZUxlbmd0aCAmJiByYW5n
ZUVuZCA+IGRvY1RleHRQb3NpdGlvbikgLy8gcmFuZ2VFbmQgaXMgb3V0IG9mIGJvdW5kcwotICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0
ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0
ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsK
ICAgICAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRSYW5nZSk7CiB9CkBAIC0yNTY2LDcgKzI1
NjYsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uo
Tm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZQogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5z
dGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKIAotICAgIHRlc3RSYW5nZS0+c2V0RW5kKCZy
YW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+
ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5z
dGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2NhdGlvbjsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI2MjMsNyArMjYyMyw3IEBAIHN0YXRpYyBzaXplX3QgZmluZFBsYWluVGV4dChjb25zdCBS
YW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9uCiAKICAgICBpZiAo
YnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkgewogICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0
YXJ0UmFuZ2UgPSByYW5nZS5vd25lckRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAg
YmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKCZyYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBmb3IgKFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoYmVmb3JlU3RhcnRS
YW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRv
ci5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIGJ1ZmZlci5wcmVwZW5kQ29udGV4dChiYWNrd2Fy
ZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAgICAgICAgaWYgKCFidWZmZXIubmVlZHNNb3JlQ29u
dGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4
IDJmZTI2ZDdjZjE3MGY5ZmQ4ZWY3ZmU1YTkyZTViMDg3OTU3OTY2NzMuLjQyMWVlMmJlMmUxN2Jk
OGM4Y2Y2YjYxZTRiYTJiZjdmOWFhNWE1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCwyNCArNzMwLDMyIEBAIFZpc2libGVQb3NpdGlvbiBl
bmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZFBvc2l0aW9uKCksIGFmZmluaXR5KTsKIH0K
IAotYm9vbCBzZXRTdGFydChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxl
UG9zaXRpb24pCitib29sIHNldFN0YXJ0KFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpbnQgY29k
ZSA9IDA7Ci0gICAgci0+c2V0U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNv
bnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsK
KyAgICByYW5nZS0+c2V0U3RhcnQoKnAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKIH0KIAotYm9vbCBzZXRFbmQoUmFuZ2Ug
KnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRFbmQo
UmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsK
LSAgICBpZiAoIXIpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5j
b250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJl
dHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0RW5kKCpwLmNvbnRh
aW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiAh
ZWM7CiB9CiAKIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywg
bGlrZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDdkYTY2YTE4ODZhZWY5MTcxNjZhYzQyOGFmYmMwNDdk
NGMxZmI4NWUuLmY4ZDkwMzNhOWM3MWI4ZDQ4YzU5NDc2OGFlNWZmYzkwMzRjNmVkODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjEzLDggKzIx
Myw4IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShjb25zdCBQb3NpdGlv
biYgcG9zKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgUG9zaXRpb24gc3RhcnQo
cG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsK
KyAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpib3VuZGFyeSwgZWMpOworICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVj
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGRlYjQwZmQwMWI5
MDlmNjAxYmU5ZDRmMTgwNDkwOWYyZmEwYzc2ZmUuLjYyMmY0MzZjZTVlNzA3ZDczZmMzMWRhMTRh
NjBiNzQ2YzdiNDgxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTU2OSw3ICs1NjksMTEgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5k
YXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBEb2N1bWVu
dCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoYm91bmRhcnlEb2N1bWVudCk7CisKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSZWY8
UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKICAg
ICAKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhM
ZW5ndGggPSAwOwpAQCAtNTc3LDE5ICs1ODEsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29y
ZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQmVmb3JlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4g
Zm9yd2FyZHNTY2FuUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAgICAg
ICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2Ut
PnNldEVuZEFmdGVyKCpib3VuZGFyeSwgZWMpOworICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+
c2V0U3RhcnQoKmVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShm
b3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoZW5kLmRlcHJlY2F0ZWROb2RlKCks
IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0ZWROb2Rl
KCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVj
KTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAg
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoKnNlYXJjaFJhbmdlKTsKKyAgICBT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlKTsKICAgICB1bnNp
Z25lZCBuZXh0ID0gYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoaXQs
IHN0cmluZywgc3VmZml4TGVuZ3RoLCBzZWFyY2hGdW5jdGlvbik7CiAKICAgICBpZiAoIW5leHQp
CkBAIC02MDIsNyArNjA2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5k
YXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICB9CiAKICAg
ICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFs
dWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBj
aGFySXQoKnNlYXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFy
SXQoc2VhcmNoUmFuZ2UpOwogICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZm
aXhMZW5ndGggLSBuZXh0KTsKICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNo
YWRvdyBob3N0LgogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpAQCAtNjE2LDcgKzYyMCw3IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2hGdW5jCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIERv
Y3VtZW50JiBib3VuZGFyeURvY3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50KCk7Ci0gICAgUmVm
UHRyPFJhbmdlPiBzZWFyY2hSYW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwor
ICAgIFJlZjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdl
KCk7CiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
IAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwpAQCAtNjI0LDIwICs2MjgsMjIgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKIAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3Jk
Qm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRlcigpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGJh
Y2t3YXJkc1NjYW5SYW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwotICAgICAg
ICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpCisgICAgICAgICAgICBiYWNrd2FyZHNTY2FuUmFu
Z2UtPnNldEVuZCgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHByZWZpeExlbmd0aCA9IHBy
ZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAK
LSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBJR05PUkVfRVhD
RVBUSU9OKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0g
ICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0No
YXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgc2VhcmNoUmFuZ2UtPnNl
bGVjdE5vZGVDb250ZW50cygqYm91bmRhcnksIElHTk9SRV9FWENFUFRJT04pOworICAgIGlmIChz
dGFydC5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5wdHIoKSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwog
ICAgIHVuc2lnbmVkIG5leHQgPSBmb3J3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJh
dG9yKGl0LCBzdHJpbmcsIHByZWZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAg
IGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkKICAgICAgICAgcG9zID0g
c2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CiAgICAgZWxzZSBpZiAobmV4dCA+IHByZWZpeExl
bmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xh
dGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgQ2hhcmFjdGVy
SXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBj
aGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxW
aXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExl
bmd0aCAtIDEpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhckl0
LnJhbmdlKCk7CiAgICAgICAgIHBvcyA9IGNoYXJhY3RlclJhbmdlLT5lbmRQb3NpdGlvbigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCAyOWM5YWY4NWUwYjZlZTBh
MzA0MzVhOTZlZWNkNzJmODUyODBlZTc4Li41ODA4NzIwNWYwOWRjYjg3NzQ0ZjI1ZTM4OTU2YmJh
MjQ2NWQwNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTE3
MSw3ICsxMTcxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNp
bmdDaGFyYWN0ZXJJdGVyYXRvcihOb2RlKiBub2RlLCBpbnQgaW4KICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJF
QU0pOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9j
dW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdCgqcmFuZ2UpOwogICAgIGl0LmFkdmFu
Y2UoaW5kZXggLSAxKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LmF0RW5kKCkgPyBy
YW5nZS0+ZW5kUG9zaXRpb24oKSA6IGl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIFVQU1RSRUFN
KTsKQEAgLTExODYsMjAgKzExODYsMTkgQEAgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQ
b3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiAKIC8vIERldGVybWluZXMg
d2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9u
IHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0
ZWRSYW5nZQotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNv
bnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0
aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQogewotICAgIEFTU0VS
VChub2RlKTsKICAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CiAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbgog
ICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9O
KSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9v
bCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9
PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxs
eVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUp
LCBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCisgICAgYm9vbCBzdGFydElzVmlz
dWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZSgmbm9kZSkgPT0gc2VsZWN0ZWRS
YW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNv
bXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIHNlbGVjdGVk
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBi
b29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09
IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1l
ICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKSkgPCAwKQorICAgIGJvb2wgZW5kSXNWaXN1YWxs
eVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoJm5vZGUpID09IHNlbGVjdGVkUmFuZ2Ut
PmVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3Np
dGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZSgmbm9kZSkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4g
c3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJc1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuaAppbmRleCBjMTU0NzljOTZhNDBlMWUyMDliYTkyNzUwZWRhMjgyNmU2
YzViN2U3Li5mMjE1MTY0NWRjNjc4ZmJkYzQ3YTA2MmM0MjFmNDJiNjZkMTM5MjIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBpc1Rh
YmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlKik7CiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSop
OwogYm9vbCBpc0xpc3RJdGVtKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29u
c3QgTm9kZSopOwotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqLCBjb25z
dCBSYW5nZSopOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25z
dCBSYW5nZSopOwogYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25z
dCBOb2RlKik7CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqLCBjb25zdCBO
b2RlKik7CiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMTI1YzVhOTgwYzI4
NGEzOTRkMDM2NDA0YWE4NTU5MDdjYTE3NTRmMC4uNzNjNWRhY2Y0NTM0YzY4NjZkM2Q0OTk5OTdl
ZjAzMTg0YjA2ZmM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpA
QCAtMzE4LDcgKzMxOCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlv
blJhbmdlKCkKICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAgIGF1dG8qIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29t
bW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwogICAgIGlmIChlbmNsb3NpbmdBbmNob3Ig
JiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAw
KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDAsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgIHJldHVybiByYW5nZTsKIH0KICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCAxNDQyMjUyYmQ1MjE1
ZDkzNTc3ZThjZjQ3YmE5ZTUxZDYzZTI4NDM0Li5lZjIyZTUyNmJiYmJiNGM1NDhiOTRhMDFmZTM4
OTMzNzc2MzM4NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwCkBAIC00MTMsNyArNDEzLDggQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6
OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAg
ICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7
CiAgICAgICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJh
bmdlLT5zZWxlY3ROb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKCpkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIH0KICAgICAgICAgbV9jbGllbnQu
c3BlYWsocGxhaW5UZXh0KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggZTExOWY2NGQ4YjY3ZmJmZjNkMTUz
MDdkZmVhODk4NmZmMjE2ODk4Yi4uZjYwNTY2MWJkODUzYWE3Nzk4YmE0ZTdlNTc3NTFlZDc1Zjdj
MmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzkzLDEwICszOTMs
MTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQogICAgIH0KIAogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9U
T19TVEFSVCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgaWYg
KCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0g
LTEpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlv
bi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0Lgot
ICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQs
IHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKKyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID4g
LTEpIHsKKyAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgogICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbi5tb3ZlVG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRp
b24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA3LDggKzQxMCw4
IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBk
b24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewot
ICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VO
RCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChy
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKnJhbmdlLCBlYykg
PCAxICYmICFlYykgeworICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewogICAg
ICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyByLgogICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggMWNjODM4NGE0OTYx
ZTM4OGEzZjIxYjBjYzI0ZTAyMDIzZTY1NGYxNy4uMGM5MGI0MTRiNWEyZTA2ZjBhOTkxZDUwN2Nk
NTc4NjY0MjI0ZWM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAg
LTcxMiw3ICs3MTIsNyBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQp
CiBzdGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAg
IHJhbmdlLT5zZWxlY3ROb2RlKCZlbGVtZW50KTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVt
ZW50KTsKICAgICBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAxOGM0NzVmMWVlODE3ZTRlNWYxNzAyZGIz
YjRmYTM5OTNlMDM0NGJmLi4xNzUyMjM2YzdhNjc5OTBjM2UyZGI3Y2NhZjNiZTQ0ZTg0MzQyYzZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNTA3LDcgKzI1MDcsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZQogICAgICAgICAgICAgICAgIC8vIGZvY3VzZWQgaWYg
dGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93ZXZlciwgYmVjYXVzZSB0aGUgbW91
c2V1cAogICAgICAgICAgICAgICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwg
d2hpY2ggd2lsbCBjYWxsIHNldEZvY3VzZU5vZGVJZk5lZWRlZC4KICAgICAgICAgICAgICAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShlbGVt
ZW50LCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21w
YXJlTm9kZSgqZWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
CiAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDkxNTNk
MDQ0MmE3MDU3ZDRhODBkMDUwMDNhMDBmZjExNmNiYzFjZTAuLjhkZjFkMzYxZjM2ZmQ0MTY1ZWJh
MTk2M2NkZTZmZmM4NDU2ZjJmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNjMyLDE0ICs2MzIs
MTQgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zICYgQmFja3dhcmRzKSB7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX1NUQVJULCBtYXRjaFJhbmdlc1tpIC0gMV0uZ2V0KCksIElHTk9SRV9FWENF
UFRJT04pID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSwg
SUdOT1JFX0VYQ0VQVElPTikgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2Vs
ZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBtYXRjaFJhbmdlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQ
VElPTikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0sIElHTk9S
RV9FWENFUFRJT04pIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDE3Njg0YzU3NDg4MzI4OTY3NjBm
NDZlZTlkMWNmMWI4MDhjMzA2MmEuLjI2ZWYzN2MzZDJiZjRkMDI1MWYwZGE3NTBjNjEwMGJlZDc5
YmRmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMTI1LDcgKzEy
NSw3IEBAIHN0YXRpYyBib29sIGhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBS
YW5nZSYgcmFuZ2UpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lubGluZSgpIHx8IHJlbmRlcmVyLT5pc1JlcGxhY2Vk
KCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2RlKG5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pKQor
ICAgICAgICBpZiAoKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNl
ZCgpKSAmJiByYW5nZS5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTikp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMzI5MjAzMTliZjFk
OTY3MzE4YTM0ZDY1MmY2YzFlYzViNGFmZDEyNS4uYjM2ZWE0ZTg5NmE1ZjE3YjVjM2IyNzI0NDZj
MGY2NTJkOGU1Yzg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTY5NCw4ICs2OTQsOCBAQCB2b2lkIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3Rz
LCBjb25zdAogICAgICAgICAgICAgaWYgKCFib3hJbnRlcnNlY3RzUmVnaW9uKGxvZ2ljYWxUb3BG
b3JSZW5kZXJlciwgbG9naWNhbEJvdHRvbUZvclJlbmRlcmVyLCBsb2dpY2FsVG9wRm9yUmVnaW9u
LCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKSkgewogICAgICAgICAgICAgICAgIGlmIChmb3VuZFN0
YXJ0UG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydHNBYm92ZVJlZ2lv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShu
b2RlLCBJR05PUkVfRVhDRVBUSU9OKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0RW5kQmVmb3JlKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElP
TikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEJlZm9yZSgqbm9k
ZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZU9iamVj
dHMuYXBwZW5kKHJhbmdlLT5jbG9uZVJhbmdlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNvbnRlbnRFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0c0Fib3ZlUmVnaW9uID0gdHJ1ZTsKQEAgLTcwMyw3ICs3
MDMsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAg
c2tpcE92ZXJPdXRzaWRlTm9kZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoc2tpcE92ZXJPdXRzaWRlTm9kZXMpCi0gICAgICAgICAgICAgICAgICAgIHJh
bmdlLT5zZXRTdGFydEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAg
ICAgICAgICByYW5nZS0+c2V0U3RhcnRBZnRlcigqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAg
ICAgICAgICAgICAgICAgZm91bmRTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdl
T2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAvLyB0aGUgcmFuZ2UgaXMgY2xvc2VkLgog
ICAgICAgICAgICAgICAgIGlmIChzdGFydHNBYm92ZVJlZ2lvbikgewogICAgICAgICAgICAgICAg
ICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0U3RhcnRCZWZvcmUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLT5zZXRTdGFydEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2tpcE92ZXJPdXRz
aWRlTm9kZXMgID0gZmFsc2U7CkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywg
Y29uc3QKICAgICAgICAgICAgICAgICAvLyBmb3IgZWxlbWVudHMgdGhhdCBlbmRzIGluc2lkZSB0
aGUgcmVnaW9uLCBzZXQgdGhlIGVuZCBwb3NpdGlvbiB0byBiZSBhZnRlciB0aGVtCiAgICAgICAg
ICAgICAgICAgLy8gYWxsb3cgdGhpcyBlbmQgcG9zaXRpb24gdG8gYmUgY2hhbmdlZCBvbmx5IGJ5
IG90aGVyIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiB0aGUgY3VycmVudCBl
bmQgbm9kZQogICAgICAgICAgICAgICAgIGlmIChlbmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVs
b3dSZWdpb24gJiYgIW5vZGUtPmlzRGVzY2VuZGFudE9mKGxhc3RFbmROb2RlKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04p
OworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQWZ0ZXIoKm5vZGUsIElHTk9SRV9F
WENFUFRJT04pOwogICAgICAgICAgICAgICAgICAgICBlbmRzQmVsb3dSZWdpb24gPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgbGFzdEVuZE5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDA2MzMwN2M5OTkzNTY0
NTQ2N2Y5YTM0OTJjMDk2YzNjNDIyNWMzOWIuLmE3MmEwYTNmODU3N2M3MDYyYWZhOTRlYjI1NTcw
ZDY1N2RiODI0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODcz
LDExICs4NzMsMTMgQEAgLSAoRE9NUmFuZ2UgKilfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZQogICAgIG5ld1N0YXJ0ID0gbmV3U3RhcnQu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgbmV3RW5kID0gbmV3RW5kLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7Ci0gICAgaW50IGV4Y2VwdGlv
biA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3
U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgcmFuZ2UtPnNl
dEVuZChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIFJl
ZjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVS
YW5nZSgpOworICAgIGlmIChuZXdTdGFydC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaW50
IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbmV3U3RhcnQuY29udGFp
bmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgcmFuZ2UtPnNldEVuZCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJu
IGtpdChyYW5nZS5wdHIoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VV
UkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAKQEAgLTE2MjgsMTEgKzE2MzAsMTEg
QEAgLSAodm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxl
bWVudCAqKWVsZW1lbnQKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9k
ZSAqbm9kZSA9IGNvcmUoZWxlbWVudCk7CisgICAgTm9kZSogbm9kZSA9IGNvcmUoZWxlbWVudCk7
CiAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdFJhbmdlT25FbGVtZW50KHJhbmdlLmxvY2F0
aW9uLCByYW5nZS5sZW5ndGgsIG5vZGUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RS
YW5nZU9uRWxlbWVudChyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCAqbm9kZSk7CiB9CiAK
IC0gKERPTVJhbmdlICopbWFya2VkVGV4dERPTVJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdl
Lm1tCmluZGV4IGUwODA2YmNiNmE3NzM0ZTJkMzQ0MTQ5NWIxNGVkNmZiMjdkMjI0OTkuLjkzZTg0
OWY2M2IxNGIyZGM0ZDVhOTU0OTQ3MTFmMTAzNTE1ZWRmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVJhbmdlLm1tCkBAIC02NSwxNiArNjUsMjAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQp
c2V0U3RhcnQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CiB7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91
dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IF9pbXBsLT5zZXRTdGFydChXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIG9mZnNldCwgZWMp
OworICAgIF9pbXBsLT5zZXRTdGFydCgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZz
ZXQsIGVjKTsKIH0KIAogLSAodm9pZClzZXRFbmQ6KFdLRE9NTm9kZSAqKW5vZGUgb2Zmc2V0Oihp
bnQpb2Zmc2V0CiB7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBsLT5zZXRFbmQoV2ViS2l0Ojp0b1dlYkNvcmVOb2Rl
KG5vZGUpLCBvZmZzZXQsIGVjKTsKKyAgICBfaW1wbC0+c2V0RW5kKCpXZWJLaXQ6OnRvV2ViQ29y
ZU5vZGUobm9kZSksIG9mZnNldCwgZWMpOwogfQogCiAtICh2b2lkKWNvbGxhcHNlOihCT09MKXRv
U3RhcnQKQEAgLTg0LDE2ICs4OCwyMCBAQCAtICh2b2lkKWNvbGxhcHNlOihCT09MKXRvU3RhcnQK
IAogLSAodm9pZClzZWxlY3ROb2RlOihXS0RPTU5vZGUgKilub2RlCiB7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUg
ZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBs
LT5zZWxlY3ROb2RlKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgZWMpOworICAgIF9pbXBs
LT5zZWxlY3ROb2RlKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKIH0KIAogLSAo
dm9pZClzZWxlY3ROb2RlQ29udGVudHM6KFdLRE9NTm9kZSAqKW5vZGUKIHsKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRo
ZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgX2lt
cGwtPnNlbGVjdE5vZGVDb250ZW50cyhXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsK
KyAgICBfaW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9k
ZSksIGVjKTsKIH0KIAogLSAoV0tET01Ob2RlICopc3RhcnRDb250YWluZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGFhMjc0YmFhMWNj
ODkwOTcyNThkMTFhMjcwZDRhMDM4N2Y5YjdiMjcuLmRiMjJmMWU1ZGMxZTM1YWFiNTA3OTBjMTI5
OGExZjM0ZTAzNGNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIFN0cmluZyBXZWJGcmFtZTo6Y29udGVu
dHNBc1N0cmluZygpIGNvbnN0CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRvY3VtZW50LT5j
cmVhdGVSYW5nZSgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmFuZ2UtPnNl
bGVjdE5vZGUoZG9jdW1lbnRFbGVtZW50LmdldCgpLCBlYyk7CisgICAgcmFuZ2UtPnNlbGVjdE5v
ZGUoKmRvY3VtZW50RWxlbWVudCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276894</attachid>
            <date>2016-04-20 20:03:49 -0700</date>
            <delta_ts>2016-04-20 20:50:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420200412.patch</filename>
            <type>text/plain</type>
            <size>101072</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVu
c2lvbnMubW0KaW5kZXggODZkNzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4u
ZWFkYWE2YTFkMDBmNTQ1NDNlZTc4MDAwMTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4
ICsxMTMsMTAgQEAgLSAodm9pZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJU
ZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9y
ZWQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFy
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1l
U2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwot
ICAgIHJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWlu
ZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYg
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5j
b250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
KyAgICBpZiAoZW5kLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5k
LmNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsK
IH0KIAogLSAodm9pZClleHRlbmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRB
ZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpAQCAtMTI5LDggKzEzMSwxMCBAQCAtICh2b2lk
KWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCiAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5lbmQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByYW5nZS0+c2V0U3Rh
cnQoc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
aWdub3JlZCk7Ci0gICAgcmFuZ2UtPnNldEVuZChlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOworICAgIGlmIChzdGFydC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKGVuZC5jb250
YWluZXJOb2RlKCkpCisgICAgICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CiB9CiAKIC0gKERPTU5vZGUg
KilmaXJzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjli
ZTE1OWFmY2ZiMTIxOGFmLi44MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92
ZWRMYXN0UmVmKCkKIHZvaWQgTm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0
aGlzKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhj
b25zdF9jYXN0PE5vZGUmPigqdGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRSZWN0cyhyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3
NjFhYzRlMDNjZTMwOGM3ZDUzNmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3
ZWVmZDM4ODgyYjdkNTk4MzFlYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBA
QCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhN
RTogc3RhcnRDb250YWluZXIgYW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVm
PE5vZGU+JiYuCiBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3Vt
ZW50KG93bmVyRG9jdW1lbnQpCiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMs
OCArOTQsMTAgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwg
UGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0
aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkg
b2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3
ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQpOwotICAgIHNldEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYg
KHN0YXJ0Q29udGFpbmVyKQorICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0
T2Zmc2V0KTsKKyAgICBpZiAoZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRh
aW5lciwgZW5kT2Zmc2V0KTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50
JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3Rh
cnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpA
QCAtMTI5LDggKzEzMiw4IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCkKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAg
ICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1l
bnQgPSBkb2N1bWVudDsKLSAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsK
LSAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0x
NTcsMTMgKzE2MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RD
b250YWluZXIoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0
Um9vdENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXJ0LCBlbmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZv
aWQgUmFuZ2U6OnNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUp
IHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBib29sIGRpZE1vdmVEb2N1bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1l
bnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUt
PmRvY3VtZW50KCkpOwpAQCAtMTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQo
UGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09m
ZnNldChyZWZOb2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBj
aGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUp
OworICAgIG1fc3RhcnQuc2V0KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsK
IAogICAgIGlmIChkaWRNb3ZlRG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFp
bmVyKG1fc3RhcnQsIG1fZW5kKSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wg
ZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1l
bnQoKSk7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0
cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAK
ICAgICBlYyA9IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZO
b2RlLmdldCgpLCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVX
T2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9lbmQuc2V0KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2Vu
ZC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRp
ZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwg
bV9lbmQpKQogICAgICAgICBjb2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2
b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQg
PSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRB
bmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsK
KyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0
U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0
IFBvc2l0aW9uJiBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVu
dEFuY2hvcmVkID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChw
YXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2Rl
KCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVk
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNl
KGJvb2wgdG9TdGFydCkKQEAgLTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2Uo
Ym9vbCB0b1N0YXJ0KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6
OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVj
ID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZy
ZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5v
ZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTI0MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJh
bmdlKE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlm
IChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKHJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAg
ICAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9v
bCByZXN1bHQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRD
b250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYm
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwg
bV9lbmQub2Zmc2V0KCksIGVjKSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBh
cmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9z
dGFydC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFy
eVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgp
LCBlYykgPD0gMCAmJiAhZWM7CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVO
VF9FUlIpOwogICAgIGVjID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5n
ZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRl
c2NyaWJlZCBieSB0aGUgCiAgICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGlu
IHRoZSBub2RlIGlzIGJlZm9yZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3Rp
dmVseS4KLQotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9
ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3du
ZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29t
cGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogICAgIGlmIChlYykgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8g
Y2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSBy
b290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0
byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9k
ZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgp
ICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkp
KQogICAgICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZv
cmUKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0
Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVC
b3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgZWMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29t
ZXMgYWZ0ZXIKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwg
JmVuZENvbnRhaW5lcigpLCBtX2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYg
KGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCks
IG1fZW5kLm9mZnNldCgpLCBlYykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAg
ICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3Vu
ZGFyeSBwb2ludHMKICAgICByZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJh
bmdlOjpjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K1JhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9kb2NzL0RPTTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9k
IHJldHVybnMgMCwgMSwgMiwgb3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFm
dGVyLAogICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSBy
YW5nZSwgcmVzcGVjdGl2ZWx5CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAo
IXJlZk5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhp
cyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9
CiAKLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewor
ICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAg
ICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBp
dCByZXR1cm5zIDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBD
b250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVu
c2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYg
KCFwYXJlbnROb2RlKSB7CiAgICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1l
bnQgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEw
LDIyIEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9S
RTsKICAgICB9CiAKLSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwg
ZWMpIDwgMCkgeyAvLyBzdGFydHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFy
ZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UK
KyAgICAvLyBzdGFydHMgYmVmb3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4LCBlYykgPCAwKSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAg
ICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9E
RV9CRUZPUkU7IC8vIGVuZHMgYmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8v
IHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRo
ZSByYW5nZQotICAgICAgICAgICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBO
T0RFX0lOU0lERTsgLy8gZW5kcyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0
cyBhdCBvciBhZnRlciB0aGUgcmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJl
bnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQor
ICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVu
ZHMgaW5zaWRlIHRoZSByYW5nZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJl
SG93IGhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VS
YW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9j
dW1lbnQoKSAhPSAmc291cmNlQ29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05H
X0RPQ1VNRU5UX0VSUjsKQEAgLTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwg
RXhjCiAKICAgICBzd2l0Y2ggKGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VS
YW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RB
UlRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2Vu
ZCwgc291cmNlUmFuZ2UtPm1fc3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
Qm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAg
Y2FzZSBFTkRfVE9fRU5EOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhtX2VuZCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAg
ICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQ
b2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1
cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7
CiAgICAgfQogCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9y
dCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQg
Y29tcGFyZUhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3Nob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNp
Z25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2
b2lkIFJhbmdlOjpkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNz
Q29udGVudHMoRGVsZXRlLCBlYyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJz
ZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5E
b2N1bWVudCgpIHx8ICZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJl
Zk5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVm
Tm9kZS5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKTsKKyAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgo
KTsKIAogICAgIC8vIElmIChwYXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVu
dCwgb2Zmc2V0ICsgMSkgaXMgYWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVy
d2lzZSwgcmV0dXJuIGZhbHNlLgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2lu
dChwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0g
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBj
b21wYXJlRmlyc3QgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwor
ICAgIHNob3J0IGNvbXBhcmVTZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJ
bmRleCArIDEsIGVjKTsKIAogICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0g
bV9lbmQgPyBjb21wYXJlRmlyc3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBp
c1NlY29uZEFmdGVyU3RhcnQgPSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAg
OiBjb21wYXJlU2Vjb25kID49IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUKICAgICBlYyA9IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlv
biA9PSBEZWxldGUpIHsKICAgICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5j
b250YWlucyhwYXJ0aWFsU3RhcnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlh
bFN0YXJ0LT5wYXJlbnROb2RlKCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsg
MSwgZWMpOworICAgICAgICAgICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgp
LCBwYXJ0aWFsU3RhcnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxz
ZSBpZiAocGFydGlhbEVuZCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgp
KSkKLSAgICAgICAgICAgIHNldFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlh
bEVuZC0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFy
dGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVj
KTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IG1fZW5kID0gbV9zdGFydDsKQEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVy
biBwcm9jZXNzQ29udGVudHMoQ2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omlu
c2VydE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgYm9vbCBzdGFydElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0
YXJ0Q29udGFpbmVyKCkpOwogICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRD
b250YWluZXIoKS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVT
VF9FUlI7CkBAIC04NTksNyArODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8
Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMg
PSAwOwotICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwg
cmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNl
cnRpb25WYWxpZGl0eShub2RlLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2
b2lkIFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2Rl
ID09IG5vZGUpCisgICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAg
cmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2Rl
LT5yZW1vdmUoZWMpOwpAQCAtODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9k
ZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5v
ZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAg
aWYgKGlzPERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRv
d25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBp
ZiAoaXM8RG9jdW1lbnRGcmFnbWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCAr
PSBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMo
KTsKICAgICBlbHNlCiAgICAgICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7Cisg
ICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQo
KSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNl
ZCgpKQotICAgICAgICBzZXRFbmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAg
ICAgc2V0RW5kKFdURk1vdmUocGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBS
YW5nZTo6dG9TdHJpbmcoKSBjb25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRl
dGFjaCgpCiAgICAgLy8gVGhpcyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZp
Y2F0aW9uLgogfQogCi1Ob2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVX
T2Zmc2V0KE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTk2MCw3ICs5MzEsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
KiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBO
b2RlOjpDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+
KCpuKS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zm
c2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBO
b2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGlmICghb2Zmc2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZz
ZXQgLSAxKTsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRv
Q2hpbGRBdChvZmZzZXQgLSAxKTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAg
ICAgICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGls
ZEJlZm9yZTsKQEAgLTk4NCwxMDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJh
bmdlKCkgY29uc3QKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZz
dGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5k
Lm9mZnNldCgpKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZO
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6
c2V0RW5kQmVmb3JlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kQmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFy
ZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnRO
b2RlKCksIHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVm
Tm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAK
LXZvaWQgUmFuZ2U6OnNldEVuZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsK
KyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5v
ZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwor
ICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRl
eCgpICsgMSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3Vt
ZW50KCkgIT0gJnJlZk5vZGUuZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9k
ZS5kb2N1bWVudCgpKTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4
KCk7CiAgICAgZWMgPSAwOwotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5k
ZXgsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVu
dE5vZGUoKSwgaW5kZXggKyAxLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUo
KSwgaW5kZXggKyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhO
b2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVD
b250ZW50cyhOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJl
Zk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAocmVmTm9kZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVm
Tm9kZS5pc0RvY3VtZW50VHlwZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9U
WVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVu
dCgpICE9ICZyZWZOb2RlLT5kb2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2Rl
LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1
bWVudCgpKQorICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAg
bV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZO
b2RlKHJlZk5vZGUpOwogfQogCi12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpz
dXJyb3VuZENvbnRlbnRzKE5vZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYg
KCFuZXdQYXJlbnQpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUmVmPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAv
LyBJTlZBTElEX1NUQVRFX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0
cyBhIG5vbi1UZXh0IG5vZGUuCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNk
b20tcmFuZ2Utc3Vycm91bmRjb250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBA
IHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFy
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSog
biA9IG5ld1BhcmVudC0+Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5l
ck5vZGU+KCpuZXdQYXJlbnQpLnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KG5ld1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAg
ICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEw
ODcsMTcgQEAgdm9pZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBh
c3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hp
bGQoZnJhZ21lbnQucmVsZWFzZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
Ci0gICAgc2VsZWN0Tm9kZShuZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5l
d1BhcmVudCwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUm
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
cmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29t
cHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgp
LCByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmly
c3ROb2RlKCkgY29uc3QKQEAgLTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFp
bnMoY29uc3QgUmFuZ2UmIG90aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRh
aW5lcigpLT5vd25lckRvY3VtZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
KS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBz
dGFydFRvU3RhcnQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJU
LCAmb3RoZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgc2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hv
cnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90
aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0K
IApAQCAtMTU3NSwxOSArMTUxMSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2Uq
IGEsIGNvbnN0IFJhbmdlKiBiKQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
LT5vd25lckRvY3VtZW50KCkgIT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3Rh
cnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRv
RW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vj
b25kIHJhbmdlLgogICAgIGlmIChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNp
ZGUgc2Vjb25kIHJhbmdlLgotICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8
PSAwKQorICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VO
RCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUg
c2Vjb25kIHJhbmdlLgotICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMCkKKyAgICBpZiAoc3RhcnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUz
Myw3IEBAIFJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVm
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQg
ZXhjZXB0aW9uID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNl
cHRpb24pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsK
ICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXIKIHsKICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRh
aW5lci5maXJzdENoaWxkKCk7IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9k
ZVRvQmVSZW1vdmVkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGls
ZEJlZm9yZSgpID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0
VG9TdGFydE9mTm9kZSgmY29udGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3Rh
cnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAg
ICAgICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAg
ICAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSAr
MTY0Myw5IEBAIHZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5v
ZGVzTWVyZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkg
PT0gb2xkTm9kZS5ub2RlKCkpCi0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+
cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAg
ICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5k
YXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgp
ID09IG9sZE5vZGUuaW5kZXgoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgp
LT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpv
bGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQg
UmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCkBAIC0xNzMwLDcgKzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAg
ICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAo
Ym91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChv
bGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsK
KyAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRh
cnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3
IEBAIHZvaWQgUmFuZ2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICBlbmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybjsKLSAgICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5l
ck5vZGUoKSwgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKLSAgICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVjKTsKKworICAgIGlmICghc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c2V0U3RhcnQoKnN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IGlmICghZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVj
ID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0
PiBSYW5nZTo6Z2V0Q2xpZW50UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2
NzJlYjJjYmJhNWJmZjZhMzVkMGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVm
OGZlMjZmMjg3NGJmMzE5ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1
YmxpYzoKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1
cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWlu
ZXIoKSk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JD
b250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xs
YXBzZShib29sIHRvU3RhcnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFu
Z2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0
IGNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50
KE5vZGUmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBl
bnVtIENvbXBhcmVSZXN1bHRzIHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JF
X0FORF9BRlRFUiwgTk9ERV9JTlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9k
ZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3Vs
dHMgY29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IGVudW0gQ29tcGFyZUhvdyB7IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19F
TkQsIEVORF9UT19TVEFSVCB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyh1bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91
bmRhcnlQb2ludHMoQ29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7CisgICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGlu
Z3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhOb2RlKiBjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50
IG9mZnNldEIsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYm91bmRhcnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJz
ZWN0c05vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wg
aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZvaWQgZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBleHRyYWN0Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGlu
c2VydE5vZGUoUmVmPE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKIAogICAgIFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8
UmFuZ2U+IGNsb25lUmFuZ2UoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhcnRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVu
ZEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVD
b250ZW50cyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50
cyhQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFydEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2Rl
JiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhj
ZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c3Vycm91bmRDb250ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNv
bnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9z
aXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdP
ZmZzZXQoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CiAKICAgICBlbnVtIEFjdGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2Jk
YWMxNGQ5YjIzMWNjMGQxZGI0MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFh
NDYyMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25z
dHJ1Y3RvciwKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50
ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9u
TGFja3NWVGFibGUsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFj
ZSBSYW5nZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBv
aW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhl
ODhjM2M2NmFkOTI5YWY1YjRhZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2
YjlhNWVhNGU0MWQzYzk0NDc3NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5
UG9pbnQuaApAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBO
b2RlKiBjaGlsZEJlZm9yZSk7CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBp
bnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9m
ZnNldCk7CiAKICAgICB2b2lkIHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0
VG9BZnRlckNoaWxkKE5vZGUmKTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0
cjxOb2RlPik7Ci0gICAgdm9pZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAg
ICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRP
Zk5vZGUoUmVmPE5vZGU+JiYpOwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQo
KTsKICAgICB2b2lkIGludmFsaWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDEx
IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSkKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNT
RVJUKGNvbnRhaW5lcik7CiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hp
bGRCZWZvcmUgPT0gKG9mZnNldCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0
IC0gMSkgOiAwKSk7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29u
dGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVy
ID0gb2Zmc2V0OwogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpA
QCAtMTUxLDE4ICsxNTAsMTYgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRU
b0FmdGVyQ2hpbGQoTm9kZSYgY2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hp
bGRCZWZvcmVCb3VuZGFyeSA/IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBS
YW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250
YWluZXIpCitpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUo
UmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1f
Y29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3Zl
KGNvbnRhaW5lcik7CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2
b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNv
bnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAg
aWYgKG1fY29udGFpbmVyTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9v
ZmZzZXRJbkNvbnRhaW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1
ZWRmMGI2YzJkM2U5ZTdlMjU5OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2
MjYyZDI2ZTRjMjljMmU5MjQ4MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShjb25zdCBSYW5nZSogcmFuZ2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFs
dGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZS
YW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdl
V2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0
ZmU4ZmJkOTQuLmFjNDY0ODg5ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyAr
NzIyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAg
IEVsZW1lbnQqIGVkaXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChl
ZGl0YWJsZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYm
IGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJh
bmdlLmdldCgpKSkKKyAgICAgICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBh
cmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bigqc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgw
MDAuLjYyZDA2ZjllNmI2M2NmOTk2NjMzNGJjMTFhZDVkYTZiY2FhOTQ3OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGlj
dGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgZAogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7ICAgIAogICAgIFJlZlB0cjxSYW5nZT4g
Y29udGV4dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICBjb250ZXh0LT5zZWxlY3RO
b2RlQ29udGVudHMoJmVsZW1lbnQsIGVjKTsKKyAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVu
dHMoZWxlbWVudCwgZWMpOwogCiAgICAgU3RyaW5nQnVpbGRlciBkaWN0YXRpb25QaHJhc2VzQnVp
bGRlcjsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBocmFzZXMp
CkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCogZWxlbSkKICAgICAgICAgICAgIGVsZW0tPnJl
bW92ZShlYyk7ICAgIAogICAgICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29udGV4
dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKGVsZW0sIGVjKTsKKyAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRz
KCplbGVtLCBlYyk7CiAgICAgICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQuZ2V0KCksIHRleHQpOwogICAgICAgICBlbGVt
LT5hcHBlbmRDaGlsZChXVEZNb3ZlKGZyYWdtZW50KSwgZWMpOwogICAgIApAQCAtMTk1MCwxNCAr
MTk1MCwxNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBQb3NpdGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJh
bmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgaWYgKHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpyYW5nZUNvbXBsaWFudFBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCksIHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0
aW9uID0gZmFsc2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKICAgICAvLyB0
b3BOb2RlIGRlZmluZXMgdGhlIHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAg
ICBOb2RlKiB0b3BOb2RlID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CiAgICAgLy8g
RklYTUU6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8
dGFibGU+KQotICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zm
c2V0Rm9yRWRpdGluZyh0b3BOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHRvcE5v
ZGUpCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9m
ZnNldEZvckVkaXRpbmcodG9wTm9kZSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgLy8gSWYg
c3BlbGxpbmdTZWFyY2hSYW5nZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFu
Y2UgdG8gdGhlIG5leHQgd29yZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29y
ZCBib3VuZGFyeS4gR29pbmcgYmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEg
d29yZCBkb2VzIHRoZSB0cmljay4KQEAgLTIwMTEsNyArMjAxMyw3IEBAIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAg
ICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAog
ICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7
CiAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRh
aW5lcigpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0
YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKQEAgLTIwMjIsOSArMjAyNCwxMCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCiAgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwg
MCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmICh0b3BOb2RlKQorICAgICAgICAgICAg
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJ
T04pOwogICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNo
dW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCi0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PnNldEVuZCgmc2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFw
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5k
KHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgIAogICAgICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpKSB7CiAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKCk7CkBAIC0yMDQ1LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
ICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3
b3JkCiAgICAgICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFy
Y2hSYW5nZSk7CiAgICAgICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJh
bmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0
RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0
T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCkBAIC0zMTY4LDkgKzMxNzEsOSBAQCBQ
YXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByZWZlcmVuY2VSYQogICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9
IHJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkubm9uQm91
bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKHNoYWRvd1RyZWVS
b290KSB7CiAgICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dEVuZChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2Rl
cygpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hS
YW5nZSwgdGFyZ2V0LCBvcHRpb25zKSk7CkBAIC0zMTg2LDkgKzMxODksOSBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdl
KiByZWZlcmVuY2VSYQogCiAgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFk
b3dUcmVlUm9vdC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAg
ICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93
VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOwor
ICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93VHJlZVJvb3QsIDAp
OwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFy
Y2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKQEAgLTMxOTcsMTAgKzMyMDAsMTIgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBS
YW5nZSogcmVmZXJlbmNlUmEKICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hh
ZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJl
ZS4KICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7
CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVy
KHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkp
OworICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgICAgICAg
ICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0
ZXIoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5z
aGFkb3dIb3N0KCkpOworICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxh
aW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CkBAIC0zMjIzLDcg
KzMyMjgsNyBAQCBzdGF0aWMgYm9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdl
KiByYW5nZSkKICAgICBib29sIGluUmFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOyBvd25lckVs
ZW1lbnQ7IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKSkgewogICAgICAgICBpZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRlcnNl
Y3RzTm9kZShvd25lckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaW5S
YW5nZSA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqb3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1NSw4ICsz
MjYwLDggQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoJm9yaWdpbmFsRW5kQ29udGFpbmVyLCBv
cmlnaW5hbEVuZE9mZnNldCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0U3RhcnRBZnRlcigqcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93
SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQob3JpZ2luYWxFbmRDb250YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMyNzUsMTEgKzMy
ODAsMTEgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKICAgICAgICAgLy8gcmVzdWx0IHJhbmdl
LiBUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAogICAgICAg
ICAvLyBzaW5jZSBmaW5kUGxhaW5UZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92
ZXIgdGhlIHZpc2libGUKICAgICAgICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRTdGFydCgmcmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+
ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0
KCksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0g
c2VhcmNoUmFuZ2UtPnNoYWRvd1Jvb3QoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xs
YXBzZWQoKSAmJiBzaGFkb3dUcmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRF
bmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dU
cmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVfRVhDRVBU
SU9OKTsKICAgICB9IHdoaWxlICh0cnVlKTsKIAogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOTFhZDE3Njg2NmY0ZjEz
YzA3NGQ3ZDMxNDg0NWJmMzViYWI3ZDMzOS4uODFhYTAwMDgxYzc2ZGZhNTMzM2JhZDQ2ZDkwNDRi
NWE4YjNkZTg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBA
IC0yMjgsMTIgKzIyOCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5j
ZShGcmFtZSYgZnJhbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxi
YXI6OnBhZ2VTdGVwKGhlaWdodCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSogYSwgUmFuZ2UqIGIpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRP
TVJhbmdlcyhSYW5nZSYgYSwgUmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UqIHN0YXJ0ID0gYS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOwotICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAg
PyBiIDogYTsKLQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEtPm93bmVyRG9jdW1lbnQoKSwg
JnN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgJmVuZC0+ZW5k
Q29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworICAgIFJhbmdlJiBzdGFydCA9IGEuY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VY
Q0VQVElPTikgPD0gMCA/IGEgOiBiOworICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/
IGIgOiBhOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3Rh
cnQuc3RhcnRDb250YWluZXIoKSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWlu
ZXIoKSwgZW5kLmVuZE9mZnNldCgpKTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9u
cwpAQCAtMzU2LDggKzM1NSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAobWFy
ayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKKyAgICAgICAgYm9vbCBzZWxl
Y3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAq
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7
CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDEwLDcgKzEwMDksNyBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291
cmNlLCBjb25zdAogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJh
bmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVl
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2Vz
KCptYXJrLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcAppbmRleCBhMDI1NmE0MDBhOTNlNGY3NmU4OTgxOTVkNzhiNjhmNTE2OTgxMzYzLi5hYWE5
OWE4ZThlZDE2MWQxMTMyMDg0YmI0MjZjZGE5NjI4MjFiM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQg
Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQsCiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1l
KCkpICYmIHN0YXJ0ID09IHN0YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBl
bmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihyZWZOb2RlLCBy
YW5nZS5nZXQoKSkpCisgICAgICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9k
ZVZpc2libHlDb250YWluZWRXaXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKICAgICAgICAg
JiYgcmVmTm9kZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgewog
ICAgICAgICAvLyBBbHJlYWR5IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMg
dGhlIGN1cnJlbnQgcGFyYWdyYXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRh
Z05hbWUoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4
IDVhYzMwNzc3ZWRmOGU2YTg0NTNhZDE3NDczNDNiOTNiNjBiNDM1N2QuLjhiMGIyYjUxYzNjZDI0
N2IxNGE3YzkzNjg2NDhkNGRkNjU5YzhlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBi
b28KICAgICAgICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVz
dWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCZub2RlLCBlYyk7CisgICAgICAgIFJhbmdlOjpDb21w
YXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5vZGUsIGVjKTsK
ICAgICAgICAgaWYgKCFlYyAmJiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVf
QU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5k
ZXJlciB3YXMgZGVzdHJveWVkLCB0aGUgcmVjdCB0aGF0IGl0IAogICAgICAgICAgICAgLy8gb2Nj
dXBpZWQgd291bGQgYmUgaW52YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFu
Z2UgYXMgYSByZXN1bHQgb2YgCkBAIC0yNjA1LDcgKzI2MDUsNyBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFt
b3VudCkgYwogICAgIHJldHVybiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEFsdGVy
YXRpb25FeHRlbmQsIGFtb3VudCk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJh
bmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUqIG5v
ZGUpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewogICAgIFJlZlB0cjxSYW5n
ZT4gcmVzdWx0UmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCmluZGV4IDY5YjVjOWY4MzY5MmEyMDBmOGRkYzkyY2NiOWM4ZjkxMWYyOWZmMTguLjk1YWMz
Nzc0YjgwMjQ1MGRiOWQ4ZmZlZDk3OWRkMjM4ZDA1ZjVlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTIzMCw3ICsyMzAsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9u
KGludCBhbW91bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+
IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Vs
ZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9k
ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50U2VsZWN0aW9uKCk7CiAg
ICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGVmNGY2MjE5MzM5ZTVh
NmFlYzk5MDI5Nzc4YjY4OWUxNGU4YzZhZmUuLjZmZjdjMWFlOTA5MzdjM2I0YTM2NTk0MTlmNGYx
MzliZjJhYjYwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBs
eUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBJZiB0aGUgZW50aXJlIGxpc3QgaXMgc2VsZWN0
ZWQsIHRoZW4gY29udmVydCB0aGUgd2hvbGUgbGlzdC4KLSAgICAgICAgaWYgKHN3aXRjaExpc3RU
eXBlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4obGlzdE5vZGUuZ2V0KCksIGN1cnJl
bnRTZWxlY3Rpb24pKSB7CisgICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNp
Ymx5Q29udGFpbmVkV2l0aGluKCpsaXN0Tm9kZSwgY3VycmVudFNlbGVjdGlvbikpIHsKICAgICAg
ICAgICAgIGJvb2wgcmFuZ2VTdGFydElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9k
ZShsaXN0Tm9kZS5nZXQoKSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJO
b2RlKGxpc3ROb2RlLmdldCgpKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOwog
CkBAIC0yNDMsOSArMjQzLDkgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIGN1cnJlbnQgc2VsZWN0aW9uIGlm
IHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5vZGUKICAgICAgICAgICAgIC8vIGJlY2F1c2UgbW92
ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQgaGF2ZSByZW1vdmVkIHRoZW0uCiAgICAgICAgICAg
ICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3Vy
cmVudFNlbGVjdGlvbi0+c2V0U3RhcnQobmV3TGlzdCwgMCwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDAsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3
TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQobmV3TGlzdCwg
bGFzdE9mZnNldEluTm9kZShuZXdMaXN0LmdldCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5kKCpuZXdMaXN0LCBsYXN0T2Zmc2V0
SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5l
d0xpc3QuZ2V0KCkpKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAppbmRleCA3NTM2OTIwMGMyOTU1YjA3NWM4M2I1MGNkNjU3MDc3NDVjZmVjOGY3
Li5iNjk1MmUyYjg2ZjE5Y2VjNjZkY2JhZmNlOTY2MjFiNmQ1MTE5OWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xNzQsOCArMTc0LDEz
IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50
IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpv
ZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOworICAgIGlmICghcG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKICAgICBSZWY8UmFuZ2U+IHJhbmdlID0gb2Zmc2V0QXNSYW5nZSgpLT5jbG9u
ZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBv
c2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJhbmdlLT5z
ZXRFbmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggNDgzYTRkNDQwMGE0NDVmNTlhMmNj
ODM0ZmY4MmQ5MTdhOTUyZmQ0Ni4uZjJiMmZiNzA3ZjlhYjY1ZjJlM2NjZDQyZDhkNDBiNWJiMWJi
YTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTQ3OSw4
ICsxNDc5LDggQEAgUmVmPFJhbmdlPiBDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAog
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgICAg
ICAgICAgQVNTRVJUKCZub2RlID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAg
ICAgaW50IG9mZnNldCA9IHJhbmdlLT5zdGFydE9mZnNldCgpICsgbV9ydW5PZmZzZXQ7Ci0gICAg
ICAgICAgICByYW5nZS0+c2V0U3RhcnQoJm5vZGUsIG9mZnNldCk7Ci0gICAgICAgICAgICByYW5n
ZS0+c2V0RW5kKCZub2RlLCBvZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFy
dChub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZzZXQg
KyAxKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CkBAIC0xNTY5LDggKzE1
NjksOCBAQCBSZWY8UmFuZ2U+IEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNv
bnN0CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gci0+c3RhcnRDb250YWluZXIoKTsKICAgICAg
ICAgICAgIEFTU0VSVCgmbm9kZSA9PSAmci0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAg
aW50IG9mZnNldCA9IHItPmVuZE9mZnNldCgpIC0gbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICBy
LT5zZXRTdGFydCgmbm9kZSwgb2Zmc2V0IC0gMSk7Ci0gICAgICAgICAgICByLT5zZXRFbmQoJm5v
ZGUsIG9mZnNldCk7CisgICAgICAgICAgICByLT5zZXRTdGFydChub2RlLCBvZmZzZXQgLSAxKTsK
KyAgICAgICAgICAgIHItPnNldEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiByOwpAQCAtMjQ3OSw4ICsyNDc5LDggQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBp
bnQKICAgICAKICAgICAvLyBGSVhNRTogdGhlIGF0RW5kKCkgY2hlY2sgc2hvdWxkbid0IGJlIG5l
Y2Vzc2FyeSwgd29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyODk+LgogICAgIGlmICghcmFuZ2VMb2NhdGlvbiAmJiAhcmFuZ2VMZW5ndGggJiYg
aXQuYXRFbmQoKSkgewotICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgMCk7Ci0gICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRl
eHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5z
ZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1
bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CiAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdFJhbmdlKTsKICAgICB9CiAKQEAgLTI0OTgsMTIgKzI0
OTgsMTIgQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAgICAgICAgICAgICBpdC5hZHZh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpdC5hdEVuZCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBpdC5yYW5nZSgpOwotICAgICAgICAgICAgICAgICAg
ICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQo
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5TdGFydCA9
IHRleHRSdW5SYW5nZS0+c3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBQb3Np
dGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRpb24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZh
bGVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLmNvbnRhaW5l
ck5vZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZCgqcnVuRW5kLmNvbnRhaW5lck5v
ZGUoKSwgcnVuRW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTEyLDI0ICsyNTEyLDI0IEBA
IFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChD
b250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgICAgICBzdGFydFJhbmdlRm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VMb2NhdGlvbiAt
IGRvY1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQo
JnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4
dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0
T2Zmc2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFu
Z2VMb2NhdGlvbiA9PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVu
UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+
c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmFuZ2UtPnNldFN0YXJ0KCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0
UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2Ut
PnNldFN0YXJ0KHRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5k
T2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5k
RW5kKSB7CiAgICAgICAgICAgICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlz
VGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSByYW5nZUVuZCAtIGRv
Y1RleHRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0
UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQo
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChyYW5nZUVuZCA9
PSBkb2NUZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRF
bmQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVu
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0
RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFu
Z2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGRvY1RleHRQb3NpdGlvbiArPSBsZW5ndGg7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI1NDIsNyArMjU0Miw3IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGlmIChyYW5nZUxlbmd0aCAmJiByYW5n
ZUVuZCA+IGRvY1RleHRQb3NpdGlvbikgLy8gcmFuZ2VFbmQgaXMgb3V0IG9mIGJvdW5kcwotICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0
ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0
ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsK
ICAgICAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRSYW5nZSk7CiB9CkBAIC0yNTY2LDcgKzI1
NjYsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uo
Tm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZQogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5z
dGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKIAotICAgIHRlc3RSYW5nZS0+c2V0RW5kKCZy
YW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+
ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5z
dGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKICAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2NhdGlvbjsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI2MjMsNyArMjYyMyw3IEBAIHN0YXRpYyBzaXplX3QgZmluZFBsYWluVGV4dChjb25zdCBS
YW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9uCiAKICAgICBpZiAo
YnVmZmVyLm5lZWRzTW9yZUNvbnRleHQoKSkgewogICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0
YXJ0UmFuZ2UgPSByYW5nZS5vd25lckRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAg
YmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKCZyYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5z
dGFydE9mZnNldCgpKTsKKyAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBmb3IgKFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoYmVmb3JlU3RhcnRS
YW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRv
ci5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIGJ1ZmZlci5wcmVwZW5kQ29udGV4dChiYWNrd2Fy
ZHNJdGVyYXRvci50ZXh0KCkpOwogICAgICAgICAgICAgaWYgKCFidWZmZXIubmVlZHNNb3JlQ29u
dGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4
IDJmZTI2ZDdjZjE3MGY5ZmQ4ZWY3ZmU1YTkyZTViMDg3OTU3OTY2NzMuLjQyMWVlMmJlMmUxN2Jk
OGM4Y2Y2YjYxZTRiYTJiZjdmOWFhNWE1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCwyNCArNzMwLDMyIEBAIFZpc2libGVQb3NpdGlvbiBl
bmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZFBvc2l0aW9uKCksIGFmZmluaXR5KTsKIH0K
IAotYm9vbCBzZXRTdGFydChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxl
UG9zaXRpb24pCitib29sIHNldFN0YXJ0KFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpbnQgY29k
ZSA9IDA7Ci0gICAgci0+c2V0U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNv
bnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsK
KyAgICByYW5nZS0+c2V0U3RhcnQoKnAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsKIH0KIAotYm9vbCBzZXRFbmQoUmFuZ2Ug
KnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRFbmQo
UmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsK
LSAgICBpZiAoIXIpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5j
b250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJl
dHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0RW5kKCpwLmNvbnRh
aW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiAh
ZWM7CiB9CiAKIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywg
bGlrZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDdkYTY2YTE4ODZhZWY5MTcxNjZhYzQyOGFmYmMwNDdk
NGMxZmI4NWUuLmY4ZDkwMzNhOWM3MWI4ZDQ4YzU5NDc2OGFlNWZmYzkwMzRjNmVkODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjEzLDggKzIx
Myw4IEBAIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShjb25zdCBQb3NpdGlv
biYgcG9zKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCiAgICAgUG9zaXRpb24gc3RhcnQo
cG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsK
KyAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpib3VuZGFyeSwgZWMpOworICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVj
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGRlYjQwZmQwMWI5
MDlmNjAxYmU5ZDRmMTgwNDkwOWYyZmEwYzc2ZmUuLjYyMmY0MzZjZTVlNzA3ZDczZmMzMWRhMTRh
NjBiNzQ2YzdiNDgxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTU2OSw3ICs1NjksMTEgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5k
YXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBEb2N1bWVu
dCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoYm91bmRhcnlEb2N1bWVudCk7CisKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSZWY8
UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKICAg
ICAKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhM
ZW5ndGggPSAwOwpAQCAtNTc3LDE5ICs1ODEsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29y
ZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQmVmb3JlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4g
Zm9yd2FyZHNTY2FuUmFuZ2UoYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAgICAg
ICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2Ut
PnNldEVuZEFmdGVyKCpib3VuZGFyeSwgZWMpOworICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+
c2V0U3RhcnQoKmVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShm
b3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoZW5kLmRlcHJlY2F0ZWROb2RlKCks
IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0ZWROb2Rl
KCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVj
KTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAg
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoKnNlYXJjaFJhbmdlKTsKKyAgICBT
aW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlKTsKICAgICB1bnNp
Z25lZCBuZXh0ID0gYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoaXQs
IHN0cmluZywgc3VmZml4TGVuZ3RoLCBzZWFyY2hGdW5jdGlvbik7CiAKICAgICBpZiAoIW5leHQp
CkBAIC02MDIsNyArNjA2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5k
YXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICB9CiAKICAg
ICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFs
dWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBj
aGFySXQoKnNlYXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFy
SXQoc2VhcmNoUmFuZ2UpOwogICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZm
aXhMZW5ndGggLSBuZXh0KTsKICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNo
YWRvdyBob3N0LgogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpAQCAtNjE2LDcgKzYyMCw3IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2hGdW5jCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIERv
Y3VtZW50JiBib3VuZGFyeURvY3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50KCk7Ci0gICAgUmVm
UHRyPFJhbmdlPiBzZWFyY2hSYW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwor
ICAgIFJlZjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdl
KCk7CiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
IAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwpAQCAtNjI0LDIwICs2MjgsMjIgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmMKIAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3Jk
Qm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRlcigpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGJh
Y2t3YXJkc1NjYW5SYW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwotICAgICAg
ICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpCisgICAgICAgICAgICBiYWNrd2FyZHNTY2FuUmFu
Z2UtPnNldEVuZCgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIHByZWZpeExlbmd0aCA9IHBy
ZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAK
LSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBJR05PUkVfRVhD
RVBUSU9OKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0g
ICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0No
YXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgc2VhcmNoUmFuZ2UtPnNl
bGVjdE5vZGVDb250ZW50cygqYm91bmRhcnksIElHTk9SRV9FWENFUFRJT04pOworICAgIGlmIChz
dGFydC5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5wdHIoKSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwog
ICAgIHVuc2lnbmVkIG5leHQgPSBmb3J3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJh
dG9yKGl0LCBzdHJpbmcsIHByZWZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAg
IGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkKICAgICAgICAgcG9zID0g
c2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CiAgICAgZWxzZSBpZiAobmV4dCA+IHByZWZpeExl
bmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xh
dGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgQ2hhcmFjdGVy
SXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBj
aGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxW
aXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExl
bmd0aCAtIDEpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhckl0
LnJhbmdlKCk7CiAgICAgICAgIHBvcyA9IGNoYXJhY3RlclJhbmdlLT5lbmRQb3NpdGlvbigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCAyOWM5YWY4NWUwYjZlZTBh
MzA0MzVhOTZlZWNkNzJmODUyODBlZTc4Li41ODA4NzIwNWYwOWRjYjg3NzQ0ZjI1ZTM4OTU2YmJh
MjQ2NWQwNmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTE3
MSw3ICsxMTcxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNp
bmdDaGFyYWN0ZXJJdGVyYXRvcihOb2RlKiBub2RlLCBpbnQgaW4KICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJF
QU0pOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9j
dW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdCgqcmFuZ2UpOwogICAgIGl0LmFkdmFu
Y2UoaW5kZXggLSAxKTsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LmF0RW5kKCkgPyBy
YW5nZS0+ZW5kUG9zaXRpb24oKSA6IGl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIFVQU1RSRUFN
KTsKQEAgLTExODYsMjAgKzExODYsMTkgQEAgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQ
b3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiAKIC8vIERldGVybWluZXMg
d2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVu
ZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9u
IHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0
ZWRSYW5nZQotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNv
bnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0
aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQogewotICAgIEFTU0VS
VChub2RlKTsKICAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CiAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbgog
ICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9O
KSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9v
bCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9
PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxs
eVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUp
LCBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCisgICAgYm9vbCBzdGFydElzVmlz
dWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZSgmbm9kZSkgPT0gc2VsZWN0ZWRS
YW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNv
bXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIHNlbGVjdGVk
UmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBi
b29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09
IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1l
ICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKSkgPCAwKQorICAgIGJvb2wgZW5kSXNWaXN1YWxs
eVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoJm5vZGUpID09IHNlbGVjdGVkUmFuZ2Ut
PmVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3Np
dGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZSgmbm9kZSkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4g
c3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJc1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuaAppbmRleCBjMTU0NzljOTZhNDBlMWUyMDliYTkyNzUwZWRhMjgyNmU2
YzViN2U3Li5mMjE1MTY0NWRjNjc4ZmJkYzQ3YTA2MmM0MjFmNDJiNjZkMTM5MjIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBpc1Rh
YmxlU3RydWN0dXJlTm9kZShjb25zdCBOb2RlKik7CiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSop
OwogYm9vbCBpc0xpc3RJdGVtKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29u
c3QgTm9kZSopOwotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqLCBjb25z
dCBSYW5nZSopOworYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25z
dCBSYW5nZSopOwogYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25z
dCBOb2RlKik7CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqLCBjb25zdCBO
b2RlKik7CiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMTI1YzVhOTgwYzI4
NGEzOTRkMDM2NDA0YWE4NTU5MDdjYTE3NTRmMC4uNzNjNWRhY2Y0NTM0YzY4NjZkM2Q0OTk5OTdl
ZjAzMTg0YjA2ZmM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpA
QCAtMzE4LDcgKzMxOCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlv
blJhbmdlKCkKICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAgIGF1dG8qIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29t
bW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwogICAgIGlmIChlbmNsb3NpbmdBbmNob3Ig
JiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAw
KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDAsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgIHJldHVybiByYW5nZTsKIH0KICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCAxNDQyMjUyYmQ1MjE1
ZDkzNTc3ZThjZjQ3YmE5ZTUxZDYzZTI4NDM0Li5lZjIyZTUyNmJiYmJiNGM1NDhiOTRhMDFmZTM4
OTMzNzc2MzM4NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwCkBAIC00MTMsNyArNDEzLDggQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6
OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAg
ICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7
CiAgICAgICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJh
bmdlLT5zZWxlY3ROb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKCpkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIH0KICAgICAgICAgbV9jbGllbnQu
c3BlYWsocGxhaW5UZXh0KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggZTExOWY2NGQ4YjY3ZmJmZjNkMTUz
MDdkZmVhODk4NmZmMjE2ODk4Yi4uZjYwNTY2MWJkODUzYWE3Nzk4YmE0ZTdlNTc3NTFlZDc1Zjdj
MmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzkzLDEwICszOTMs
MTMgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQogICAgIH0KIAogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9U
T19TVEFSVCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgaWYg
KCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0g
LTEpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlv
bi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0Lgot
ICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQs
IHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKKyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID4g
LTEpIHsKKyAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgogICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbi5tb3ZlVG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRp
b24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA3LDggKzQxMCw4
IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBk
b24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewot
ICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VO
RCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChy
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKnJhbmdlLCBlYykg
PCAxICYmICFlYykgeworICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewogICAg
ICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyByLgogICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggMWNjODM4NGE0OTYx
ZTM4OGEzZjIxYjBjYzI0ZTAyMDIzZTY1NGYxNy4uMGM5MGI0MTRiNWEyZTA2ZjBhOTkxZDUwN2Nk
NTc4NjY0MjI0ZWM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAg
LTcxMiw3ICs3MTIsNyBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQp
CiBzdGF0aWMgdm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAg
IHJhbmdlLT5zZWxlY3ROb2RlKCZlbGVtZW50KTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVt
ZW50KTsKICAgICBlbGVtZW50LmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAxOGM0NzVmMWVlODE3ZTRlNWYxNzAyZGIz
YjRmYTM5OTNlMDM0NGJmLi4xNzUyMjM2YzdhNjc5OTBjM2UyZGI3Y2NhZjNiZTQ0ZTg0MzQyYzZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNTA3LDcgKzI1MDcsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZQogICAgICAgICAgICAgICAgIC8vIGZvY3VzZWQgaWYg
dGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93ZXZlciwgYmVjYXVzZSB0aGUgbW91
c2V1cAogICAgICAgICAgICAgICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwg
d2hpY2ggd2lsbCBjYWxsIHNldEZvY3VzZU5vZGVJZk5lZWRlZC4KICAgICAgICAgICAgICAgICBp
ZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShlbGVt
ZW50LCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUKKyAgICAgICAgICAg
ICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21w
YXJlTm9kZSgqZWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
CiAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDkxNTNk
MDQ0MmE3MDU3ZDRhODBkMDUwMDNhMDBmZjExNmNiYzFjZTAuLjhkZjFkMzYxZjM2ZmQ0MTY1ZWJh
MTk2M2NkZTZmZmM4NDU2ZjJmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNjMyLDE0ICs2MzIs
MTQgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zICYgQmFja3dhcmRzKSB7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6RU5EX1RPX1NUQVJULCBtYXRjaFJhbmdlc1tpIC0gMV0uZ2V0KCksIElHTk9SRV9FWENF
UFRJT04pID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSwg
SUdOT1JFX0VYQ0VQVElPTikgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2Vs
ZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBtYXRjaFJhbmdlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQ
VElPTikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0sIElHTk9S
RV9FWENFUFRJT04pIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDE3Njg0YzU3NDg4MzI4OTY3NjBm
NDZlZTlkMWNmMWI4MDhjMzA2MmEuLjI2ZWYzN2MzZDJiZjRkMDI1MWYwZGE3NTBjNjEwMGJlZDc5
YmRmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMTI1LDcgKzEy
NSw3IEBAIHN0YXRpYyBib29sIGhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBS
YW5nZSYgcmFuZ2UpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lubGluZSgpIHx8IHJlbmRlcmVyLT5pc1JlcGxhY2Vk
KCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2RlKG5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pKQor
ICAgICAgICBpZiAoKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNl
ZCgpKSAmJiByYW5nZS5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTikp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMzI5MjAzMTliZjFk
OTY3MzE4YTM0ZDY1MmY2YzFlYzViNGFmZDEyNS4uYjM2ZWE0ZTg5NmE1ZjE3YjVjM2IyNzI0NDZj
MGY2NTJkOGU1Yzg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAKQEAgLTY5NCw4ICs2OTQsOCBAQCB2b2lkIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3Rz
LCBjb25zdAogICAgICAgICAgICAgaWYgKCFib3hJbnRlcnNlY3RzUmVnaW9uKGxvZ2ljYWxUb3BG
b3JSZW5kZXJlciwgbG9naWNhbEJvdHRvbUZvclJlbmRlcmVyLCBsb2dpY2FsVG9wRm9yUmVnaW9u
LCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKSkgewogICAgICAgICAgICAgICAgIGlmIChmb3VuZFN0
YXJ0UG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydHNBYm92ZVJlZ2lv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShu
b2RlLCBJR05PUkVfRVhDRVBUSU9OKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0RW5kQmVmb3JlKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElP
TikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEJlZm9yZSgqbm9k
ZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZU9iamVj
dHMuYXBwZW5kKHJhbmdlLT5jbG9uZVJhbmdlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNvbnRlbnRFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0c0Fib3ZlUmVnaW9uID0gdHJ1ZTsKQEAgLTcwMyw3ICs3
MDMsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAg
c2tpcE92ZXJPdXRzaWRlTm9kZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoc2tpcE92ZXJPdXRzaWRlTm9kZXMpCi0gICAgICAgICAgICAgICAgICAgIHJh
bmdlLT5zZXRTdGFydEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAg
ICAgICAgICByYW5nZS0+c2V0U3RhcnRBZnRlcigqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAg
ICAgICAgICAgICAgICAgZm91bmRTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdl
T2JqZWN0cywgY29uc3QKICAgICAgICAgICAgICAgICAvLyB0aGUgcmFuZ2UgaXMgY2xvc2VkLgog
ICAgICAgICAgICAgICAgIGlmIChzdGFydHNBYm92ZVJlZ2lvbikgewogICAgICAgICAgICAgICAg
ICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0U3RhcnRCZWZvcmUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLT5zZXRTdGFydEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2tpcE92ZXJPdXRz
aWRlTm9kZXMgID0gZmFsc2U7CkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywg
Y29uc3QKICAgICAgICAgICAgICAgICAvLyBmb3IgZWxlbWVudHMgdGhhdCBlbmRzIGluc2lkZSB0
aGUgcmVnaW9uLCBzZXQgdGhlIGVuZCBwb3NpdGlvbiB0byBiZSBhZnRlciB0aGVtCiAgICAgICAg
ICAgICAgICAgLy8gYWxsb3cgdGhpcyBlbmQgcG9zaXRpb24gdG8gYmUgY2hhbmdlZCBvbmx5IGJ5
IG90aGVyIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiB0aGUgY3VycmVudCBl
bmQgbm9kZQogICAgICAgICAgICAgICAgIGlmIChlbmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVs
b3dSZWdpb24gJiYgIW5vZGUtPmlzRGVzY2VuZGFudE9mKGxhc3RFbmROb2RlKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04p
OworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQWZ0ZXIoKm5vZGUsIElHTk9SRV9F
WENFUFRJT04pOwogICAgICAgICAgICAgICAgICAgICBlbmRzQmVsb3dSZWdpb24gPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgbGFzdEVuZE5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDA2MzMwN2M5OTkzNTY0
NTQ2N2Y5YTM0OTJjMDk2YzNjNDIyNWMzOWIuLmE3MmEwYTNmODU3N2M3MDYyYWZhOTRlYjI1NTcw
ZDY1N2RiODI0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODcz
LDExICs4NzMsMTMgQEAgLSAoRE9NUmFuZ2UgKilfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZQogICAgIG5ld1N0YXJ0ID0gbmV3U3RhcnQu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgbmV3RW5kID0gbmV3RW5kLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7Ci0gICAgaW50IGV4Y2VwdGlv
biA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3
U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgcmFuZ2UtPnNl
dEVuZChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIFJl
ZjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVS
YW5nZSgpOworICAgIGlmIChuZXdTdGFydC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaW50
IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbmV3U3RhcnQuY29udGFp
bmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgcmFuZ2UtPnNldEVuZCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJu
IGtpdChyYW5nZS5wdHIoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VV
UkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAKQEAgLTE2MjgsMTEgKzE2MzAsMTEg
QEAgLSAodm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxl
bWVudCAqKWVsZW1lbnQKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9k
ZSAqbm9kZSA9IGNvcmUoZWxlbWVudCk7CisgICAgTm9kZSogbm9kZSA9IGNvcmUoZWxlbWVudCk7
CiAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdFJhbmdlT25FbGVtZW50KHJhbmdlLmxvY2F0
aW9uLCByYW5nZS5sZW5ndGgsIG5vZGUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RS
YW5nZU9uRWxlbWVudChyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCAqbm9kZSk7CiB9CiAK
IC0gKERPTVJhbmdlICopbWFya2VkVGV4dERPTVJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4
IDBjNWU1NzZlNGQ3NjJkODc1YjJhZDZlZWJiZjFmY2YzZTRiZWU4NzAuLmE1YmE4MDdiNjM1ZWQ5
ZDY4YzUwOTdiYjIzNzlkYTBjMjBjMTFhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC02MTE0
LDcgKzYxMTQsNyBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihG
cmFtZSogdGFyZ2V0RnJhbWUsIElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkgPyB0YXJn
ZXRGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpIDogdGFyZ2V0RnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGVtcFJhbmdlID0gcmFuZ2Ut
PmNsb25lUmFuZ2UoKTsKLSAgICAgICAgdGVtcFJhbmdlLT5zZXRTdGFydCgmdGVtcFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCB0ZW1wUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0No
YXJQb3MsIGVjKTsKKyAgICAgICAgdGVtcFJhbmdlLT5zZXRTdGFydCh0ZW1wUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCksIHRlbXBSYW5nZS0+c3RhcnRPZmZzZXQoKSArIGNoYXJQb3MtPmR3Q2hhclBv
cywgZWMpOwogICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1l
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5n
ZS5tbQppbmRleCBlMDgwNmJjYjZhNzczNGUyZDM0NDE0OTViMTRlZDZmYjI3ZDIyNDk5Li45M2U4
NDlmNjNiMTRiMmRjNGQ1YTk1NDk0NzExZjEwMzUxNWVkZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01SYW5nZS5tbQpAQCAtNjUsMTYgKzY1LDIwIEBAIC0gKHZvaWQpZGVhbGxvYwogCiAtICh2b2lk
KXNldFN0YXJ0OihXS0RPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldAogeworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJv
dXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBfaW1wbC0+c2V0U3RhcnQoV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVj
KTsKKyAgICBfaW1wbC0+c2V0U3RhcnQoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zm
c2V0LCBlYyk7CiB9CiAKIC0gKHZvaWQpc2V0RW5kOihXS0RPTU5vZGUgKilub2RlIG9mZnNldDoo
aW50KW9mZnNldAogeworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJ
WE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2V0RW5kKFdlYktpdDo6dG9XZWJDb3JlTm9k
ZShub2RlKSwgb2Zmc2V0LCBlYyk7CisgICAgX2ltcGwtPnNldEVuZCgqV2ViS2l0Ojp0b1dlYkNv
cmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVjKTsKIH0KIAogLSAodm9pZCljb2xsYXBzZTooQk9PTCl0
b1N0YXJ0CkBAIC04NCwxNiArODgsMjAgQEAgLSAodm9pZCljb2xsYXBzZTooQk9PTCl0b1N0YXJ0
CiAKIC0gKHZvaWQpc2VsZWN0Tm9kZTooV0tET01Ob2RlICopbm9kZQogeworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhl
IGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1w
bC0+c2VsZWN0Tm9kZShXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKKyAgICBfaW1w
bC0+c2VsZWN0Tm9kZSgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBlYyk7CiB9CiAKIC0g
KHZvaWQpc2VsZWN0Tm9kZUNvbnRlbnRzOihXS0RPTU5vZGUgKilub2RlCiB7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0
aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9p
bXBsLT5zZWxlY3ROb2RlQ29udGVudHMoV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBlYyk7
CisgICAgX2ltcGwtPnNlbGVjdE5vZGVDb250ZW50cygqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5v
ZGUpLCBlYyk7CiB9CiAKIC0gKFdLRE9NTm9kZSAqKXN0YXJ0Q29udGFpbmVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCBhYTI3NGJhYTFj
Yzg5MDk3MjU4ZDExYTI3MGQ0YTAzODdmOWI3YjI3Li5kYjIyZjFlNWRjMWUzNWFhYjUwNzkwYzEy
OThhMWYzNGUwMzRjZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAKQEAgLTMzMCw3ICszMzAsNyBAQCBTdHJpbmcgV2ViRnJhbWU6OmNvbnRl
bnRzQXNTdHJpbmcoKSBjb25zdAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkb2N1bWVudC0+
Y3JlYXRlUmFuZ2UoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHJhbmdlLT5z
ZWxlY3ROb2RlKGRvY3VtZW50RWxlbWVudC5nZXQoKSwgZWMpOworICAgIHJhbmdlLT5zZWxlY3RO
b2RlKCpkb2N1bWVudEVsZW1lbnQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276895</attachid>
            <date>2016-04-20 20:50:25 -0700</date>
            <delta_ts>2016-04-21 08:54:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160420205048.patch</filename>
            <type>text/plain</type>
            <size>105590</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRmOTVkNjZkNTkyNGZh
MzY5ZjJhNWQ1NjZkMzU5MDI1MDUzZGE5ZC4uNDQ5YjQxNWZiNTljZWQzNTljMTlkOThlMTM5ZWI4
OWYzMGY2YjI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIHdl
Yi1leHBvc2VkIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50
QmFzZWRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGV4dFJlY3RzKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
aXNQb2ludEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbXBhcmVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmludGVyc2VjdHNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNz
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnNldFN0YXJ0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldEVuZEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQWZ0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNl
bGVjdE5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c3Vycm91bmRDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnRCZWZvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlc092
ZXJsYXApOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJvdW5kYXJ5Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpib3VuZGFyeVRleHROb2Rlc01lcmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFy
eVRleHROb2Rlc1NwbGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpleHBhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclVuZGVyQ29tbW9uUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGlsZE9mQ29tbW9uUm9vdEJlZm9yZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDaGFyYWN0ZXJEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dG9IVE1MKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5DaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4dFJlbW92ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAg
ICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91
bmRhcnlQb2ludDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9TdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VPZlN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0ZyYW1lSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvdW50TWF0Y2hl
c0ZvclRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVs
ZXRlVG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAg
ICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8pOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvcjo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRQbGFpblRleHQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6Cisg
ICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTZWFyY2hSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOgorICAg
ICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9FdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1v
dXNlRXZlbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMpOgorICAgICAgICAqIHBhZ2UvVGV4dEluZGlj
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMpOgorCisyMDE2
LTA0LTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBb
VXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHNdIGZyb20gc2V2ZXJh
bCBDYW52YXMgaW50ZXJmYWNlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NzgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1MWNhY2JhNGY3ZjIyZmUz
ZDJhMWI4M2ZjZjEzMTg4M2VjZjMyYWQ2Li43Mjg0MGJkNTMwNmQ2MGM2Yjg0YTVlNWEwYWI4Njgy
YjAwMTgyNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDQtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBEcm9wIFtVc2VQb2lu
dGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBSYW5nZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2Vk
UmFuZ2U6XSk6CisKIDIwMTYtMDQtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBjbGFuZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3ODkwOTc3OWY4ZWRiYzRmNjc3Li5j
YmVhMmZiYzZjMzQwMGUyZGEzNWQ5YTcyOGVlMzkzZjg5YzhjMTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTYtMDQtMjAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3Vt
ZW50c10gZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5t
bToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZXRTdGFydDpvZmZzZXQ6XSk6CisgICAgICAgICgt
W1dLRE9NUmFuZ2Ugc2V0RW5kOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01SYW5nZSBzZWxl
Y3ROb2RlOl0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGVDb250ZW50czpdKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZyk6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAppbmRleCBhMzBjMzE3YTc1ZTQyNjgzYTNmZDY3NjRjOWYzMWI2NTExOGNhN2UxLi5iOTQ4MTE5
NTMxOGIwMTE0NmQwODM4YmU1MjUzYjdiZGQyZDIzMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE2MDYsNyArMTYwNiw3IEBAIFJl
ZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSogbm9k
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGVjKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKCpub2RlLCBlYyk7CiAgICAgcmV0dXJuIGVjID8gbnVsbHB0ciA6IHJhbmdlOwog
fQogICAgIApAQCAtMTYzNSw3ICsxNjM1LDggQEAgc3RhdGljIGJvb2wgY2hhcmFjdGVyT2Zmc2V0
c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb24KICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9k
ZUNvbnRlbnRzKG5vZGUxKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlMiA9IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUyKTsKLSAgICByZXR1cm4gcmFuZ2UxLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZTIuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pIDw9IDA7CisKKyAgICByZXR1cm4gIXJhbmdlMiB8fCByYW5nZTEtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIsIElHTk9S
RV9FWENFUFRJT04pIDw9IDA7CiB9CiAKIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJh
Y3RlckNvdW50KQpAQCAtMTY2Myw2ICsxNjY0LDcgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEK
ICAgICAKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIG5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9k
ZTsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgCiAgICAgYm9vbCByZXBsYWNlZE5vZGVPckJSID0g
aXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZvciB0aGUgbm9uIHRleHQgbm9kZSB0
aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMg
cGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJlIGNvbGxhcHNlZC4KQEAgLTE2NzMs
MTAgKzE2NzUsMTUgQEAgc3RhdGljIHZvaWQgc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChSZWZQdHI8UmFuZ2U+IHJhbmdlLCBjb25zdCBDaGEKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQogICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIAorICAg
IGlmICghbm9kZSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmIChpc1N0YXJ0KQotICAgICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbm9kZSwgb2Zmc2V0LCBlYyk7
CiAgICAgZWxzZQotICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCwgZWMpOworICAg
ICAgICByYW5nZS0+c2V0RW5kKCpub2RlLCBvZmZzZXQsIGVjKTsKIH0KIAogUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldDIpCkBAIC0xNzUxLDcgKzE3NTgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcgogICAgICAgICBjb3B5UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRv
Y3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCks
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CiAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgMCk7CiAgICAgICAgIG9mZnNldCA9IHN0ZDo6bWF4
KGNvcHlSYW5nZS0+c3RhcnRPZmZzZXQoKSAtIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4LCAw
KTsKLSAgICAgICAgY29weVJhbmdlLT5zZXRTdGFydChub2RlLCBub2RlU3RhcnRPZmZzZXQuc3Rh
cnRJbmRleCk7CisgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG5vZGVTdGFydE9m
ZnNldC5zdGFydEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKGNvcHlSYW5nZSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7CkBAIC0yMjA3
LDcgKzIyMTQsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3RlcgogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVy
QmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2Fy
ZHNTY2FuUmFuZ2UoYm91bmRhcnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAg
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcihib3VuZGFyeSwgZWMpOworICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CiAgICAgICAgIHNl
dFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNo
YXJhY3Rlck9mZnNldCwgdHJ1ZSwgZWMpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBhOTI5NmRjN2JhZGFiMmQwN2I3NDljYjNkMDI1ODBmMWI0MzcxNDEyLi41NDg4ZTE5ZTcy
YjJjYmYyZWExODcwOTVmZWFkMDhkZjA4YjMyZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTczNyw3ICs3Mzcs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0VGV4dChBY2Nlc3NpYmlsaXR5
U2VsZWN0VGV4dENyaXRlcmlhKiBjcml0ZXJpYQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRTdHJpbmdSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgLy8gV2hlbiBzdGFydGlu
ZyBvdXIgc2VhcmNoIGFnYWluLCBtYWtlIHRoaXMgYSB6ZXJvIGxlbmd0aCByYW5nZSBzbyB0aGF0
IHNlYXJjaCBmb3J3YXJkcyB3aWxsIGZpbmQgdGhpcyBzZWxlY3RlZCByYW5nZSBpZiBpdHMgYXBw
cm9wcmlhdGUuCi0gICAgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c2V0RW5kKCZzZWxlY3RlZFN0cmlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRTdHJpbmdSYW5nZS0+c3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSA9IG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiBjbG9zZXN0QmVmb3JlU3RyaW5nUmFuZ2UgPSBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjlmNGJlNTRmNTZkNWRhNGQyZjhjMzAxYTc1NDFk
NmIxNjY2Y2JlZi4uNmU0NmI5ZmEzM2I1ZWY2NzNkOTI1MTU2NmUzMDRjYWQ4Yjc1MjVlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xNDM0LDcgKzE0MzQsNyBAQCBQbGFpblRleHRSYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdAogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNl
bGVjdGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVudFNlbGVj
dGlvblJhbmdlIHx8ICFjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUs
IElHTk9SRV9FWENFUFRJT04pKQorICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlIHx8ICFj
dXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAgICAgCiAgICAgaW50IHN0
YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkwMzhlNGM0YWY2OTRlNzZk
OTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3NmE2Njc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYK
ICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0
aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBOb2RlKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKKyAgICByZXR1cm4gKHJh
bmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikKICAgICAgICAgJiYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkpCiAg
ICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRhbnQgfHwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCkp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggZThlMGNi
MjI1ZTBlM2RiM2ZhNTA1OWZkNjFjNDVhNDM2ZTk3ODM5OS4uNzJmOWQ5NzZmZDVlNTExZjc5Yjhh
NmM1Mjg4OWYxODZmZmNhNjgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KQEAgLTIxMzEsNyArMjEzMSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6
KFJhbmdlICopcmFuZ2UKICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgIHRlc3RSYW5nZS0+c2V0RW5kKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRP
ZmZzZXQoKSwgZWMpOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIo
KSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7CiAgICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgPT0gc2NvcGUpOwogICAgIGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggODZk
NzBmYTBkM2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4uZWFkYWE2YTFkMDBmNTQ1NDNl
ZTc4MDAwMTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4ICsxMTMsMTAgQEAgLSAodm9p
ZCltb3ZlOihVSW50MzIpYW1vdW50IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVj
dGlvbilkaXJlY3Rpb24KICAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWQ7CiAgICAgUG9zaXRpb24g
c3RhcnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlv
bigpLmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJhbmdlLT5zZXRTdGFy
dChzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBp
Z25vcmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5v
ZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKKyAgICBpZiAoZW5kLmNvbnRh
aW5lck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwg
ZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKIH0KIAogLSAodm9pZClleHRl
bmQ6KFVJbnQzMilhbW91bnQgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9u
KWRpcmVjdGlvbgpAQCAtMTI5LDggKzEzMSwxMCBAQCAtICh2b2lkKWV4dGVuZDooVUludDMyKWFt
b3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCiAg
ICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gZnJhbWVTZWxl
Y3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAg
ICBQb3NpdGlvbiBlbmQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByYW5nZS0+c2V0U3RhcnQoc3RhcnQuY29udGFpbmVy
Tm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7Ci0gICAgcmFu
Z2UtPnNldEVuZChlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGlnbm9yZWQpOworICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkpCisgICAgICAgIHJh
bmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKGVuZC5jb250YWluZXJOb2RlKCkpCisgICAg
ICAgIHJhbmdlLT5zZXRFbmQoKmVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgaWdub3JlZCk7CiB9CiAKIC0gKERPTU5vZGUgKilmaXJzdE5vZGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAppbmRleCBmODc5ZWVlMTdjZmNkN2VkOWU3NDVkMjliZTE1OWFmY2ZiMTIxOGFmLi44
MzYwOTgyYTc5Y2NjMGE2NmNhMjE3MjgwMWJjM2NjZTg1NWM4NzA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CkBAIC0yMzE0LDcgKzIzMTQsNyBAQCB2b2lkIE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkKIHZvaWQg
Tm9kZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0CiB7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2Ut
PnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUqPih0aGlzKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhjb25zdF9jYXN0PE5vZGUmPigq
dGhpcyksIElHTk9SRV9FWENFUFRJT04pOwogICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRSZWN0cyhy
ZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdmOGI3NjFhYzRlMDNjZTMwOGM3ZDUz
NmM2YjA3NWUzOWUyNDZhZjcuLjNkY2Y2YTgzZTVlNjY4NmY1YTA3ZWVmZDM4ODgyYjdkNTk4MzFl
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtODAsNiArODAsNyBAQCBSZWY8UmFuZ2U+IFJhbmdl
OjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCisvLyBGSVhNRTogc3RhcnRDb250YWluZXIg
YW5kIGVuZENvbnRhaW5lciBzaG91bGQgcHJvYmFibHkgYmUgUmVmPE5vZGU+JiYuCiBpbmxpbmUg
UmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0
YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFp
bmVyLCBpbnQgZW5kT2Zmc2V0KQogICAgIDogbV9vd25lckRvY3VtZW50KG93bmVyRG9jdW1lbnQp
CiAgICAgLCBtX3N0YXJ0KCZvd25lckRvY3VtZW50KQpAQCAtOTMsOCArOTQsMTAgQEAgaW5saW5l
IFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxOb2RlPiBz
dGFydENvbnRhaW5lciwgaW4KIAogICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJz
IGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCiAg
ICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0
aW9ucy4KLSAgICBzZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOwotICAgIHNl
dEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgaWYgKHN0YXJ0Q29udGFpbmVyKQor
ICAgICAgICBzZXRTdGFydCgqc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTsKKyAgICBpZiAo
ZW5kQ29udGFpbmVyKQorICAgICAgICBzZXRFbmQoKmVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTsK
IH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQpAQCAtMTI5LDggKzEzMiw4IEBA
IHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBBU1NFUlQo
bV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1bWVudCk7CiAgICAgbV9vd25lckRvY3VtZW50
LT5kZXRhY2hSYW5nZSh0aGlzKTsKICAgICBtX293bmVyRG9jdW1lbnQgPSBkb2N1bWVudDsKLSAg
ICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsKLSAgICBtX2VuZC5zZXRUb1N0
YXJ0T2ZOb2RlKCZkb2N1bWVudCk7CisgICAgbV9zdGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKKyAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX293bmVy
RG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwogfQogCkBAIC0xNTcsMTMgKzE2MCw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIoY29uc3QgUmFu
Z2VCb3VuZGFyeVBvaW50JiBzdGFyCiAgICAgcmV0dXJuIHN0YXJ0Um9vdENvbnRhaW5lciAhPSBl
bmRSb290Q29udGFpbmVyIHx8IChSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXJ0LCBl
bmQsIEFTU0VSVF9OT19FWENFUFRJT04pID4gMCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldFN0YXJ0
KFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit2b2lkIFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBib29sIGRpZE1vdmVEb2N1
bWVudCA9IGZhbHNlOwogICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1
bWVudCgpKSB7CiAgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRvY3VtZW50KCkpOwpAQCAt
MTcxLDIzICsxNjksMTggQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiBy
ZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAKICAgICBlYyA9
IDA7Ci0gICAgTm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLmdldCgp
LCBvZmZzZXQsIGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJl
Zk5vZGUsIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9zdGFydC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUpOworICAgIG1fc3RhcnQuc2V0
KFdURk1vdmUocmVmTm9kZSksIG9mZnNldCwgY2hpbGROb2RlKTsKIAogICAgIGlmIChkaWRNb3Zl
RG9jdW1lbnQgfHwgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFpbmVyKG1fc3RhcnQsIG1fZW5k
KSkKICAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldEVuZChQYXNz
UmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJv
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJvb2wgZGlkTW92ZURvY3VtZW50ID0g
ZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkp
IHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9jdW1lbnQoKSk7CkBAIC0xOTUsMTEg
KzE4OCwxMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAg
Tm9kZSogY2hpbGROb2RlID0gY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLmdldCgpLCBvZmZzZXQs
IGVjKTsKKyAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9m
ZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9lbmQuc2V0
KHJlZk5vZGUsIG9mZnNldCwgY2hpbGROb2RlKTsKKyAgICBtX2VuZC5zZXQoV1RGTW92ZShyZWZO
b2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAgICAgaWYgKGRpZE1vdmVEb2N1bWVudCB8fCBj
aGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIobV9zdGFydCwgbV9lbmQpKQogICAgICAgICBj
b2xsYXBzZShmYWxzZSk7CkBAIC0yMDgsMTMgKzIwMSwyMSBAQCB2b2lkIFJhbmdlOjpzZXRFbmQo
UGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
IHZvaWQgUmFuZ2U6OnNldFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQgPSBzdGFydC5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKLSAgICBzZXRTdGFydChwYXJlbnRBbmNob3JlZC5jb250YWluZXJO
b2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAg
aWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBUeXBl
RXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0U3RhcnQoKnBhcmVudEFuY2hv
cmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6c2V0RW5kKGNvbnN0IFBvc2l0aW9uJiBlbmQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkID0gZW5kLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldEVuZChwYXJlbnRBbmNob3JlZC5jb250
YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7
CisgICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMg
PSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0RW5kKCpwYXJlbnRB
bmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFydCkKQEAg
LTIyNSwxNCArMjI2LDkgQEAgdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0KQogICAg
ICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiB9CiAKLWJvb2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5v
ZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBSYW5nZTo6
aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgp
ICE9ICZvd25lckRvY3VtZW50KCkpIHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAm
b3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTI0
MSwzMCArMjM3LDI0IEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUqIHJlZk5vZGUs
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmIChlYykgewogICAgICAgICAv
LyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBzdGFy
dCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3ZSBk
byBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJlIGlu
IGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKHJlZk5v
ZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvckNvbnRh
aW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAgICAgZWMgPSAwOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCByZXN1bHQgPSBjb21wYXJl
Qm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgZWMpID49IDAgJiYgIWVjCi0gICAgICAgICYmIGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCksIGVj
KSA8PSAwICYmICFlYzsKKyAgICBib29sIHJlc3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cygm
cmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMp
ID49IDAgJiYgIWVjCisgICAgICAgICYmIGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVmTm9kZSwg
b2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpLCBlYykgPD0gMCAmJiAhZWM7
CiAgICAgQVNTRVJUKCFlYyB8fCBlYyA9PSBXUk9OR19ET0NVTUVOVF9FUlIpOwogICAgIGVjID0g
MDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5v
ZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorc2hvcnQg
UmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
L2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVQb2ludAogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMg
LTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gaWYgdGhlIHBvaW50IGRlc2NyaWJlZCBieSB0aGUgCiAg
ICAgLy8gcmVmTm9kZSBub2RlIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoZSBub2RlIGlzIGJlZm9y
ZSwgc2FtZSBhcywgb3IgYWZ0ZXIgdGhlIHJhbmdlIHJlc3BlY3RpdmVseS4KLQotICAgIGlmICgh
cmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkp
IHsKKyAgICBpZiAoJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CiAg
ICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CkBAIC0yNzQsNDkgKzI2NCw0NCBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUqIHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgIGlmIChlYykg
ewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhlciByZWZO
b2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAgICAgICAg
IC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4pIG9wZXJh
dGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIXJlZk5vZGUtPmluRG9jdW1l
bnQoKSAmJiAhY29tbW9uQW5jZXN0b3JDb250YWluZXIocmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVy
KCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgpICYmICFjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAgICAgZWMg
PSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8v
IGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBwb2ludCBjb21lcyBiZWZvcmUKLSAgICBpZiAoY29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3Rh
cnQub2Zmc2V0KCksIGVjKSA8IDApCisgICAgaWYgKGNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmVm
Tm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpIDwg
MCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIGNvbXBhcmUgdG8gZW5kLCBhbmQgcG9pbnQgY29tZXMgYWZ0ZXIKLSAgICBpZiAo
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBt
X2VuZC5vZmZzZXQoKSwgZWMpID4gMCAmJiAhZWMpCisgICAgaWYgKGNvbXBhcmVCb3VuZGFyeVBv
aW50cygmcmVmTm9kZSwgb2Zmc2V0LCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpLCBl
YykgPiAwICYmICFlYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvLyBwb2ludCBpcyBpbiB0
aGUgbWlkZGxlIG9mIHRoaXMgcmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMKICAgICBy
ZXR1cm4gMDsKIH0KIAotUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21wYXJlTm9kZShO
b2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1JhbmdlOjpDb21wYXJlUmVz
dWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0RP
TTpyYW5nZS5jb21wYXJlTm9kZQogICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgMCwgMSwgMiwg
b3IgMyBiYXNlZCBvbiBpZiB0aGUgbm9kZSBpcyBiZWZvcmUsIGFmdGVyLAogICAgIC8vIGJlZm9y
ZSBhbmQgYWZ0ZXIoc3Vycm91bmRzKSwgb3IgaW5zaWRlIHRoZSByYW5nZSwgcmVzcGVjdGl2ZWx5
CiAKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAg
IHJldHVybiBOT0RFX0JFRk9SRTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPmluRG9jdW1l
bnQoKSkgeworICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRmly
ZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5z
IDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBpZiAoJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgeworICAgIGlmICgmcmVmTm9kZS5k
b2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRmlyZWZveCBkb2Vz
bid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAg
ICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBDb250YWluZXJOb2RlKiBwYXJl
bnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9
IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnRO
b2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7CisgICAgdW5zaWduZWQgbm9kZUluZGV4ID0gcmVm
Tm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgCiAgICAgaWYgKCFwYXJlbnROb2RlKSB7CiAg
ICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1lbnQgd2Ugc2hvdWxkIHJldHVy
biBOT0RFX0JFRk9SRV9BTkRfQUZURVIKQEAgLTMyNSwyNiArMzEwLDIyIEBAIFJhbmdlOjpDb21w
YXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBp
ZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpIDwgMCkgeyAvLyBzdGFy
dHMgYmVmb3JlCi0gICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4
ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKKyAgICAvLyBzdGFydHMgYmVm
b3JlCisgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4LCBlYykgPCAw
KSB7CisgICAgICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEs
IGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAgICAgICAgICByZXR1cm4gTk9E
RV9CRUZPUkVfQU5EX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7IC8vIGVuZHMg
YmVmb3JlIG9yIGluIHRoZSByYW5nZQotICAgIH0gZWxzZSB7IC8vIHN0YXJ0cyBhdCBvciBhZnRl
ciB0aGUgcmFuZ2Ugc3RhcnQKLSAgICAgICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBu
b2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQotICAgICAgICAg
ICAgcmV0dXJuIE5PREVfQUZURVI7Ci0gICAgICAgIHJldHVybiBOT0RFX0lOU0lERTsgLy8gZW5k
cyBpbnNpZGUgdGhlIHJhbmdlCiAgICAgfQorICAgIC8vIHN0YXJ0cyBhdCBvciBhZnRlciB0aGUg
cmFuZ2Ugc3RhcnQKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2RlSW5kZXgg
KyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQorICAgICAgICByZXR1cm4gTk9E
RV9BRlRFUjsKKyAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8vIGVuZHMgaW5zaWRlIHRoZSByYW5n
ZQogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3cgaG93
LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorc2hv
cnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFu
Z2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAoIXNv
dXJjZVJhbmdlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KICAgICBOb2RlKiB0aGlzQ29udCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7
Ci0gICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRh
aW5lcigpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VSYW5nZS5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpOwogCiAgICAgaWYgKCZ0aGlzQ29udC0+ZG9jdW1lbnQoKSAhPSAmc291cmNl
Q29udC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKQEAg
LTM2NCwyMCArMzQ1LDIwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29t
cGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjCiAKICAgICBzd2l0Y2gg
KGhvdykgewogICAgICAgICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAgICAgICAgICAgcmV0dXJu
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS0+bV9zdGFydCwgZWMp
OworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LCBzb3Vy
Y2VSYW5nZS5tX3N0YXJ0LCBlYyk7CiAgICAgICAgIGNhc2UgU1RBUlRfVE9fRU5EOgotICAgICAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UtPm1f
c3RhcnQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9l
bmQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAgY2FzZSBFTkRfVE9fRU5EOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFu
Z2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KG1fZW5kLCBzb3VyY2VSYW5nZS5tX2VuZCwgZWMpOwogICAgICAgICBjYXNlIEVORF9UT19TVEFS
VDoKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291
cmNlUmFuZ2UtPm1fZW5kLCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5
UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7CiAgICAgfQogCiAgICAgZWMg
PSBTWU5UQVhfRVJSOwogICAgIHJldHVybiAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQgY29tcGFyZUhvdywgY29uc3Qg
UmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3Nob3J0IFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBjb21wYXJl
SG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewogICAgIGlmIChjb21wYXJlSG93ID4gRU5EX1RPX1NUQVJUKSB7CiAgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CkBAIC00OTUsMjYgKzQ3NiwyMSBAQCB2b2lkIFJhbmdlOjpkZWxldGVD
b250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBwcm9jZXNzQ29udGVudHMoRGVsZXRlLCBl
Yyk7CiB9CiAKLWJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAorYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0g
ICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkgfHwgJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0g
Jm93bmVyRG9jdW1lbnQoKSkKKyAgICBpZiAoIXJlZk5vZGUuaW5Eb2N1bWVudCgpIHx8ICZyZWZO
b2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHJlZk5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS5wYXJlbnROb2RlKCk7
CiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHVuc2ln
bmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICB1bnNpZ25l
ZCBub2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKIAogICAgIC8vIElmIChw
YXJlbnQsIG9mZnNldCkgaXMgYmVmb3JlIGVuZCBhbmQgKHBhcmVudCwgb2Zmc2V0ICsgMSkgaXMg
YWZ0ZXIgc3RhcnQsIHJldHVybiB0cnVlLgogICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNl
LgotICAgIHNob3J0IGNvbXBhcmVGaXJzdCA9IGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2Rl
SW5kZXgsIGVjKTsKLSAgICBzaG9ydCBjb21wYXJlU2Vjb25kID0gY29tcGFyZVBvaW50KHBhcmVu
dE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKKyAgICBzaG9ydCBjb21wYXJlRmlyc3QgPSBjb21w
YXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOworICAgIHNob3J0IGNvbXBhcmVT
ZWNvbmQgPSBjb21wYXJlUG9pbnQoKnBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKTsKIAog
ICAgIGJvb2wgaXNGaXJzdEJlZm9yZUVuZCA9IG1fc3RhcnQgPT0gbV9lbmQgPyBjb21wYXJlRmly
c3QgPCAwIDogY29tcGFyZUZpcnN0IDw9IDA7CiAgICAgYm9vbCBpc1NlY29uZEFmdGVyU3RhcnQg
PSBtX3N0YXJ0ID09IG1fZW5kID8gY29tcGFyZVNlY29uZCA+IDAgOiBjb21wYXJlU2Vjb25kID49
IDA7CkBAIC02NDUsOSArNjIxLDkgQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpw
cm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2VwdGlvbkNvZGUKICAgICBlYyA9
IDA7CiAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpIHsKICAg
ICAgICAgaWYgKHBhcnRpYWxTdGFydCAmJiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsU3Rh
cnQuZ2V0KCkpKQotICAgICAgICAgICAgc2V0U3RhcnQocGFydGlhbFN0YXJ0LT5wYXJlbnROb2Rl
KCksIHBhcnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOworICAgICAgICAg
ICAgc2V0U3RhcnQoKnBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsU3RhcnQtPmNv
bXB1dGVOb2RlSW5kZXgoKSArIDEsIGVjKTsKICAgICAgICAgZWxzZSBpZiAocGFydGlhbEVuZCAm
JiBjb21tb25Sb290LT5jb250YWlucyhwYXJ0aWFsRW5kLmdldCgpKSkKLSAgICAgICAgICAgIHNl
dFN0YXJ0KHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSwgcGFydGlhbEVuZC0+Y29tcHV0ZU5vZGVJ
bmRleCgpLCBlYyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFydGlhbEVuZC0+cGFyZW50Tm9k
ZSgpLCBwYXJ0aWFsRW5kLT5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsK
QEAgLTgzNiwxMyArODEyLDggQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjbG9u
ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBwcm9jZXNzQ29udGVudHMo
Q2xvbmUsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiBu
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUmVmPE5vZGU+
JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYm9vbCBzdGFy
dElzQ2hhcmFjdGVyRGF0YSA9IGlzPENoYXJhY3RlckRhdGE+KHN0YXJ0Q29udGFpbmVyKCkpOwog
ICAgIGlmIChzdGFydElzQ2hhcmFjdGVyRGF0YSAmJiAhc3RhcnRDb250YWluZXIoKS5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CkBAIC04NTksNyAr
ODMwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiBub2RlLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gZG93bmNhc3Q8
Q29udGFpbmVyTm9kZT4oKnBhcmVudE5vZGUpOwogCiAgICAgZWMgPSAwOwotICAgIGlmICghcGFy
ZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eSgqbm9kZSwgcmVmZXJlbmNlTm9kZS5nZXQo
KSwgZWMpKQorICAgIGlmICghcGFyZW50LT5lbnN1cmVQcmVJbnNlcnRpb25WYWxpZGl0eShub2Rl
LCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYykpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV2ZW50
UXVldWVTY29wZSBzY29wZTsKQEAgLTg2OSw3ICs4NDAsNyBAQCB2b2lkIFJhbmdlOjppbnNlcnRO
b2RlKFJlZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWZlcmVuY2VOb2RlID09IG5vZGUpCisgICAgaWYg
KHJlZmVyZW5jZU5vZGUgPT0gbm9kZS5wdHIoKSkKICAgICAgICAgcmVmZXJlbmNlTm9kZSA9IHJl
ZmVyZW5jZU5vZGUtPm5leHRTaWJsaW5nKCk7CiAKICAgICBub2RlLT5yZW1vdmUoZWMpOwpAQCAt
ODc3LDE3ICs4NDgsMTcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiBu
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQg
bmV3T2Zmc2V0ID0gcmVmZXJlbmNlTm9kZSA/IHJlZmVyZW5jZU5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSA6IHBhcmVudC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgaWYgKGlzPERvY3VtZW50RnJh
Z21lbnQ+KCpub2RlKSkKLSAgICAgICAgbmV3T2Zmc2V0ICs9IGRvd25jYXN0PERvY3VtZW50RnJh
Z21lbnQ+KCpub2RlKS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnRGcmFn
bWVudD4obm9kZS5nZXQoKSkpCisgICAgICAgIG5ld09mZnNldCArPSBkb3duY2FzdDxEb2N1bWVu
dEZyYWdtZW50Pihub2RlLmdldCgpKS5jb3VudENoaWxkTm9kZXMoKTsKICAgICBlbHNlCiAgICAg
ICAgICsrbmV3T2Zmc2V0OwogCi0gICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobm9kZS5yZWxlYXNl
Tm9uTnVsbCgpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBlYyk7CisgICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUoV1RGTW92ZShub2RlKSwgcmVmZXJlbmNlTm9kZS5nZXQoKSwgZWMpOwogICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGNvbGxhcHNlZCgpKQotICAgICAgICBzZXRF
bmQocGFyZW50LnB0cigpLCBuZXdPZmZzZXQsIGVjKTsKKyAgICAgICAgc2V0RW5kKFdURk1vdmUo
cGFyZW50KSwgbmV3T2Zmc2V0LCBlYyk7CiB9CiAKIFN0cmluZyBSYW5nZTo6dG9TdHJpbmcoKSBj
b25zdApAQCAtOTUwLDkgKzkyMSw5IEBAIHZvaWQgUmFuZ2U6OmRldGFjaCgpCiAgICAgLy8gVGhp
cyBpcyBub3cgYSBuby1vcCBhcyBwZXIgdGhlIERPTSBzcGVjaWZpY2F0aW9uLgogfQogCi1Ob2Rl
KiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUmIG5vZGUs
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIHN3aXRjaCAobi0+
bm9kZVR5cGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAgICAgZWMgPSBJTlZBTElEX05P
REVfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk2MCw3ICs5MzEs
NyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6
CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OlBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCpuKS5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+IGRvd25jYXN0PENo
YXJhY3RlckRhdGE+KG5vZGUpLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIGVjID0gSU5ERVhf
U0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgY2FzZSBOb2Rl
OjpBVFRSSUJVVEVfTk9ERToKQEAgLTk2OSw3ICs5NDAsNyBAQCBOb2RlKiBSYW5nZTo6Y2hlY2tO
b2RlV09mZnNldChOb2RlKiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
ICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAgICAgICAgICAgIGlmICghb2Zm
c2V0KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgTm9kZSog
Y2hpbGRCZWZvcmUgPSBuLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKKyAgICAgICAg
ICAgIE5vZGUqIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAx
KTsKICAgICAgICAgICAgIGlmICghY2hpbGRCZWZvcmUpCiAgICAgICAgICAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBjaGlsZEJlZm9yZTsKQEAgLTk4NCwx
MDEgKzk1NSw3MSBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKICAgICBy
ZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZzdGFydENvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKIH0KIAot
dm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkp
IHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJ
RF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0U3RhcnQo
cmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAxLCBl
Yyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVO
b2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6c2V0RW5kQmVmb3JlKE5vZGUq
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0RW5kQmVmb3JlKE5v
ZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewot
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghcmVmTm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUo
KSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHNldEVuZChyZWZOb2RlLT5wYXJlbnROb2RlKCksIHJlZk5vZGUtPmNv
bXB1dGVOb2RlSW5kZXgoKSwgZWMpOworICAgIHNldEVuZCgqcmVmTm9kZS5wYXJlbnROb2RlKCks
IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldEVu
ZEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0
RW5kQWZ0ZXIoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFy
ZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUu
cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVudE5vZGUoKSwg
cmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOworICAgIHNldEVuZCgqcmVmTm9k
ZS5wYXJlbnROb2RlKCksIHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwogfQog
Ci12b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX05P
REVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoJm93bmVyRG9j
dW1lbnQoKSAhPSAmcmVmTm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgc2V0RG9jdW1lbnQocmVm
Tm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKCZvd25lckRvY3VtZW50KCkgIT0gJnJlZk5vZGUu
ZG9jdW1lbnQoKSkKKyAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS5kb2N1bWVudCgpKTsKIAot
ICAgIHVuc2lnbmVkIGluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgZWMgPSAwOwot
ICAgIHNldFN0YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5kZXgsIGVjKTsKKyAgICBzZXRT
dGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIGluZGV4LCBlYyk7CiAgICAgaWYgKGVjKQogICAg
ICAgICByZXR1cm47Ci0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgaW5kZXggKyAx
LCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXggKyAxLCBlYyk7
CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhOb2RlKiByZWZOb2RlLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyhOb2RlJiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAg
ZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVmTm9k
ZS0+aXNEb2N1bWVudFR5cGVOb2RlKCkpIHsKKyAgICBpZiAocmVmTm9kZS5pc0RvY3VtZW50VHlw
ZU5vZGUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLT5k
b2N1bWVudCgpKQotICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgpKTsKKyAg
ICBpZiAoJm93bmVyRG9jdW1lbnQoKSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQorICAgICAgICBz
ZXREb2N1bWVudChyZWZOb2RlLmRvY3VtZW50KCkpOwogCiAgICAgbV9zdGFydC5zZXRUb1N0YXJ0
T2ZOb2RlKHJlZk5vZGUpOwogICAgIG1fZW5kLnNldFRvRW5kT2ZOb2RlKHJlZk5vZGUpOwogfQog
Ci12b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc05ld1Bh
cmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKE5v
ZGUmIHBhc3NOZXdQYXJlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxOb2Rl
PiBuZXdQYXJlbnQgPSBwYXNzTmV3UGFyZW50OwotCi0gICAgaWYgKCFuZXdQYXJlbnQpIHsKLSAg
ICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVmPE5v
ZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7CiAKICAgICAvLyBJTlZBTElEX1NUQVRFX0VS
UjogUmFpc2VkIGlmIHRoZSBSYW5nZSBwYXJ0aWFsbHkgc2VsZWN0cyBhIG5vbi1UZXh0IG5vZGUu
CiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tcmFuZ2Utc3Vycm91bmRj
b250ZW50cyAoc3RlcCAxKS4KQEAgLTExMzMsNyArMTA3NCw3IEBAIHZvaWQgUmFuZ2U6OnN1cnJv
dW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKIAogICAgIGVjID0gMDsKICAgICB3aGlsZSAoTm9kZSogbiA9IG5ld1BhcmVudC0+Zmly
c3RDaGlsZCgpKSB7Ci0gICAgICAgIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpuZXdQYXJlbnQp
LnJlbW92ZUNoaWxkKCpuLCBlYyk7CisgICAgICAgIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5l
d1BhcmVudC5nZXQoKSkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNDYsMjIgKzEwODcsMTcgQEAgdm9pZCBSYW5n
ZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBhc3NOZXdQYXJlbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgIG5ld1BhcmVudC0+YXBwZW5kQ2hpbGQoZnJhZ21lbnQucmVsZWFz
ZSgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgc2VsZWN0Tm9kZShu
ZXdQYXJlbnQuZ2V0KCksIGVjKTsKKyAgICBzZWxlY3ROb2RlKG5ld1BhcmVudCwgZWMpOwogfQog
Ci12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJv
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IElO
VkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFN0
YXJ0KHJlZk5vZGUtPnBhcmVudE5vZGUoKSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpLCBl
Yyk7CisgICAgc2V0U3RhcnQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCByZWZOb2RlLmNvbXB1dGVO
b2RlSW5kZXgoKSwgZWMpOwogfQogCiBOb2RlKiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKQEAg
LTE1MzksMTEgKzE0NzUsMTEgQEAgYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgUmFuZ2UmIG90
aGVyKSBjb25zdAogICAgIGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3Vt
ZW50KCkgIT0gb3RoZXIuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJEb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3RhcnQgPSBjb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAmb3RoZXIsIEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9IGNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG90aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
ICAgICBpZiAoc3RhcnRUb1N0YXJ0ID4gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
c2hvcnQgZW5kVG9FbmQgPSBjb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQs
ICZvdGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgZW5kVG9FbmQgPSBjb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG90aGVyLCBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKICAgICByZXR1cm4gZW5kVG9FbmQgPj0gMDsKIH0KIApAQCAtMTU3NSwxOSArMTUx
MSwxOSBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJhbmdlKiBi
KQogICAgIGlmIChhLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3VtZW50KCkg
IT0gYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKS0+b3duZXJEb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBzaG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgc3RhcnRUb1N0
YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKmIs
IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHNob3J0IGVuZFRvRW5kID0gYS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CiAKICAgICAvLyBGaXJzdCByYW5nZSBjb250YWlucyB0aGUgc2Vjb25kIHJhbmdlLgogICAgIGlm
IChzdGFydFRvU3RhcnQgPD0gMCAmJiBlbmRUb0VuZCA+PSAwKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIC8vIEVuZCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgot
ICAgIGlmIChhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgYiwg
QVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8PSAwKQorICAgIGlmIChhLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKmIsIEFTU0VSVF9OT19F
WENFUFRJT04pID49IDAgJiYgZW5kVG9FbmQgPD0gMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBTdGFydCBvZiBmaXJzdCByYW5nZSBpcyBpbnNpZGUgc2Vjb25kIHJhbmdlLgotICAg
IGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCkKKyAgICBpZiAoc3Rh
cnRUb1N0YXJ0ID49IDAgJiYgYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsICpiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OTcsNyArMTUzMyw3IEBAIFJlZjxSYW5nZT4g
cmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgUmVmPFJhbmdlPiByYW5nZSA9IFJh
bmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAg
ICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCZub2RlLCBleGNlcHRpb24pOworICAgIHJhbmdl
LT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gcmFuZ2U7
CiB9CiAKQEAgLTE2MjEsMTMgKzE1NTcsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5
Tm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXIKIHsK
ICAgICBmb3IgKE5vZGUqIG5vZGVUb0JlUmVtb3ZlZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7
IG5vZGVUb0JlUmVtb3ZlZDsgbm9kZVRvQmVSZW1vdmVkID0gbm9kZVRvQmVSZW1vdmVkLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG5vZGVU
b0JlUmVtb3ZlZCkgewotICAgICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZSgmY29u
dGFpbmVyKTsKKyAgICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVy
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoTm9kZSog
biA9IGJvdW5kYXJ5LmNvbnRhaW5lcigpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAg
ICAgICAgICBpZiAobiA9PSBub2RlVG9CZVJlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICBib3Vu
ZGFyeS5zZXRUb1N0YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAgICAgICAgICAgICAgIGJvdW5k
YXJ5LnNldFRvU3RhcnRPZk5vZGUoY29udGFpbmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MDcsOSArMTY0Myw5IEBAIHZvaWQgUmFu
Z2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKFJhbmdlQm91
bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9m
ZnNldCkKIHsKICAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZS5ub2RlKCkp
Ci0gICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCks
IGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpv
bGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCksIGJvdW5kYXJ5Lm9mZnNldCgpICsgb2Zm
c2V0LCAwKTsKICAgICBlbHNlIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBvbGROb2RlLm5v
ZGUoKS0+cGFyZW50Tm9kZSgpICYmIGJvdW5kYXJ5Lm9mZnNldCgpID09IG9sZE5vZGUuaW5kZXgo
KSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmco
KSwgb2Zmc2V0LCAwKTsKKyAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5vZGUoKS0+cHJl
dmlvdXNTaWJsaW5nKCksIG9mZnNldCwgMCk7CiB9CiAKIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01l
cmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0xNzMwLDcg
KzE2NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbAogICAgICAgICB1bnNpZ25lZCBzcGxp
dE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9m
ZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBz
cGxpdE9mZnNldCkKLSAgICAgICAgICAgIGJvdW5kYXJ5LnNldChvbGROb2RlLT5uZXh0U2libGlu
ZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKKyAgICAgICAgICAgIGJvdW5k
YXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9m
ZnNldCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byogcGFyZW50ID0gb2xk
Tm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtMTc3MSw4ICsxNzA3LDE3IEBAIHZvaWQgUmFuZ2U6OmV4
cGFuZChjb25zdCBTdHJpbmcmIHVuaXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlbmQg
PSBlbmRPZkRvY3VtZW50KGVuZCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKLSAgICBz
ZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKLSAgICBz
ZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2
YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKworICAgIGlmICgh
c3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBU
eXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0U3RhcnQoKnN0YXJ0LmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmICghZW5kLmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIHNldEVuZCgqZW5kLmRlZXBFcXVpdmFsZW50KCkuY29u
dGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGVjKTsKIH0KIAogUmVmPENsaWVudFJlY3RMaXN0PiBSYW5nZTo6Z2V0Q2xpZW50
UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBhMjJlZGU2NzJlYjJjYmJhNWJmZjZhMzVk
MGQyMWE4YTYxMmYyZjNhLi4yM2FjMzU3NTllNWU2ZmY5ZDQ0NzVmOGZlMjZmMjg3NGJmMzE5ZTE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuaApAQCAtNjYsMjQgKzY2LDI0IEBAIHB1YmxpYzoKIAogICAgIE5vZGUq
IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uQW5jZXN0b3JD
b250YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWluZXIoKSk7IH0KICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9kZSogY29u
dGFpbmVyQSwgTm9kZSogY29udGFpbmVyQik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
dGFydChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVu
ZChQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
PSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXJ0
KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgPSBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZChSZWY8Tm9k
ZT4mJiBjb250YWluZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VY
Q0VQVElPTik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29sIHRvU3RhcnQp
OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHNob3J0IGNvbXBhcmVQb2ludChOb2Rl
KiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShOb2RlJiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJik7CisgICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUmIHJlZk5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBlbnVtIENvbXBhcmVSZXN1bHRz
IHsgTk9ERV9CRUZPUkUsIE5PREVfQUZURVIsIE5PREVfQkVGT1JFX0FORF9BRlRFUiwgTk9ERV9J
TlNJREUgfTsKLSAgICBDb21wYXJlUmVzdWx0cyBjb21wYXJlTm9kZShOb2RlKiByZWZOb2RlLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgQ29tcGFyZVJlc3VsdHMgY29tcGFyZU5vZGUoTm9k
ZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGVudW0gQ29tcGFyZUhvdyB7
IFNUQVJUX1RPX1NUQVJULCBTVEFSVF9UT19FTkQsIEVORF9UT19FTkQsIEVORF9UT19TVEFSVCB9
OwotICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJl
SG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAg
ICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBj
b21wYXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFy
ZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Cisg
ICAgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzRm9yQmluZGluZ3ModW5zaWduZWQgc2hvcnQg
Y29tcGFyZUhvdywgY29uc3QgUmFuZ2UmIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CiAgICAgc3RhdGljIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWlu
ZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50IG9mZnNldEIsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNvbnN0IFJh
bmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnlBLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGJv
dW5kYXJ5QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYm91bmRh
cnlQb2ludHNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaW50ZXJzZWN0c05vZGUoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0c05vZGUoTm9k
ZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRlQ29udGVu
dHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBleHRyYWN0
Q29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
bG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGluc2VydE5vZGUoUmVmUHRy
PE5vZGU+JiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGluc2VydE5vZGUoUmVmPE5vZGU+
JiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAg
IFN0cmluZyB0b0hUTUwoKSBjb25zdDsKQEAgLTk0LDEzICs5NCwxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXRhY2goKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNsb25lUmFuZ2Uo
KSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhcnRBZnRlcihOb2RlKiwg
RXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhD
RVBUSU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEFmdGVyKE5vZGUqLCBFeGNl
cHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2VsZWN0Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVDb250ZW50cyhOb2RlKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFydEJlZm9y
ZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Rh
cnRBZnRlcihOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEJlZm9yZShOb2RlJiwgRXhjZXB0aW9uQ29kZSYg
PSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEVuZEFm
dGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZShOb2RlJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdE5vZGVDb250
ZW50cyhOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc3Vycm91bmRDb250ZW50cyhO
b2RlJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhcnRC
ZWZvcmUoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNvbnN0IFBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQogICAgIGNv
bnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlv
bigpOyB9CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0RG9jdW1l
bnQoRG9jdW1lbnQmKTsKIAotICAgIE5vZGUqIGNoZWNrTm9kZVdPZmZzZXQoTm9kZSosIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBOb2RlKiBjaGVja05vZGVXT2Zmc2V0
KE5vZGUmLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKICAgICBlbnVtIEFj
dGlvblR5cGUgeyBEZWxldGUsIEV4dHJhY3QsIENsb25lIH07CiAgICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBFeGNlcHRpb25Db2RlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmlkbAppbmRleCBmMjNhZjhjNDZjZDA2MDdkY2JkYWMxNGQ5YjIzMWNjMGQxZGI0
MjM3Li5hNzU4NjgzOTI3ZWIxMjU0MmY3OTAyMTVkN2EzMzI2MzFhNDYyMzIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5pZGwKQEAgLTIyLDcgKzIyLDYgQEAKIFsKICAgICBDb25zdHJ1Y3RvciwKICAgICBDb25z
dHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAotICAgIFVzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxh
YmxlT2JqZWN0QXJndW1lbnRzLAogICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUsCiAgICAg
RXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiBdIGludGVyZmFjZSBSYW5nZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggMjhlODhjM2M2NmFkOTI5YWY1YjRh
ZGQwYjIyNGI0YWY2ZGMyZGVlYy4uYmY4ZjllNDEzNzllYjBkZjE2YjlhNWVhNGU0MWQzYzk0NDc3
NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtNDUsMTMg
KzQ1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgc2V0KFBh
c3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSk7
CisgICAgdm9pZCBzZXQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBj
aGlsZEJlZm9yZSk7CiAgICAgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCk7CiAKICAgICB2b2lk
IHNldFRvQmVmb3JlQ2hpbGQoTm9kZSYpOwogICAgIHZvaWQgc2V0VG9BZnRlckNoaWxkKE5vZGUm
KTsKLSAgICB2b2lkIHNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9p
ZCBzZXRUb0VuZE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHNldFRvU3RhcnRP
Zk5vZGUoUmVmPE5vZGU+JiYpOworICAgIHZvaWQgc2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYp
OwogCiAgICAgdm9pZCBjaGlsZEJlZm9yZVdpbGxCZVJlbW92ZWQoKTsKICAgICB2b2lkIGludmFs
aWRhdGVPZmZzZXQoKSBjb25zdDsKQEAgLTExNiwxMiArMTE2LDExIEBAIGlubGluZSB2b2lkIFJh
bmdlQm91bmRhcnlQb2ludDo6Y2xlYXIoKQogICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51
bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFBhc3NSZWZQ
dHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSkKK2lubGlu
ZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50
IG9mZnNldCwgTm9kZSogY2hpbGRCZWZvcmUpCiB7Ci0gICAgQVNTRVJUKGNvbnRhaW5lcik7CiAg
ICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKICAgICBBU1NFUlQoY2hpbGRCZWZvcmUgPT0gKG9mZnNl
dCA/IGNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkgOiAwKSk7Ci0gICAg
bV9jb250YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1v
dmUoY29udGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gb2Zmc2V0OwogICAgIG1f
Y2hpbGRCZWZvcmVCb3VuZGFyeSA9IGNoaWxkQmVmb3JlOwogfQpAQCAtMTUxLDE4ICsxNTAsMTYg
QEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0FmdGVyQ2hpbGQoTm9kZSYg
Y2hpbGQpCiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA/
IGludmFsaWRPZmZzZXQgOiAwOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvU3RhcnRPZk5vZGUoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIpCitpbmxpbmUgdm9p
ZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvU3RhcnRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFp
bmVyKQogewotICAgIEFTU0VSVChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNv
bnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAg
bV9vZmZzZXRJbkNvbnRhaW5lciA9IDA7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVs
bHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9k
ZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5lcikKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQ
b2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewotICAgIEFTU0VS
VChjb250YWluZXIpOwotICAgIG1fY29udGFpbmVyTm9kZSA9IGNvbnRhaW5lcjsKKyAgICBtX2Nv
bnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7CiAgICAgaWYgKG1fY29udGFpbmVyTm9k
ZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKICAgICAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9
IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgICAgIG1fY2hpbGRC
ZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1ZWRmMGI2YzJkM2U5ZTdlMjU5
OWViMmRkZjUwMTY3ZmFkMTBjZTY0Li5iM2QwNjliZWY4MWY5MDk2MjYyZDI2ZTRjMjljMmU5MjQ4
MWQ4MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1OCw3ICsyNTgsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSogcmFu
Z2UsCiAKICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZSA9
IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3Np
dGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9u
T2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbnRhaW5l
ck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2
ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CmluZGV4IDdiODllMGU3ZmNkNThmY2U4MGMyYmRiNDE0ZmJmNjI0ZmU4ZmJkOTQuLmFjNDY0ODg5
ZTkxZjNmMWUwOWVlMDVhYzQ1MWRkMmNmNTRkZjkxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSog
c3R5bGUsIGNvbnN0IFAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShz
dGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAgIEVsZW1lbnQqIGVkaXRhYmxl
Um9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChzdGFydE5v
ZGUgIT0gZWRpdGFibGVSb290KSB7Ci0gICAgICAgIHdoaWxlIChlZGl0YWJsZVJvb3QgJiYgc3Rh
cnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oc3RhcnROb2RlLT5wYXJlbnROb2RlKCksIHJhbmdlLmdldCgpKSkKKyAgICAg
ICAgd2hpbGUgKGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAhPSBlZGl0
YWJsZVJvb3QgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqc3RhcnROb2RlLT5wYXJl
bnROb2RlKCksIHJhbmdlLmdldCgpKSkKICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IDY0YmRlNzI3ZWIzMjcyNmUxNDA4ZGYzYjg0YzVlOTRmODE3ZDgwMDAuLjYyZDA2ZjllNmI2M2Nm
OTk2NjMzNGJjMTFhZDVkYTZiY2FhOTQ3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hp
bGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7ICAgIAogICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dCA9IGRvY3VtZW50
KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVudHMoJmVsZW1l
bnQsIGVjKTsKKyAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCwgZWMpOwog
CiAgICAgU3RyaW5nQnVpbGRlciBkaWN0YXRpb25QaHJhc2VzQnVpbGRlcjsKICAgICBmb3IgKGF1
dG8mIGludGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBocmFzZXMpCkBAIC02MjcsNyArNjI3LDcg
QEAgdm9pZCBFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4
dCwgRWxlbWVudCogZWxlbSkKICAgICAgICAgICAgIGVsZW0tPnJlbW92ZShlYyk7ICAgIAogICAg
ICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dCA9IGRvY3VtZW50KCkuY3Jl
YXRlUmFuZ2UoKTsKLSAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW0sIGVj
KTsKKyAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRzKCplbGVtLCBlYyk7CiAgICAg
ICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoKmNvbnRleHQuZ2V0KCksIHRleHQpOwogICAgICAgICBlbGVtLT5hcHBlbmRDaGlsZChXVEZN
b3ZlKGZyYWdtZW50KSwgZWMpOwogICAgIApAQCAtMTk1MCwxNCArMTk1MCwxNiBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBQb3NpdGlvbiByYW5nZUNv
bXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0g
ICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJhbmdlQ29tcGxpYW50UG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHJhbmdlQ29tcGxp
YW50UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAgICAgIHNwZWxsaW5nU2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KCpyYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCks
IHJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7IC8vIHdv
bid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKICAgICAvLyB0b3BOb2RlIGRlZmluZXMgdGhl
IHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAgICBOb2RlKiB0b3BOb2RlID0g
aGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CiAgICAgLy8gRklYTUU6IGxhc3RPZmZzZXRG
b3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoaGlnaGVz
dEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8dGFibGU+KQotICAgIHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zmc2V0Rm9yRWRpdGluZyh0b3BO
b2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHRvcE5vZGUpCisgICAgICAgIHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgqdG9wTm9kZSwgbGFzdE9mZnNldEZvckVkaXRpbmcodG9w
Tm9kZSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgLy8gSWYgc3BlbGxpbmdTZWFyY2hSYW5n
ZSBzdGFydHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFuY2UgdG8gdGhlIG5leHQgd29y
ZCBzbyB3ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29yZCBib3VuZGFyeS4gR29pbmcg
YmFjayBieSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEgd29yZCBkb2VzIHRoZSB0cmlj
ay4KQEAgLTIwMTEsNyArMjAxMyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIC8vIFN0b3AgbG9v
a2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAogICAgICAgICAgICAgQ2hhcmFj
dGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7CiAgICAgICAgICAgICBjaGFy
cy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hS
YW5nZS0+c2V0RW5kKCZjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLCBjaGFycy5yYW5n
ZSgpLT5zdGFydE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGdyYW1t
YXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCksIGNo
YXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9
CiAgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTIwMjIs
OSArMjAyNCwxMCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gSWYgd2UgZm91bmQgbmVpdGhlciBiYWQgZ3Jh
bW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRyeSBhZ2FpbiAoYnV0IGRvbid0
IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAgICAgLy8gYmxv
Y2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgogICAgIGlmIChzdGFydGVkV2l0aFNlbGVj
dGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQaHJhc2UpIHsKLSAgICAgICAg
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwgMCwgSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgICAgIGlmICh0b3BOb2RlKQorICAgICAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5n
ZS0+c2V0U3RhcnQoKnRvcE5vZGUsIDAsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICAvLyBn
b2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRlc3RlZCBpcyBm
YXIgZW5vdWdoCi0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCgmc2VhcmNoRW5k
Tm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRl
cldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAg
ICAgIAogICAgICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAg
ICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdl
KCk7CkBAIC0yMDQ1LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICAgICAgLy8gU3Rv
cCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCiAgICAgICAgICAgICAg
ICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoKmdyYW1tYXJTZWFyY2hSYW5nZSk7CiAgICAgICAg
ICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAgICAgICAgICAg
ICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFp
bmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCkt
PnN0YXJ0Q29udGFpbmVyKCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9F
WENFUFRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCkBAIC0zMTY4LDkgKzMxNzEsOSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBF
ZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVu
Y2VSYQogICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9IHJlZmVyZW5jZVJhbmdlID8g
cmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkubm9uQm91bmRhcnlTaGFkb3dUcmVlUm9v
dE5vZGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAgIGlm
IChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9v
dC5nZXQoKSwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y291
bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAgICAgICAgICAgc2VhcmNoUmFu
Z2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRp
b25zKSk7CkBAIC0zMTg2LDkgKzMxODksOSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYQogCiAg
ICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewogICAgICAgICAgICAgaWYgKGZvcndhcmQpCi0g
ICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9vdC5nZXQoKSwg
c2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hp
bGROb2RlcygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOworICAgICAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRTdGFydCgqc2hhZG93VHJlZVJvb3QsIDApOwogICAgICAgICB9CiAKICAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBv
cHRpb25zKTsKQEAgLTMxOTcsMTAgKzMyMDAsMTIgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmEK
ICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBp
biBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KICAgICBpZiAocmVzdWx0
UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAgIHNlYXJjaFJh
bmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9yd2FyZCkK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRvd1RyZWVSb290LT5z
aGFkb3dIb3N0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
RW5kQmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAgICAgICBpZiAoc2hh
ZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSkgeworICAgICAgICAgICAgaWYgKGZvcndhcmQpCisg
ICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoKnNoYWRvd1RyZWVSb290
LT5zaGFkb3dIb3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNlYXJj
aFJhbmdlLT5zZXRFbmRCZWZvcmUoKnNoYWRvd1RyZWVSb290LT5zaGFkb3dIb3N0KCkpOworICAg
ICAgICB9CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5n
ZSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9CkBAIC0zMjIzLDcgKzMyMjgsNyBAQCBzdGF0aWMg
Ym9vbCBpc0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlKiByYW5nZSkKICAgICBib29s
IGluUmFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJF
bGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxlbWVu
dCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBp
ZiAoJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkg
ewotICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZShvd25lckVsZW1l
bnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaW5SYW5nZSA9IHJhbmdlLT5pbnRl
cnNlY3RzTm9kZSgqb3duZXJFbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1NSw4ICszMjYwLDggQEAgdW5zaWduZWQg
RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmFuZ2UsIEZpbmRPcHQKICAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIHNlYXJj
aFJhbmdlLT5zZXRFbmQoJm9yaWdpbmFsRW5kQ29udGFpbmVyLCBvcmlnaW5hbEVuZE9mZnNldCwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRl
cigqcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuc2hhZG93SG9zdCgpLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQob3JpZ2luYWxFbmRDb250
YWluZXIsIG9yaWdpbmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTMyNzUsMTEgKzMyODAsMTEgQEAgdW5zaWduZWQg
RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmFuZ2UsIEZpbmRPcHQKICAgICAgICAgLy8gcmVzdWx0IHJhbmdlLiBUaGVyZSBpcyBubyBuZWVk
IHRvIHVzZSBhIFZpc2libGVQb3NpdGlvbiBoZXJlLAogICAgICAgICAvLyBzaW5jZSBmaW5kUGxh
aW5UZXh0IHdpbGwgdXNlIGEgVGV4dEl0ZXJhdG9yIHRvIGdvIG92ZXIgdGhlIHZpc2libGUKICAg
ICAgICAgLy8gdGV4dCBub2Rlcy4gCi0gICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgmcmVz
dWx0UmFuZ2UtPmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9S
RV9FWENFUFRJT04pOworICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVzdWx0UmFuZ2Ut
PmVuZENvbnRhaW5lcigpLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJ
T04pOwogCiAgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFuZ2UtPnNoYWRv
d1Jvb3QoKTsKICAgICAgICAgaWYgKHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBzaGFkb3dU
cmVlUm9vdCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3Qs
IHNoYWRvd1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCpzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJl
ZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICB9IHdoaWxl
ICh0cnVlKTsKIAogICAgIHJldHVybiBtYXRjaENvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOTFhZDE3Njg2NmY0ZjEzYzA3NGQ3ZDMxNDg0NWJmMzVi
YWI3ZDMzOS4uODFhYTAwMDgxYzc2ZGZhNTMzM2JhZDQ2ZDkwNDRiNWE4YjNkZTg5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0yMjgsMTIgKzIyOCwxMSBA
QCBzdGF0aWMgdW5zaWduZWQgdmVydGljYWxTY3JvbGxEaXN0YW5jZShGcmFtZSYgZnJhbWUpCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihTY3JvbGxiYXI6OnBhZ2VTdGVwKGhlaWdo
dCkpOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSogYSwg
UmFuZ2UqIGIpCitzdGF0aWMgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJhbmdlcyhSYW5nZSYgYSwg
UmFuZ2UmIGIpCiB7Ci0gICAgUmFuZ2UqIHN0YXJ0ID0gYS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IGEg
OiBiOwotICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsIGIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBiIDogYTsKLQotICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKGEtPm93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0LT5zdGFydENvbnRh
aW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgJmVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+
ZW5kT2Zmc2V0KCkpOworICAgIFJhbmdlJiBzdGFydCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IGEg
OiBiOworICAgIFJhbmdlJiBlbmQgPSBhLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5E
X1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IGIgOiBhOworICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKGEub3duZXJEb2N1bWVudCgpLCAmc3RhcnQuc3RhcnRDb250YWluZXIo
KSwgc3RhcnQuc3RhcnRPZmZzZXQoKSwgJmVuZC5lbmRDb250YWluZXIoKSwgZW5kLmVuZE9mZnNl
dCgpKTsKIH0KIAogLy8gRXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9ucwpAQCAtMzU2LDggKzM1NSw4
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiB7CiAgICAgUmVmUHRyPFJhbmdlPiBtYXJrID0g
ZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgRnJhbWVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwotICAgIGlmIChtYXJrKSB7Ci0g
ICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRP
TVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkp
LmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBpZiAobWFyayAmJiBmcmFtZS5lZGl0b3Io
KS5zZWxlY3RlZFJhbmdlKCkpIHsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5z
ZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgICAgIEFTU0VSVChz
ZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDEwLDcgKzEwMDksNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJr
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAogICAgICAg
ICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBz
ZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9u
KS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBhMDI1NmE0
MDBhOTNlNGY3NmU4OTgxOTVkNzhiNjhmNTE2OTgxMzYzLi5hYWE5OWE4ZThlZDE2MWQxMTMyMDg0
YmI0MjZjZGE5NjI4MjFiM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRC
bG9ja0NvbW1hbmQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5k
Ojpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQs
CiAgICAgaWYgKCFyb290IHx8ICFyZWZOb2RlKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGlz
RWxlbWVudEZvckZvcm1hdEJsb2NrKHJlZk5vZGUtPnRhZ1FOYW1lKCkpICYmIHN0YXJ0ID09IHN0
YXJ0T2ZCbG9jayhzdGFydCkKLSAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkgfHwg
aXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihyZWZOb2RlLCByYW5nZS5nZXQoKSkpCisgICAg
ICAgICYmIChlbmQgPT0gZW5kT2ZCbG9jayhlbmQpIHx8IGlzTm9kZVZpc2libHlDb250YWluZWRX
aXRoaW4oKnJlZk5vZGUsIHJhbmdlLmdldCgpKSkKICAgICAgICAgJiYgcmVmTm9kZSAhPSByb290
ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgewogICAgICAgICAvLyBBbHJlYWR5
IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdy
YXBoCiAgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDVhYzMwNzc3ZWRmOGU2YTg0
NTNhZDE3NDczNDNiOTNiNjBiNDM1N2QuLjhiMGIyYjUxYzNjZDI0N2IxNGE3YzkzNjg2NDhkNGRk
NjU5YzhlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBA
IC00NzQsNyArNDc0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAgICAgICAgICAgIG1f
c2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVj
dGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3Nl
bGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJlUmVzdWx0ID0gcmFuZ2UtPmNvbXBh
cmVOb2RlKCZub2RlLCBlYyk7CisgICAgICAgIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBjb21wYXJl
UmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKG5vZGUsIGVjKTsKICAgICAgICAgaWYgKCFlYyAm
JiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVfQU5EX0FGVEVSIHx8IGNvbXBh
cmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSkgewogICAgICAgICAgICAgLy8gSWYgd2Ug
ZGlkIG5vdGhpbmcgaGVyZSwgd2hlbiB0aGlzIG5vZGUncyByZW5kZXJlciB3YXMgZGVzdHJveWVk
LCB0aGUgcmVjdCB0aGF0IGl0IAogICAgICAgICAgICAgLy8gb2NjdXBpZWQgd291bGQgYmUgaW52
YWxpZGF0ZWQsIGJ1dCwgc2VsZWN0aW9uIGdhcHMgdGhhdCBjaGFuZ2UgYXMgYSByZXN1bHQgb2Yg
CkBAIC0yNjA1LDcgKzI2MDUsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6
cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgYwogICAgIHJldHVy
biByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEFsdGVyYXRpb25FeHRlbmQsIGFtb3Vu
dCk7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUqIG5vZGUpCit2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoLCBOb2RlJiBub2RlKQogewogICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDY5YjVjOWY4
MzY5MmEyMDBmOGRkYzkyY2NiOWM4ZjkxMWYyOWZmMTguLjk1YWMzNzc0YjgwMjQ1MGRiOWQ4ZmZl
ZDk3OWRkMjM4ZDA1ZjVlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKQEAgLTIzMCw3ICsyMzAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBz
ZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlQnlFeHRlbmRpbmdD
dXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0
aCwgTm9kZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJs
aW5rcyhib29sIGNhcmV0QmxpbmtzID0gdHJ1ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRDYXJldENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGVmNGY2MjE5MzM5ZTVhNmFlYzk5MDI5Nzc4YjY4OWUx
NGU4YzZhZmUuLjZmZjdjMWFlOTA5MzdjM2I0YTM2NTk0MTlmNGYxMzliZjJhYjYwZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0yMjAsNyAr
MjIwLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFw
aChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAvLyBJZiB0aGUgZW50aXJlIGxpc3QgaXMgc2VsZWN0ZWQsIHRoZW4gY29udmVydCB0
aGUgd2hvbGUgbGlzdC4KLSAgICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4obGlzdE5vZGUuZ2V0KCksIGN1cnJlbnRTZWxlY3Rpb24pKSB7Cisg
ICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGlu
KCpsaXN0Tm9kZSwgY3VycmVudFNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGJvb2wgcmFuZ2VT
dGFydElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShsaXN0Tm9kZS5nZXQoKSkg
PT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgYm9vbCBy
YW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3ROb2RlLmdldCgp
KSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOwogCkBAIC0yNDMsOSArMjQzLDkg
QEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29s
IGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0
YXJ0IGFuZCB0aGUgZW5kIG9mIGN1cnJlbnQgc2VsZWN0aW9uIGlmIHRoZXkgc3RhcnRlZCBpbnNp
ZGUgbGlzdE5vZGUKICAgICAgICAgICAgIC8vIGJlY2F1c2UgbW92ZVBhcmFncmFwaFdpdGhDbG9u
ZXMgY291bGQgaGF2ZSByZW1vdmVkIHRoZW0uCiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElz
SW5MaXN0ICYmIG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0
U3RhcnQobmV3TGlzdCwgMCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDAsIElHTk9SRV9FWENFUFRJT04pOwog
ICAgICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAg
ICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQobmV3TGlzdCwgbGFzdE9mZnNldEluTm9kZShu
ZXdMaXN0LmdldCgpKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgY3VycmVu
dFNlbGVjdGlvbi0+c2V0RW5kKCpuZXdMaXN0LCBsYXN0T2Zmc2V0SW5Ob2RlKG5ld0xpc3QuZ2V0
KCkpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5ld0xpc3QuZ2V0KCkpKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA3
NTM2OTIwMGMyOTU1YjA3NWM4M2I1MGNkNjU3MDc3NDVjZmVjOGY3Li5iNjk1MmUyYjg2ZjE5Y2Vj
NjZkY2JhZmNlOTY2MjFiNmQ1MTE5OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xNzQsOCArMTc0LDEzIEBAIFBhc3NSZWZQdHI8UmFu
Z2U+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwg
aW50IGNoYXJhCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIEFTU0VSVCht
X2NoZWNraW5nUmFuZ2UpOworICAgIGlmICghcG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSB7Cisg
ICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBS
ZWY8UmFuZ2U+IHJhbmdlID0gb2Zmc2V0QXNSYW5nZSgpLT5jbG9uZVJhbmdlKCk7Ci0gICAgcmFu
Z2UtPnNldEVuZChwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJhbmdlLT5zZXRFbmQoKnBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKaW5kZXggNDgzYTRkNDQwMGE0NDVmNTlhMmNjODM0ZmY4MmQ5MTdhOTUyZmQ0
Ni4uZjJiMmZiNzA3ZjlhYjY1ZjJlM2NjZDQyZDhkNDBiNWJiMWJiYTBkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTQ3OSw4ICsxNDc5LDggQEAgUmVmPFJh
bmdlPiBDaGFyYWN0ZXJJdGVyYXRvcjo6cmFuZ2UoKSBjb25zdAogICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICAgICAgQVNTRVJUKCZub2Rl
ID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHJh
bmdlLT5zdGFydE9mZnNldCgpICsgbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICByYW5nZS0+c2V0
U3RhcnQoJm5vZGUsIG9mZnNldCk7Ci0gICAgICAgICAgICByYW5nZS0+c2V0RW5kKCZub2RlLCBv
ZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChub2RlLCBvZmZzZXQpOwor
ICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZzZXQgKyAxKTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gcmFuZ2U7CkBAIC0xNTY5LDggKzE1NjksOCBAQCBSZWY8UmFuZ2U+
IEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiAgICAgICAgICAgICBO
b2RlJiBub2RlID0gci0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgICAgIEFTU0VSVCgmbm9k
ZSA9PSAmci0+ZW5kQ29udGFpbmVyKCkpOwogICAgICAgICAgICAgaW50IG9mZnNldCA9IHItPmVu
ZE9mZnNldCgpIC0gbV9ydW5PZmZzZXQ7Ci0gICAgICAgICAgICByLT5zZXRTdGFydCgmbm9kZSwg
b2Zmc2V0IC0gMSk7Ci0gICAgICAgICAgICByLT5zZXRFbmQoJm5vZGUsIG9mZnNldCk7CisgICAg
ICAgICAgICByLT5zZXRTdGFydChub2RlLCBvZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIHItPnNl
dEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByOwpAQCAt
MjQ3OSw4ICsyNDc5LDggQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAKICAgICAvLyBG
SVhNRTogdGhlIGF0RW5kKCkgY2hlY2sgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgd29ya2Fyb3Vu
ZCBmb3IgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODk+LgogICAg
IGlmICghcmFuZ2VMb2NhdGlvbiAmJiAhcmFuZ2VMZW5ndGggJiYgaXQuYXRFbmQoKSkgewotICAg
ICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgMCk7Ci0gICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+c3RhcnRD
b250YWluZXIoKSwgMCk7CisgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIDApOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRl
eHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CiAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdFJhbmdlKTsKICAgICB9CiAKQEAgLTI0OTgsMTIgKzI0OTgsMTIgQEAgUmVmUHRyPFJh
bmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5v
ZGUqIHNjb3BlLCBpbnQKICAgICAgICAgICAgICAgICBpdC5hZHZhbmNlKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFpdC5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZjxSYW5nZT4g
cmFuZ2UgPSBpdC5yYW5nZSgpOwotICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNl
dEVuZCgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5TdGFydCA9IHRleHRSdW5SYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5FbmQgPSBWaXNp
YmxlUG9zaXRpb24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0UnVuUmFuZ2UtPnNldEVuZCgqcnVuRW5kLmNvbnRhaW5lck5vZGUoKSwgcnVuRW5kLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0yNTEyLDI0ICsyNTEyLDI0IEBAIFJlZlB0cjxSYW5nZT4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29w
ZSwgaW50CiAgICAgICAgICAgICBzdGFydFJhbmdlRm91bmQgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc1RleHROb2RlKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmFuZ2VMb2NhdGlvbiAtIGRvY1RleHRQb3NpdGlvbjsK
LSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+c3Rh
cnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJhbmdlLT5zdGFydENv
bnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2VMb2NhdGlvbiA9PSBkb2NU
ZXh0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgm
dGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQodGV4dFJ1blJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0
YXJ0KCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0YXJ0KHRleHRSdW5S
YW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kRW5kKSB7CiAgICAgICAgICAg
ICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzVGV4dE5vZGUoKSkgewogICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSByYW5nZUVuZCAtIGRvY1RleHRQb3NpdGlvbjsKLSAg
ICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChyYW5nZUVuZCA9PSBkb2NUZXh0UG9zaXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+
c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKCZ0ZXh0UnVuUmFuZ2Ut
PmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigp
LCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRvY1RleHRQb3NpdGlvbiArPSBsZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI1NDIs
NyArMjU0Miw3IEBAIFJlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIGlmIChyYW5nZUxlbmd0aCAmJiByYW5nZUVuZCA+IGRvY1RleHRQb3Np
dGlvbikgLy8gcmFuZ2VFbmQgaXMgb3V0IG9mIGJvdW5kcwotICAgICAgICByZXN1bHRSYW5nZS0+
c2V0RW5kKCZ0ZXh0UnVuUmFuZ2UtPmVuZENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9m
ZnNldCgpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCh0ZXh0UnVuUmFuZ2UtPmVuZENv
bnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPmVuZE9mZnNldCgpKTsKICAgICAKICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHRSYW5nZSk7CiB9CkBAIC0yNTY2LDcgKzI1NjYsNyBAQCBib29sIFRleHRJ
dGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0
IFJhbmdlKiByYW5nZQogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09
IHNjb3BlKTsKICAgICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJh
bmdlLnB0cigpKTsKIAotICAgIHRlc3RSYW5nZS0+c2V0RW5kKCZyYW5nZS0+ZW5kQ29udGFpbmVy
KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGVzdFJhbmdl
LT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIElHTk9S
RV9FWENFUFRJT04pOwogICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09
IHNjb3BlKTsKICAgICBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5n
ZS5wdHIoKSkgLSBsb2NhdGlvbjsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2MjMsNyArMjYyMyw3
IEBAIHN0YXRpYyBzaXplX3QgZmluZFBsYWluVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9uCiAKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNv
bnRleHQoKSkgewogICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0YXJ0UmFuZ2UgPSByYW5nZS5v
d25lckRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+
c2V0RW5kKCZyYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpKTsKKyAg
ICAgICAgYmVmb3JlU3RhcnRSYW5nZS0+c2V0RW5kKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJh
bmdlLnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSk7ICFiYWNr
d2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpIHsKICAg
ICAgICAgICAgIGJ1ZmZlci5wcmVwZW5kQ29udGV4dChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkp
OwogICAgICAgICAgICAgaWYgKCFidWZmZXIubmVlZHNNb3JlQ29udGV4dCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDJmZTI2ZDdjZjE3MGY5ZmQ4
ZWY3ZmU1YTkyZTViMDg3OTU3OTY2NzMuLjQyMWVlMmJlMmUxN2JkOGM4Y2Y2YjYxZTRiYTJiZjdm
OWFhNWE1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAK
QEAgLTczMCwyNCArNzMwLDMyIEBAIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKHItPmVuZFBvc2l0aW9uKCksIGFmZmluaXR5KTsKIH0KIAotYm9vbCBzZXRTdGFydChS
YW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitib29sIHNl
dFN0YXJ0KFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24pCiB7Ci0gICAgaWYgKCFyKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0
U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUp
OwotICAgIHJldHVybiBjb2RlID09IDA7CisgICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0U3Rh
cnQoKnAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Cisg
ICAgcmV0dXJuICFlYzsKIH0KIAotYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAoIXIpCisgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgUG9zaXRpb24gcCA9IHZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
OwotICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUpOwotICAgIHJldHVybiBjb2RlID09IDA7Cisg
ICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aW50IGVjID0gMDsKKyAgICByYW5nZS0+c2V0RW5kKCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIHJldHVybiAhZWM7CiB9CiAKIC8vIEZJWE1F
OiBNYXliZSB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywgbGlrZSB0aGUgdW5kZXJseWlu
ZyBmdW5jdGlvbj8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CmluZGV4IDdkYTY2YTE4ODZhZWY5MTcxNjZhYzQyOGFmYmMwNDdkNGMxZmI4NWUuLmY4ZDkwMzNh
OWM3MWI4ZDQ4YzU5NDc2OGFlNWZmYzkwMzRjNmVkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjEzLDggKzIxMyw4IEBAIHN0YXRpYyBSZWZQ
dHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogCiAgICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpKTsKLSAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5k
YXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUo
KSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+
c2VsZWN0Tm9kZUNvbnRlbnRzKCpib3VuZGFyeSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRT
dGFydCgqc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGRlYjQwZmQwMWI5MDlmNjAxYmU5ZDRmMTgwNDkw
OWYyZmEwYzc2ZmUuLjYyMmY0MzZjZTVlNzA3ZDczZmMzMWRhMTRhNjBiNzQ2YzdiNDgxOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTU2OSw3ICs1NjksMTEg
QEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVu
dCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYm91bmRhcnlEb2N1
bWVudCk7CisKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKKyAgICBSZWY8UmFuZ2U+IHNlYXJjaFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKICAgICAKICAgICBWZWN0b3I8VUNo
YXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwpAQCAtNTc3
LDE5ICs1ODEsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFj
dGVyQmVmb3JlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2FyZHNTY2FuUmFuZ2Uo
Ym91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKLSAgICAgICAgZm9yd2FyZHNTY2FuUmFu
Z2UtPnNldEVuZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdl
LT5zZXRTdGFydChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCksIGVjKTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKCpib3Vu
ZGFyeSwgZWMpOworICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoKmVuZC5kZXBy
ZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAg
ICBzdWZmaXhMZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwg
c3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVj
YXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwotICAgIHNl
YXJjaFJhbmdlLT5zZXRFbmQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAg
c2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCiAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFNpbXBsaWZpZWRCYWNrd2Fy
ZHNUZXh0SXRlcmF0b3IgaXQoKnNlYXJjaFJhbmdlKTsKKyAgICBTaW1wbGlmaWVkQmFja3dhcmRz
VGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gYmFja3dh
cmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoaXQsIHN0cmluZywgc3VmZml4TGVu
Z3RoLCBzZWFyY2hGdW5jdGlvbik7CiAKICAgICBpZiAoIW5leHQpCkBAIC02MDIsNyArNjA2LDcg
QEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIGNoYXJh
Y3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3Np
dGlvbi4KLSAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdl
KTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UpOwog
ICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsK
ICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0LgogICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oY2hhckl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIERPV05T
VFJFQU0pOwpAQCAtNjE2LDcgKzYyMCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIERvY3VtZW50JiBib3VuZGFyeURv
Y3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hS
YW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOworICAgIFJlZjxSYW5nZT4gc2Vh
cmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgUG9zaXRpb24g
c3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAgIFZlY3RvcjxVQ2hh
ciwgMTAyND4gc3RyaW5nOwpAQCAtNjI0LDIwICs2MjgsMjIgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJj
aEZ1bmMKIAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFyYWN0
ZXJBZnRlcigpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhY2t3YXJkc1NjYW5SYW5nZShi
b3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwotICAgICAgICBiYWNrd2FyZHNTY2FuUmFu
Z2UtPnNldEVuZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCkpCisgICAgICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZCgqc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdl
KGJhY2t3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBzZWFyY2hSYW5nZS0+
c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgVGV4dEl0ZXJhdG9yIGl0
KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CisgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygq
Ym91bmRhcnksIElHTk9SRV9FWENFUFRJT04pOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9k
ZSgpKQorICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOwor
ICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5wdHIoKSwgVGV4dEl0ZXJhdG9yRW1pdHND
aGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAgIHVuc2lnbmVkIG5leHQg
PSBmb3J3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcsIHBy
ZWZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAgIGlmIChpdC5hdEVuZCgpICYm
IG5leHQgPT0gc3RyaW5nLnNpemUoKSkKICAgICAgICAgcG9zID0gc2VhcmNoUmFuZ2UtPmVuZFBv
c2l0aW9uKCk7CiAgICAgZWxzZSBpZiAobmV4dCA+IHByZWZpeExlbmd0aCkgewogICAgICAgICAv
LyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUg
aW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpz
ZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQ
b3NpdGlvbnMpOworICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2Us
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
ICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExlbmd0aCAtIDEpOwogICAgICAg
ICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdlID0gY2hhckl0LnJhbmdlKCk7CiAgICAgICAg
IHBvcyA9IGNoYXJhY3RlclJhbmdlLT5lbmRQb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAppbmRleCAyOWM5YWY4NWUwYjZlZTBhMzA0MzVhOTZlZWNkNzJmODUy
ODBlZTc4Li41ODA4NzIwNWYwOWRjYjg3NzQ0ZjI1ZTM4OTU2YmJhMjQ2NWQwNmFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRv
cihOb2RlKiBub2RlLCBpbnQgaW4KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogCiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmFu
Z2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBDaGFy
YWN0ZXJJdGVyYXRvciBpdCgqcmFuZ2UpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LmF0RW5kKCkgPyByYW5nZS0+ZW5kUG9zaXRpb24o
KSA6IGl0LnJhbmdlKCktPmVuZFBvc2l0aW9uKCksIFVQU1RSRUFNKTsKQEAgLTExODYsMjAgKzEx
ODYsMTkgQEAgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNv
bnN0IFBvc2l0aW9uJiBzZWNvbmQpCiAKIC8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMg
aW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJp
ZXMgb2YgdGhlIHJhbmdlLgogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0
aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQotYm9vbCBpc05v
ZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBzZWxlY3Rl
ZFJhbmdlKQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNv
bnN0IFJhbmdlKiBzZWxlY3RlZFJhbmdlKQogewotICAgIEFTU0VSVChub2RlKTsKICAgICBBU1NF
UlQoc2VsZWN0ZWRSYW5nZSk7CiAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5n
ZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbgogICAgIGlmIChzZWxlY3RlZFJh
bmdlLT5jb21wYXJlTm9kZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6Tk9ERV9J
TlNJREUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBzdGFydElzVmlzdWFsbHlT
YW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBv
c2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpLCBzZWxlY3RlZFJhbmdlLT5l
bmRQb3NpdGlvbigpKSA8IDApCisgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJs
ZVBvc2l0aW9uQmVmb3JlTm9kZSgmbm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlv
bigpOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMocG9z
aXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9u
KCkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGVuZElzVmlzdWFsbHlT
YW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVu
ZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlv
bnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZShub2RlKSkgPCAwKQorICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9z
aXRpb25BZnRlck5vZGUoJm5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7Cisg
ICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpIDwg
MCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gc3RhcnRJc1Zpc3VhbGx5U2Ft
ZSAmJiBlbmRJc1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaApp
bmRleCBjMTU0NzljOTZhNDBlMWUyMDliYTkyNzUwZWRhMjgyNmU2YzViN2U3Li5mMjE1MTY0NWRj
Njc4ZmJkYzQ3YTA2MmM0MjFmNDJiNjZkMTM5MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBpc1RhYmxlU3RydWN0dXJlTm9kZShj
b25zdCBOb2RlKik7CiBib29sIGlzTGlzdEVsZW1lbnQoTm9kZSopOwogYm9vbCBpc0xpc3RJdGVt
KGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29uc3QgTm9kZSopOwotYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqLCBjb25zdCBSYW5nZSopOworYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25zdCBSYW5nZSopOwogYm9vbCBp
c1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKik7CiBib29sIGFy
ZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKik7CiBib29sIGlzTm9u
VGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMTI1YzVhOTgwYzI4NGEzOTRkMDM2NDA0YWE4NTU5
MDdjYTE3NTRmMC4uNzNjNWRhY2Y0NTM0YzY4NjZkM2Q0OTk5OTdlZjAzMTg0YjA2ZmM5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMzE4LDcgKzMxOCw3IEBA
IFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICBBU1NF
UlQoY29tbW9uQW5jZXN0b3IpOwogICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2lu
Z0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1M
TmFtZXM6OmFUYWcpOwogICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9u
cyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNo
b3JOb2RlKCkpLCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+
c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
cmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDAsIElHTk9SRV9FWENFUFRJT04pOwog
ICAgIHJldHVybiByYW5nZTsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCAxNDQyMjUyYmQ1MjE1ZDkzNTc3ZThjZjQ3YmE5ZTUx
ZDYzZTI4NDM0Li5lZjIyZTUyNmJiYmJiNGM1NDhiOTRhMDFmZTM4OTMzNzc2MzM4NGE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MTMs
NyArNDEzLDggQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgaWYgKCFzZWxlY3Rl
ZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVk
Tm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAg
IGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzZWxlY3Rl
ZFJhbmdlLT5zZWxlY3ROb2RlKCpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSwgSUdOT1JFX0VY
Q0VQVElPTik7CiAgICAgICAgIH0KICAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KHNl
bGVjdGVkUmFuZ2UuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNl
bGVjdGlvbi5jcHAKaW5kZXggZTExOWY2NGQ4YjY3ZmJmZjNkMTUzMDdkZmVhODk4NmZmMjE2ODk4
Yi4uZjYwNTY2MWJkODUzYWE3Nzk4YmE0ZTdlNTc3NTFlZDc1ZjdjMmViZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzkzLDEwICszOTMsMTMgQEAgdm9pZCBET01TZWxl
Y3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UuZ2V0
KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsICpyYW5nZSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55
dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICBpZiAoci0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05P
UkVfRVhDRVBUSU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikg
PT0gLTEpIHsKKyAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RB
UlRfVE9fRU5ELCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID4gLTEpIHsKKyAgICAgICAgICAg
IGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2lu
YWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3Zl
VG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA3LDggKzQxMCw4IEBAIHZvaWQgRE9NU2VsZWN0
aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBp
ZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewotICAgICAgICAgICAgaWYgKHIt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pID09IC0xKSB7CisgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKnJhbmdlLCBlYykgPCAxICYmICFlYykgeworICAg
ICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwg
KnJhbmdlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIC8vIFRo
ZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyByLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5t
b3ZlVG8ocmFuZ2UuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggMWNjODM4NGE0OTYxZTM4OGEzZjIxYjBjYzI0ZTAy
MDIzZTY1NGYxNy4uMGM5MGI0MTRiNWEyZTA2ZjBhOTkxZDUwN2NkNTc4NjY0MjI0ZWM2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTcxMiw3ICs3MTIsNyBAQCBz
dGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiBzdGF0aWMgdm9pZCBzZWxl
Y3RFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5zZWxlY3ROb2Rl
KCZlbGVtZW50KTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZShlbGVtZW50KTsKICAgICBlbGVtZW50
LmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAppbmRleCAxOGM0NzVmMWVlODE3ZTRlNWYxNzAyZGIzYjRmYTM5OTNlMDM0NGJmLi4x
NzUyMjM2YzdhNjc5OTBjM2UyZGI3Y2NhZjNiZTQ0ZTg0MzQyYzZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNTA3LDcgKzI1MDcsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2Rl
KiB0YXJnZQogICAgICAgICAgICAgICAgIC8vIGZvY3VzZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1v
dXNldXAgb3ZlciBpdCwgaG93ZXZlciwgYmVjYXVzZSB0aGUgbW91c2V1cAogICAgICAgICAgICAg
ICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwgd2hpY2ggd2lsbCBjYWxsIHNl
dEZvY3VzZU5vZGVJZk5lZWRlZC4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5zZWxlY3Rp
b24oKS5pc1JhbmdlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShlbGVtZW50LCBJR05PUkVfRVhDRVBU
SU9OKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9mcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZSgqZWxlbWVudCwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFCiAgICAgICAgICAgICAgICAg
ICAgICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNl
ZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDkxNTNkMDQ0MmE3MDU3ZDRhODBkMDUw
MDNhMDBmZjExNmNiYzFjZTAuLjhkZjFkMzYxZjM2ZmQ0MTY1ZWJhMTk2M2NkZTZmZmM4NDU2ZjJm
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNjMyLDE0ICs2MzIsMTQgQEAgdm9pZCBQYWdlOjpm
aW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25z
IG9wdGlvbnMsIGkKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVX
aXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAg
ICAgIGlmIChvcHRpb25zICYgQmFja3dhcmRzKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJU
LCBtYXRjaFJhbmdlc1tpIC0gMV0uZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID4gMCkgeworICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSwgSUdOT1JFX0VYQ0VQVElPTikg
PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXpl
ID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
RU5ELCBtYXRjaFJhbmdlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPCAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0sIElHTk9SRV9FWENFUFRJT04pIDwgMCkg
ewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuY3BwCmluZGV4IDE3Njg0YzU3NDg4MzI4OTY3NjBmNDZlZTlkMWNmMWI4MDhjMzA2
MmEuLjI2ZWYzN2MzZDJiZjRkMDI1MWYwZGE3NTBjNjEwMGJlZDc5YmRmMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBib29s
IGhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBSYW5nZSYgcmFuZ2UpCiAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgoIXJlbmRl
cmVyLT5pc0lubGluZSgpIHx8IHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpICYmIHJhbmdlLmludGVy
c2VjdHNOb2RlKG5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pKQorICAgICAgICBpZiAoKCFyZW5k
ZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSAmJiByYW5nZS5pbnRl
cnNlY3RzTm9kZSgqbm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTikpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMzI5MjAzMTliZjFkOTY3MzE4YTM0ZDY1MmY2YzFl
YzViNGFmZDEyNS4uYjM2ZWE0ZTg5NmE1ZjE3YjVjM2IyNzI0NDZjMGY2NTJkOGU1Yzg4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAKQEAgLTY5NCw4ICs2OTQsOCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFu
Z2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAg
ICAgaWYgKCFib3hJbnRlcnNlY3RzUmVnaW9uKGxvZ2ljYWxUb3BGb3JSZW5kZXJlciwgbG9naWNh
bEJvdHRvbUZvclJlbmRlcmVyLCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBsb2dpY2FsQm90dG9tRm9y
UmVnaW9uKSkgewogICAgICAgICAgICAgICAgIGlmIChmb3VuZFN0YXJ0UG9zaXRpb24pIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydHNBYm92ZVJlZ2lvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBJR05PUkVfRVhDRVBU
SU9OKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQmVmb3JlKG5v
ZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdl
LT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTikpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZU9iamVjdHMuYXBwZW5kKHJhbmdlLT5j
bG9uZVJhbmdlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGNvbnRlbnRFbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0c0Fib3ZlUmVnaW9uID0gdHJ1ZTsKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VP
YmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9k
ZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc2tpcE92
ZXJPdXRzaWRlTm9kZXMpCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEFmdGVy
KG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0
U3RhcnRBZnRlcigqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgZm91
bmRTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6
OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAg
ICAgICAgICAgICAgICAvLyB0aGUgcmFuZ2UgaXMgY2xvc2VkLgogICAgICAgICAgICAgICAgIGlm
IChzdGFydHNBYm92ZVJlZ2lvbikgewogICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJl
Z2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnRCZWZvcmUo
bm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRT
dGFydEJlZm9yZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgID0gZmFsc2U7
CkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdl
cyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIHJhbmdlT2JqZWN0cywgY29uc3QKICAgICAgICAgICAg
ICAgICAvLyBmb3IgZWxlbWVudHMgdGhhdCBlbmRzIGluc2lkZSB0aGUgcmVnaW9uLCBzZXQgdGhl
IGVuZCBwb3NpdGlvbiB0byBiZSBhZnRlciB0aGVtCiAgICAgICAgICAgICAgICAgLy8gYWxsb3cg
dGhpcyBlbmQgcG9zaXRpb24gdG8gYmUgY2hhbmdlZCBvbmx5IGJ5IG90aGVyIGVsZW1lbnRzIHRo
YXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiB0aGUgY3VycmVudCBlbmQgbm9kZQogICAgICAgICAg
ICAgICAgIGlmIChlbmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVsb3dSZWdpb24gJiYgIW5vZGUt
PmlzRGVzY2VuZGFudE9mKGxhc3RFbmROb2RlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFu
Z2UtPnNldEVuZEFmdGVyKG5vZGUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgICAg
ICAgICByYW5nZS0+c2V0RW5kQWZ0ZXIoKm5vZGUsIElHTk9SRV9FWENFUFRJT04pOwogICAgICAg
ICAgICAgICAgICAgICBlbmRzQmVsb3dSZWdpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgbGFzdEVuZE5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDA2MzMwN2M5OTkzNTY0NTQ2N2Y5YTM0OTJjMDk2YzNj
NDIyNWMzOWIuLmE3MmEwYTNmODU3N2M3MDYyYWZhOTRlYjI1NTcwZDY1N2RiODI0NmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODczLDExICs4NzMsMTMgQEAgLSAo
RE9NUmFuZ2UgKilfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6KERPTVJhbmdlICop
cHJvcG9zZWRSYW5nZQogICAgIG5ld1N0YXJ0ID0gbmV3U3RhcnQucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCk7CiAgICAgbmV3RW5kID0gbmV3RW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
OwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3Vt
ZW50KCktPmNyZWF0ZVJhbmdlKCk7Ci0gICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmFuZ2Ut
PnNldFN0YXJ0KG5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5jb250
YWluZXJOb2RlKCksIG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24p
OwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOworICAgIGlmIChu
ZXdTdGFydC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Cisg
ICAgICAgIHJhbmdlLT5zZXRTdGFydCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmFuZ2UtPnNl
dEVuZCgqbmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7
CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJr
dXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5n
ICopYmFzZVVSTFN0cmluZyAKQEAgLTE2MjgsMTEgKzE2MzAsMTEgQEAgLSAodm9pZClzZWxlY3RO
U1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKICAg
ICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSAqbm9kZSA9IGNvcmUoZWxl
bWVudCk7CisgICAgTm9kZSogbm9kZSA9IGNvcmUoZWxlbWVudCk7CiAgICAgaWYgKCFub2RlLT5p
bkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdFJhbmdlT25FbGVtZW50KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgs
IG5vZGUpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RSYW5nZU9uRWxlbWVudChyYW5n
ZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCAqbm9kZSk7CiB9CiAKIC0gKERPTVJhbmdlICopbWFy
a2VkVGV4dERPTVJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4IDBjNWU1NzZlNGQ3NjJkODc1
YjJhZDZlZWJiZjFmY2YzZTRiZWU4NzAuLmE1YmE4MDdiNjM1ZWQ5ZDY4YzUwOTdiYjIzNzlkYTBj
MjBjMTFhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC02MTE0LDcgKzYxMTQsNyBAQCBMUkVT
VUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUs
IElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0
RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkgPyB0YXJnZXRGcmFtZS0+ZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpIDogdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gdGVtcFJhbmdlID0gcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAg
ICAgICAgdGVtcFJhbmdlLT5zZXRTdGFydCgmdGVtcFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0
ZW1wUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0NoYXJQb3MsIGVjKTsKKyAgICAg
ICAgdGVtcFJhbmdlLT5zZXRTdGFydCh0ZW1wUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRlbXBS
YW5nZS0+c3RhcnRPZmZzZXQoKSArIGNoYXJQb3MtPmR3Q2hhclBvcywgZWMpOwogICAgICAgICBj
YXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2Uu
Z2V0KCkpOwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3coY2FyZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQppbmRleCBlMDgwNmJj
YjZhNzczNGUyZDM0NDE0OTViMTRlZDZmYjI3ZDIyNDk5Li45M2U4NDlmNjNiMTRiMmRjNGQ1YTk1
NDk0NzExZjEwMzUxNWVkZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtNjUs
MTYgKzY1LDIwIEBAIC0gKHZvaWQpZGVhbGxvYwogCiAtICh2b2lkKXNldFN0YXJ0OihXS0RPTU5v
ZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldAogeworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4K
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2V0U3RhcnQo
V2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVjKTsKKyAgICBfaW1wbC0+c2V0
U3RhcnQoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7CiB9CiAKIC0g
KHZvaWQpc2V0RW5kOihXS0RPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldAogeworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcg
YWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBfaW1wbC0+c2V0RW5kKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBl
Yyk7CisgICAgX2ltcGwtPnNldEVuZCgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZz
ZXQsIGVjKTsKIH0KIAogLSAodm9pZCljb2xsYXBzZTooQk9PTCl0b1N0YXJ0CkBAIC04NCwxNiAr
ODgsMjAgQEAgLSAodm9pZCljb2xsYXBzZTooQk9PTCl0b1N0YXJ0CiAKIC0gKHZvaWQpc2VsZWN0
Tm9kZTooV0tET01Ob2RlICopbm9kZQogeworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
OwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2VsZWN0Tm9kZShXZWJL
aXQ6OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKKyAgICBfaW1wbC0+c2VsZWN0Tm9kZSgqV2Vi
S2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBlYyk7CiB9CiAKIC0gKHZvaWQpc2VsZWN0Tm9kZUNv
bnRlbnRzOihXS0RPTU5vZGUgKilub2RlCiB7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIF9pbXBsLT5zZWxlY3ROb2RlQ29u
dGVudHMoV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBlYyk7CisgICAgX2ltcGwtPnNlbGVj
dE5vZGVDb250ZW50cygqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBlYyk7CiB9CiAKIC0g
KFdLRE9NTm9kZSAqKXN0YXJ0Q29udGFpbmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCBhYTI3NGJhYTFjYzg5MDk3MjU4ZDExYTI3MGQ0
YTAzODdmOWI3YjI3Li5kYjIyZjFlNWRjMWUzNWFhYjUwNzkwYzEyOThhMWYzNGUwMzRjZmZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAg
LTMzMCw3ICszMzAsNyBAQCBTdHJpbmcgV2ViRnJhbWU6OmNvbnRlbnRzQXNTdHJpbmcoKSBjb25z
dAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlKGRvY3VtZW50
RWxlbWVudC5nZXQoKSwgZWMpOworICAgIHJhbmdlLT5zZWxlY3ROb2RlKCpkb2N1bWVudEVsZW1l
bnQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmlu
ZGV4IGJhNzBhMDEzM2Q3ZjZjMzc5OGZjNjFmMmJlOGMxM2M3Yzk4ZDQ2ZmIuLjI5MGM5MDUyMDRk
ZjBkOTAwYTY0NTA0NjdlYTNjYWY1OWYxMTg3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTk0MCw3ICs5NDAsNyBA
QCBQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdGlvbkF0UG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHBvaW50LAogCiAgICAgZmxhZ3MgPSBJc0Jsb2NrU2VsZWN0aW9u
OwogICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiZXN0Q2hvaWNlLT5kb2N1bWVudCgpKTsKLSAg
ICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJlc3RDaG9pY2UsIEFTU0VSVF9OT19FWENFUFRJ
T04pOworICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKmJlc3RDaG9pY2UsIEFTU0VSVF9O
T19FWENFUFRJT04pOwogICAgIHJldHVybiByYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxscHRyIDog
cmFuZ2U7CiB9CiAKQEAgLTk2NCw3ICs5NjQsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdl
OjpyYW5nZUZvckJsb2NrQXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGN1cnJlbnROb2RlLT5k
b2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGN1cnJlbnROb2RlLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpjdXJy
ZW50Tm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgcmV0dXJuIHJhbmdlOwogfQogCkBA
IC0xMjIwLDggKzEyMjAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNSYW5nZShSYW5n
ZSogZmlyc3QsIFJhbmdlKiBzZWNvbmQpCiAgICAgaWYgKCFmaXJzdCB8fCAhc2Vjb25kKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIChmaXJzdC0+Y29tbW9uQW5jZXN0b3JDb250
YWluZXIoKS0+b3duZXJEb2N1bWVudCgpID09IHNlY29uZC0+Y29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoKS0+b3duZXJEb2N1bWVudCgpCi0gICAgICAgICYmIGZpcnN0LT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBzZWNvbmQsIEFTU0VSVF9OT19FWENFUFRJT04p
IDw9IDAKLSAgICAgICAgJiYgZmlyc3QtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5E
X1RPX0VORCwgc2Vjb25kLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA+PSAwKTsKKyAgICAgICAgJiYg
Zmlyc3QtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpzZWNv
bmQsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAKKyAgICAgICAgJiYgZmlyc3QtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKnNlY29uZCwgQVNTRVJUX05PX0VYQ0VQ
VElPTikgPj0gMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJh
bmdlcyhSYW5nZSogcmFuZ2VBLCBSYW5nZSogcmFuZ2VCKQpAQCAtMTIzMSw4ICsxMjMxLDggQEAg
c3RhdGljIGlubGluZSBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlKiByYW5nZUEs
IFJhbmdlKiByYW5nZUIpCiAgICAgaWYgKCFyYW5nZUEpCiAgICAgICAgIHJldHVybiByYW5nZUI7
CiAKLSAgICBSYW5nZSogc3RhcnQgPSByYW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fU1RBUlQsIHJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IHJh
bmdlQSA6IHJhbmdlQjsKLSAgICBSYW5nZSogZW5kID0gcmFuZ2VBLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0g
MCA/IHJhbmdlQiA6IHJhbmdlQTsKKyAgICBSYW5nZSogc3RhcnQgPSByYW5nZUEtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZUIsIEFTU0VSVF9OT19F
WENFUFRJT04pIDw9IDAgPyByYW5nZUEgOiByYW5nZUI7CisgICAgUmFuZ2UqIGVuZCA9IHJhbmdl
QS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqcmFuZ2VCLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKSA8PSAwID8gcmFuZ2VCIDogcmFuZ2VBOwogCiAgICAgcmV0dXJuIFJh
bmdlOjpjcmVhdGUocmFuZ2VBLT5vd25lckRvY3VtZW50KCksICZzdGFydC0+c3RhcnRDb250YWlu
ZXIoKSwgc3RhcnQtPnN0YXJ0T2Zmc2V0KCksICZlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVu
ZE9mZnNldCgpKTsKIH0KQEAgLTIyMzIsNyArMjIzMiw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UG9z
aXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQsIEludGVyYWN0aW9uSW5mb3Jt
YXRpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmRhdGFEZXRlY3RvclJlc3VsdHMgPSBl
bGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPmRhdGFEZXRlY3Rpb25SZXN1bHRzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoRGF0YURldGVjdGlvbjo6cmVxdWlyZXNFeHRlbmRlZENv
bnRleHQoKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJh
bmdlPiBsaW5rUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGVsZW1lbnQtPmRvY3VtZW50KCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVs
ZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCplbGVtZW50LCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFp
blRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGly
ZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5zdGFydFBvc2l0aW9uKCksIGRhdGFEZXRl
Y3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkJhY2t3YXJkKS5nZXQoKSwgVGV4
dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5n
ZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShsaW5rUmFuZ2Ut
PmVuZFBvc2l0aW9uKCksIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVj
dGlvbkZvcndhcmQpLmdldCgpLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276932</attachid>
            <date>2016-04-21 08:54:25 -0700</date>
            <delta_ts>2016-04-21 09:07:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156805-20160421085447.patch</filename>
            <type>text/plain</type>
            <size>108643</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRkNGViOTRmNjcyNTUy
Y2JiZDJlNTQ0MzcwZTk3OTk5NTAwY2FkMy4uNWMwMGJmYzhhNmUzNmExMTcwZjg4ODc4MzdmMWEx
MWNmY2FlMjM1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNi0wNC0yMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIERyb3AgW1VzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gd2Vi
LWV4cG9zZWQgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9y
Tm9kZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3Rlck9mZnNldHNJbk9yZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnByZXZp
b3VzQm91bmRhcnkpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZWxlY3RUZXh0
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRC
YXNlZFNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjp0ZXh0UmVjdHMpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OnNldERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpp
c1BvaW50SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6aW50ZXJzZWN0c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3ND
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aW5zZXJ0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlV09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6c2V0U3RhcnRBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0RW5kQmVm
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRFbmRBZnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6c2VsZWN0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2Vs
ZWN0Tm9kZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzdXJyb3VuZENvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydEJlZm9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VzT3Zl
cmxhcCk6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZU9mQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Ym91bmRhcnlOb2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5
VGV4dE5vZGVzU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmV4cGFuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkT2ZDb21tb25Sb290QmVmb3JlT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUNoYXJhY3RlckRhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjp0b0hUTUwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNsb25lUmFuZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRRdWFkcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeU5vZGVDaGlsZHJlbkNoYW5nZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bm9kZVdpbGxCZVJlbW92ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRhcnlUZXh0UmVtb3ZlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMpOiBEZWxldGVkLgor
ICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9SYW5nZS5pZGw6CisgICAgICAg
ICogZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3Vu
ZGFyeVBvaW50OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRUb1N0YXJ0T2ZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6
c2V0VG9FbmRPZk5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjph
cHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJh
bmdlQW5kQXBwbHlJbmxpbmVTdHlsZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyYW5nZU9mU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzRnJhbWVJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVz
Rm9yVGV4dCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnVuaW9uRE9NUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVEZWxl
dGVUb01hcmspOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6CisgICAg
ICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9u
ZFRvTm9kZU1vZGlmaWNhdGlvbik6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyk6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVySXRlcmF0b3I6OnJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhY2t3YXJkc0NoYXJh
Y3Rlckl0ZXJhdG9yOjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Zmlu
ZFBsYWluVGV4dCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5kKToKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZVNlYXJjaFJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Om5l
eHRCb3VuZGFyeSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbik6CisgICAg
ICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5n
ZSk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6
CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
U2VsZWN0aW9uOjphZGRSYW5nZSk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91
c2VFdmVudCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyk6CisKKzIwMTYt
MDQtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBEcm9wIFtV
c2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10gZnJvbSBET01VUkwK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njc5Nwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKaW5kZXggZTM5MDU1Y2VmNzE0ZmQ0YjUwMDBkNTZkYzVkMDY0NjE2NDUx
Mzk1ZS4uNzUwOTcxZDY5ODhhYzNmOTM3MTg5ZWZkNzI3YmZiODQzZGNkM2I5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA0LTIxICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFi
bGVPYmplY3RBcmd1bWVudHNdIGZyb20gUmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjgwNQorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVu
biBGYWJsZXQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtX
ZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6CisKIDIwMTYtMDQt
MjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJ
REIgKFdvcmtlcnMpOiBFbmFibGUgSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTIGNvbXBpbGUg
dGltZSBmbGFnLCBidXQgZGlzYWJsZWQgaW4gUnVudGltZUVuYWJsZWRGZWF0dXJlcy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA3NmE0YThlY2Y2NmVhZDRlYzliZjQ4YTlhNzc1YmYyZWY3YjIzZmFmLi45MGExZGFm
YmJiN2Y1NTgwNTliY2UyYWY1ODk0OWFhZTkyNTEzMzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTYtMDQtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAg
ICAgICBEcm9wIFtVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50c10g
ZnJvbSBSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU2ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tOgorICAg
ICAgICAoLVtXS0RPTVJhbmdlIHNldFN0YXJ0Om9mZnNldDpdKToKKyAgICAgICAgKC1bV0tET01S
YW5nZSBzZXRFbmQ6b2Zmc2V0Ol0pOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHNlbGVjdE5vZGU6
XSk6CisgICAgICAgICgtW1dLRE9NUmFuZ2Ugc2VsZWN0Tm9kZUNvbnRlbnRzOl0pOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lOjpjb250ZW50c0FzU3RyaW5nKToKKwogMjAxNi0wNC0yMSAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViS2l0V2ViVmll
dyBzaG91bGQgY2xhaW0gdGhlIGNvbnRlbnRzIHNpemUgYXMgaXRzIG5hdHVyYWwgc2l6ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNGRk
MzQ3NjAyNTYxMTc4NzAwNGM4NzRiYjg3MzkwMThiMDVjYjNmMi4uNTk1YTM4NzBiMTM0NGMzNzAw
ZmJiNzVlOTFiMzM1MTZmODA1ODI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBSZWZQdHI8UmFuZ2U+
IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKE5vZGUqIG5vZGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpkb2N1bWVudCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmFuZ2UtPnNlbGVj
dE5vZGVDb250ZW50cyhub2RlLCBlYyk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygq
bm9kZSwgZWMpOwogICAgIHJldHVybiBlYyA/IG51bGxwdHIgOiByYW5nZTsKIH0KICAgICAKQEAg
LTE2MzUsNyArMTYzNSw4IEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uCiAgICAgCiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTEgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhu
b2RlMSk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTIgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cyhub2RlMik7Ci0gICAgcmV0dXJuIHJhbmdlMS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UyLmdldCgpLCBJR05PUkVfRVhDRVBU
SU9OKSA8PSAwOworCisgICAgcmV0dXJuICFyYW5nZTIgfHwgcmFuZ2UxLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqcmFuZ2UyLCBJR05PUkVfRVhDRVBUSU9O
KSA8PSAwOwogfQogCiBzdGF0aWMgTm9kZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWRO
b2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkK
QEAgLTE2NjMsNiArMTY2NCw3IEBAIHN0YXRpYyB2b2lkIHNldFJhbmdlU3RhcnRPckVuZFdpdGhD
aGFyYWN0ZXJPZmZzZXQoUmVmUHRyPFJhbmdlPiByYW5nZSwgY29uc3QgQ2hhCiAgICAgCiAgICAg
aW50IG9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4ICsgY2hhcmFjdGVyT2Zmc2V0
Lm9mZnNldDsKICAgICBOb2RlKiBub2RlID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CisgICAgQVNT
RVJUKG5vZGUpOwogICAgIAogICAgIGJvb2wgcmVwbGFjZWROb2RlT3JCUiA9IGlzUmVwbGFjZWRO
b2RlT3JCUihub2RlKTsKICAgICAvLyBGb3IgdGhlIG5vbiB0ZXh0IG5vZGUgdGhhdCBoYXMgbm8g
Y2hpbGRyZW4sIHdlIHNob3VsZCBjcmVhdGUgdGhlIHJhbmdlIHdpdGggaXRzIHBhcmVudCwgb3Ro
ZXJ3aXNlIHRoZSByYW5nZSB3b3VsZCBiZSBjb2xsYXBzZWQuCkBAIC0xNjczLDEwICsxNjc1LDE1
IEBAIHN0YXRpYyB2b2lkIHNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoUmVm
UHRyPFJhbmdlPiByYW5nZSwgY29uc3QgQ2hhCiAgICAgaWYgKHJlcGxhY2VkTm9kZU9yQlIgfHwg
bm9DaGlsZHJlbikKICAgICAgICAgbm9kZSA9IHJlc2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2Vk
Tm9kZShub2RlLCBvZmZzZXQsIGNoYXJhY3RlckNvdW50KTsKICAgICAKKyAgICBpZiAoIW5vZGUp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAoaXNTdGFydCkKLSAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KG5vZGUsIG9mZnNldCwgZWMp
OworICAgICAgICByYW5nZS0+c2V0U3RhcnQoKm5vZGUsIG9mZnNldCwgZWMpOwogICAgIGVsc2UK
LSAgICAgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZzZXQsIGVjKTsKKyAgICAgICAgcmFuZ2Ut
PnNldEVuZCgqbm9kZSwgb2Zmc2V0LCBlYyk7CiB9CiAKIFJlZlB0cjxSYW5nZT4gQVhPYmplY3RD
YWNoZTo6cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJP
ZmZzZXQyKQpAQCAtMTc0MywxOCArMTc1MCwxOCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxSYW5nZT4gcgog
ICAgIC8vIElmIGl0J3MgZW5kIHRleHQgbWFya2VyLCB3ZSB3YW50IHRvIGdvIHRvIHRoZSBlbmQg
b2YgdGhlIHJhbmdlLCBhbmQgc3RheSB3aXRoaW4gdGhlIHJhbmdlLgogICAgIGJvb2wgc3RheVdp
dGhpblJhbmdlID0gIWlzU3RhcnQ7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBjb3B5UmFuZ2Ug
PSByYW5nZTsKKyAgICBSZWY8UmFuZ2U+IGNvcHlSYW5nZSA9ICpyYW5nZTsKICAgICAvLyBDaGFu
Z2UgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgc28gdGhlIGNoYXJhY3RlciBvZmZzZXQgc3RhcnRz
IGZyb20gbm9kZSBiZWdpbm5pbmcuCiAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgTm9kZSogbm9k
ZSA9ICZjb3B5UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKG5vZGUtPm9mZnNldElu
Q2hhcmFjdGVycygpKSB7CisgICAgTm9kZSYgbm9kZSA9IGNvcHlSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKTsKKyAgICBpZiAobm9kZS5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewogICAgICAgICBjb3B5
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCksICZyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZyYW5nZS0+ZW5kQ29udGFpbmVy
KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBub2RlU3Rh
cnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhu
b2RlKSwgMCk7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0cmF2
ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSksIDApOwogICAg
ICAgICBvZmZzZXQgPSBzdGQ6Om1heChjb3B5UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBub2RlU3Rh
cnRPZmZzZXQuc3RhcnRJbmRleCwgMCk7CiAgICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQobm9k
ZSwgbm9kZVN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
dHJhdmVyc2VUb09mZnNldEluUmFuZ2UoY29weVJhbmdlLCBvZmZzZXQsIGlzU3RhcnQgPyBUcmF2
ZXJzZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCwgc3RheVdpdGhpblJh
bmdlKTsKKyAgICByZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UoV1RGTW92ZShjb3B5UmFu
Z2UpLCBvZmZzZXQsIGlzU3RhcnQgPyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9w
dGlvblRvTm9kZUVuZCwgc3RheVdpdGhpblJhbmdlKTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hl
OjpzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZShUZXh0TWFya2VyRGF0YSYgdGV4dE1h
cmtlckRhdGEsIFJlZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wgaXNTdGFydCkKQEAgLTIyMTMsNyAr
MjIyMCw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjaGFyYWN0ZXJCZWZv
cmUoY2hhcmFjdGVyT2Zmc2V0KSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBmb3J3YXJkc1Nj
YW5SYW5nZShib3VuZGFyeS0+ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpKTsKLSAgICAgICAgZm9y
d2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKGJvdW5kYXJ5LCBlYyk7CisgICAgICAgIGZvcndh
cmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcigqYm91bmRhcnksIGVjKTsKICAgICAgICAgc2V0UmFu
Z2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChmb3J3YXJkc1NjYW5SYW5nZSwgY2hhcmFj
dGVyT2Zmc2V0LCB0cnVlLCBlYyk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN1ZmZpeExlbmd0
aEZvclJhbmdlKGZvcndhcmRzU2NhblJhbmdlLCBzdHJpbmcpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4
IGE5Mjk2ZGM3YmFkYWIyZDA3Yjc0OWNiM2QwMjU4MGYxYjQzNzE0MTIuLjU0ODhlMTllNzJiMmNi
ZjJlYTE4NzA5NWZlYWQwOGRmMDhiMzJkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNzM3LDcgKzczNyw3IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZWxlY3RUZXh0KEFjY2Vzc2liaWxpdHlTZWxl
Y3RUZXh0Q3JpdGVyaWEqIGNyaXRlcmlhCiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFN0cmluZ1JhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKICAgICAvLyBXaGVuIHN0YXJ0aW5nIG91
ciBzZWFyY2ggYWdhaW4sIG1ha2UgdGhpcyBhIHplcm8gbGVuZ3RoIHJhbmdlIHNvIHRoYXQgc2Vh
cmNoIGZvcndhcmRzIHdpbGwgZmluZCB0aGlzIHNlbGVjdGVkIHJhbmdlIGlmIGl0cyBhcHByb3By
aWF0ZS4KLSAgICBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zZXRFbmQoJnNlbGVjdGVkU3RyaW5nUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVkU3RyaW5nUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkp
OworICAgIHNlbGVjdGVkU3RyaW5nUmFuZ2UtPnNldEVuZChzZWxlY3RlZFN0cmluZ1JhbmdlLT5z
dGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFN0cmluZ1JhbmdlLT5zdGFydE9mZnNldCgpKTsKICAg
ICAKICAgICBSZWZQdHI8UmFuZ2U+IGNsb3Nlc3RBZnRlclN0cmluZ1JhbmdlID0gbnVsbHB0cjsK
ICAgICBSZWZQdHI8UmFuZ2U+IGNsb3Nlc3RCZWZvcmVTdHJpbmdSYW5nZSA9IG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAppbmRleCAyOWY0YmU1NGY1NmQ1ZGE0ZDJmOGMzMDFhNzU0MWQ2YjE2
NjZjYmVmLi44MmM4N2ZiNjU0YWRjODFlNmY5N2I1Y2Y2N2E3NmUxZTZjYmRlMTBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKQEAgLTE0MzQsNyArMTQzNCw3IEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50QmFzZWRTZWxlY3RlZFRleHRSYW5nZSgpIGNv
bnN0CiAgICAgCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uID0gc2VsZWN0
aW9uKCk7CiAgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxl
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
UmFuZ2UgfHwgIWN1cnJlbnRTZWxlY3Rpb25SYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdO
T1JFX0VYQ0VQVElPTikpCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uUmFuZ2UgfHwgIWN1cnJl
bnRTZWxlY3Rpb25SYW5nZS0+aW50ZXJzZWN0c05vZGUoKm5vZGUsIElHTk9SRV9FWENFUFRJT04p
KQogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKICAgICAKICAgICBpbnQgc3RhcnQg
PSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwpAQCAt
MTUxMyw4ICsxNTEzLDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxl
Y3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKICAgICAgICAgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sID0gZG93bmNhc3Q8UmVuZGVyVGV4dENv
bnRyb2w+KCptX3JlbmRlcmVyKS50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAgICAgIHRl
eHRDb250cm9sLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJh
bmdlLmxlbmd0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUoKSwg
cmFuZ2Uuc3RhcnQpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gdmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUoKSwgcmFuZ2Uuc3RhcnQgKyBy
YW5nZS5sZW5ndGgpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJh
dG9yKCpub2RlKCksIHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9
IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcigqbm9kZSgpLCBy
YW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7CiAgICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCku
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCksIEZy
YW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7
CiAgICAgfQogICAgIApAQCAtMTg3Niw3ICsxODc3LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkg
Y28KICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAot
ICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Io
bm9kZSwgaW5kZXgpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hh
cmFjdGVySXRlcmF0b3IoKm5vZGUsIGluZGV4KTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvcykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA5NGE3YTIzNzhiNjQ5NDEyZDkw
MzhlNGM0YWY2OTRlNzZkOTYyNjdhLi4yMmQwMGM0NDZlNjU2OTc4YzA3NTU3Y2E4ZjlmMzc2NTM3
NmE2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBzZWxl
Y3Rpb25CZWxvbmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlz
aWJsZVNlbGVjdGlvbiYKICAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9u
LCBhdCBsZWFzdCBwYXJ0aWFsbHkuCiAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUo
KTsKICAgICBOb2RlKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0g
ICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTikK
KyAgICByZXR1cm4gKHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSwgSUdOT1JFX0VYQ0VQVElP
TikKICAgICAgICAgJiYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+
ZW5kT2Zmc2V0KCkpCiAgICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFz
dERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShs
YXN0RGVzY2VuZGFudCkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0KaW5kZXggZThlMGNiMjI1ZTBlM2RiM2ZhNTA1OWZkNjFjNDVhNDM2ZTk3ODM5OS4uNzJmOWQ5
NzZmZDVlNTExZjc5YjhhNmM1Mjg4OWYxODZmZmNhNjgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTIxMzEsNyArMjEzMSw3IEBAIHN0YXRpYyB2b2lkIEFY
QXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywKICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgodGVzdFJhbmdlLmdldCgpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRl
c3RSYW5nZS0+c2V0RW5kKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQo
KSwgZWMpOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFu
Z2UtPmVuZE9mZnNldCgpLCBlYyk7CiAgICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgPT0gc2NvcGUpOwogICAgIGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggODZkNzBmYTBk
M2QzZWU3OTMxZWFhMmQ3ZDUzNTBhYzViZmIyMTAwNy4uZWFkYWE2YTFkMDBmNTQ1NDNlZTc4MDAw
MTRkYjI3ZTkyNTVmZTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01VSUtpdEV4dGVuc2lvbnMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTExMyw4ICsxMTMsMTAgQEAgdXNpbmcgV2ViQ29y
ZTo6VmlzaWJsZVBvc2l0aW9uOwogICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZDsKICAgICBQb3Np
dGlvbiBzdGFydCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gZnJhbWVTZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkuZW5kKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmFuZ2UtPnNl
dFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGlnbm9yZWQpOwotICAgIHJhbmdlLT5zZXRFbmQoZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5k
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKKyAgICBpZiAoc3RhcnQuY29udGFp
bmVyTm9kZSgpKQorICAgICAgICByYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUo
KSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOworICAgIGlmIChlbmQu
Y29udGFpbmVyTm9kZSgpKQorICAgICAgICByYW5nZS0+c2V0RW5kKCplbmQuY29udGFpbmVyTm9k
ZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGlnbm9yZWQpOwogfQogCiAtICh2b2lk
KWV4dGVuZDooVUludDMyKWFtb3VudCBpbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJl
Y3Rpb24pZGlyZWN0aW9uCkBAIC0xMjksOCArMTMxLDEwIEBAIHVzaW5nIFdlYkNvcmU6OlZpc2li
bGVQb3NpdGlvbjsKICAgICBFeGNlcHRpb25Db2RlIGlnbm9yZWQ7CiAgICAgUG9zaXRpb24gc3Rh
cnQgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
LmVuZCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJhbmdlLT5zZXRTdGFydChz
dGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25v
cmVkKTsKLSAgICByYW5nZS0+c2V0RW5kKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgaWdub3JlZCk7CisgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUo
KSkKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKKyAgICBpZiAoZW5kLmNvbnRhaW5l
ck5vZGUoKSkKKyAgICAgICAgcmFuZ2UtPnNldEVuZCgqZW5kLmNvbnRhaW5lck5vZGUoKSwgZW5k
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBpZ25vcmVkKTsKIH0KIAogLSAoRE9NTm9kZSAqKWZp
cnN0Tm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGY4NzllZWUxN2NmY2Q3ZWQ5ZTc0NWQyOWJlMTU5
YWZjZmIxMjE4YWYuLjgzNjA5ODJhNzljY2MwYTY2Y2EyMTcyODAxYmMzY2NlODU1Yzg3MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKQEAgLTIzMTQsNyArMjMxNCw3IEBAIHZvaWQgTm9kZTo6cmVtb3ZlZExh
c3RSZWYoKQogdm9pZCBOb2RlOjp0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cykgY29u
c3QKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgp
KTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMp
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnN0
X2Nhc3Q8Tm9kZSY+KCp0aGlzKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgcmFuZ2UtPmFic29s
dXRlVGV4dFJlY3RzKHJlY3RzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggN2Y4Yjc2MWFj
NGUwM2NlMzA4YzdkNTM2YzZiMDc1ZTM5ZTI0NmFmNy4uM2RjZjZhODNlNWU2Njg2ZjVhMDdlZWZk
Mzg4ODJiN2Q1OTgzMWVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC04MCw2ICs4MCw3IEBAIFJl
ZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSYW5nZShvd25lckRvY3VtZW50KSk7CiB9CiAKKy8vIEZJWE1FOiBz
dGFydENvbnRhaW5lciBhbmQgZW5kQ29udGFpbmVyIHNob3VsZCBwcm9iYWJseSBiZSBSZWY8Tm9k
ZT4mJi4KIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIFBhc3NS
ZWZQdHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUGFzc1JlZlB0cjxO
b2RlPiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpCiAgICAgOiBtX293bmVyRG9jdW1lbnQo
b3duZXJEb2N1bWVudCkKICAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQpCkBAIC05Myw4ICs5
NCwxMCBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBQYXNz
UmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbgogCiAgICAgLy8gU2ltcGx5IHNldHRpbmcg
dGhlIGNvbnRhaW5lcnMgYW5kIG9mZnNldHMgZGlyZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0
aGUgY2hlY2tpbmcKICAgICAvLyB0aGF0IHNldFN0YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIGNh
bGwgdGhvc2UgZnVuY3Rpb25zLgotICAgIHNldFN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9m
ZnNldCk7Ci0gICAgc2V0RW5kKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTsKKyAgICBpZiAoc3Rh
cnRDb250YWluZXIpCisgICAgICAgIHNldFN0YXJ0KCpzdGFydENvbnRhaW5lciwgc3RhcnRPZmZz
ZXQpOworICAgIGlmIChlbmRDb250YWluZXIpCisgICAgICAgIHNldEVuZCgqZW5kQ29udGFpbmVy
LCBlbmRPZmZzZXQpOwogfQogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93
bmVyRG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFydE9m
ZnNldCwgUGFzc1JlZlB0cjxOb2RlPiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpCkBAIC0x
MjksOCArMTMyLDggQEAgdm9pZCBSYW5nZTo6c2V0RG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50
KQogICAgIEFTU0VSVChtX293bmVyRG9jdW1lbnQucHRyKCkgIT0gJmRvY3VtZW50KTsKICAgICBt
X293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOwogICAgIG1fb3duZXJEb2N1bWVudCA9
IGRvY3VtZW50OwotICAgIG1fc3RhcnQuc2V0VG9TdGFydE9mTm9kZSgmZG9jdW1lbnQpOwotICAg
IG1fZW5kLnNldFRvU3RhcnRPZk5vZGUoJmRvY3VtZW50KTsKKyAgICBtX3N0YXJ0LnNldFRvU3Rh
cnRPZk5vZGUoZG9jdW1lbnQpOworICAgIG1fZW5kLnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQp
OwogICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CiB9CiAKQEAgLTE1Nywx
MyArMTYwLDggQEAgc3RhdGljIGlubGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRh
aW5lcihjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHN0YXIKICAgICByZXR1cm4gc3RhcnRSb290
Q29udGFpbmVyICE9IGVuZFJvb3RDb250YWluZXIgfHwgKFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoc3RhcnQsIGVuZCwgQVNTRVJUX05PX0VYQ0VQVElPTikgPiAwKTsKIH0KIAotdm9pZCBS
YW5nZTo6c2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIHJlZk5vZGUs
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewot
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGJv
b2wgZGlkTW92ZURvY3VtZW50ID0gZmFsc2U7CiAgICAgaWYgKCZyZWZOb2RlLT5kb2N1bWVudCgp
ICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgc2V0RG9jdW1lbnQocmVmTm9kZS0+ZG9j
dW1lbnQoKSk7CkBAIC0xNzEsMjMgKzE2OSwxOCBAQCB2b2lkIFJhbmdlOjpzZXRTdGFydChQYXNz
UmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
IH0KIAogICAgIGVjID0gMDsKLSAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0
KHJlZk5vZGUuZ2V0KCksIG9mZnNldCwgZWMpOworICAgIE5vZGUqIGNoaWxkTm9kZSA9IGNoZWNr
Tm9kZVdPZmZzZXQocmVmTm9kZSwgb2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3N0YXJ0LnNldChyZWZOb2RlLCBvZmZzZXQsIGNoaWxkTm9kZSk7Cisg
ICAgbV9zdGFydC5zZXQoV1RGTW92ZShyZWZOb2RlKSwgb2Zmc2V0LCBjaGlsZE5vZGUpOwogCiAg
ICAgaWYgKGRpZE1vdmVEb2N1bWVudCB8fCBjaGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIo
bV9zdGFydCwgbV9lbmQpKQogICAgICAgICBjb2xsYXBzZSh0cnVlKTsKIH0KIAotdm9pZCBSYW5n
ZTo6c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgcmVmTm9kZSwgaW50IG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYm9vbCBkaWRN
b3ZlRG9jdW1lbnQgPSBmYWxzZTsKICAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93
bmVyRG9jdW1lbnQoKSkgewogICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgp
KTsKQEAgLTE5NSwxMSArMTg4LDExIEBAIHZvaWQgUmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5v
ZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIAogICAg
IGVjID0gMDsKLSAgICBOb2RlKiBjaGlsZE5vZGUgPSBjaGVja05vZGVXT2Zmc2V0KHJlZk5vZGUu
Z2V0KCksIG9mZnNldCwgZWMpOworICAgIE5vZGUqIGNoaWxkTm9kZSA9IGNoZWNrTm9kZVdPZmZz
ZXQocmVmTm9kZSwgb2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2VuZC5zZXQocmVmTm9kZSwgb2Zmc2V0LCBjaGlsZE5vZGUpOworICAgIG1fZW5kLnNl
dChXVEZNb3ZlKHJlZk5vZGUpLCBvZmZzZXQsIGNoaWxkTm9kZSk7CiAKICAgICBpZiAoZGlkTW92
ZURvY3VtZW50IHx8IGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihtX3N0YXJ0LCBtX2Vu
ZCkpCiAgICAgICAgIGNvbGxhcHNlKGZhbHNlKTsKQEAgLTIwOCwxMyArMjAxLDIxIEBAIHZvaWQg
UmFuZ2U6OnNldEVuZChQYXNzUmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogdm9pZCBSYW5nZTo6c2V0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBQb3NpdGlvbiBwYXJlbnRBbmNob3JlZCA9IHN0
YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHNldFN0YXJ0KHBhcmVudEFuY2hv
cmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGVjKTsKKyAgICBpZiAoIXBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSkgeworICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRTdGFy
dCgqcGFyZW50QW5jaG9yZWQuY29udGFpbmVyTm9kZSgpLCBwYXJlbnRBbmNob3JlZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZWMpOwogfQogCiB2b2lkIFJhbmdlOjpzZXRFbmQoY29uc3QgUG9z
aXRpb24mIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUG9zaXRpb24gcGFyZW50QW5j
aG9yZWQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgc2V0RW5kKHBhcmVu
dEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoIXBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSkg
eworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBz
ZXRFbmQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIH0KIAogdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9v
bCB0b1N0YXJ0KQpAQCAtMjI1LDE0ICsyMjYsOSBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29s
IHRvU3RhcnQpCiAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKIH0KIAotYm9vbCBSYW5nZTo6aXNQ
b2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Citib29sIFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoJnJlZk5v
ZGUtPmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgeworICAgIGlmICgmcmVmTm9kZS5k
b2N1bWVudCgpICE9ICZvd25lckRvY3VtZW50KCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMjQxLDMwICsyMzcsMjQgQEAgYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2Uo
Tm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJl
Zk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKICAgICAg
ICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3Bl
cmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghY29tbW9uQW5jZXN0b3JD
b250YWluZXIocmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIWNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKCZyZWZOb2RlLCAmc3RhcnRDb250YWluZXIoKSkpCiAgICAgICAg
ICAgICBlYyA9IDA7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIHJl
c3VsdCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRh
aW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBlYykgPj0gMCAmJiAhZWMKLSAgICAgICAgJiYgY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgJmVuZENvbnRhaW5lcigpLCBtX2Vu
ZC5vZmZzZXQoKSwgZWMpIDw9IDAgJiYgIWVjOworICAgIGJvb2wgcmVzdWx0ID0gY29tcGFyZUJv
dW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0
Lm9mZnNldCgpLCBlYykgPj0gMCAmJiAhZWMKKyAgICAgICAgJiYgY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCksIGVj
KSA8PSAwICYmICFlYzsKICAgICBBU1NFUlQoIWVjIHx8IGVjID09IFdST05HX0RPQ1VNRU5UX0VS
Uik7CiAgICAgZWMgPSAwOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNob3J0IFJhbmdlOjpj
b21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CitzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIHJlZk5vZGUsIGludCBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vZG9jcy9ET006cmFuZ2UuY29tcGFyZVBvaW50CiAgICAgLy8gVGhpcyBt
ZXRob2QgcmV0dXJucyAtMSwgMCBvciAxIGRlcGVuZGluZyBvbiBpZiB0aGUgcG9pbnQgZGVzY3Jp
YmVkIGJ5IHRoZSAKICAgICAvLyByZWZOb2RlIG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhl
IG5vZGUgaXMgYmVmb3JlLCBzYW1lIGFzLCBvciBhZnRlciB0aGUgcmFuZ2UgcmVzcGVjdGl2ZWx5
LgotCi0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoJnJlZk5vZGUtPmRvY3VtZW50KCkgIT0gJm93
bmVyRG9jdW1lbnQoKSkgeworICAgIGlmICgmcmVmTm9kZS5kb2N1bWVudCgpICE9ICZvd25lckRv
Y3VtZW50KCkpIHsKICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KQEAgLTI3NCw0OSArMjY0LDQ0IEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
UG9pbnQoTm9kZSogcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVj
ayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3Qg
Zmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2
b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghcmVm
Tm9kZS0+aW5Eb2N1bWVudCgpICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcihyZWZOb2RlLCAm
c3RhcnRDb250YWluZXIoKSkpCisgICAgICAgIGlmICghcmVmTm9kZS5pbkRvY3VtZW50KCkgJiYg
IWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCZyZWZOb2RlLCAmc3RhcnRDb250YWluZXIoKSkpCiAg
ICAgICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCiAgICAgLy8gY29tcGFyZSB0byBzdGFydCwgYW5kIHBvaW50IGNvbWVzIGJlZm9yZQot
ICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmc3RhcnRDb250
YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgZWMpIDwgMCkKKyAgICBpZiAoY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9m
ZnNldCgpLCBlYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gY29tcGFyZSB0byBlbmQsIGFuZCBwb2ludCBjb21lcyBh
ZnRlcgotICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCAmZW5k
Q29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpLCBlYykgPiAwICYmICFlYykKKyAgICBpZiAoY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKCZyZWZOb2RlLCBvZmZzZXQsICZlbmRDb250YWluZXIoKSwgbV9l
bmQub2Zmc2V0KCksIGVjKSA+IDAgJiYgIWVjKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8v
IHBvaW50IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhpcyByYW5nZSwgb3Igb24gdGhlIGJvdW5kYXJ5
IHBvaW50cwogICAgIHJldHVybiAwOwogfQogCi1SYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6
OmNvbXBhcmVOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorUmFu
Z2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21wYXJlTm9kZShOb2RlJiByZWZOb2RlLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL2RvY3MvRE9NOnJhbmdlLmNvbXBhcmVOb2RlCiAgICAgLy8gVGhpcyBtZXRob2QgcmV0
dXJucyAwLCAxLCAyLCBvciAzIGJhc2VkIG9uIGlmIHRoZSBub2RlIGlzIGJlZm9yZSwgYWZ0ZXIs
CiAgICAgLy8gYmVmb3JlIGFuZCBhZnRlcihzdXJyb3VuZHMpLCBvciBpbnNpZGUgdGhlIHJhbmdl
LCByZXNwZWN0aXZlbHkKIAotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5cGVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwotICAgIH0KLQotICAgIGlmICghcmVm
Tm9kZS0+aW5Eb2N1bWVudCgpKSB7CisgICAgaWYgKCFyZWZOb2RlLmluRG9jdW1lbnQoKSkgewog
ICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNh
c2U7IGl0IHJldHVybnMgMC4KICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwogICAgIH0KIAot
ICAgIGlmICgmcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKSB7CisgICAg
aWYgKCZyZWZOb2RlLmRvY3VtZW50KCkgIT0gJm93bmVyRG9jdW1lbnQoKSkgewogICAgICAgICAv
LyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJl
dHVybnMgMC4KICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwogICAgIH0KIAotICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudE5vZGUgPSByZWZOb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpOworICAgIENvbnRhaW5l
ck5vZGUqIHBhcmVudE5vZGUgPSByZWZOb2RlLnBhcmVudE5vZGUoKTsKKyAgICB1bnNpZ25lZCBu
b2RlSW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICAKICAgICBpZiAoIXBh
cmVudE5vZGUpIHsKICAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXMgdGhlIHRvcCBkb2N1bWVudCB3
ZSBzaG91bGQgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUgpAQCAtMzI1LDI2ICszMTAsMjIg
QEAgUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIFJhbmdlOjpjb21wYXJlTm9kZShOb2RlKiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFOwog
ICAgIH0KIAotICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBlYykg
PCAwKSB7IC8vIHN0YXJ0cyBiZWZvcmUKLSAgICAgICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnRO
b2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQorICAg
IC8vIHN0YXJ0cyBiZWZvcmUKKyAgICBpZiAoY29tcGFyZVBvaW50KCpwYXJlbnROb2RlLCBub2Rl
SW5kZXgsIGVjKSA8IDApIHsKKyAgICAgICAgaWYgKGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwg
bm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKICAgICAgICAg
ICAgIHJldHVybiBOT0RFX0JFRk9SRV9BTkRfQUZURVI7CiAgICAgICAgIHJldHVybiBOT0RFX0JF
Rk9SRTsgLy8gZW5kcyBiZWZvcmUgb3IgaW4gdGhlIHJhbmdlCi0gICAgfSBlbHNlIHsgLy8gc3Rh
cnRzIGF0IG9yIGFmdGVyIHRoZSByYW5nZSBzdGFydAotICAgICAgICBpZiAoY29tcGFyZVBvaW50
KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJh
bmdlCi0gICAgICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKLSAgICAgICAgcmV0dXJuIE5PREVf
SU5TSURFOyAvLyBlbmRzIGluc2lkZSB0aGUgcmFuZ2UKICAgICB9CisgICAgLy8gc3RhcnRzIGF0
IG9yIGFmdGVyIHRoZSByYW5nZSBzdGFydAorICAgIGlmIChjb21wYXJlUG9pbnQoKnBhcmVudE5v
ZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8vIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCisgICAg
ICAgIHJldHVybiBOT0RFX0FGVEVSOworICAgIHJldHVybiBOT0RFX0lOU0lERTsgLy8gZW5kcyBp
bnNpZGUgdGhlIHJhbmdlCiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMo
Q29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0CitzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3cg
aG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIGlmICghc291cmNlUmFuZ2UpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIE5vZGUqIHRoaXNDb250ID0gY29tbW9uQW5jZXN0
b3JDb250YWluZXIoKTsKLSAgICBOb2RlKiBzb3VyY2VDb250ID0gc291cmNlUmFuZ2UtPmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKCk7CisgICAgTm9kZSogc291cmNlQ29udCA9IHNvdXJjZVJhbmdl
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CiAKICAgICBpZiAoJnRoaXNDb250LT5kb2N1bWVu
dCgpICE9ICZzb3VyY2VDb250LT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGVjID0gV1JPTkdfRE9D
VU1FTlRfRVJSOwpAQCAtMzY0LDIwICszNDUsMjAgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGMK
IAogICAgIHN3aXRjaCAoaG93KSB7CiAgICAgICAgIGNhc2UgU1RBUlRfVE9fU1RBUlQ6Ci0gICAg
ICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQsIHNvdXJjZVJhbmdl
LT5tX3N0YXJ0LCBlYyk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KG1fc3RhcnQsIHNvdXJjZVJhbmdlLm1fc3RhcnQsIGVjKTsKICAgICAgICAgY2FzZSBTVEFSVF9U
T19FTkQ6Ci0gICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fZW5kLCBz
b3VyY2VSYW5nZS0+bV9zdGFydCwgZWMpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhtX2VuZCwgc291cmNlUmFuZ2UubV9zdGFydCwgZWMpOwogICAgICAgICBjYXNl
IEVORF9UT19FTkQ6Ci0gICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1f
ZW5kLCBzb3VyY2VSYW5nZS0+bV9lbmQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
Qm91bmRhcnlQb2ludHMobV9lbmQsIHNvdXJjZVJhbmdlLm1fZW5kLCBlYyk7CiAgICAgICAgIGNh
c2UgRU5EX1RPX1NUQVJUOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhtX3N0YXJ0LCBzb3VyY2VSYW5nZS0+bV9lbmQsIGVjKTsKKyAgICAgICAgICAgIHJldHVybiBj
b21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydCwgc291cmNlUmFuZ2UubV9lbmQsIGVjKTsKICAg
ICB9CiAKICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXNob3J0IFJh
bmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1bnNpZ25lZCBzaG9ydCBjb21w
YXJlSG93LCBjb25zdCBSYW5nZSogc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVuc2lnbmVk
IHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlJiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CiB7CiAgICAgaWYgKGNvbXBhcmVIb3cgPiBFTkRfVE9fU1RBUlQpIHsKICAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKQEAgLTQ5NSwyNiArNDc2LDIxIEBAIHZvaWQg
UmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHByb2Nlc3NDb250
ZW50cyhEZWxldGUsIGVjKTsKIH0KIAotYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSog
cmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Citib29sIFJhbmdlOjppbnRlcnNlY3Rz
Tm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAo
IXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPmluRG9jdW1lbnQoKSB8fCAmcmVmTm9kZS0+
ZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQorICAgIGlmICghcmVmTm9kZS5pbkRvY3Vt
ZW50KCkgfHwgJnJlZk5vZGUuZG9jdW1lbnQoKSAhPSAmb3duZXJEb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSByZWZOb2Rl
LnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgdW5zaWduZWQgbm9kZUluZGV4ID0gcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgp
OworICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOwog
CiAgICAgLy8gSWYgKHBhcmVudCwgb2Zmc2V0KSBpcyBiZWZvcmUgZW5kIGFuZCAocGFyZW50LCBv
ZmZzZXQgKyAxKSBpcyBhZnRlciBzdGFydCwgcmV0dXJuIHRydWUuCiAgICAgLy8gT3RoZXJ3aXNl
LCByZXR1cm4gZmFsc2UuCi0gICAgc2hvcnQgY29tcGFyZUZpcnN0ID0gY29tcGFyZVBvaW50KHBh
cmVudE5vZGUsIG5vZGVJbmRleCwgZWMpOwotICAgIHNob3J0IGNvbXBhcmVTZWNvbmQgPSBjb21w
YXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpOworICAgIHNob3J0IGNvbXBh
cmVGaXJzdCA9IGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4LCBlYyk7CisgICAg
c2hvcnQgY29tcGFyZVNlY29uZCA9IGNvbXBhcmVQb2ludCgqcGFyZW50Tm9kZSwgbm9kZUluZGV4
ICsgMSwgZWMpOwogCiAgICAgYm9vbCBpc0ZpcnN0QmVmb3JlRW5kID0gbV9zdGFydCA9PSBtX2Vu
ZCA/IGNvbXBhcmVGaXJzdCA8IDAgOiBjb21wYXJlRmlyc3QgPD0gMDsKICAgICBib29sIGlzU2Vj
b25kQWZ0ZXJTdGFydCA9IG1fc3RhcnQgPT0gbV9lbmQgPyBjb21wYXJlU2Vjb25kID4gMCA6IGNv
bXBhcmVTZWNvbmQgPj0gMDsKQEAgLTY0NSw5ICs2MjEsOSBAQCBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUmFuZ2U6OnByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlIGFjdGlvbiwgRXhjZXB0aW9u
Q29kZQogICAgIGVjID0gMDsKICAgICBpZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0aW9uID09
IERlbGV0ZSkgewogICAgICAgICBpZiAocGFydGlhbFN0YXJ0ICYmIGNvbW1vblJvb3QtPmNvbnRh
aW5zKHBhcnRpYWxTdGFydC5nZXQoKSkpCi0gICAgICAgICAgICBzZXRTdGFydChwYXJ0aWFsU3Rh
cnQtPnBhcmVudE5vZGUoKSwgcGFydGlhbFN0YXJ0LT5jb21wdXRlTm9kZUluZGV4KCkgKyAxLCBl
Yyk7CisgICAgICAgICAgICBzZXRTdGFydCgqcGFydGlhbFN0YXJ0LT5wYXJlbnROb2RlKCksIHBh
cnRpYWxTdGFydC0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwogICAgICAgICBlbHNlIGlm
IChwYXJ0aWFsRW5kICYmIGNvbW1vblJvb3QtPmNvbnRhaW5zKHBhcnRpYWxFbmQuZ2V0KCkpKQot
ICAgICAgICAgICAgc2V0U3RhcnQocGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5k
LT5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKKyAgICAgICAgICAgIHNldFN0YXJ0KCpwYXJ0aWFs
RW5kLT5wYXJlbnROb2RlKCksIHBhcnRpYWxFbmQtPmNvbXB1dGVOb2RlSW5kZXgoKSwgZWMpOwog
ICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgbV9l
bmQgPSBtX3N0YXJ0OwpAQCAtODM2LDEzICs4MTIsOCBAQCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gUmFuZ2U6OmNsb25lQ29udGVudHMoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuIHBy
b2Nlc3NDb250ZW50cyhDbG9uZSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjppbnNlcnROb2RlKFJl
ZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6aW5zZXJ0
Tm9kZShSZWY8Tm9kZT4mJiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW5v
ZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBib29sIHN0YXJ0SXNDaGFyYWN0ZXJEYXRhID0gaXM8Q2hhcmFjdGVyRGF0YT4oc3RhcnRD
b250YWluZXIoKSk7CiAgICAgaWYgKHN0YXJ0SXNDaGFyYWN0ZXJEYXRhICYmICFzdGFydENvbnRh
aW5lcigpLnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VS
UjsKQEAgLTg1OSw3ICs4MzAsNyBAQCB2b2lkIFJhbmdlOjppbnNlcnROb2RlKFJlZlB0cjxOb2Rl
PiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIFJlZjxDb250YWluZXJOb2RlPiBwYXJl
bnQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqcGFyZW50Tm9kZSk7CiAKICAgICBlYyA9IDA7
Ci0gICAgaWYgKCFwYXJlbnQtPmVuc3VyZVByZUluc2VydGlvblZhbGlkaXR5KCpub2RlLCByZWZl
cmVuY2VOb2RlLmdldCgpLCBlYykpCisgICAgaWYgKCFwYXJlbnQtPmVuc3VyZVByZUluc2VydGlv
blZhbGlkaXR5KG5vZGUsIHJlZmVyZW5jZU5vZGUuZ2V0KCksIGVjKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwpAQCAtODY5LDcgKzg0MCw3IEBAIHZvaWQg
UmFuZ2U6Omluc2VydE5vZGUoUmVmUHRyPE5vZGU+JiYgbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlZmVyZW5jZU5vZGUgPT0g
bm9kZSkKKyAgICBpZiAocmVmZXJlbmNlTm9kZSA9PSBub2RlLnB0cigpKQogICAgICAgICByZWZl
cmVuY2VOb2RlID0gcmVmZXJlbmNlTm9kZS0+bmV4dFNpYmxpbmcoKTsKIAogICAgIG5vZGUtPnJl
bW92ZShlYyk7CkBAIC04NzcsMTcgKzg0OCwxNyBAQCB2b2lkIFJhbmdlOjppbnNlcnROb2RlKFJl
ZlB0cjxOb2RlPiYmIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAK
ICAgICB1bnNpZ25lZCBuZXdPZmZzZXQgPSByZWZlcmVuY2VOb2RlID8gcmVmZXJlbmNlTm9kZS0+
Y29tcHV0ZU5vZGVJbmRleCgpIDogcGFyZW50LT5jb3VudENoaWxkTm9kZXMoKTsKLSAgICBpZiAo
aXM8RG9jdW1lbnRGcmFnbWVudD4oKm5vZGUpKQotICAgICAgICBuZXdPZmZzZXQgKz0gZG93bmNh
c3Q8RG9jdW1lbnRGcmFnbWVudD4oKm5vZGUpLmNvdW50Q2hpbGROb2RlcygpOworICAgIGlmIChp
czxEb2N1bWVudEZyYWdtZW50Pihub2RlLmdldCgpKSkKKyAgICAgICAgbmV3T2Zmc2V0ICs9IGRv
d25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KG5vZGUuZ2V0KCkpLmNvdW50Q2hpbGROb2RlcygpOwog
ICAgIGVsc2UKICAgICAgICAgKytuZXdPZmZzZXQ7CiAKLSAgICBwYXJlbnQtPmluc2VydEJlZm9y
ZShub2RlLnJlbGVhc2VOb25OdWxsKCksIHJlZmVyZW5jZU5vZGUuZ2V0KCksIGVjKTsKKyAgICBw
YXJlbnQtPmluc2VydEJlZm9yZShXVEZNb3ZlKG5vZGUpLCByZWZlcmVuY2VOb2RlLmdldCgpLCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY29sbGFwc2VkKCkp
Ci0gICAgICAgIHNldEVuZChwYXJlbnQucHRyKCksIG5ld09mZnNldCwgZWMpOworICAgICAgICBz
ZXRFbmQoV1RGTW92ZShwYXJlbnQpLCBuZXdPZmZzZXQsIGVjKTsKIH0KIAogU3RyaW5nIFJhbmdl
Ojp0b1N0cmluZygpIGNvbnN0CkBAIC05NTAsOSArOTIxLDkgQEAgdm9pZCBSYW5nZTo6ZGV0YWNo
KCkKICAgICAvLyBUaGlzIGlzIG5vdyBhIG5vLW9wIGFzIHBlciB0aGUgRE9NIHNwZWNpZmljYXRp
b24uCiB9CiAKLU5vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUqIG4sIGludCBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorTm9kZSogUmFuZ2U6OmNoZWNrTm9kZVdPZmZz
ZXQoTm9kZSYgbm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0g
ICAgc3dpdGNoIChuLT5ub2RlVHlwZSgpKSB7CisgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CiAgICAgICAgICAgICBl
YyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtOTYwLDcgKzkzMSw3IEBAIE5vZGUqIFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUqIG4s
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICBjYXNlIE5vZGU6
OkNPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CiAgICAgICAgIGNh
c2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKm4p
Lmxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQp
ID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgpAQCAtOTY5LDcgKzk0MCw3IEBAIE5vZGUq
IFJhbmdlOjpjaGVja05vZGVXT2Zmc2V0KE5vZGUqIG4sIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERTogewogICAgICAg
ICAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBOb2RlKiBjaGlsZEJlZm9yZSA9IG4tPnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAt
IDEpOworICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBub2RlLnRyYXZlcnNlVG9DaGls
ZEF0KG9mZnNldCAtIDEpOwogICAgICAgICAgICAgaWYgKCFjaGlsZEJlZm9yZSkKICAgICAgICAg
ICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICAgICAgcmV0dXJuIGNoaWxkQmVm
b3JlOwpAQCAtOTg0LDEwMSArOTU1LDcxIEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNsb25lUmFuZ2Uo
KSBjb25zdAogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0
Q29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zm
c2V0KCkpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEFmdGVyKE5vZGUqIHJlZk5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMg
PSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUt
PnBhcmVudE5vZGUoKSkgeworICAgIGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzZXRTdGFydChyZWZOb2RlLT5wYXJlbnROb2RlKCksIHJlZk5vZGUtPmNvbXB1dGVOb2Rl
SW5kZXgoKSArIDEsIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJl
Zk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRF
bmRCZWZvcmUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpz
ZXRFbmRCZWZvcmUoTm9kZSYgcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFyZWZOb2RlKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFyZWZOb2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5v
ZGUucGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2V0RW5kKHJlZk5vZGUtPnBhcmVudE5vZGUo
KSwgcmVmTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CisgICAgc2V0RW5kKCpyZWZOb2Rl
LnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCksIGVjKTsKIH0KIAotdm9p
ZCBSYW5nZTo6c2V0RW5kQWZ0ZXIoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFJhbmdlOjpzZXRFbmRBZnRlcihOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBpZiAoIXJlZk5vZGUpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlZk5vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
IGlmICghcmVmTm9kZS5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRFbmQocmVmTm9kZS0+
cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAxLCBlYyk7CisgICAg
c2V0RW5kKCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgcmVmTm9kZS5jb21wdXRlTm9kZUluZGV4KCkg
KyAxLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNlbGVjdE5vZGUoTm9kZSogcmVmTm9kZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZWxlY3ROb2RlKE5vZGUmIHJlZk5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9kZSkgewotICAgICAgICBlYyA9IFR5
cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVmTm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgaWYgKCFyZWZOb2RlLnBhcmVudE5vZGUoKSkgewogICAgICAgICBl
YyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLT5kb2N1bWVudCgpKQotICAgICAgICBz
ZXREb2N1bWVudChyZWZOb2RlLT5kb2N1bWVudCgpKTsKKyAgICBpZiAoJm93bmVyRG9jdW1lbnQo
KSAhPSAmcmVmTm9kZS5kb2N1bWVudCgpKQorICAgICAgICBzZXREb2N1bWVudChyZWZOb2RlLmRv
Y3VtZW50KCkpOwogCi0gICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLT5jb21wdXRlTm9kZUlu
ZGV4KCk7CisgICAgdW5zaWduZWQgaW5kZXggPSByZWZOb2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsK
ICAgICBlYyA9IDA7Ci0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCBpbmRleCwg
ZWMpOworICAgIHNldFN0YXJ0KCpyZWZOb2RlLnBhcmVudE5vZGUoKSwgaW5kZXgsIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRFbmQocmVmTm9kZS0+cGFyZW50Tm9k
ZSgpLCBpbmRleCArIDEsIGVjKTsKKyAgICBzZXRFbmQoKnJlZk5vZGUucGFyZW50Tm9kZSgpLCBp
bmRleCArIDEsIGVjKTsKIH0KIAotdm9pZCBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUq
IHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2VsZWN0Tm9kZUNvbnRl
bnRzKE5vZGUmIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghcmVmTm9k
ZSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChyZWZOb2RlLT5pc0RvY3VtZW50VHlwZU5vZGUoKSkgeworICAgIGlmIChyZWZOb2Rl
LmlzRG9jdW1lbnRUeXBlTm9kZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCZvd25lckRvY3VtZW50KCkg
IT0gJnJlZk5vZGUtPmRvY3VtZW50KCkpCi0gICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUtPmRv
Y3VtZW50KCkpOworICAgIGlmICgmb3duZXJEb2N1bWVudCgpICE9ICZyZWZOb2RlLmRvY3VtZW50
KCkpCisgICAgICAgIHNldERvY3VtZW50KHJlZk5vZGUuZG9jdW1lbnQoKSk7CiAKICAgICBtX3N0
YXJ0LnNldFRvU3RhcnRPZk5vZGUocmVmTm9kZSk7CiAgICAgbV9lbmQuc2V0VG9FbmRPZk5vZGUo
cmVmTm9kZSk7CiB9CiAKLXZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxO
b2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnN1cnJv
dW5kQ29udGVudHMoTm9kZSYgcGFzc05ld1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgUmVmUHRyPE5vZGU+IG5ld1BhcmVudCA9IHBhc3NOZXdQYXJlbnQ7Ci0KLSAgICBpZiAoIW5l
d1BhcmVudCkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBSZWY8Tm9kZT4gbmV3UGFyZW50ID0gcGFzc05ld1BhcmVudDsKIAogICAgIC8vIElO
VkFMSURfU1RBVEVfRVJSOiBSYWlzZWQgaWYgdGhlIFJhbmdlIHBhcnRpYWxseSBzZWxlY3RzIGEg
bm9uLVRleHQgbm9kZS4KICAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1y
YW5nZS1zdXJyb3VuZGNvbnRlbnRzIChzdGVwIDEpLgpAQCAtMTEzMyw3ICsxMDc0LDcgQEAgdm9p
ZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBhc3NOZXdQYXJlbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgZWMgPSAwOwogICAgIHdoaWxlIChOb2RlKiBuID0g
bmV3UGFyZW50LT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4oKm5ld1BhcmVudCkucmVtb3ZlQ2hpbGQoKm4sIGVjKTsKKyAgICAgICAgZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4obmV3UGFyZW50LmdldCgpKS5yZW1vdmVDaGlsZCgqbiwgZWMpOwogICAgICAg
ICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0NiwyMiArMTA4Nywx
NyBAQCB2b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc05l
d1BhcmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbmV3UGFyZW50LT5hcHBlbmRDaGlsZChm
cmFnbWVudC5yZWxlYXNlKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAg
ICBzZWxlY3ROb2RlKG5ld1BhcmVudC5nZXQoKSwgZWMpOworICAgIHNlbGVjdE5vZGUobmV3UGFy
ZW50LCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5vZGUqIHJlZk5vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5nZTo6c2V0U3RhcnRCZWZvcmUoTm9kZSYgcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFyZWZOb2RlKSB7Ci0gICAgICAg
IGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFyZWZO
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICBpZiAoIXJlZk5vZGUucGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2V0U3RhcnQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCksIGVjKTsKKyAgICBzZXRTdGFydCgqcmVmTm9kZS5wYXJlbnROb2RlKCksIHJl
Zk5vZGUuY29tcHV0ZU5vZGVJbmRleCgpLCBlYyk7CiB9CiAKIE5vZGUqIFJhbmdlOjpmaXJzdE5v
ZGUoKSBjb25zdApAQCAtMTUzOSwxMSArMTQ3NSwxMSBAQCBib29sIFJhbmdlOjpjb250YWlucyhj
b25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CiAgICAgaWYgKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KCktPm93bmVyRG9jdW1lbnQoKSAhPSBvdGhlci5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5v
d25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNob3J0IHN0YXJ0
VG9TdGFydCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICZv
dGhlciwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgc3RhcnRUb1N0YXJ0ID0gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgb3RoZXIsIEFTU0VSVF9O
T19FWENFUFRJT04pOwogICAgIGlmIChzdGFydFRvU3RhcnQgPiAwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBzaG9ydCBlbmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX0VORCwgJm90aGVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBzaG9ydCBl
bmRUb0VuZCA9IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgb3RoZXIs
IEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIHJldHVybiBlbmRUb0VuZCA+PSAwOwogfQogCkBA
IC0xNTc1LDE5ICsxNTExLDE5IEBAIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSogYSwg
Y29uc3QgUmFuZ2UqIGIpCiAgICAgaWYgKGEtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCktPm93
bmVyRG9jdW1lbnQoKSAhPSBiLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3Vt
ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNob3J0IHN0YXJ0VG9TdGFydCA9
IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGIsIEFTU0VS
VF9OT19FWENFUFRJT04pOwotICAgIHNob3J0IGVuZFRvRW5kID0gYS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBz
aG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCAqYiwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc2hvcnQgZW5kVG9FbmQg
PSBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpiLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKIAogICAgIC8vIEZpcnN0IHJhbmdlIGNvbnRhaW5zIHRoZSBzZWNvbmQg
cmFuZ2UuCiAgICAgaWYgKHN0YXJ0VG9TdGFydCA8PSAwICYmIGVuZFRvRW5kID49IDApCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRW5kIG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBz
ZWNvbmQgcmFuZ2UuCi0gICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RB
UlRfVE9fRU5ELCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA+PSAwICYmIGVuZFRvRW5kIDw9IDAp
CisgICAgaWYgKGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAq
YiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPj0gMCAmJiBlbmRUb0VuZCA8PSAwKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFN0YXJ0IG9mIGZpcnN0IHJhbmdlIGlzIGluc2lkZSBzZWNv
bmQgcmFuZ2UuCi0gICAgaWYgKHN0YXJ0VG9TdGFydCA+PSAwICYmIGEtPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAw
KQorICAgIGlmIChzdGFydFRvU3RhcnQgPj0gMCAmJiBhLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19TVEFSVCwgKmIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDApCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU5Nyw3ICsxNTMzLDcg
QEAgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICBSZWY8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLmRvY3VtZW50KCkpOwogICAgIGludCBleGNl
cHRpb24gPSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoJm5vZGUsIGV4Y2VwdGlv
bik7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBleGNlcHRpb24pOwogICAg
IHJldHVybiByYW5nZTsKIH0KIApAQCAtMTYyMSwxMyArMTU1NywxMyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2lu
dCYgYm91bmRhcgogewogICAgIGZvciAoTm9kZSogbm9kZVRvQmVSZW1vdmVkID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQoKTsgbm9kZVRvQmVSZW1vdmVkOyBub2RlVG9CZVJlbW92ZWQgPSBub2RlVG9C
ZVJlbW92ZWQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGJvdW5kYXJ5LmNoaWxkQmVm
b3JlKCkgPT0gbm9kZVRvQmVSZW1vdmVkKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5zZXRUb1N0
YXJ0T2ZOb2RlKCZjb250YWluZXIpOworICAgICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9m
Tm9kZShjb250YWluZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgZm9yIChOb2RlKiBuID0gYm91bmRhcnkuY29udGFpbmVyKCk7IG47IG4gPSBuLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgICAgIGlmIChuID09IG5vZGVUb0JlUmVtb3ZlZCkgewotICAgICAg
ICAgICAgICAgIGJvdW5kYXJ5LnNldFRvU3RhcnRPZk5vZGUoJmNvbnRhaW5lcik7CisgICAgICAg
ICAgICAgICAgYm91bmRhcnkuc2V0VG9TdGFydE9mTm9kZShjb250YWluZXIpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcwNyw5ICsxNjQz
LDkgQEAgdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNN
ZXJnZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZVdpdGhJbmRleCYgb2xkTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KQogewogICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBv
bGROb2RlLm5vZGUoKSkKLSAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5vZGUubm9kZSgpLT5wcmV2
aW91c1NpYmxpbmcoKSwgYm91bmRhcnkub2Zmc2V0KCkgKyBvZmZzZXQsIDApOworICAgICAgICBi
b3VuZGFyeS5zZXQoKm9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgYm91bmRhcnku
b2Zmc2V0KCkgKyBvZmZzZXQsIDApOwogICAgIGVsc2UgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigp
ID09IG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgYm91bmRhcnkub2Zmc2V0KCkgPT0g
b2xkTm9kZS5pbmRleCgpKQotICAgICAgICBib3VuZGFyeS5zZXQob2xkTm9kZS5ub2RlKCktPnBy
ZXZpb3VzU2libGluZygpLCBvZmZzZXQsIDApOworICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5v
ZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSwgb2Zmc2V0LCAwKTsKIH0KIAogdm9pZCBSYW5n
ZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNl
dCkKQEAgLTE3MzAsNyArMTY2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRO
b2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sCiAgICAgICAg
IHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0gb2xkTm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2ln
bmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChib3Vu
ZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KQotICAgICAgICAgICAgYm91bmRhcnkuc2V0KG9sZE5v
ZGUtPm5leHRTaWJsaW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOworICAg
ICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFyeU9m
ZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRv
KiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7CkBAIC0xNzcxLDggKzE3MDcsMTcgQEAg
dm9pZCBSYW5nZTo6ZXhwYW5kKGNvbnN0IFN0cmluZyYgdW5pdCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgICAgIGVuZCA9IGVuZE9mRG9jdW1lbnQoZW5kKTsKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuOwotICAgIHNldFN0YXJ0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9k
ZSgpLCBzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZWMpOwotICAgIHNldEVuZChlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCks
IGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMp
OworCisgICAgaWYgKCFzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSkgewor
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRT
dGFydCgqc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIHN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgaWYg
KCFlbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBU
eXBlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0RW5kKCplbmQuZGVlcEVx
dWl2YWxlbnQoKS5jb250YWluZXJOb2RlKCksIGVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbXB1dGVP
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogfQogCiBSZWY8Q2xpZW50UmVjdExpc3Q+IFJh
bmdlOjpnZXRDbGllbnRSZWN0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGEyMmVkZTY3MmVi
MmNiYmE1YmZmNmEzNWQwZDIxYThhNjEyZjJmM2EuLjIzYWMzNTc1OWU1ZTZmZjlkNDQ3NWY4ZmUy
NmYyODc0YmYzMTllMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC02NiwyNCArNjYsMjQgQEAgcHVibGlj
OgogCiAgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmc3RhcnRDb250YWluZXIoKSwgJmVuZENvbnRhaW5lcigp
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOb2RlKiBjb21tb25BbmNlc3RvckNvbnRh
aW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0YXJ0KFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCBpbnQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
PSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxhcHNl
KGJvb2wgdG9TdGFydCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShO
b2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgc2hvcnQgY29t
cGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUs
IGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzaG9ydCBjb21wYXJlUG9pbnQoTm9k
ZSYgcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGVudW0g
Q29tcGFyZVJlc3VsdHMgeyBOT0RFX0JFRk9SRSwgTk9ERV9BRlRFUiwgTk9ERV9CRUZPUkVfQU5E
X0FGVEVSLCBOT0RFX0lOU0lERSB9OwotICAgIENvbXBhcmVSZXN1bHRzIGNvbXBhcmVOb2RlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBDb21wYXJlUmVzdWx0cyBj
b21wYXJlTm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZW51
bSBDb21wYXJlSG93IHsgU1RBUlRfVE9fU1RBUlQsIFNUQVJUX1RPX0VORCwgRU5EX1RPX0VORCwg
RU5EX1RPX1NUQVJUIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgc2hvcnQgY29tcGFyZUJvdW5kYXJ5
UG9pbnRzKENvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwotICAgIHNob3J0IGNvbXBhcmVCb3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKHVu
c2lnbmVkIHNob3J0IGNvbXBhcmVIb3csIGNvbnN0IFJhbmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHNob3J0IGNvbXBhcmVCb3VuZGFy
eVBvaW50cyhDb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKKyAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5ncyh1
bnNpZ25lZCBzaG9ydCBjb21wYXJlSG93LCBjb25zdCBSYW5nZSYgc291cmNlUmFuZ2UsIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKICAgICBzdGF0aWMgc2hvcnQgY29tcGFyZUJvdW5kYXJ5UG9pbnRz
KE5vZGUqIGNvbnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2RlKiBjb250YWluZXJCLCBpbnQgb2Zm
c2V0QiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBzaG9ydCBjb21wYXJlQm91bmRhcnlQ
b2ludHMoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeUEsIGNvbnN0IFJhbmdlQm91
bmRhcnlQb2ludCYgYm91bmRhcnlCLCBFeGNlcHRpb25Db2RlJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBib3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3Q7Ci0gICAgYm9vbCBpbnRlcnNlY3Rz
Tm9kZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgYm9vbCBpbnRl
cnNlY3RzTm9kZShOb2RlJiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgdm9p
ZCBkZWxldGVDb250ZW50cyhFeGNlcHRpb25Db2RlJik7CiAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGV4dHJhY3RDb250ZW50cyhFeGNlcHRpb25Db2RlJik7CiAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNsb25lQ29udGVudHMoRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgaW5z
ZXJ0Tm9kZShSZWZQdHI8Tm9kZT4mJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgaW5zZXJ0
Tm9kZShSZWY8Tm9kZT4mJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0OwogCiAgICAgU3RyaW5nIHRvSFRNTCgpIGNvbnN0OwpAQCAtOTQsMTMgKzk0LDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxSYW5n
ZT4gY2xvbmVSYW5nZSgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFy
dEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kQmVmb3JlKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9
IEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kQWZ0
ZXIoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZWxlY3ROb2RlKE5vZGUqLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VS
VF9OT19FWENFUFRJT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0Tm9kZUNvbnRl
bnRzKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzdXJyb3VuZENvbnRlbnRzKFBh
c3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0YXJ0QmVmb3JlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUmLCBFeGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RW5kQmVmb3JlKE5vZGUmLCBF
eGNlcHRpb25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0RW5kQWZ0ZXIoTm9kZSYsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3ROb2RlKE5vZGUmLCBFeGNlcHRp
b25Db2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzdXJy
b3VuZENvbnRlbnRzKE5vZGUmLCBFeGNlcHRpb25Db2RlJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFydEJlZm9yZShOb2RlJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3Qg
UG9zaXRpb24gc3RhcnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQudG9Qb3NpdGlv
bigpOyB9CiAgICAgY29uc3QgUG9zaXRpb24gZW5kUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2VuZC50b1Bvc2l0aW9uKCk7IH0KQEAgLTE1OSw3ICsxNTksNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBzZXREb2N1bWVudChEb2N1bWVudCYpOwogCi0gICAgTm9kZSogY2hlY2tOb2RlV09mZnNl
dChOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIE5vZGUqIGNo
ZWNrTm9kZVdPZmZzZXQoTm9kZSYsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
IAogICAgIGVudW0gQWN0aW9uVHlwZSB7IERlbGV0ZSwgRXh0cmFjdCwgQ2xvbmUgfTsKICAgICBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmluZGV4IGYyM2FmOGM0NmNkMDYwN2RjYmRhYzE0
ZDliMjMxY2MwZDFkYjQyMzcuLmE3NTg2ODM5MjdlYjEyNTQyZjc5MDIxNWQ3YTMzMjYzMWE0NjIz
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMjIsNyArMjIsNiBAQAogWwogICAgIENvbnN0cnVj
dG9yLAogICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RG9jdW1lbnQsCi0gICAgVXNlUG9pbnRlcnNF
dmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMsCiAgICAgSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZSwKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKIF0gaW50ZXJmYWNlIFJh
bmdlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCAyOGU4OGMz
YzY2YWQ5MjlhZjViNGFkZDBiMjI0YjRhZjZkYzJkZWVjLi5iZjhmOWU0MTM3OWViMGRmMTZiOWE1
ZWE0ZTQxZDNjOTQ0Nzc3NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VC
b3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2lu
dC5oCkBAIC00NSwxMyArNDUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpOwogCi0g
ICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIE5vZGUq
IGNoaWxkQmVmb3JlKTsKKyAgICB2b2lkIHNldChSZWY8Tm9kZT4mJiBjb250YWluZXIsIGludCBv
ZmZzZXQsIE5vZGUqIGNoaWxkQmVmb3JlKTsKICAgICB2b2lkIHNldE9mZnNldChpbnQgb2Zmc2V0
KTsKIAogICAgIHZvaWQgc2V0VG9CZWZvcmVDaGlsZChOb2RlJik7CiAgICAgdm9pZCBzZXRUb0Fm
dGVyQ2hpbGQoTm9kZSYpOwotICAgIHZvaWQgc2V0VG9TdGFydE9mTm9kZShQYXNzUmVmUHRyPE5v
ZGU+KTsKLSAgICB2b2lkIHNldFRvRW5kT2ZOb2RlKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZv
aWQgc2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJik7CisgICAgdm9pZCBzZXRUb0VuZE9mTm9k
ZShSZWY8Tm9kZT4mJik7CiAKICAgICB2b2lkIGNoaWxkQmVmb3JlV2lsbEJlUmVtb3ZlZCgpOwog
ICAgIHZvaWQgaW52YWxpZGF0ZU9mZnNldCgpIGNvbnN0OwpAQCAtMTE2LDEyICsxMTYsMTEgQEAg
aW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpjbGVhcigpCiAgICAgbV9jaGlsZEJlZm9y
ZUJvdW5kYXJ5ID0gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50
OjpzZXQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBvZmZzZXQsIE5vZGUqIGNoaWxk
QmVmb3JlKQoraW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpzZXQoUmVmPE5vZGU+JiYg
Y29udGFpbmVyLCBpbnQgb2Zmc2V0LCBOb2RlKiBjaGlsZEJlZm9yZSkKIHsKLSAgICBBU1NFUlQo
Y29udGFpbmVyKTsKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogICAgIEFTU0VSVChjaGlsZEJl
Zm9yZSA9PSAob2Zmc2V0ID8gY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAx
KSA6IDApKTsKLSAgICBtX2NvbnRhaW5lck5vZGUgPSBjb250YWluZXI7CisgICAgbV9jb250YWlu
ZXJOb2RlID0gV1RGTW92ZShjb250YWluZXIpOwogICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBv
ZmZzZXQ7CiAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gY2hpbGRCZWZvcmU7CiB9CkBAIC0x
NTEsMTggKzE1MCwxNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvQWZ0
ZXJDaGlsZChOb2RlJiBjaGlsZCkKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gbV9jaGlsZEJl
Zm9yZUJvdW5kYXJ5ID8gaW52YWxpZE9mZnNldCA6IDA7CiB9CiAKLWlubGluZSB2b2lkIFJhbmdl
Qm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShQYXNzUmVmUHRyPE5vZGU+IGNvbnRhaW5l
cikKK2lubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShSZWY8
Tm9kZT4mJiBjb250YWluZXIpCiB7Ci0gICAgQVNTRVJUKGNvbnRhaW5lcik7Ci0gICAgbV9jb250
YWluZXJOb2RlID0gY29udGFpbmVyOworICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29u
dGFpbmVyKTsKICAgICBtX29mZnNldEluQ29udGFpbmVyID0gMDsKICAgICBtX2NoaWxkQmVmb3Jl
Qm91bmRhcnkgPSBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6
OnNldFRvRW5kT2ZOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gY29udGFpbmVyKQoraW5saW5lIHZvaWQg
UmFuZ2VCb3VuZGFyeVBvaW50OjpzZXRUb0VuZE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIp
CiB7Ci0gICAgQVNTRVJUKGNvbnRhaW5lcik7Ci0gICAgbV9jb250YWluZXJOb2RlID0gY29udGFp
bmVyOworICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKICAgICBpZiAo
bV9jb250YWluZXJOb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewogICAgICAgICBtX29mZnNl
dEluQ29udGFpbmVyID0gbV9jb250YWluZXJOb2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKTsKICAg
ICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGVkYTUy
ZWEzNzA1OTVhOTZiYjM1MzBlOTMyNWZkZDc2MjRmNjczODIuLjcyMzFjZmEwZTIwYzEzMmJmZDJm
N2E5Yzk2ZDg3YWE1YTlhZDBjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjU4LDcgKzI1OCw5IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNv
bnN0IFJhbmdlKiByYW5nZSwKIAogICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0
aEFsdGVybmF0aXZlID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNl
dEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCks
IHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgZWMpOworICAgIGlmICghc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJu
YXRpdmUuY29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm47CisgICAgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoKnN0YXJ0UG9zaXRpb25PZlJhbmdl
V2l0aEFsdGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggN2I4OWUwZTdmY2Q1OGZjZTgwYzJiZGI0MTRmYmY2MjRmZThm
YmQ5NC4uYWM0NjQ4ODllOTFmM2YxZTA5ZWUwNWFjNDUxZGQyY2Y1NGRmOTE2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTcyMiw3ICs3MjIs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CiAgICAgRWxl
bWVudCogZWRpdGFibGVSb290ID0gc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAg
ICAgaWYgKHN0YXJ0Tm9kZSAhPSBlZGl0YWJsZVJvb3QpIHsKLSAgICAgICAgd2hpbGUgKGVkaXRh
YmxlUm9vdCAmJiBzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3QgJiYgaXNO
b2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihzdGFydE5vZGUtPnBhcmVudE5vZGUoKSwgcmFuZ2Uu
Z2V0KCkpKQorICAgICAgICB3aGlsZSAoZWRpdGFibGVSb290ICYmIHN0YXJ0Tm9kZS0+cGFyZW50
Tm9kZSgpICE9IGVkaXRhYmxlUm9vdCAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKCpz
dGFydE5vZGUtPnBhcmVudE5vZGUoKSwgcmFuZ2UuZ2V0KCkpKQogICAgICAgICAgICAgc3RhcnRO
b2RlID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKaW5kZXggNjRiZGU3MjdlYjMyNzI2ZTE0MDhkZjNiODRjNWU5NGY4MTdkODAwMC4u
NjJkMDZmOWU2YjYzY2Y5OTY2MzM0YmMxMWFkNWRhNmJjYWE5NDc4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBk
CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsgICAgCiAgICAgUmVmUHRyPFJhbmdlPiBjb250
ZXh0ID0gZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIGNvbnRleHQtPnNlbGVjdE5vZGVD
b250ZW50cygmZWxlbWVudCwgZWMpOworICAgIGNvbnRleHQtPnNlbGVjdE5vZGVDb250ZW50cyhl
bGVtZW50LCBlYyk7CiAKICAgICBTdHJpbmdCdWlsZGVyIGRpY3RhdGlvblBocmFzZXNCdWlsZGVy
OwogICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRpb25zIDogZGljdGF0aW9uUGhyYXNlcykKQEAg
LTYyNyw3ICs2MjcsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50KiBlbGVtKQogICAgICAgICAgICAgZWxlbS0+cmVtb3Zl
KGVjKTsgICAgCiAgICAgICAgICAgICAKICAgICAgICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0ID0g
ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgICAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29u
dGVudHMoZWxlbSwgZWMpOworICAgICAgICBjb250ZXh0LT5zZWxlY3ROb2RlQ29udGVudHMoKmVs
ZW0sIGVjKTsKICAgICAgICAgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dCgqY29udGV4dC5nZXQoKSwgdGV4dCk7CiAgICAgICAgIGVsZW0tPmFw
cGVuZENoaWxkKFdURk1vdmUoZnJhZ21lbnQpLCBlYyk7CiAgICAgCkBAIC0xOTUwLDE0ICsxOTUw
LDE2IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJl
Zm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIFBv
c2l0aW9uIHJhbmdlQ29tcGxpYW50UG9zaXRpb24gPSBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQocmFuZ2VD
b21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBp
ZiAocmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKQorICAgICAgICAgICAg
c3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnJhbmdlQ29tcGxpYW50UG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24g
PSBmYWxzZTsgLy8gd29uJ3QgbmVlZCB0byB3cmFwCiAgICAgfQogICAgIAogICAgIC8vIHRvcE5v
ZGUgZGVmaW5lcyB0aGUgd2hvbGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVyYXRlIG9uIAogICAgIE5v
ZGUqIHRvcE5vZGUgPSBoaWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKTsKICAgICAvLyBGSVhN
RTogbGFzdE9mZnNldEZvckVkaXRpbmcoKSBpcyB3cm9uZyBoZXJlIGlmIGVkaXRpbmdJZ25vcmVz
Q29udGVudChoaWdoZXN0RWRpdGFibGVSb290KCkpIHJldHVybnMgdHJ1ZSAoZS5nLiBhIDx0YWJs
ZT4pCi0gICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHRvcE5vZGUsIGxhc3RPZmZzZXRG
b3JFZGl0aW5nKHRvcE5vZGUpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBpZiAodG9wTm9kZSkK
KyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKCp0b3BOb2RlLCBsYXN0T2Zmc2V0
Rm9yRWRpdGluZyh0b3BOb2RlKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICAvLyBJZiBzcGVs
bGluZ1NlYXJjaFJhbmdlIHN0YXJ0cyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZCwgYWR2YW5jZSB0
byB0aGUgbmV4dCB3b3JkIHNvIHdlIHN0YXJ0IGNoZWNraW5nCiAgICAgLy8gYXQgYSB3b3JkIGJv
dW5kYXJ5LiBHb2luZyBiYWNrIGJ5IG9uZSBjaGFyIGFuZCB0aGVuIGZvcndhcmQgYnkgYSB3b3Jk
IGRvZXMgdGhlIHRyaWNrLgpAQCAtMjAxMSw3ICsyMDEzLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAg
ICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCiAgICAg
ICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3JhbW1hclNlYXJjaFJhbmdlKTsKICAg
ICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwotICAgICAgICAgICAg
Z3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoJmNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVy
KCksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAg
ICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRD
b250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQpAQCAtMjAyMiw5ICsyMDI0LDEwIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlz
c3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAvLyBJZiB3ZSBmb3VuZCBu
ZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBhbmQgdHJ5IGFn
YWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUKICAgICAvLyBibG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCiAgICAgaWYgKHN0
YXJ0ZWRXaXRoU2VsZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAmJiAhYmFkR3JhbW1hclBocmFz
ZSkgewotICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCh0b3BOb2RlLCAwLCBJ
R05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKHRvcE5vZGUpCisgICAgICAgICAgICBzcGVs
bGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCgqdG9wTm9kZSwgMCwgSUdOT1JFX0VYQ0VQVElPTik7
CiAgICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsg
d2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0
RW5kKCZzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldyYXAsIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQoc2Vh
cmNoRW5kTm9kZUFmdGVyV3JhcCwgc2VhcmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICAgICAgCiAgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCkpIHsKICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPmNsb25lUmFuZ2UoKTsKQEAgLTIwNDUsNyArMjA0OCw3IEBAIHZvaWQgRWRpdG9yOjphZHZh
bmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAg
ICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQK
ICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycygqZ3JhbW1hclNlYXJjaFJh
bmdlKTsKICAgICAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsK
LSAgICAgICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZCgmY2hhcnMucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQo
Y2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZz
ZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKQEAgLTMxNjgsOSArMzE3MSw5IEBAIFBhc3NS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
UmFuZ2UqIHJlZmVyZW5jZVJhCiAgICAgUmVmUHRyPE5vZGU+IHNoYWRvd1RyZWVSb290ID0gcmVm
ZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS5ub25Cb3VuZGFy
eVNoYWRvd1RyZWVSb290Tm9kZSgpIDogbnVsbHB0cjsKICAgICBpZiAoc2hhZG93VHJlZVJvb3Qp
IHsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5k
KHNoYWRvd1RyZWVSb290LmdldCgpLCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkp
OworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgqc2hhZG93VHJlZVJvb3QsIHNoYWRv
d1RyZWVSb290LT5jb3VudENoaWxkTm9kZXMoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnNoYWRvd1RyZWVSb290LCAwKTsKICAgICB9CiAK
ICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoKnNlYXJjaFJhbmdl
LCB0YXJnZXQsIG9wdGlvbnMpKTsKQEAgLTMxODYsOSArMzE4OSw5IEBAIFBhc3NSZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJl
ZmVyZW5jZVJhCiAKICAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CiAgICAgICAgICAgICBp
ZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1Ry
ZWVSb290LmdldCgpLCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAg
ICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVl
Um9vdC0+Y291bnRDaGlsZE5vZGVzKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzaGFkb3dUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAg
ICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzaGFkb3dUcmVlUm9vdCwgMCk7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoKnNlYXJjaFJh
bmdlLCB0YXJnZXQsIG9wdGlvbnMpOwpAQCAtMzE5NywxMCArMzIwMCwxMiBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdl
KiByZWZlcmVuY2VSYQogICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cg
dHJlZSwgc2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgog
ICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkgJiYgc2hhZG93VHJlZVJvb3QpIHsKICAg
ICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAg
IGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoc2hh
ZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7Cisg
ICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdC0+c2hhZG93SG9zdCgpKSB7CisgICAgICAgICAgICBp
ZiAoZm9yd2FyZCkKKyAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcigq
c2hhZG93VHJlZVJvb3QtPnNoYWRvd0hvc3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZSgqc2hhZG93VHJlZVJvb3QtPnNoYWRv
d0hvc3QoKSk7CisgICAgICAgIH0KIAogICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRl
eHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMpOwogICAgIH0KQEAgLTMyMjMsNyArMzIy
OCw3IEBAIHN0YXRpYyBib29sIGlzRnJhbWVJblJhbmdlKEZyYW1lKiBmcmFtZSwgUmFuZ2UqIHJh
bmdlKQogICAgIGJvb2wgaW5SYW5nZSA9IGZhbHNlOwogICAgIGZvciAoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVu
dDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
KSB7CiAgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZyYW5nZS0+b3du
ZXJEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpblJhbmdlID0gcmFuZ2UtPmludGVyc2VjdHNO
b2RlKG93bmVyRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgICAgICBpblJhbmdl
ID0gcmFuZ2UtPmludGVyc2VjdHNOb2RlKCpvd25lckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMjU1LDggKzMyNjAs
OCBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcihyZXN1bHRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5zaGFkb3dIb3N0KCksIElHTk9SRV9FWENFUFRJT04pOwotICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZCgmb3JpZ2luYWxFbmRDb250YWluZXIsIG9yaWdp
bmFsRW5kT2Zmc2V0LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRTdGFydEFmdGVyKCpyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5zaGFkb3dIb3N0
KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChv
cmlnaW5hbEVuZENvbnRhaW5lciwgb3JpZ2luYWxFbmRPZmZzZXQsIElHTk9SRV9FWENFUFRJT04p
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMzI3NSwxMSArMzI4MCwx
MSBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogICAgICAgICAvLyByZXN1bHQgcmFuZ2UuIFRo
ZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJsZVBvc2l0aW9uIGhlcmUsCiAgICAgICAgIC8v
IHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2UgYSBUZXh0SXRlcmF0b3IgdG8gZ28gb3ZlciB0
aGUgdmlzaWJsZQogICAgICAgICAvLyB0ZXh0IG5vZGVzLiAKLSAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KCZyZXN1bHRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJlc3VsdFJhbmdlLT5lbmRP
ZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChyZXN1bHRSYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJlc3VsdFJhbmdlLT5lbmRPZmZzZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTik7CiAKICAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFy
Y2hSYW5nZS0+c2hhZG93Um9vdCgpOwogICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNl
ZCgpICYmIHNoYWRvd1RyZWVSb290KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChz
aGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNvdW50Q2hpbGROb2RlcygpLCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoKnNoYWRvd1RyZWVS
b290LCBzaGFkb3dUcmVlUm9vdC0+Y291bnRDaGlsZE5vZGVzKCksIElHTk9SRV9FWENFUFRJT04p
OwogICAgIH0gd2hpbGUgKHRydWUpOwogCiAgICAgcmV0dXJuIG1hdGNoQ291bnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5MWFkMTc2ODY2ZjRmMTNjMDc0
ZDdkMzE0ODQ1YmYzNWJhYjdkMzM5Li44MWFhMDAwODFjNzZkZmE1MzMzYmFkNDZkOTA0NGI1YThi
M2RlODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIy
OCwxMiArMjI4LDExIEBAIHN0YXRpYyB1bnNpZ25lZCB2ZXJ0aWNhbFNjcm9sbERpc3RhbmNlKEZy
YW1lJiBmcmFtZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFNjcm9sbGJhcjo6
cGFnZVN0ZXAoaGVpZ2h0KSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFu
Z2VzKFJhbmdlKiBhLCBSYW5nZSogYikKK3N0YXRpYyBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFu
Z2VzKFJhbmdlJiBhLCBSYW5nZSYgYikKIHsKLSAgICBSYW5nZSogc3RhcnQgPSBhLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKSA8PSAwID8gYSA6IGI7Ci0gICAgUmFuZ2UqIGVuZCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX0VORCwgYiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IGIg
OiBhOwotCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoYS0+b3duZXJEb2N1bWVudCgpLCAmc3Rh
cnQtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LT5zdGFydE9mZnNldCgpLCAmZW5kLT5lbmRDb250
YWluZXIoKSwgZW5kLT5lbmRPZmZzZXQoKSk7CisgICAgUmFuZ2UmIHN0YXJ0ID0gYS5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBiLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKSA8PSAwID8gYSA6IGI7CisgICAgUmFuZ2UmIGVuZCA9IGEuY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwID8gYiA6
IGE7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoYS5vd25lckRvY3VtZW50KCksICZzdGFydC5z
dGFydENvbnRhaW5lcigpLCBzdGFydC5zdGFydE9mZnNldCgpLCAmZW5kLmVuZENvbnRhaW5lcigp
LCBlbmQuZW5kT2Zmc2V0KCkpOwogfQogCiAvLyBFeGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25zCkBA
IC0zNTYsOCArMzU1LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QKIHsKICAgICBSZWZQdHI8
UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAg
aWYgKG1hcmspIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCksIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVk
UmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOworICAgIGlmIChtYXJrICYm
IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgeworICAgICAgICBib29sIHNlbGVjdGVk
ID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1hcmssICpmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKICAg
ICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMTAsNyArMTAwOSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0CiAgICAgICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2Vz
KG1hcmsuZ2V0KCksIHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOwor
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1h
cmssICpzZWxlY3Rpb24pLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CmluZGV4IGEwMjU2YTQwMGE5M2U0Zjc2ZTg5ODE5NWQ3OGI2OGY1MTY5ODEzNjMuLmFhYTk5YThl
OGVkMTYxZDExMzIwODRiYjQyNmNkYTk2MjgyMWIzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBGb3Jt
YXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCwKICAgICBpZiAoIXJvb3QgfHwgIXJlZk5vZGUpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2socmVmTm9kZS0+dGFnUU5hbWUoKSkg
JiYgc3RhcnQgPT0gc3RhcnRPZkJsb2NrKHN0YXJ0KQotICAgICAgICAmJiAoZW5kID09IGVuZE9m
QmxvY2soZW5kKSB8fCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKHJlZk5vZGUsIHJhbmdl
LmdldCgpKSkKKyAgICAgICAgJiYgKGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkgfHwgaXNOb2RlVmlz
aWJseUNvbnRhaW5lZFdpdGhpbigqcmVmTm9kZSwgcmFuZ2UuZ2V0KCkpKQogICAgICAgICAmJiBy
ZWZOb2RlICE9IHJvb3QgJiYgIXJvb3QtPmlzRGVzY2VuZGFudE9mKHJlZk5vZGUpKSB7CiAgICAg
ICAgIC8vIEFscmVhZHkgaW4gYSBibG9jayBlbGVtZW50IHRoYXQgb25seSBjb250YWlucyB0aGUg
Y3VycmVudCBwYXJhZ3JhcGgKICAgICAgICAgaWYgKHJlZk5vZGUtPmhhc1RhZ05hbWUodGFnTmFt
ZSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNWFj
MzA3NzdlZGY4ZTZhODQ1M2FkMTc0NzM0M2I5M2I2MGI0MzU3ZC4uOGIwYjJiNTFjM2NkMjQ3YjE0
YTdjOTM2ODY0OGQ0ZGQ2NTljOGUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNw
b25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwog
ICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24u
ZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0gZWxzZSBpZiAoUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgUmFuZ2U6OkNvbXBhcmVSZXN1bHRzIGNvbXBhcmVSZXN1bHQg
PSByYW5nZS0+Y29tcGFyZU5vZGUoJm5vZGUsIGVjKTsKKyAgICAgICAgUmFuZ2U6OkNvbXBhcmVS
ZXN1bHRzIGNvbXBhcmVSZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUobm9kZSwgZWMpOwogICAg
ICAgICBpZiAoIWVjICYmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRf
QUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpKSB7CiAgICAgICAg
ICAgICAvLyBJZiB3ZSBkaWQgbm90aGluZyBoZXJlLCB3aGVuIHRoaXMgbm9kZSdzIHJlbmRlcmVy
IHdhcyBkZXN0cm95ZWQsIHRoZSByZWN0IHRoYXQgaXQgCiAgICAgICAgICAgICAvLyBvY2N1cGll
ZCB3b3VsZCBiZSBpbnZhbGlkYXRlZCwgYnV0LCBzZWxlY3Rpb24gZ2FwcyB0aGF0IGNoYW5nZSBh
cyBhIHJlc3VsdCBvZiAKQEAgLTI2MDUsNyArMjYwNSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEZy
YW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50
KSBjCiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlv
bkV4dGVuZCwgYW1vdW50KTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VP
bkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSogbm9kZSkK
K3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmIG5vZGUpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiBy
ZXN1bHRSYW5nZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgK
aW5kZXggNjliNWM5ZjgzNjkyYTIwMGY4ZGRjOTJjY2I5YzhmOTExZjI5ZmYxOC4uOTVhYzM3NzRi
ODAyNDUwZGI5ZDhmZmVkOTc5ZGQyMzhkMDVmNWUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaApAQCAtMjMwLDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50
IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gcmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoLCBOb2RlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RS
YW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICB2
b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MgPSB0cnVlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldENhcmV0Q29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggZWY0ZjYyMTkzMzllNWE2YWVj
OTkwMjk3NzhiNjg5ZTE0ZThjNmFmZS4uNmZmN2MxYWU5MDkzN2MzYjRhMzY1OTQxOWY0ZjEzOWJm
MmFiNjBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElmIHRoZSBlbnRpcmUgbGlzdCBpcyBzZWxlY3RlZCwg
dGhlbiBjb252ZXJ0IHRoZSB3aG9sZSBsaXN0LgotICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUg
JiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihsaXN0Tm9kZS5nZXQoKSwgY3VycmVudFNl
bGVjdGlvbikpIHsKKyAgICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGlzTm9kZVZpc2libHlD
b250YWluZWRXaXRoaW4oKmxpc3ROb2RlLCBjdXJyZW50U2VsZWN0aW9uKSkgewogICAgICAgICAg
ICAgYm9vbCByYW5nZVN0YXJ0SXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKGxp
c3ROb2RlLmdldCgpKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5zdGFydFBvc2l0aW9uKCk7CiAgICAg
ICAgICAgICBib29sIHJhbmdlRW5kSXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUo
bGlzdE5vZGUuZ2V0KCkpID09IGN1cnJlbnRTZWxlY3Rpb24tPmVuZFBvc2l0aW9uKCk7CiAKQEAg
LTI0Myw5ICsyNDMsOSBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xl
UGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaWYgdGhl
eSBzdGFydGVkIGluc2lkZSBsaXN0Tm9kZQogICAgICAgICAgICAgLy8gYmVjYXVzZSBtb3ZlUGFy
YWdyYXBoV2l0aENsb25lcyBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlbS4KICAgICAgICAgICAgIGlm
IChyYW5nZVN0YXJ0SXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJyZW50
U2VsZWN0aW9uLT5zZXRTdGFydChuZXdMaXN0LCAwLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRTdGFydCgqbmV3TGlzdCwgMCwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgICAgICAgICBpZiAocmFuZ2VFbmRJc0luTGlzdCAmJiBuZXdMaXN0
KQotICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZChuZXdMaXN0LCBsYXN0
T2Zmc2V0SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIGxhc3RPZmZzZXRJbk5v
ZGUobmV3TGlzdC5nZXQoKSksIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlz
dC5nZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuY3BwCmluZGV4IDc1MzY5MjAwYzI5NTViMDc1YzgzYjUwY2Q2NTcwNzc0NWNmZWM4ZjcuLmI2
OTUyZTJiODZmMTljZWM2NmRjYmFmY2U5NjYyMWI2ZDUxMTk5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE3NCw4ICsxNzQsMTMgQEAg
UGFzc1JlZlB0cjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShpbnQgY2hh
cmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmEKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNl
dFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7CisgICAgaWYgKCFwb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKwogICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCktPmNsb25lUmFu
Z2UoKTsKLSAgICByYW5nZS0+c2V0RW5kKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRp
b24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmFuZ2UtPnNldEVu
ZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJl
dHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA0ODNhNGQ0NDAwYTQ0NWY1OWEyY2M4MzRm
ZjgyZDkxN2E5NTJmZDQ2Li5mMmIyZmI3MDdmOWFiNjVmMmUzY2NkNDJkOGQ0MGI1YmIxYmJhMGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xNDc5LDggKzE0
NzksOCBAQCBSZWY8UmFuZ2U+IENoYXJhY3Rlckl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgICAg
ICBBU1NFUlQoJm5vZGUgPT0gJnJhbmdlLT5lbmRDb250YWluZXIoKSk7CiAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBtX3J1bk9mZnNldDsKLSAgICAgICAg
ICAgIHJhbmdlLT5zZXRTdGFydCgmbm9kZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIHJhbmdlLT5z
ZXRFbmQoJm5vZGUsIG9mZnNldCArIDEpOworICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KG5v
ZGUsIG9mZnNldCk7CisgICAgICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCArIDEp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByYW5nZTsKQEAgLTE1NjksOCArMTU2OSw4
IEBAIFJlZjxSYW5nZT4gQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3I6OnJhbmdlKCkgY29uc3QK
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSByLT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICAg
ICAgQVNTRVJUKCZub2RlID09ICZyLT5lbmRDb250YWluZXIoKSk7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gci0+ZW5kT2Zmc2V0KCkgLSBtX3J1bk9mZnNldDsKLSAgICAgICAgICAgIHItPnNl
dFN0YXJ0KCZub2RlLCBvZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIHItPnNldEVuZCgmbm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIHItPnNldFN0YXJ0KG5vZGUsIG9mZnNldCAtIDEpOworICAg
ICAgICAgICAgci0+c2V0RW5kKG5vZGUsIG9mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIHI7CkBAIC0yNDc5LDggKzI0NzksOCBAQCBSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRv
cjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVyTm9kZSogc2NvcGUsIGludAog
ICAgIAogICAgIC8vIEZJWE1FOiB0aGUgYXRFbmQoKSBjaGVjayBzaG91bGRuJ3QgYmUgbmVjZXNz
YXJ5LCB3b3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjI4OT4uCiAgICAgaWYgKCFyYW5nZUxvY2F0aW9uICYmICFyYW5nZUxlbmd0aCAmJiBpdC5h
dEVuZCgpKSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgmdGV4dFJ1blJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCAwKTsKLSAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgmdGV4dFJ1
blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UtPnNldFN0
YXJ0KHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoKSwgMCk7CisgICAgICAgIHJlc3VsdFJh
bmdlLT5zZXRFbmQodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwKTsKICAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0UmFuZ2UpOwogICAgIH0KIApAQCAtMjQ5OCwxMiArMjQ5OCwx
MiBAQCBSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5n
dGgoQ29udGFpbmVyTm9kZSogc2NvcGUsIGludAogICAgICAgICAgICAgICAgIGl0LmFkdmFuY2Uo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWl0LmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgUmVmPFJhbmdlPiByYW5nZSA9IGl0LnJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRl
eHRSdW5SYW5nZS0+c2V0RW5kKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZChyYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHJ1blN0YXJ0ID0gdGV4
dFJ1blJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9u
IHJ1bkVuZCA9IFZpc2libGVQb3NpdGlvbihydW5TdGFydCkubmV4dCgpLmRlZXBFcXVpdmFsZW50
KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5FbmQuaXNOb3ROdWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZChydW5FbmQuY29udGFpbmVyTm9k
ZSgpLCBydW5FbmQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKCpydW5FbmQuY29udGFpbmVyTm9kZSgp
LCBydW5FbmQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1MTIsMjQgKzI1MTIsMjQgQEAgUmVm
UHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRh
aW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAgICAgICAgIHN0YXJ0UmFuZ2VGb3VuZCA9IHRydWU7
CiAgICAgICAgICAgICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzVGV4dE5v
ZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSByYW5nZUxvY2F0aW9uIC0gZG9j
VGV4dFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCgmdGV4
dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBvZmZzZXQgKyB0ZXh0UnVuUmFuZ2UtPnN0YXJ0
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVu
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChyYW5nZUxv
Y2F0aW9uID09IGRvY1RleHRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFu
Z2UtPnNldFN0YXJ0KCZ0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5n
ZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRT
dGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+c3RhcnRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1
bHRSYW5nZS0+c2V0U3RhcnQoJnRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5S
YW5nZS0+ZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0
U3RhcnQodGV4dFJ1blJhbmdlLT5lbmRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5lbmRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRFbmQp
IHsKICAgICAgICAgICAgIGlmICh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNUZXh0
Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHJhbmdlRW5kIC0gZG9jVGV4
dFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5S
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+
c3RhcnRDb250YWluZXIoKSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRW5kID09IGRv
Y1RleHRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2UtPnNldEVuZCgm
dGV4dFJ1blJhbmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZXh0UnVuUmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQo
JnRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+
ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZG9jVGV4dFBvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjU0Miw3ICsyNTQyLDcgQEAgUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaWYgKHJhbmdlTGVuZ3RoICYmIHJhbmdlRW5k
ID4gZG9jVGV4dFBvc2l0aW9uKSAvLyByYW5nZUVuZCBpcyBvdXQgb2YgYm91bmRzCi0gICAgICAg
IHJlc3VsdFJhbmdlLT5zZXRFbmQoJnRleHRSdW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRS
dW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOworICAgICAgICByZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRS
dW5SYW5nZS0+ZW5kQ29udGFpbmVyKCksIHRleHRSdW5SYW5nZS0+ZW5kT2Zmc2V0KCkpOwogICAg
IAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdFJhbmdlKTsKIH0KQEAgLTI1NjYsNyArMjU2Niw3
IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2Rl
KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlCiAgICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgPT0gc2NvcGUpOwogICAgIGxvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwogCi0gICAgdGVzdFJhbmdlLT5zZXRFbmQoJnJhbmdl
LT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRP
ZmZzZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgPT0gc2NvcGUpOwogICAgIGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgodGVzdFJhbmdlLnB0cigpKSAtIGxvY2F0aW9uOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MjYyMyw3ICsyNjIzLDcgQEAgc3RhdGljIHNpemVfdCBmaW5kUGxhaW5UZXh0KGNvbnN0IFJhbmdl
JiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb24KIAogICAgIGlmIChidWZm
ZXIubmVlZHNNb3JlQ29udGV4dCgpKSB7CiAgICAgICAgIFJlZjxSYW5nZT4gYmVmb3JlU3RhcnRS
YW5nZSA9IHJhbmdlLm93bmVyRG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgICAgICBiZWZv
cmVTdGFydFJhbmdlLT5zZXRFbmQoJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0
T2Zmc2V0KCkpOworICAgICAgICBiZWZvcmVTdGFydFJhbmdlLT5zZXRFbmQocmFuZ2Uuc3RhcnRD
b250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSk7CiAgICAgICAgIGZvciAoU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiZWZvcmVTdGFydFJhbmdl
LmdldCgpKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFk
dmFuY2UoKSkgewogICAgICAgICAgICAgYnVmZmVyLnByZXBlbmRDb250ZXh0KGJhY2t3YXJkc0l0
ZXJhdG9yLnRleHQoKSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlci5uZWVkc01vcmVDb250ZXh0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggMmZl
MjZkN2NmMTcwZjlmZDhlZjdmZTVhOTJlNWIwODc5NTc5NjY3My4uNDIxZWUyYmUyZTE3YmQ4Yzhj
ZjZiNjFlNGJhMmJmN2Y5YWE1YTVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcApAQCAtNzMwLDI0ICs3MzAsMzIgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZFZp
c2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kUG9zaXRpb24oKSwgYWZmaW5pdHkpOwogfQogCi1i
b29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3Np
dGlvbikKK2Jvb2wgc2V0U3RhcnQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAoIXIpCisgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIGludCBjb2RlID0g
MDsKLSAgICByLT5zZXRTdGFydChwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgY29kZSk7Ci0gICAgcmV0dXJuIGNvZGUgPT0gMDsKKyAgICBpZiAoIXAuY29udGFp
bmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZWMgPSAwOworICAg
IHJhbmdlLT5zZXRTdGFydCgqcC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKKyAgICByZXR1cm4gIWVjOwogfQogCi1ib29sIHNldEVuZChSYW5nZSAqciwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCitib29sIHNldEVuZChSYW5n
ZSogcmFuZ2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewotICAg
IGlmICghcikKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBQ
b3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgaW50IGNvZGUgPSAwOwotICAgIHItPnNldEVuZChwLmNvbnRh
aW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgY29kZSk7Ci0gICAgcmV0dXJu
IGNvZGUgPT0gMDsKKyAgICBpZiAoIXAuY29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpbnQgZWMgPSAwOworICAgIHJhbmdlLT5zZXRFbmQoKnAuY29udGFpbmVy
Tm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgcmV0dXJuICFlYzsK
IH0KIAogLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRlcHJlY2F0ZWQgdG9vLCBsaWtl
IHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAKaW5kZXggN2RhNjZhMTg4NmFlZjkxNzE2NmFjNDI4YWZiYzA0N2Q0YzFm
Yjg1ZS4uZjhkOTAzM2E5YzcxYjhkNDhjNTk0NzY4YWU1ZmZjOTAzNGM2ZWQ4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0yMTMsOCArMjEzLDgg
QEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBw
b3MpCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKICAgICBQb3NpdGlvbiBzdGFydChwb3Mu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2Rl
Q29udGVudHMoYm91bmRhcnksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQu
Y29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAg
IHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKmJvdW5kYXJ5LCBlYyk7CisgICAgc2Vh
cmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggZGViNDBmZDAxYjkwOWY2
MDFiZTlkNGYxODA0OTA5ZjJmYTBjNzZmZS4uNjIyZjQzNmNlNWU3MDdkNzNmYzMxZGExNGE2MGI3
NDZjN2I0ODE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAt
NTY5LDcgKzU2OSwxMSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgIERvY3VtZW50JiBi
b3VuZGFyeURvY3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50KCk7CiAgICAgUG9zaXRpb24gc3Rh
cnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm91bmRhcnksIDApLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IHBvcy5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShib3VuZGFyeURvY3VtZW50KTsKKworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKworICAgIFJlZjxSYW5n
ZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJvdW5kYXJ5RG9jdW1lbnQpOwogICAgIAog
ICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHN1ZmZpeExlbmd0
aCA9IDA7CkBAIC01NzcsMTkgKzU4MSwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoYy5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBmb3J3
YXJkc1NjYW5SYW5nZShib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCkpOwotICAgICAgICBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoYm91bmRhcnksIGVjKTsKLSAgICAgICAgZm9y
d2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0
RW5kQWZ0ZXIoKmJvdW5kYXJ5LCBlYyk7CisgICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRT
dGFydCgqZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBlYyk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN1ZmZpeExlbmd0aEZvclJhbmdlKGZvcndh
cmRzU2NhblJhbmdlLCBzdHJpbmcpOwogICAgIH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldEVuZChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKCplbmQuZGVwcmVjYXRlZE5vZGUoKSwg
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwog
ICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2UpOworICAgIFNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UpOwogICAgIHVuc2lnbmVk
IG5leHQgPSBiYWNrd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihpdCwgc3Ry
aW5nLCBzdWZmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKIAogICAgIGlmICghbmV4dCkKQEAg
LTYwMiw3ICs2MDYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgIH0KIAogICAgIC8v
IFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBp
bnRvIGEgRE9NIHBvc2l0aW9uLgotICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJ
dCgqc2VhcmNoUmFuZ2UpOworICAgIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChz
ZWFyY2hSYW5nZSk7CiAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExl
bmd0aCAtIG5leHQpOwogICAgIC8vIEZJWE1FOiBjaGFySXQgY2FuIGdldCBvdXQgb2Ygc2hhZG93
IGhvc3QuCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjaGFySXQucmFuZ2UoKS0+ZW5kUG9z
aXRpb24oKSwgRE9XTlNUUkVBTSk7CkBAIC02MTYsNyArNjIwLDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNl
YXJjaEZ1bmMKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgRG9jdW1l
bnQmIGJvdW5kYXJ5RG9jdW1lbnQgPSBib3VuZGFyeS0+ZG9jdW1lbnQoKTsKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlYXJjaFJhbmdlKGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7CisgICAg
UmVmPFJhbmdlPiBzZWFyY2hSYW5nZSA9IGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsK
ICAgICBQb3NpdGlvbiBzdGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogCiAg
ICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CkBAIC02MjQsMjAgKzYyOCwyMiBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMs
IEJvdW5kYXJ5U2VhcmNoRnVuYwogCiAgICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3Vu
ZGFyeShjLmNoYXJhY3RlckFmdGVyKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFja3dh
cmRzU2NhblJhbmdlKGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7Ci0gICAgICAgIGJh
Y2t3YXJkc1NjYW5SYW5nZS0+c2V0RW5kKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBpZiAo
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkKKyAgICAgICAgICAgIGJhY2t3YXJkc1NjYW5SYW5nZS0+
c2V0RW5kKCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgcHJlZml4TGVuZ3RoID0gcHJlZml4
TGVuZ3RoRm9yUmFuZ2UoYmFja3dhcmRzU2NhblJhbmdlLCBzdHJpbmcpOwogICAgIH0KIAotICAg
IHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnksIElHTk9SRV9FWENFUFRJ
T04pOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBz
dGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICBU
ZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBzZWFyY2hSYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKCpib3VuZGFyeSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgaWYgKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkpCisgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLnB0cigpLCBUZXh0
SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAg
dW5zaWduZWQgbmV4dCA9IGZvcndhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3Io
aXQsIHN0cmluZywgcHJlZml4TGVuZ3RoLCBzZWFyY2hGdW5jdGlvbik7CiAgICAgCiAgICAgaWYg
KGl0LmF0RW5kKCkgJiYgbmV4dCA9PSBzdHJpbmcuc2l6ZSgpKQogICAgICAgICBwb3MgPSBzZWFy
Y2hSYW5nZS0+ZW5kUG9zaXRpb24oKTsKICAgICBlbHNlIGlmIChuZXh0ID4gcHJlZml4TGVuZ3Ro
KSB7CiAgICAgICAgIC8vIFVzZSB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0
aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0aW9uLgotICAgICAgICBDaGFyYWN0ZXJJdGVy
YXRvciBjaGFySXQoKnNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJ
dChzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMpOwogICAgICAgICBjaGFySXQuYWR2YW5jZShuZXh0IC0gcHJlZml4TGVuZ3Ro
IC0gMSk7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY2hhcmFjdGVyUmFuZ2UgPSBjaGFySXQucmFu
Z2UoKTsKICAgICAgICAgcG9zID0gY2hhcmFjdGVyUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDI5YzlhZjg1ZTBiNmVlMGEzMDQz
NWE5NmVlY2Q3MmY4NTI4MGVlNzguLmEyMzM1MTdhOGVlMWVjOTAzODU4ZWNiNTk0MzlmM2E0YTk1
MGUzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0xMTY0LDEz
ICsxMTY0LDEyIEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQg
aW5kZXgsIENvbnRhaW5lck5vZGUqIHNjb3BlKQogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSogbm9kZSwgaW50IGluZGV4
KQorVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJ
dGVyYXRvcihOb2RlJiBub2RlLCBpbnQgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwogICAg
IGlmIChpbmRleCA8PSAwKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKCZub2RlKSwgRE9XTlNU
UkVBTSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5k
b2N1bWVudCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2Rl
LmRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgSUdOT1JF
X0VYQ0VQVElPTik7CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQoKnJhbmdlKTsKICAgICBpdC5h
ZHZhbmNlKGluZGV4IC0gMSk7CkBAIC0xMTg2LDIwICsxMTg1LDE5IEBAIGJvb2wgaXNWaXNpYmx5
QWRqYWNlbnQoY29uc3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQog
CiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub2RlIGlzIGluc2lkZSBhIHJhbmdlIG9yIHZpc2li
bHkgc3RhcnRzIGFuZCBlbmRzIGF0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSByYW5nZS4KIC8vIENh
bGwgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJseSBm
aXQgaW5zaWRlIHNlbGVjdGVkUmFuZ2UKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhp
bihOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5nZSkKK2Jvb2wgaXNOb2RlVmlz
aWJseUNvbnRhaW5lZFdpdGhpbihOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogc2VsZWN0ZWRSYW5n
ZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7CiAgICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwogICAg
IC8vIElmIHRoZSBub2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNv
bnRhaW5lZCB3aXRoaW4KICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUobm9kZSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGJvb2wgc3RhcnRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJl
Zm9yZU5vZGUobm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgIGlm
IChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShub2RlKSwgc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkgPCAwKQorICAg
IGJvb2wgc3RhcnRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoJm5v
ZGUpID09IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnRJc1Zp
c3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
Jm5vZGUpLCBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgYm9vbCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFm
dGVyTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOwotICAgIGlmIChl
bmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSkpIDwgMCkKKyAgICBi
b29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCZub2RlKSA9
PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgIGlmIChlbmRJc1Zpc3VhbGx5U2Ft
ZSAmJiBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb25JblBhcmVudEJlZm9yZU5vZGUoJm5vZGUpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgcmV0dXJuIHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggYzE1NDc5Yzk2YTQwZTFlMjA5
YmE5Mjc1MGVkYTI4MjZlNmM1YjdlNy4uNDFjMDUxZDZlNjE4YWEzNTAwZDY3ZWMwZjYzNTc5M2U4
MzNhZGNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaApAQCAtMTE3LDcgKzEx
Nyw3IEBAIGJvb2wgaXNUYWJsZVN0cnVjdHVyZU5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBpc0xp
c3RFbGVtZW50KE5vZGUqKTsKIGJvb2wgaXNMaXN0SXRlbShjb25zdCBOb2RlKik7CiBib29sIGlz
Tm9kZVJlbmRlcmVkKGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdp
dGhpbihOb2RlKiwgY29uc3QgUmFuZ2UqKTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdp
dGhpbihOb2RlJiwgY29uc3QgUmFuZ2UqKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFi
bGVJbWFnZU9ySFIoY29uc3QgTm9kZSopOwogYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25z
dCBOb2RlKiwgY29uc3QgTm9kZSopOwogYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1l
bnQoY29uc3QgTm9kZSopOwpAQCAtMTk4LDcgKzE5OCw3IEBAIGludCBjb21wYXJlUG9zaXRpb25z
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFJlZlB0cjxDb250
YWluZXJOb2RlPiYgc2NvcGUpOwogaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUqLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbik7CiBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4LCBDb250YWlu
ZXJOb2RlKiBzY29wZSk7Ci1WaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhV
c2luZ0NoYXJhY3Rlckl0ZXJhdG9yKE5vZGUqLCBpbnQgaW5kZXgpOyAvLyBGSVhNRTogV2h5IGRv
IHdlIG5lZWQgdGhpcyB2ZXJzaW9uPworVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
ckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihOb2RlJiwgaW50IGluZGV4KTsgLy8gRklYTUU6
IFdoeSBkbyB3ZSBuZWVkIHRoaXMgdmVyc2lvbj8KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
SFRNTEVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRv
ck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAx
MjVjNWE5ODBjMjg0YTM5NGQwMzY0MDRhYTg1NTkwN2NhMTc1NGYwLi43M2M1ZGFjZjQ1MzRjNjg2
NmQzZDQ5OTk5N2VmMDMxODRiMDZmYzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tCkBAIC0zMTgsNyArMzE4LDcgQEAgUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmFkanVz
dGVkU2VsZWN0aW9uUmFuZ2UoKQogICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7CiAgICAgYXV0
byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlv
bkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7CiAgICAgaWYgKGVuY2xv
c2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpID49IDApCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydChlbmNsb3NpbmdBbmNob3IsIDAs
IElHTk9SRV9FWENFUFRJT04pOworICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xvc2luZ0Fu
Y2hvciwgMCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgcmV0dXJuIHJhbmdlOwogfQogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDE0
NDIyNTJiZDUyMTVkOTM1NzdlOGNmNDdiYTllNTFkNjNlMjg0MzQuLmVmMjJlNTI2YmJiYmI0YzU0
OGI5NGEwMWZlMzg5MzM3NzYzMzg0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTQxMyw3ICs0MTMsOCBAQCB2b2lkIENvbnRleHRNZW51
Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0
aW9uLCBjbwogICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29s
bGFwc2VkKCkpIHsKICAgICAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fY29udGV4dC5o
aXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCk7CiAgICAgICAg
ICAgICBzZWxlY3RlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAg
IHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCksIElH
Tk9SRV9FWENFUFRJT04pOworICAgICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoKmRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQogICAgICAg
ICBtX2NsaWVudC5zcGVhayhwbGFpblRleHQoc2VsZWN0ZWRSYW5nZS5nZXQoKSkpOwogICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBlMTE5ZjY0ZDhi
NjdmYmZmM2QxNTMwN2RmZWE4OTg2ZmYyMTY4OThiLi5mNjA1NjYxYmQ4NTNhYTc3OThiYTRlN2U1
Nzc1MWVkNzVmN2MyZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0z
OTMsMTAgKzM5MywxMyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIHIpCiAg
ICAgfQogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEp
IHsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoci0+Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnJhbmdlLCBJR05PUkVfRVhD
RVBUSU9OKSA9PSAtMSkgewogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3Vv
dXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBp
bnRlcnNlY3QuCi0gICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID4gLTEpIHsKLSAgICAg
ICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJh
bmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgeworICAgICAgICBpZiAoci0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICpyYW5nZSwgSUdOT1JFX0VY
Q0VQVElPTikgPiAtMSkgeworICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6RU5EX1RPX0VORCwgKnJhbmdlLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewog
ICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCiAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdl
LT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00
MDcsOCArNDEwLDggQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxl
Y3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2Vj
dC4KICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGlmIChyLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIGVjKSA8IDEg
JiYgIWVjKSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKKyAg
ICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAq
cmFuZ2UsIGVjKSA8IDEgJiYgIWVjKSB7CisgICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqcmFuZ2UsIElHTk9SRV9FWENFUFRJT04pID09
IC0xKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHIu
CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5nZS5nZXQoKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCAx
Y2M4Mzg0YTQ5NjFlMzg4YTNmMjFiMGNjMjRlMDIwMjNlNjU0ZjE3Li4wYzkwYjQxNGI1YTJlMDZm
MGE5OTFkNTA3Y2Q1Nzg2NjQyMjRlYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9s
bGVyLmNwcApAQCAtNzEyLDcgKzcxMiw3IEBAIHN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVu
dCYgZWxlbWVudCkKIHN0YXRpYyB2b2lkIHNlbGVjdEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudC5kb2N1bWVudCgpLmNyZWF0ZVJh
bmdlKCk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGUoJmVsZW1lbnQpOworICAgIHJhbmdlLT5zZWxl
Y3ROb2RlKGVsZW1lbnQpOwogICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDE4YzQ3NWYxZWU4MTdl
NGU1ZjE3MDJkYjNiNGZhMzk5M2UwMzQ0YmYuLjE3NTIyMzZjN2E2Nzk5MGMzZTJkYjdjY2FmM2Jl
NDRlODQzNDJjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI1MDcs
NyArMjUwNyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdlCiAgICAgICAgICAgICAgICAgLy8g
Zm9jdXNlZCBpZiB0aGUgdXNlciBkb2VzIGEgbW91c2V1cCBvdmVyIGl0LCBob3dldmVyLCBiZWNh
dXNlIHRoZSBtb3VzZXVwCiAgICAgICAgICAgICAgICAgLy8gd2lsbCBzZXQgYSBzZWxlY3Rpb24g
aW5zaWRlIGl0LCB3aGljaCB3aWxsIGNhbGwgc2V0Rm9jdXNlTm9kZUlmTmVlZGVkLgogICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKQotICAgICAgICAgICAg
ICAgICAgICAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCktPmNvbXBh
cmVOb2RlKGVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pID09IFJhbmdlOjpOT0RFX0lOU0lERQor
ICAgICAgICAgICAgICAgICAgICAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCktPmNvbXBhcmVOb2RlKCplbGVtZW50LCBJR05PUkVfRVhDRVBUSU9OKSA9PSBSYW5nZTo6
Tk9ERV9JTlNJREUKICAgICAgICAgICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50
T2YobV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
aW5kZXggOTE1M2QwNDQyYTcwNTdkNGE4MGQwNTAwM2EwMGZmMTE2Y2JjMWNlMC4uOGRmMWQzNjFm
MzZmZDQxNjVlYmExOTYzY2RlNmZmYzg0NTZmMmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC02
MzIsMTQgKzYzMiwxNCBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMgJiBCYWNrd2FyZHMp
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPiAw
OyAtLWkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIG1hdGNoUmFuZ2VzW2kgLSAxXS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFu
Z2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5n
ZXNbaSAtIDFdLCBJR05PUkVfRVhDRVBUSU9OKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAg
aW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG1hdGNoUmFuZ2VzW2ldLmdldCgpLCBJ
R05PUkVfRVhDRVBUSU9OKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5n
ZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdl
c1tpXSwgSUdOT1JFX0VYQ0VQVElPTikgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yU2VsZWN0aW9uID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMTc2ODRjNTc0
ODgzMjg5Njc2MGY0NmVlOWQxY2YxYjgwOGMzMDYyYS4uMjZlZjM3YzNkMmJmNGQwMjUxZjBkYTc1
MGM2MTAwYmVkNzliZGYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBA
IC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIGJvb2wgaGFzTm9uSW5saW5lT3JSZXBsYWNlZEVsZW1l
bnRzKGNvbnN0IFJhbmdlJiByYW5nZSkKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCghcmVuZGVyZXItPmlzSW5saW5lKCkgfHwgcmVuZGVyZXIt
PmlzUmVwbGFjZWQoKSkgJiYgcmFuZ2UuaW50ZXJzZWN0c05vZGUobm9kZSwgQVNTRVJUX05PX0VY
Q0VQVElPTikpCisgICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lubGluZSgpIHx8IHJlbmRlcmVy
LT5pc1JlcGxhY2VkKCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2RlKCpub2RlLCBBU1NFUlRfTk9f
RVhDRVBUSU9OKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCAz
MjkyMDMxOWJmMWQ5NjczMThhMzRkNjUyZjZjMWVjNWI0YWZkMTI1Li5iMzZlYTRlODk2YTVmMTdi
NWMzYjI3MjQ0NmMwZjY1MmQ4ZTVjODhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcApAQCAtNjk0LDggKzY5NCw4IEBAIHZvaWQg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBy
YW5nZU9iamVjdHMsIGNvbnN0CiAgICAgICAgICAgICBpZiAoIWJveEludGVyc2VjdHNSZWdpb24o
bG9naWNhbFRvcEZvclJlbmRlcmVyLCBsb2dpY2FsQm90dG9tRm9yUmVuZGVyZXIsIGxvZ2ljYWxU
b3BGb3JSZWdpb24sIGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24pKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kU3RhcnRQb3NpdGlvbikgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
c0Fib3ZlUmVnaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UtPmludGVy
c2VjdHNOb2RlKG5vZGUsIElHTk9SRV9FWENFUFRJT04pKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhbmdlLT5zZXRFbmRCZWZvcmUobm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlLCBJR05P
UkVfRVhDRVBUSU9OKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5k
QmVmb3JlKCpub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJhbmdlT2JqZWN0cy5hcHBlbmQocmFuZ2UtPmNsb25lUmFuZ2UoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoY29udGVudEVsZW1lbnQtPmRvY3VtZW50
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzQWJvdmVSZWdpb24gPSB0cnVlOwpA
QCAtNzAzLDcgKzcwMyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMo
VmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVjdHMsIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICBza2lwT3Zlck91dHNpZGVOb2RlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGlmIChza2lwT3Zlck91dHNpZGVOb2RlcykKLSAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0QWZ0ZXIobm9kZSwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydEFmdGVyKCpub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICAgICAgICAgICAgICBmb3VuZFN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTczMyw3ICs3MzMsNyBA
QCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgIC8vIHRoZSByYW5nZSBp
cyBjbG9zZWQuCiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0c0Fib3ZlUmVnaW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0c0Fib3ZlUmVnaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIHJhbmdlLT5zZXRTdGFydEJlZm9yZShub2RlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0QmVmb3JlKCpub2RlLCBJR05PUkVfRVhD
RVBUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
a2lwT3Zlck91dHNpZGVOb2RlcyAgPSBmYWxzZTsKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIFJl
bmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFu
Z2VPYmplY3RzLCBjb25zdAogICAgICAgICAgICAgICAgIC8vIGZvciBlbGVtZW50cyB0aGF0IGVu
ZHMgaW5zaWRlIHRoZSByZWdpb24sIHNldCB0aGUgZW5kIHBvc2l0aW9uIHRvIGJlIGFmdGVyIHRo
ZW0KICAgICAgICAgICAgICAgICAvLyBhbGxvdyB0aGlzIGVuZCBwb3NpdGlvbiB0byBiZSBjaGFu
Z2VkIG9ubHkgYnkgb3RoZXIgZWxlbWVudHMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIHRo
ZSBjdXJyZW50IGVuZCBub2RlCiAgICAgICAgICAgICAgICAgaWYgKGVuZHNCZWxvd1JlZ2lvbiB8
fCAoIWVuZHNCZWxvd1JlZ2lvbiAmJiAhbm9kZS0+aXNEZXNjZW5kYW50T2YobGFzdEVuZE5vZGUp
KSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0RW5kQWZ0ZXIobm9kZSwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmRBZnRlcigqbm9k
ZSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgICAgIGVuZHNCZWxvd1JlZ2lv
biA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBsYXN0RW5kTm9kZSA9IG5vZGU7CiAgICAg
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggMDYz
MzA3Yzk5OTM1NjQ1NDY3ZjlhMzQ5MmMwOTZjM2M0MjI1YzM5Yi4uYTcyYTBhM2Y4NTc3YzcwNjJh
ZmE5NGViMjU1NzBkNjU3ZGI4MjQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCkBAIC04NzMsMTEgKzg3MywxMyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRh
dGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBuZXdTdGFydCA9IG5ld1N0YXJ0
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIG5ld0VuZCA9IG5ld0VuZC5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5nZSgpOwotICAgIGludCBleGNlcHRp
b24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5l
d1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwotICAgIHJhbmdlLT5z
ZXRFbmQobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBS
ZWY8UmFuZ2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
UmFuZ2UoKTsKKyAgICBpZiAobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIGlu
dCBleGNlcHRpb24gPSAwOworICAgICAgICByYW5nZS0+c2V0U3RhcnQoKm5ld1N0YXJ0LmNvbnRh
aW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7
CisgICAgICAgIHJhbmdlLT5zZXRFbmQoKm5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7CisgICAgfQorICAgIHJldHVy
biBraXQocmFuZ2UucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNl
VVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcgCkBAIC0xNjI4LDExICsxNjMwLDEx
IEBAIHN0YXRpYyBXZWJGcmFtZUxvYWRUeXBlIHRvV2ViRnJhbWVMb2FkVHlwZShGcmFtZUxvYWRU
eXBlIGZyYW1lTG9hZFR5cGUpCiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybjsKIAotICAg
IE5vZGUgKm5vZGUgPSBjb3JlKGVsZW1lbnQpOworICAgIE5vZGUqIG5vZGUgPSBjb3JlKGVsZW1l
bnQpOwogICAgIGlmICghbm9kZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3RSYW5nZU9uRWxlbWVudChyYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCBub2RlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0UmFuZ2VPbkVsZW1lbnQocmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgKm5vZGUpOwog
fQogCiAtIChET01SYW5nZSAqKW1hcmtlZFRleHRET01SYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApp
bmRleCAwYzVlNTc2ZTRkNzYyZDg3NWIyYWQ2ZWViYmYxZmNmM2U0YmVlODcwLi5hNWJhODA3YjYz
NWVkOWQ2OGM1MDk3YmIyMzc5ZGEwYzIwYzExYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAt
NjExNCw3ICs2MTE0LDcgQEAgTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRp
b24oRnJhbWUqIHRhcmdldEZyYW1lLCBJTUVDSEFSUE9TSVRJT04qIGMKICAgICBpZiAoUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpID8g
dGFyZ2V0RnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSA6IHRhcmdldEZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9IHJh
bmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgIHRlbXBSYW5nZS0+c2V0U3RhcnQoJnRlbXBSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgdGVtcFJhbmdlLT5zdGFydE9mZnNldCgpICsgY2hhclBvcy0+
ZHdDaGFyUG9zLCBlYyk7CisgICAgICAgIHRlbXBSYW5nZS0+c2V0U3RhcnQodGVtcFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCB0ZW1wUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0No
YXJQb3MsIGVjKTsKICAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RS
ZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRG
cmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9N
UmFuZ2UubW0KaW5kZXggZTA4MDZiY2I2YTc3MzRlMmQzNDQxNDk1YjE0ZWQ2ZmIyN2QyMjQ5OS4u
OTNlODQ5ZjYzYjE0YjJkYzRkNWE5NTQ5NDcxMWYxMDM1MTVlZGY2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2Uu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLRE9NUmFuZ2UubW0KQEAgLTY1LDE2ICs2NSwyMCBAQAogCiAtICh2b2lkKXNldFN0YXJ0OihX
S0RPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldAogeworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgYWJvdXQgdGhlIGV4Y2Vw
dGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBfaW1wbC0+c2V0
U3RhcnQoV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUpLCBvZmZzZXQsIGVjKTsKKyAgICBfaW1w
bC0+c2V0U3RhcnQoKldlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zmc2V0LCBlYyk7CiB9
CiAKIC0gKHZvaWQpc2V0RW5kOihXS0RPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldAog
eworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyBzb21l
dGhpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBfaW1wbC0+c2V0RW5kKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwgb2Zm
c2V0LCBlYyk7CisgICAgX2ltcGwtPnNldEVuZCgqV2ViS2l0Ojp0b1dlYkNvcmVOb2RlKG5vZGUp
LCBvZmZzZXQsIGVjKTsKIH0KIAogLSAodm9pZCljb2xsYXBzZTooQk9PTCl0b1N0YXJ0CkBAIC04
NCwxNiArODgsMjAgQEAKIAogLSAodm9pZClzZWxlY3ROb2RlOihXS0RPTU5vZGUgKilub2RlCiB7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIF9pbXBsLT5zZWxlY3ROb2RlKFdlYktpdDo6dG9XZWJDb3JlTm9kZShub2RlKSwg
ZWMpOworICAgIF9pbXBsLT5zZWxlY3ROb2RlKCpXZWJLaXQ6OnRvV2ViQ29yZU5vZGUobm9kZSks
IGVjKTsKIH0KIAogLSAodm9pZClzZWxlY3ROb2RlQ29udGVudHM6KFdLRE9NTm9kZSAqKW5vZGUK
IHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgX2ltcGwtPnNlbGVjdE5vZGVDb250ZW50cyhXZWJLaXQ6OnRvV2ViQ29yZU5v
ZGUobm9kZSksIGVjKTsKKyAgICBfaW1wbC0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpXZWJLaXQ6OnRv
V2ViQ29yZU5vZGUobm9kZSksIGVjKTsKIH0KIAogLSAoV0tET01Ob2RlICopc3RhcnRDb250YWlu
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmlu
ZGV4IGFhMjc0YmFhMWNjODkwOTcyNThkMTFhMjcwZDRhMDM4N2Y5YjdiMjcuLmRiMjJmMWU1ZGMx
ZTM1YWFiNTA3OTBjMTI5OGExZjM0ZTAzNGNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIFN0cmluZyBX
ZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZygpIGNvbnN0CiAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnRFbGVtZW50LmdldCgpLCBlYyk7CisgICAg
cmFuZ2UtPnNlbGVjdE5vZGUoKmRvY3VtZW50RWxlbWVudCwgZWMpOwogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggYmE3MGEwMTMzZDdmNmMzNzk4ZmM2
MWYyYmU4YzEzYzdjOThkNDZmYi4uMjkwYzkwNTIwNGRmMGQ5MDBhNjQ1MDQ2N2VhM2NhZjU5ZjEx
ODc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQpAQCAtOTQwLDcgKzk0MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBh
Z2U6OnJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9pbnQs
CiAKICAgICBmbGFncyA9IElzQmxvY2tTZWxlY3Rpb247CiAgICAgcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGJlc3RDaG9pY2UtPmRvY3VtZW50KCkpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVu
dHMoYmVzdENob2ljZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgcmFuZ2UtPnNlbGVjdE5v
ZGVDb250ZW50cygqYmVzdENob2ljZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgcmV0dXJu
IHJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByYW5nZTsKIH0KIApAQCAtOTY0LDcgKzk2
NCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yQmxvY2tBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRvY3VtZW50KCkpOwotICAgIHJhbmdlLT5z
ZWxlY3ROb2RlQ29udGVudHMoY3VycmVudE5vZGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAg
IHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKmN1cnJlbnROb2RlLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKQEAgLTEyMjAsOCArMTIyMCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb250YWluc1JhbmdlKFJhbmdlKiBmaXJzdCwgUmFuZ2UqIHNlY29uZCkK
ICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gKGZpcnN0LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3VtZW50KCkg
PT0gc2Vjb25kLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpLT5vd25lckRvY3VtZW50KCkKLSAg
ICAgICAgJiYgZmlyc3QtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIHNlY29uZCwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMAotICAgICAgICAmJiBmaXJzdC0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBzZWNvbmQsIEFTU0VSVF9O
T19FWENFUFRJT04pID49IDApOworICAgICAgICAmJiBmaXJzdC0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnNlY29uZCwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PD0gMAorICAgICAgICAmJiBmaXJzdC0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCAqc2Vjb25kLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA+PSAwKTsKIH0KIAogc3RhdGlj
IGlubGluZSBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlKiByYW5nZUEsIFJhbmdl
KiByYW5nZUIpCkBAIC0xMjMxLDggKzEyMzEsOCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxSYW5n
ZT4gdW5pb25ET01SYW5nZXMoUmFuZ2UqIHJhbmdlQSwgUmFuZ2UqIHJhbmdlQikKICAgICBpZiAo
IXJhbmdlQSkKICAgICAgICAgcmV0dXJuIHJhbmdlQjsKIAotICAgIFJhbmdlKiBzdGFydCA9IHJh
bmdlQS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2VC
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwID8gcmFuZ2VBIDogcmFuZ2VCOwotICAgIFJhbmdl
KiBlbmQgPSByYW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwg
cmFuZ2VCLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8PSAwID8gcmFuZ2VCIDogcmFuZ2VBOworICAg
IFJhbmdlKiBzdGFydCA9IHJhbmdlQS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19TVEFSVCwgKnJhbmdlQiwgQVNTRVJUX05PX0VYQ0VQVElPTikgPD0gMCA/IHJhbmdlQSA6
IHJhbmdlQjsKKyAgICBSYW5nZSogZW5kID0gcmFuZ2VBLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZUIsIEFTU0VSVF9OT19FWENFUFRJT04pIDw9IDAgPyBy
YW5nZUIgOiByYW5nZUE7CiAKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShyYW5nZUEtPm93bmVy
RG9jdW1lbnQoKSwgJnN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQo
KSwgJmVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOwogfQpAQCAtMjIzMiw3
ICsyMjMyLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IElu
dFBvaW50JiBwb2ludCwgSW50ZXJhY3Rpb25JbmZvcm1hdGkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm8uZGF0YURldGVjdG9yUmVzdWx0cyA9IGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUo
KS0+ZGF0YURldGVjdGlvblJlc3VsdHMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChE
YXRhRGV0ZWN0aW9uOjpyZXF1aXJlc0V4dGVuZGVkQ29udGV4dCgqZWxlbWVudCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGxpbmtSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua1JhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1JhbmdlLT5zZWxlY3ROb2RlQ29u
dGVudHMoKmVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm8udGV4dEJlZm9yZSA9IHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFj
ZShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShsaW5r
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0
aCwgRGlyZWN0aW9uQmFja3dhcmQpLmdldCgpLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8udGV4dEFmdGVyID0gcGxh
aW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRp
cmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5nZS0+ZW5kUG9zaXRpb24oKSwgZGF0YURldGVj
dGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uRm9yd2FyZCkuZ2V0KCksIFRleHRJ
dGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>