<?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>137241</bug_id>
          
          <creation_ts>2014-09-29 18:08:49 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for Element</short_desc>
          <delta_ts>2014-09-30 12:59:59 -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>DOM</component>
          <version>528+ (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>
          <dependson>137056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1038119</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-29 18:08:49 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for Element instead of isElementNode() / toElement().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038123</commentid>
    <comment_count>1</comment_count>
      <attachid>238900</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-29 18:28:25 -0700</bug_when>
    <thetext>Created attachment 238900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038124</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 18:31:05 -0700</bug_when>
    <thetext>Attachment 238900 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:914:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLTextFormControlElement.h:156:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 108 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038127</commentid>
    <comment_count>3</comment_count>
      <attachid>238901</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-29 19:05:56 -0700</bug_when>
    <thetext>Created attachment 238901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038128</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 19:09:18 -0700</bug_when>
    <thetext>Attachment 238901 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:914:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLTextFormControlElement.h:156:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 108 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038138</commentid>
    <comment_count>5</comment_count>
      <attachid>238905</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-29 20:22:28 -0700</bug_when>
    <thetext>Created attachment 238905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038139</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 20:24:20 -0700</bug_when>
    <thetext>Attachment 238905 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:914:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/html/HTMLTextFormControlElement.h:156:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/editing/CompositeEditCommand.cpp:1352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 108 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038287</commentid>
    <comment_count>7</comment_count>
      <attachid>238905</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-09-30 12:22:11 -0700</bug_when>
    <thetext>Comment on attachment 238905
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038309</commentid>
    <comment_count>8</comment_count>
      <attachid>238905</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 12:59:54 -0700</bug_when>
    <thetext>Comment on attachment 238905
Patch

Clearing flags on attachment: 238905

Committed r174117: &lt;http://trac.webkit.org/changeset/174117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038310</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 12:59:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238900</attachid>
            <date>2014-09-29 18:28:25 -0700</date>
            <delta_ts>2014-09-29 19:05:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137241-20140929182826.patch</filename>
            <type>text/plain</type>
            <size>212618</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFiZDhkN2UxMGU4OTFh
NWVkY2UwZDcyNDJmODRkMjU4NDE5MGJiOC4uMGIzNGY0YzhmNWQwZDdlOTA3ZjQ2OTMzNzg4NDll
MzM0ZTI1MzJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NCBAQAorMjAxNC0wOS0yOSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQgaW5zdGVh
ZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzUm9sZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJlZ2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlTWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51
TGlzdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6bmF0aXZlQWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpjbGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmhlbHBUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhhbmRsZUFjdGl2ZURl
c2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0
c1ByZXNlbnRhdGlvbmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRBY2Nlc3NpYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdSb2xlRm9yTVNBQSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0b25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6cHJlc3MpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp3cmFw
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNSZWFjaGFibGVGcm9tRE9NKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnN0eWxlZE5vZGUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lSZW5kZXJU
cmVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6bm90aWZ5Q2hp
bGRSZW1vdmVkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeURlc2Nl
bmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVS
ZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5RGVzY2VuZGFu
dFJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRDb25uZWN0ZWRTdWJy
YW1lQ291bnRJc0NvbnNpc3RlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFu
Z3VhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBh
cmVudEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50VHJhdmVyc2FsLmg6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVk
b0F3YXJlUHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3JtYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXB1dGVkU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmlzRXF1YWxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRGVm
YXVsdE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VQ
cmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3Np
bmdMaW5rRXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFuZGxl
TG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6d2lsbFJlc3BvbmRUb01vdXNl
TW92ZUV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cyk6CisgICAgICAgICogZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6bm9kZUNhbkJlRGlzdHJp
YnV0ZWQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6ZWxlbWVudCk6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9TaGFk
b3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzaGFkb3dSb290KToKKyAgICAgICAg
KiBkb20vU3RhdGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxp
c3Q6Om5hbWVkSXRlbSk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3Vz
SWZJZGVudGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdl
RW5kV2l0aE5leHRJZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVt
b3ZhYmxlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNs
b25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9Q
cmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQpOgorICAgICAg
ICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmluZ05vZGVSZW1vdmVz
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjpwYWludENhcmV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKToKKyAgICAgICAg
KiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXApOgorICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbmRUYWcpOgorICAgICAgICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
aGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZSk6
CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNo
ZXM6OnByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hl
czo6Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjph
Z2dyZWdhdGVkQXR0cmlidXRlc0ZvckFuY2VzdG9ycyk6CisgICAgICAgIChIVE1MQ29udmVydGVy
OjphZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMpOgorICAgICAg
ICAoSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRp
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5n
VGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0FuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6YXJlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmRl
cHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
bmRlcmVyRm9yQ2FyZXRQYWludGluZyk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXBJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVGcmFnbWVudEZyb21UZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxEZXRhaWxz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWxzU3VtbWFyeUVsZW1lbnQ6OmZh
bGxiYWNrU3VtbWFyeSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNIVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1l
ZEl0ZW0pOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxTdW1tYXJ5
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NsaWNrYWJsZUNvbnRyb2wpOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjphdHRhY2hMYXRlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxl
bWVudCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6ZWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
SW5zZXJ0aW9uUG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudEVsZW1lbnRGb3JEaXN0
cmlidXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdE9mUGFyZW50Rm9yRGlzdHJp
YnV0aW9uKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6bWFya0Z1dHVyZUFuZFBhc3ROb2Rlcyk6
CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVp
bGRBcnJheUZvclJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OnJlc2V0UHNldWRvU3RhdGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmls
aXR5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVG
aW5kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNo
VXNpbmdET01UcmVlVHJhdmVyc2FsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dCk6CisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50
VW5kZXJNb3VzZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZERyb3Bab25lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRh
dGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdh
dGlvblNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2Fi
bGVTaGFkb3dIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlRWxlbWVudEFjcm9z
c0ZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRWxl
bWVudFdpdGhFeGFjdFRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRFbGVtZW50V2l0
aEdyZWF0ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0VsZW1lbnRXaXRo
TG93ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6Om5leHRG
b2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6cHJl
dmlvdXNGb2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemVGcmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Ojppbm5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6aW5uZXJOb25TaGFyZWRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNP
cGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bGVtZW50Ojpub25Qc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OmdlbmVyYXRpbmdFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UnVieS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpub2RlSGFzQ2xhc3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6Y29udGFpbmVyQ29udGFpbnNPbmVPZlRhZ3MpOgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNv
bHZlVHJlZSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUpOgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiB4
bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6
OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBh
dGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpub2RlTWF0Y2hlc0Jhc2ljVGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOgorICAgICAg
ICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKwogMjAxNC0wOS0yOSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlzPD4o
KSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZkOGVi
ZTNmODk4N2Y2M2YxMWE2ODA2MWFhYTIyMjE1OGMxNjQ4Li4wNzk3YjNkN2ZjNWQ5YzY0ZDZlNGQ4
MTI2ZWI0NWQwZjNhNWE2MWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
aXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBF
bGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAgICAgICAgdG9FbGVtZW50KCku
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tOgorICAgICAgICAoK1tXZWJS
ZW5kZXJMYXllciBuYW1lRm9yTGF5ZXI6XSk6CisKIDIwMTQtMDktMjggIEd5dXlvdW5nIEtpbSAg
PGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIENvbG9ySW5wdXRUeXBl
IGNsYXNzIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGY2NzEyZmU5NmY0
Yjk5YTc4NGE5ODAzYmEwZTFiMjA4M2ViNGY3NzcuLjI2OTBkYzE0OTU0NjRlYjM0NjAzNzdkZDQx
ODEyNjYwZDllOTQxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0w
OS0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+
KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1l
bnQgaW5zdGVhZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKwor
ICAgICAgICAqIERPTUV2ZW50c0NsYXNzZXMuY3BwOgorICAgICAgICAoRE9NTW91c2VFdmVudDo6
dG9FbGVtZW50KToKKyAgICAgICAgKiBET01FdmVudHNDbGFzc2VzLmg6CisKIDIwMTQtMDktMjkg
IENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8
PigpIC8gZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNz
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCA2NWI1NjkzNmE5MWQ4NDkzNWYzNTYzYWVkNzRlZTc1ZWQ5MDg2YjNl
Li43NDg1MjM4Njk2NmRiM2FlNWQ3Y2JiMWNkZjliZTUxZGNhNmE5ZWVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFbGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAg
ICAgICAgdG9FbGVtZW50KCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmplY3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQu
bW06CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBoYXNBdHRyaWJ1dGU6XSk6CisgICAgICAgICgt
W1dLRE9NRWxlbWVudCBnZXRBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBz
ZXRBdHRyaWJ1dGU6dmFsdWU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCB0YWdOYW1lXSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjplbGVtZW50Qm91bmRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlSGl0VGVzdFJlc3VsdDo6bWVkaWFUeXBlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbmRU
YXBIaWdobGlnaHRGb3JOb2RlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpibHVyQXNzaXN0ZWROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRp
b25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om5leHRGb2N1c2FibGVFbGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKwogMjAxNC0wOS0y
OSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlz
PD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDY3NDc1YzI3YmZjMDE1Nzg1YjlhMGMx
MWMwNTFmYWUzM2ZjOGFmOGUuLjZkMmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVh
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cApAQCAtMjUzLDEwICsyNTMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNo
ZTo6Z2V0KE5vZGUqIG5vZGUpCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFrZSBhIGNvbnN0IGNo
YXIqLCBidXQgb25lIGNhbGxlciBwYXNzZXMgbnVsbEF0b20uCiBib29sIG5vZGVIYXNSb2xlKE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiByb2xlVmFsdWUgPSB0b0VsZW1lbnQo
bm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0dHIpOworICAgIGF1dG8mIHJvbGVWYWx1ZSA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKICAg
ICBpZiAocm9sZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHJvbGVWYWx1ZS5pc0VtcHR5KCk7
CiAgICAgaWYgKHJvbGVWYWx1ZS5pc0VtcHR5KCkpCkBAIC0yOTQsNyArMjk0LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTVkdSb290Ojpj
cmVhdGUocmVuZGVyZXIpOwogICAgIAogICAgIC8vIFNlYXJjaCBmaWVsZCBidXR0b25zCi0gICAg
aWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKKyAgICBpZiAobm9kZSAmJiBpczxFbGVt
ZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbjo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICBpZiAocmVuZGVyZXIt
PmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtNjUzLDEwICs2NTMsMTAgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKE5vZGUqIG5vZGUpCiAgICAgCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlh
X2xpdmVBdHRyKTsKICAgICBpZiAobGl2ZVJlZ2lvblN0YXR1cy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhUm9sZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUocm9sZUF0dHIpOwpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlTWVudUl0ZW1TZWxlY3RlZChOb2RlKiBub2RlKQogICAgIGlmICghbm9kZUhhc1JvbGUobm9k
ZSwgIm1lbnVpdGVtIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbXJhZGlvIikgJiYg
IW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbWNoZWNrYm94IikpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+Zm9jdXNlZCgpICYmICFlcXVhbElnbm9y
aW5nQ2FzZSh0b0VsZW1lbnQobm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0
dHIpLCAidHJ1ZSIpKQorICAgIGlmICghZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzZWQo
KSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRB
dHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0dHIpLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgcG9zdE5vdGlmaWNhdGlvbihnZXRPckNyZWF0ZShub2RlKSwgJmRvY3VtZW50KCks
IEFYTWVudUxpc3RJdGVtU2VsZWN0ZWQpOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgdm9pZCBBWE9i
amVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0
YSYgdGV4dE1hcmtlckQKIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRh
YmxlRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGNvbnN0IEVsZW1lbnQqIHJlc3Vs
dCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpOworICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pihu
b2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwog
CiAgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKG5vZGVJc1RleHRDb250cm9sKGVsZW1lbnQpKQpAQCAtMTA3Myw4ICsx
MDczLDggQEAgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKiBub2RlKQogICAgIC8vIFRvIGRl
dGVybWluZSBpZiBhIG5vZGUgaXMgQVJJQSB2aXNpYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBw
YXJlbnQgaGllcmFyY2h5IHRvIHNlZSBpZiBhbnlvbmUgc3BlY2lmaWVzCiAgICAgLy8gYXJpYS1o
aWRkZW4gZXhwbGljaXRseS4KICAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVzdE5v
ZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAodGVz
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhcmlhSGlkZGVuVmFsdWUgPSB0b0VsZW1lbnQodGVzdE5vZGUpLT5mYXN0R2V0QXR0cmlidXRl
KGFyaWFfaGlkZGVuQXR0cik7CisgICAgICAgIGlmIChpczxFbGVtZW50Pih0ZXN0Tm9kZSkpIHsK
KyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUhpZGRlblZhbHVlID0gZG93bmNh
c3Q8RWxlbWVudD4oKnRlc3ROb2RlKS5mYXN0R2V0QXR0cmlidXRlKGFyaWFfaGlkZGVuQXR0cik7
CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJpYUhpZGRlblZhbHVlLCAiZmFs
c2UiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhcmlhSGlkZGVuVmFsdWUsICJ0cnVlIikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKaW5kZXgg
MDRjNzk4N2Y1ZTg5MmE1ZTlhYmQ4YTBkNWFlOTg4MWM4YzZhNWY5My4uNmUyY2U1NGMyZmUxYTdh
MmM5NjcwOTU4ODAzNjg1MDVjYzdiNmQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcApAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNv
bnN0CiAgICAgaWYgKCFub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biAhdG9FbGVtZW50KG5vZGUoKSktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOworICAgIHJldHVy
biAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUoKSkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24oaW50
IG9wdGlvbkluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAwMjYyZmZkOGE4Mjg0ZGI3NzZmMzli
OWIzNzM0MDY3Mzc1Yjc1ZTk5Li45MGQ2MzZlMDAxY2Q5ZWFkYjNkNDdjYzM5M2NkYjM2ZDdjNmIw
NDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIEFjY2Vzc2liaWxpdHlS
b2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgp
CiAgICAgICAgIHJldHVybiBQYXJhZ3JhcGhSb2xlOwogICAgIGlmIChpczxIVE1MTGFiZWxFbGVt
ZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gTGFiZWxSb2xlOwotICAgIGlmIChub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSgpKS0+aXNGb2N1c2FibGUoKSkKKyAg
ICBpZiAoaXM8RWxlbWVudD4obm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSgpKS5p
c0ZvY3VzYWJsZSgpKQogICAgICAgICByZXR1cm4gR3JvdXBSb2xlOwogICAgIAogICAgIHJldHVy
biBVbmtub3duUm9sZTsKQEAgLTQ0MSw5ICs0NDEsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdAogewog
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5o
YXNUYWdOYW1lKGNhbnZhc1RhZykpCisgICAgaWYgKCFub2RlIHx8ICFpczxIVE1MQ2FudmFzRWxl
bWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50JiBjYW52YXNF
bGVtZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFz
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pigqbm9kZSk7CiAgICAgLy8gSWYg
aXQgaGFzIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbGVtZW50cywgd2UnbGwgYXNzdW1lIGl0IG1p
Z2h0IGJlIGZhbGxiYWNrCiAgICAgLy8gY29udGVudC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuIG9y
IGl0cyBvbmx5IGNoaWxkcmVuIGFyZSBub3QgZWxlbWVudHMKICAgICAvLyAoZS5nLiBqdXN0IHRl
eHQgbm9kZXMpLCBpdCBkb2Vzbid0IGhhdmUgZmFsbGJhY2sgY29udGVudC4KQEAgLTY0MiwxMCAr
NjQyLDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCgpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9k
ZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICgh
bm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cmV0dXJuICF0b0VsZW1lbnQobm9kZSktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOworICAgIHJl
dHVybiAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25z
dApAQCAtNjc3LDkgKzY3Nyw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJl
c3NlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+YWN0aXZlKCk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5hY3RpdmUoKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKQEAgLTcxOSw3ICs3MTks
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQoKSBjb25zdAogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG5vZGUtPmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhvdmVyZWQoKTsKKyAgICByZXR1cm4g
aXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhvdmVyZWQoKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBj
b25zdApAQCAtOTY1LDcgKzk2NSw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphbmNob3JFbGVtZW50KCkgY29uc3QKICAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBh
bnkgbm9uLWltYWdlIHdpdGggYW4gYW5jaG9yIGlzIGFuIEhUTUxBbmNob3JFbGVtZW50CiAgICAg
Zm9yICggOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChp
czxIVE1MQW5jaG9yRWxlbWVudD4obm9kZSkgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUt
PmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKLSAgICAgICAgICAg
IHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OTQsNyArOTk0
LDcgQEAgc3RhdGljIEVsZW1lbnQqIG5hdGl2ZUFjdGlvbkVsZW1lbnQoTm9kZSogc3RhcnQpCiAg
ICAgCiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChpc05vZGVBY3Rpb25F
bGVtZW50KGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQoY2hpbGQpOworICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKTsKIAogICAgICAgICBpZiAo
RWxlbWVudCogc3ViQ2hpbGQgPSBuYXRpdmVBY3Rpb25FbGVtZW50KGNoaWxkKSkKICAgICAgICAg
ICAgIHJldHVybiBzdWJDaGlsZDsKQEAgLTEwMDksMTAgKzEwMDksMTAgQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjdGlvbkVsZW1lbnQoKSBjb25zdAogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGlmIChpc05vZGVBY3Rpb25FbGVtZW50KG5vZGUpKQotICAgICAg
ICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiAgICAgCiAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0
KGFyaWFSb2xlQXR0cmlidXRlKCkpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAKICAgICBzd2l0Y2ggKHJv
bGVWYWx1ZSgpKSB7CiAgICAgY2FzZSBCdXR0b25Sb2xlOgpAQCAtMTAyNiw3ICsxMDI2LDcgQEAg
RWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjdGlvbkVsZW1lbnQoKSBjb25zdAog
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXV0aG9yIGlzIGhpZGluZyB0aGUgcmVhbCBjb250cm9s
IGVsZW1lbnQgaW5zaWRlIHRoZSBBUklBIGVsZW1lbnQuCiAgICAgICAgIGlmIChFbGVtZW50KiBu
YXRpdmVFbGVtZW50ID0gbmF0aXZlQWN0aW9uRWxlbWVudChub2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBuYXRpdmVFbGVtZW50OwotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgRWxlbWVudCogQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6Om1vdXNlQnV0dG9uTGlzdGVuZXIoTW91c2VCdXR0b25MaXN0ZW5lclJl
c3VsdEYKIAogICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBidXR0b24gbGlz
dGVuZXIKICAgICAvLyBGSVhNRTogRG8gdGhlIGNvbnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBhbmNo
b3JFbGVtZW50IGRvZXMKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50TGluZWFnZShu
b2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQobm9kZSkgOiBub2RlLT5wYXJlbnRFbGVt
ZW50KCkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVhZ2UoaXM8RWxl
bWVudD4obm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVsZW1l
bnQoKSkpIHsKICAgICAgICAgLy8gSWYgd2UndmUgcmVhY2hlZCB0aGUgYm9keSBhbmQgdGhpcyBp
cyBub3QgYSBjb250cm9sIGVsZW1lbnQsIGRvIG5vdCBleHBvc2UgcHJlc3MgYWN0aW9uIGZvciB0
aGlzIGVsZW1lbnQgdW5sZXNzIGZpbHRlciBpcyBJbmNsdWRlQm9keUVsZW1lbnQuCiAgICAgICAg
IC8vIEl0IGNhbiBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMsIHdoZXJlIGV2ZXJ5IHBpZWNlIG9mIHRl
eHQgaXMgbGFiZWxlZCBhcyBhY2NlcHRpbmcgcHJlc3MgYWN0aW9ucy4KICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShib2R5VGFnKSAmJiBpc1N0YXRpY1RleHQoKSAmJiBmaWx0ZXIgPT0g
RXhjbHVkZUJvZHlFbGVtZW50KQpAQCAtMTI1Myw4ICsxMjUzLDcgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dChWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+
JiB0ZXh0T3IKICAgICAKICAgICBib29sIGlzSW5wdXRUYWcgPSBpczxIVE1MSW5wdXRFbGVtZW50
Pihub2RlKTsKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FS
SUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0NvbnRyb2woKSkgewotICAgICAgICBI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkp
OwotICAgICAgICBpZiAobGFiZWwpIHsKKyAgICAgICAgaWYgKEhUTUxMYWJlbEVsZW1lbnQqIGxh
YmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkgewogICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGFiZWxPYmplY3QgPSBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKGxhYmVsKTsKICAgICAgICAgICAgIFN0cmluZyBpbm5lclRleHQgPSBsYWJl
bC0+aW5uZXJUZXh0KCk7CiAgICAgICAgICAgICAvLyBPbmx5IHVzZSB0aGUgPGxhYmVsPiB0ZXh0
IGlmIHRoZXJlJ3Mgbm8gQVJJQSBvdmVycmlkZS4KQEAgLTE1MzIsMjEgKzE1MzEsMjIgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiBkZXNjcmliZWRCeTsKICAgICAKICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKTsKLSAgICBmb3IgKE5vZGUqIGN1cnIgPSBub2RlOyBjdXJyOyBj
dXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5pc0hUTUxFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IHRvRWxl
bWVudChjdXJyKS0+Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICBmb3IgKE5vZGUqIGFu
Y2VzdG9yID0gbm9kZTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUo
KSkgeworICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yKSkgeworICAgICAgICAg
ICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmFuY2VzdG9y
KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IGVsZW1lbnQuZ2V0
QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKICAgICAgICAgICAgIGlmICghc3VtbWFyeS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgaGVscCB0ZXh0
IHVubGVzcyBpdCBpcyBhbHJlYWR5IGJlaW5nIHVzZWQgYXMgZGVzY3JpcHRpdmUgdGV4dC4KLSAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSB0b0VsZW1lbnQoY3VyciktPmdl
dEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0
aXRsZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAgICBpZiAo
IXRpdGxlLmlzRW1wdHkoKSAmJiBkZXNjcmlwdGlvbiAhPSB0aXRsZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdGl0bGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE9ubHkgdGFr
ZSBoZWxwIHRleHQgZnJvbSBhbiBhbmNlc3RvciBlbGVtZW50IGlmIGl0cyBhIGdyb3VwIG9yIGFu
IHVua25vd24gcm9sZS4gSWYgaGVscCB3YXMgCiAgICAgICAgIC8vIGFkZGVkIHRvIHRob3NlIGtp
bmRzIG9mIGVsZW1lbnRzLCBpdCBpcyBsaWtlbHkgaXQgd2FzIG1lYW50IGZvciBhIGNoaWxkIGVs
ZW1lbnQuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShjdXJyKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhP
YmogPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGFuY2VzdG9yKTsKICAgICAgICAgaWYg
KGF4T2JqKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXhPYmotPnJv
bGVWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKHJvbGUgIT0gR3JvdXBSb2xlICYmIHJvbGUgIT0g
VW5rbm93blJvbGUpCkBAIC0xNTYwLDEwICsxNTYwLDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
IGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhcmlhTGV2ZWwgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRy
KTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxldmVsID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRl
KGFyaWFfbGV2ZWxBdHRyKTsKICAgICBpZiAoIWFyaWFMZXZlbC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBhcmlhTGV2ZWwudG9JbnQoKTsKICAgICAKQEAgLTE3MDUsNyArMTcwNSw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAogICAgIH0KIAogICAg
IGlmIChpc0lucHV0VGFnIHx8IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFS
b2xlQXR0cmlidXRlKCkpIHx8IGlzQ29udHJvbCgpKSB7Ci0gICAgICAgIEhUTUxMYWJlbEVsZW1l
bnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHRvRWxlbWVudChub2RlKSk7CisgICAgICAgIEhU
TUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpKTsKICAgICAgICAgLy8gVXNlIHRoZSBsYWJlbCB0ZXh0IGFzIHRoZSB0aXRsZSBpZiAx
KSB0aGUgdGl0bGUgZWxlbWVudCBpcyBOT1QgYW4gZXhwb3NlZCBlbGVtZW50IGFuZCAyKSB0aGVy
ZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCiAgICAgICAgIGlmIChsYWJlbCAmJiAhZXhwb3Nlc1RpdGxl
VUlFbGVtZW50KCkgJiYgIWFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKS5sZW5ndGgoKSkK
ICAgICAgICAgICAgIHJldHVybiBsYWJlbC0+aW5uZXJUZXh0KCk7CkBAIC0xNzcxLDcgKzE3NzEs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHQoKSBjb25zdAogICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAg
ICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5pbm5lclRleHQoKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudD4obm9kZSktPmlubmVyVGV4dCgpOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgY29uc3QKQEAgLTE4NDMsMTUgKzE4NDMsMTUgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIsIGludCYgZywg
aW50JiBiKSBjb25zdAogc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSog
bm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1l
bnQobm9kZSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGFiZWwgPSBlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxh
YmVsID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKICAgICBpZiAo
IWFyaWFMYWJlbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhcmlhTGFiZWw7CiAgICAgCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFs
dEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gZWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKGFsdEF0dHIpOwogICAgIGlmICghYWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGFsdDsKIApAQCAtMTg3MiwxMiArMTg3MiwxMiBAQCBzdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVO
YW1lRm9yTm9kZShOb2RlKiBub2RlKQogICAgICAgICBpZiAoYXhPYmplY3QtPmFjY2Vzc2libGVO
YW1lRGVyaXZlc0Zyb21Db250ZW50KCkpCiAgICAgICAgICAgICB0ZXh0ID0gYXhPYmplY3QtPnRl
eHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKEFjY2Vzc2li
aWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZTo6VGV4dFVuZGVyRWxlbWVudE1vZGVJbmNsdWRlTmFt
ZUZyb21Db250ZW50c0NoaWxkcmVuLCB0cnVlKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHRleHQg
PSBlbGVtZW50LT5pbm5lclRleHQoKTsKKyAgICAgICAgdGV4dCA9IGVsZW1lbnQuaW5uZXJUZXh0
KCk7CiAKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdGV4dDsKICAg
ICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZSh0aXRsZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBlbGVtZW50
LmZhc3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgIApAQCAtMTk0MywxNSArMTk0MywxNSBAQCBib29s
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAg
IEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAKLSAgICBpZiAo
ZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQuaXNEaXNh
YmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBl
bGVtZW50LT5zdXBwb3J0c0ZvY3VzKCk7CisgICAgcmV0dXJuIGVsZW1lbnQuc3VwcG9ydHNGb2N1
cygpOwogfQogCiBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0
ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMmNmNDBjM2JlZDEx
ZTUxNDYxYzhkYzhlYTA2NDBjMDY0NWJhZTFhMy4uOTE0ZGJkZGE3Mjk5YTY1Nzk2MGIzNjE1ZDBl
MGI2ZmViMjllYmNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpwcmVzcygpCiAgICAgICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmhp
dFRlc3QocmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7CiAgICAgICAgIGlmIChoaXRUZXN0UmVzdWx0
LmlubmVyTm9kZSgpKSB7CiAgICAgICAgICAgICBOb2RlKiBpbm5lck5vZGUgPSBoaXRUZXN0UmVz
dWx0LmlubmVyTm9kZSgpLT5kZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAg
ICAgICBpZiAoaW5uZXJOb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgaGl0
VGVzdEVsZW1lbnQgPSB0b0VsZW1lbnQoaW5uZXJOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxF
bGVtZW50Pihpbm5lck5vZGUpKQorICAgICAgICAgICAgICAgIGhpdFRlc3RFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oaW5uZXJOb2RlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE3
NTksMjAgKzE3NTksMTkgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludmFsaWRTdGF0
dXMoKSBjb25zdAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNUYWdOYW1lKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVt
ZW50KCpub2RlKS5oYXNUYWdOYW1lKHRhZ05hbWUpOworICAgIHJldHVybiBub2RlICYmIGlzPEVs
ZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5oYXNUYWdOYW1lKHRhZ05h
bWUpOwogfQogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdAogewotICAgIE5vZGUqIGVsZW1lbnRO
b2RlID0gbm9kZSgpOwotICAgIGlmICghZWxlbWVudE5vZGUpCisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBpZiAoIWVsZW1lbnROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0VsZW1lbnQoZWxlbWVudE5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5mYXN0
SGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKS5mYXN0SGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAgICAgCiBjb25zdCBBdG9taWNT
dHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUpIGNvbnN0CkBAIC0xOTY3LDggKzE5NjYsOCBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6Omhhc0hpZ2hsaWdodGluZygpIGNvbnN0CiBFbGVtZW50KiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjplbGVtZW50KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9k
ZSgpOwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0
dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSkK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCkBAIC0yMTE1LDEwICsyMTE0LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjppZGVudGlmaWVyQXR0cmlidXRlKCkgY29uc3QKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVj
dDo6Y2xhc3NMaXN0KFZlY3RvcjxTdHJpbmc+JiBjbGFzc0xpc3QpIGNvbnN0CiB7CiAgICAgTm9k
ZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgRE9NVG9r
ZW5MaXN0JiBsaXN0ID0gZWxlbWVudC0+Y2xhc3NMaXN0KCk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gbGlzdC5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBr
KyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA4NTYwNWU5Mzc0ZDA4NmJmNzRlNjI3NTI2MWFk
MWFmMDlmOWQ5YzRmLi45NzBlYjJlMGZkZGYzNmJiMGI3YzZhMThmYzJmMDU0ODFjMDIwZTEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTU4Niw3ICs1ODYsNyBAQCBFbGVtZW50KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKICAgICBOb2RlKiBub2Rl
ID0gY3VyclJlbmRlcmVyLT5ub2RlKCk7CiAgICAgZm9yICggOyBub2RlOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4obm9kZSkg
fHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVy
KCkpLT5pc0FuY2hvcigpKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQogICAgIAog
ICAgIHJldHVybiBudWxscHRyOwpAQCAtNjA2LDIxICs2MDYsMjIgQEAgU3RyaW5nIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGRlc2Ny
aWJlZEJ5OwogICAgIAogICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGFjY2Vzc2liaWxpdHlEZXNj
cmlwdGlvbigpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gbV9yZW5kZXJlcjsgY3Vy
cjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5ub2RlKCkgJiYg
Y3Vyci0+bm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgc3VtbWFyeSA9IHRvRWxlbWVudChjdXJyLT5ub2RlKCkpLT5nZXRBdHRyaWJ1dGUo
c3VtbWFyeUF0dHIpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBhbmNlc3RvciA9IG1fcmVuZGVy
ZXI7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgeworICAgICAgICBp
ZiAoYW5jZXN0b3ItPm5vZGUoKSAmJiBpczxIVE1MRWxlbWVudD4oYW5jZXN0b3ItPm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KCphbmNlc3Rvci0+bm9kZSgpKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
c3VtbWFyeSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKICAgICAgICAgICAg
IGlmICghc3VtbWFyeS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgc2hvdWxk
IGJlIHVzZWQgYXMgaGVscCB0ZXh0IHVubGVzcyBpdCBpcyBhbHJlYWR5IGJlaW5nIHVzZWQgYXMg
ZGVzY3JpcHRpdmUgdGV4dC4KLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUg
PSB0b0VsZW1lbnQoY3Vyci0+bm9kZSgpKS0+Z2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CisgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUo
dGl0bGVBdHRyKTsKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpICYmIGRlc2NyaXB0
aW9uICE9IHRpdGxlKQogICAgICAgICAgICAgICAgIHJldHVybiB0aXRsZTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gT25seSB0YWtlIGhlbHAgdGV4dCBmcm9tIGFuIGFuY2VzdG9y
IGVsZW1lbnQgaWYgaXRzIGEgZ3JvdXAgb3IgYW4gdW5rbm93biByb2xlLiBJZiBoZWxwIHdhcyAK
ICAgICAgICAgLy8gYWRkZWQgdG8gdGhvc2Uga2luZHMgb2YgZWxlbWVudHMsIGl0IGlzIGxpa2Vs
eSBpdCB3YXMgbWVhbnQgZm9yIGEgY2hpbGQgZWxlbWVudC4KLSAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYXhPYmogPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGN1cnIpOworICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iaiA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoYW5jZXN0b3IpOwogICAgICAgICBpZiAoYXhPYmopIHsKICAgICAgICAgICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBheE9iai0+cm9sZVZhbHVlKCk7CiAgICAgICAgICAgICBpZiAo
cm9sZSAhPSBHcm91cFJvbGUgJiYgcm9sZSAhPSBVbmtub3duUm9sZSkKQEAgLTg0NSw3ICs4NDYs
NyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoZWNrYm94T3JSYWRp
b1JlY3QoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKICAgICAKLSAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxl
bWVudCh0b0VsZW1lbnQobV9yZW5kZXJlci0+bm9kZSgpKSk7CisgICAgSFRNTExhYmVsRWxlbWVu
dCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obV9yZW5kZXJlci0+
bm9kZSgpKSk7CiAgICAgaWYgKCFsYWJlbCB8fCAhbGFiZWwtPnJlbmRlcmVyKCkpCiAgICAgICAg
IHJldHVybiBib3VuZGluZ0JveFJlY3QoKTsKICAgICAKQEAgLTExMDUsOSArMTEwNiw5IEBAIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRpdGxlVUlFbGVt
ZW50KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
dG9SZW5kZXJGaWVsZHNldChtX3JlbmRlcmVyKS0+ZmluZExlZ2VuZChSZW5kZXJGaWVsZHNldDo6
SW5jbHVkZUZsb2F0aW5nT3JPdXRPZkZsb3cpKTsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9y
ZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHRv
RWxlbWVudChub2RlKSk7CisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZvckVs
ZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogICAgIGlmIChsYWJlbCAmJiBsYWJlbC0+
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
bGFiZWwpOwogCkBAIC0xNDY2LDkgKzE0NjcsOSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc0tleSgpIGNvbnN0CiAgICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxs
QXRvbTsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207Ci0gICAgcmV0dXJuIHRvRWxlbWVu
dChub2RlKS0+Z2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOworICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOwogfQogCiBWaXNp
YmxlU2VsZWN0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbigpIGNvbnN0
CkBAIC0xNTQyLDExICsxNTQzLDEwIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
c2V0RWxlbWVudEF0dHJpYnV0ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0CiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAh
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBFbGVtZW50KiBl
bGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRy
aWJ1dGVOYW1lLCAodmFsdWUpID8gInRydWUiIDogImZhbHNlIik7ICAgICAgICAKKyAgICBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICh2YWx1ZSkg
PyAidHJ1ZSIgOiAiZmFsc2UiKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6ZWxlbWVudEF0dHJpYnV0ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUpIGNvbnN0CkBAIC0xNjQ2LDcgKzE2NDYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldEZvY3VzZWQoYm9vbCBvbikKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzLT5kb2N1bWVudCgpOwogICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAKLSAgICBp
ZiAoIW9uIHx8ICFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICBpZiAoIW9u
IHx8ICFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBkb2N1bWVudC0+c2V0
Rm9jdXNlZEVsZW1lbnQobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjU3
LDcgKzE2NTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEZvY3VzZWQo
Ym9vbCBvbikKICAgICBpZiAoZG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgPT0gbm9kZSkKICAg
ICAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogCi0gICAgdG9FbGVt
ZW50KG5vZGUpLT5mb2N1cygpOworICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mb2N1cygp
OwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93cyhB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNlbGVjdGVkUm93cykKQEAgLTE2NzgsOSArMTY3
OCw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRSb3dzKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgc2VsCiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGlmICgh
bV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPm5v
ZGUoKSB8fCAhaXM8RWxlbWVudD4obV9yZW5kZXJlci0+bm9kZSgpKSkKICAgICAgICAgcmV0dXJu
OwotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm1fcmVuZGVyZXItPm5vZGUoKSk7
CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCptX3JlbmRlcmVyLT5u
b2RlKCkpOwogCiAgICAgaWYgKCFtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIzNDMsNyArMjM0Myw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlZCgpCiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQoKQogewotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQocmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVyZXIoKS0+bm9kZSgpKTsKICAg
ICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXJlbmRlcmVyKCktPmZy
YW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkgfHwgcmVuZGVyZXIoKS0+ZG9j
dW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpICE9IGVsZW1lbnQpCkBAIC0yMzgxLDkgKzIzODEsOCBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb3JyZXNw
b25kaW5nTGFiZWxGb3JDb250cm9sRWxlbQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKG5vZGUgJiYgbm9kZS0+
aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFi
ZWxGb3JFbGVtZW50KHRvRWxlbWVudChub2RlKSk7Ci0gICAgICAgIGlmIChsYWJlbCkKKyAgICBp
ZiAobm9kZSAmJiBpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgaWYgKEhUTUxMYWJl
bEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEhUTUxFbGVtZW50Pihu
b2RlKSkpCiAgICAgICAgICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShs
YWJlbCk7CiAgICAgfQogCkBAIC0yNDA1LDcgKzI0MDQsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJsZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFRleHRib3hlcyBzaG91bGQgc2Vu
ZCBvdXQgbm90aWZpY2F0aW9ucy4KLSAgICBpZiAobm9kZUhhc1JvbGUobm9kZSwgInRleHRib3gi
KSB8fCAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIGNvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZUlz
RW5hYmxlZCh0b0VsZW1lbnQobm9kZSkpKSkKKyAgICBpZiAobm9kZUhhc1JvbGUobm9kZSwgInRl
eHRib3giKSB8fCAoaXM8RWxlbWVudD4obm9kZSkgJiYgY29udGVudEVkaXRhYmxlQXR0cmlidXRl
SXNFbmFibGVkKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2OTUsMTMgKzI2OTQsMTMgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNv
bnN0CiAgICAgICAgIGlmICghcGFyZW50LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgTm9kZSogZWxlbWVudE5v
ZGUgPSB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocGFyZW50KS0+bm9kZSgpOwotICAgICAg
ICBpZiAoIWVsZW1lbnROb2RlIHx8ICFlbGVtZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBOb2RlKiBub2RlID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHBhcmVudCktPm5v
ZGUoKTsKKyAgICAgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgLy8gSWYgbmF0aXZlIHRhZyBvZiB0aGUg
cGFyZW50IGVsZW1lbnQgbWF0Y2hlcyBhbiBhY2NlcHRhYmxlIG5hbWUsIHRoZW4gcmV0dXJuCiAg
ICAgICAgIC8vIGJhc2VkIG9uIGl0cyBwcmVzZW50YXRpb25hbCBzdGF0dXMuCi0gICAgICAgIGlm
IChwb3NzaWJsZVBhcmVudFRhZ05hbWVzLT5jb250YWlucyh0b0VsZW1lbnQoZWxlbWVudE5vZGUp
LT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHBvc3NpYmxlUGFyZW50VGFnTmFtZXMtPmNvbnRh
aW5zKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJl
dHVybiBwYXJlbnQtPnJvbGVWYWx1ZSgpID09IFByZXNlbnRhdGlvbmFsUm9sZTsKICAgICB9CiAg
ICAgCkBAIC0zMjQ0LDE1ICszMjQzLDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6c2V0QWNjZXNzaWJsZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIGlmICgh
bV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogZG9tTm9kZSA9IG51bGxw
dHI7CisgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgLy8gRm9yIHdlYiBhcmVhcywgc2V0
IHRoZSBhcmlhLWxhYmVsIG9uIHRoZSBIVE1MIGVsZW1lbnQuCiAgICAgaWYgKGlzV2ViQXJlYSgp
KQotICAgICAgICBkb21Ob2RlID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1l
bnQoKTsKKyAgICAgICAgbm9kZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVt
ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBkb21Ob2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwor
ICAgICAgICBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwogCi0gICAgaWYgKGRvbU5vZGUgJiYg
ZG9tTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICB0b0VsZW1lbnQoZG9tTm9kZSktPnNl
dEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0ciwgbmFtZSk7CisgICAgaWYgKG5vZGUgJiYgaXM8RWxl
bWVudD4obm9kZSkpCisgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5zZXRBdHRyaWJ1
dGUoYXJpYV9sYWJlbEF0dHIsIG5hbWUpOwogfQogICAgIAogc3RhdGljIGJvb2wgaXNMaW5rYWJs
ZShjb25zdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0JiBvYmplY3QpCkBAIC0zMzcyLDE0ICsz
MzcxLDE0IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdSb2xlRm9y
TVNBQSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIE5vZGUqIG5vZGUg
PSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnRO
b2RlKCkpCisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsK
LSAgICBpZiAoIXNob3VsZFJldHVyblRhZ05hbWVBc1JvbGVGb3JNU0FBKCplbGVtZW50KSkKKyAg
ICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOworICAgIGlmICgh
c2hvdWxkUmV0dXJuVGFnTmFtZUFzUm9sZUZvck1TQUEoZWxlbWVudCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAotICAgIHJldHVybiBlbGVtZW50LT50YWdOYW1lKCk7CisgICAgcmV0dXJu
IGVsZW1lbnQudGFnTmFtZSgpOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6cG9zaXRpb25hbERlc2NyaXB0aW9uRm9yTVNBQSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZEJ1dHRvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmll
bGRCdXR0b25zLmNwcAppbmRleCBmYTNkY2NkZjA2NTJkYjcxNGMwYjVlNDRmODcwZGNkMzhlZTAw
ZTcwLi4yYzVjMjQ2NWFkZWU1MTYxODE0NjU3MTUzMmFhY2I0MjEwZmM5ZmFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZEJ1
dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNlYXJjaEZpZWxkQnV0dG9ucy5jcHAKQEAgLTU4LDEzICs1OCwxMyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6YWNjZXNzaWJpbGl0eVRleHQoVmVjdG9yPEFj
Y2Vzc2liaWxpdAogYm9vbCBBY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OnBy
ZXNzKCkKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8
fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4o
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSk7CiAgICAgLy8gVGhlIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBvbiBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgcmVxdWlyZXMgaG92ZXIuCi0gICAgZWxlbWVudC0+c2V0
SG92ZXJlZCh0cnVlKTsKLSAgICBlbGVtZW50LT5hY2Nlc3NLZXlBY3Rpb24odHJ1ZSk7CisgICAg
ZWxlbWVudC5zZXRIb3ZlcmVkKHRydWUpOworICAgIGVsZW1lbnQuYWNjZXNzS2V5QWN0aW9uKHRy
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAK
aW5kZXggMDU3NDI3ZWQ5NzYyMTI0ZDJjZDY2N2VkOTg3ZmVlNGFiMWE5NTFhNy4uZTFkMmE4MjMx
NjE2Y2Q4ZDVkNWZlMGQ0ZDlhMDQ2YmU2Y2Q1MzljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVy
QXRrLmNwcApAQCAtNTA2LDggKzUwNiw4IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtp
dEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQogICAgIC8vIGNhbm5v
dCBiZSBkb25lIGZyb20gdGhlIFVJUHJvY2Vzcy4gQXNzaXN0aXZlIHRlY2hub2xvZ2llcyBoYXZl
IG5vIG5lZWQKICAgICAvLyBmb3IgdGhpcyBpbmZvcm1hdGlvbi4KICAgICBOb2RlKiBub2RlID0g
Y29yZU9iamVjdC0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICBTdHJpbmcgaWQgPSB0b0VsZW1lbnQobm9kZSktPmdldElkQXR0cmlidXRl
KCkuc3RyaW5nKCk7CisgICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAg
ICAgU3RyaW5nIGlkID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldElkQXR0cmlidXRlKCku
c3RyaW5nKCk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQogICAgICAgICAgICAgYXR0cmli
dXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiaHRtbC1pZCIsIGlk
LnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCmluZGV4IGU2Yzk1MDRjNzIxM2MzMGZhMWVh
ZTkxNTMzMGUyZjU3YmY4MGVjYjguLjA4YzVmMDI3NjQ2NjI1YWU1M2Y1YmY4NWZhYjliN2JlNGE1
NGY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0
RE9NUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01Qcml2YXRlLmNwcApAQCAtODYsNyArODYsNyBAQCBXZWJLaXRET01Ob2RlKiB3cmFwKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CiAgICAgICAgIGlmIChpczxI
VE1MRWxlbWVudD4obm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFKHdy
YXAoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpKSk7Ci0gICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX05PREUod3JhcEVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSk7CisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX05PREUod3JhcEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKTsKICAg
ICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgogICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9O
T0RFKHdyYXBBdHRyKHN0YXRpY19jYXN0PEF0dHIqPihub2RlKSkpOwogICAgIGNhc2UgTm9kZTo6
VEVYVF9OT0RFOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAK
aW5kZXggY2Y4MDYwOWRhMGJkZjYyZjlkZjg2YTkyYjRlYWFlMWIyYjA4Yjc5NC4uZDZjM2M5ZGU2
YWY3ODNkOGRkZGI5N2VmN2Y0OTA5N2U0ZWUxYzAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC05Nyw4ICs5Nyw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc09ic2VydmFibGUoSlNOb2RlKiBqc05vZGUsIE5vZGUqIG5vZGUpCiBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNSZWFjaGFibGVGcm9tRE9NKEpTTm9kZSoganNOb2RlLCBOb2RlKiBub2RlLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkgewot
ICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBl
bGVtZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUp
KSB7CisgICAgICAgICAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
OwogCiAgICAgICAgICAgICAvLyBJZiBhIHdyYXBwZXIgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRv
IGFuIGltYWdlIGVsZW1lbnQKICAgICAgICAgICAgIC8vIHRoYXQgaXMgbG9hZGluZyBidXQgbm90
IGluIHRoZSBkb2N1bWVudCwgdGhlIHdyYXBwZXIgaXMgb2JzZXJ2YWJsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA4MmI2
NWJhNDkzZTExNWNjYzhjOGQyOTdkY2MwNTVjOTY4MzM4NGEyLi4wNzkwMTY3Mzg4NTZmOTEwZTg3
ZWYwN2M3ZTUzNWVkZDRiMWYzNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTYyOSwxNSArMTYyOSwxNSBAQCBOb2Rl
KiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpzdHlsZWROb2RlKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fbm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFtX25vZGUtPmlzRWxl
bWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KCptX25vZGUpKQogICAgICAgICByZXR1
cm4gbV9ub2RlLmdldCgpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobV9ub2Rl
LmdldCgpKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fbm9k
ZSk7CiAgICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudDsKLSAgICBpZiAobV9wc2V1ZG9F
bGVtZW50U3BlY2lmaWVyID09IEJFRk9SRSAmJiAocHNldWRvRWxlbWVudCA9IGVsZW1lbnQtPmJl
Zm9yZVBzZXVkb0VsZW1lbnQoKSkpCisgICAgaWYgKG1fcHNldWRvRWxlbWVudFNwZWNpZmllciA9
PSBCRUZPUkUgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQo
KSkpCiAgICAgICAgIHJldHVybiBwc2V1ZG9FbGVtZW50OwotICAgIGlmIChtX3BzZXVkb0VsZW1l
bnRTcGVjaWZpZXIgPT0gQUZURVIgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50LT5hZnRlclBz
ZXVkb0VsZW1lbnQoKSkpCisgICAgaWYgKG1fcHNldWRvRWxlbWVudFNwZWNpZmllciA9PSBBRlRF
UiAmJiAocHNldWRvRWxlbWVudCA9IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpKQogICAg
ICAgICByZXR1cm4gcHNldWRvRWxlbWVudDsKLSAgICByZXR1cm4gZWxlbWVudDsKKyAgICByZXR1
cm4gJmVsZW1lbnQ7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IEVVcGRhdGVMYXlvdXQgdXBkYXRlTGF5b3V0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCmluZGV4IGRiNGE0YjFiNzg2NDBjMGU3NDIwOWE1NTI2ZmE3ZDZhMTdlZjM2YjAu
LjA3OGE1Y2EyZTJjNGNlZDU5YTZkMzJkYTgwYjMyMDRkMzZkM2E4OGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBOb2RlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWRO
b2RlQ291bgogICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKICAgICAgICAgICAgICsrc3Vi
Y291bnQ7CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPnJlbmRlclN0eWxlKCkgPT0gcGFy
ZW50U3R5bGUgJiYgY3VycmVudE5vZGUtPmxhc3RDaGlsZCgpCi0gICAgICAgICAgICAgICAgJiYg
Y3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hh
cmluZyh0b0VsZW1lbnQoY3VycmVudE5vZGUpKQorICAgICAgICAgICAgICAgICYmIGlzPEVsZW1l
bnQ+KGN1cnJlbnROb2RlKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhkb3duY2Fz
dDxFbGVtZW50PihjdXJyZW50Tm9kZSkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAg
ICAgICAgLy8gQWRqdXN0IGZvciB1bnVzZWQgcmVzZXJ2ZWQgdHJpZXMuCiAgICAgICAgICAgICAg
ICAgdmlzaXRlZE5vZGVDb3VudCAtPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCA2NTNmNjk3MWI3YTJlODY1M2Mx
MDI5OTg2N2ExZTBlODg1Y2Q4MzRiLi5kY2IxOTkxYjdiMWQ0N2RmN2EwM2EyYWZhMTk3N2UyZjQ0
MTYwMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC0xMDAsOCArMTAw
LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lSZW5kZXJUcmVlSWZOZWVkZWQoTm9kZSYg
Y2hpbGQpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhlIG5hbWVkIGZsb3cgdGVzdC4KICAg
ICBpZiAoIWNoaWxkLnJlbmRlcmVyKCkgJiYgIWNoaWxkLmlzTmFtZWRGbG93Q29udGVudE5vZGUo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjaGlsZC5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKHRvRWxlbWVudChjaGlsZCkpOworICAgIGlmIChp
czxFbGVtZW50PihjaGlsZCkpCisgICAgICAgIFN0eWxlOjpkZXRhY2hSZW5kZXJUcmVlKGRvd25j
YXN0PEVsZW1lbnQ+KGNoaWxkKSk7CiAgICAgZWxzZSBpZiAoaXM8VGV4dD4oY2hpbGQpKQogICAg
ICAgICBTdHlsZTo6ZGV0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KGNoaWxkKSk7CiB9
CkBAIC0zNDcsOSArMzQ3LDkgQEAgdm9pZCBDb250YWluZXJOb2RlOjpub3RpZnlDaGlsZEluc2Vy
dGVkKE5vZGUmIGNoaWxkLCBDaGlsZENoYW5nZVNvdXJjZSBzb3VyY2UpCiB2b2lkIENvbnRhaW5l
ck5vZGU6Om5vdGlmeUNoaWxkUmVtb3ZlZChOb2RlJiBjaGlsZCwgTm9kZSogcHJldmlvdXNTaWJs
aW5nLCBOb2RlKiBuZXh0U2libGluZywgQ2hpbGRDaGFuZ2VTb3VyY2Ugc291cmNlKQogewogICAg
IENoaWxkQ2hhbmdlIGNoYW5nZTsKLSAgICBjaGFuZ2UudHlwZSA9IGNoaWxkLmlzRWxlbWVudE5v
ZGUoKSA/IEVsZW1lbnRSZW1vdmVkIDogY2hpbGQuaXNUZXh0Tm9kZSgpID8gVGV4dFJlbW92ZWQg
OiBOb25Db250ZW50c0NoaWxkQ2hhbmdlZDsKLSAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxl
bWVudCA9ICghcHJldmlvdXNTaWJsaW5nIHx8IHByZXZpb3VzU2libGluZy0+aXNFbGVtZW50Tm9k
ZSgpKSA/IHRvRWxlbWVudChwcmV2aW91c1NpYmxpbmcpIDogRWxlbWVudFRyYXZlcnNhbDo6cHJl
dmlvdXNTaWJsaW5nKHByZXZpb3VzU2libGluZyk7Ci0gICAgY2hhbmdlLm5leHRTaWJsaW5nRWxl
bWVudCA9ICghbmV4dFNpYmxpbmcgfHwgbmV4dFNpYmxpbmctPmlzRWxlbWVudE5vZGUoKSkgPyB0
b0VsZW1lbnQobmV4dFNpYmxpbmcpIDogRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobmV4
dFNpYmxpbmcpOworICAgIGNoYW5nZS50eXBlID0gaXM8RWxlbWVudD4oY2hpbGQpID8gRWxlbWVu
dFJlbW92ZWQgOiBpczxUZXh0PihjaGlsZCkgPyBUZXh0UmVtb3ZlZCA6IE5vbkNvbnRlbnRzQ2hp
bGRDaGFuZ2VkOworICAgIGNoYW5nZS5wcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gKCFwcmV2aW91
c1NpYmxpbmcgfHwgaXM8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVt
ZW50PihwcmV2aW91c1NpYmxpbmcpIDogRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5n
KHByZXZpb3VzU2libGluZyk7CisgICAgY2hhbmdlLm5leHRTaWJsaW5nRWxlbWVudCA9ICghbmV4
dFNpYmxpbmcgfHwgaXM8RWxlbWVudD4obmV4dFNpYmxpbmcpKSA/IGRvd25jYXN0PEVsZW1lbnQ+
KG5leHRTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5leHRTaWJsaW5n
KTsKICAgICBjaGFuZ2Uuc291cmNlID0gc291cmNlOwogCiAgICAgY2hpbGRyZW5DaGFuZ2VkKGNo
YW5nZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29y
aXRobXMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNw
cAppbmRleCAyMTc5MThlNmI5MzJkM2ZiY2M4YzA4NGQ4YjdhMmUwM2M1MjA0Njg5Li5hZjVkNDEw
OTRmYjYxY2Y1NjdkNGE5NzcyOTIyYWNiMmQ0NjM3NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAKQEAgLTQwLDEwICs0MCwxMCBAQCB2b2lk
IENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50SW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoQ29udGFpbmVyTgogICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0Rv
Y3VtZW50KCpjaGlsZCk7CiAgICAgfQogCi0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkK
KyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
UmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpKSB7
CisgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkuc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChub2RlLmluRG9jdW1lbnQoKSAmJiByb290
LT5ob3N0RWxlbWVudCgpID09ICZub2RlKQogICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVk
SW50b0RvY3VtZW50KCpyb290KTsKICAgICB9CkBAIC03MSwxMyArNzEsMTMgQEAgdm9pZCBDaGls
ZE5vZGVSZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbURvY3VtZW50
KENvbnRhaW5lck5vZGUKICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50
KCpjaGlsZC5nZXQoKSk7CiAgICAgfQogCi0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkK
KyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bm9kZS5kb2N1bWVudCgpLmNzc1RhcmdldCgpID09ICZub2RlKQogICAgICAgICBub2RlLmRvY3Vt
ZW50KCkuc2V0Q1NTVGFyZ2V0KDApOwogCi0gICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290
ID0gdG9FbGVtZW50KG5vZGUpLnNoYWRvd1Jvb3QoKSkgeworICAgIGlmIChSZWZQdHI8U2hhZG93
Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkgewogICAg
ICAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpICYmIHJvb3QtPmhvc3RFbGVtZW50KCkgPT0gJm5v
ZGUpCiAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudCgqcm9vdC5nZXQo
KSk7CiAgICAgfQpAQCAtOTAsMTAgKzkwLDEwIEBAIHZvaWQgQ2hpbGROb2RlUmVtb3ZhbE5vdGlm
aWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUmIG5vCiAg
ICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKCp0b0NvbnRhaW5lck5vZGUoY2hp
bGQpKTsKICAgICB9CiAKLSAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICgh
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChSZWZQdHI8U2hh
ZG93Um9vdD4gcm9vdCA9IHRvRWxlbWVudChub2RlKS5zaGFkb3dSb290KCkpCisgICAgaWYgKFJl
ZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9v
dCgpKQogICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKCpyb290LmdldCgpKTsKIH0K
IApAQCAtMTAyLDExICsxMDIsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGFzc2VydENvbm5lY3RlZFN1
YnJhbWVDb3VudElzQ29uc2lzdGVudChDb250YWluZXJOb2RlJiBub2RlKQogewogICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKIAotICAgIGlmIChub2RlLmlzRWxlbWVudE5vZGUoKSkgeworICAgIGlm
IChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBpZiAoaXM8SFRNTEZyYW1lT3duZXJFbGVt
ZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQ+KG5vZGUpLmNvbnRl
bnRGcmFtZSgpKQogICAgICAgICAgICAgKytjb3VudDsKIAotICAgICAgICBpZiAoU2hhZG93Um9v
dCogcm9vdCA9IHRvRWxlbWVudChub2RlKS5zaGFkb3dSb290KCkpCisgICAgICAgIGlmIChTaGFk
b3dSb290KiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuc2hhZG93Um9vdCgpKQogICAg
ICAgICAgICAgY291bnQgKz0gYXNzZXJ0Q29ubmVjdGVkU3VicmFtZUNvdW50SXNDb25zaXN0ZW50
KCpyb290KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDhlODNlOTEyMDE0
Y2NiODZiNmQ4MTA4YTJkZjMyOTQ4MTA3ZWI0ZTIuLjNlOGFjYmM2Njk5OGJlY2I3MTUxODkxYjE0
MDVhYzllZGUzZTVmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtOTQxLDcgKzk0MSw3
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWRO
b2RlLCBib29sIGRlZXAsIEV4Y2VwdGlvbkNvCiAgICAgY2FzZSBDT01NRU5UX05PREU6CiAgICAg
ICAgIHJldHVybiBjcmVhdGVDb21tZW50KGltcG9ydGVkTm9kZS0+bm9kZVZhbHVlKCkpOwogICAg
IGNhc2UgRUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgIEVsZW1lbnQmIG9sZEVsZW1lbnQgPSB0b0Vs
ZW1lbnQoKmltcG9ydGVkTm9kZSk7CisgICAgICAgIEVsZW1lbnQmIG9sZEVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50PigqaW1wb3J0ZWROb2RlKTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xs
b3dpbmcgY2hlY2sgbWlnaHQgYmUgdW5uZWNlc3NhcnkuIElzIGl0IHBvc3NpYmxlIHRoYXQKICAg
ICAgICAgLy8gb2xkRWxlbWVudCBoYXMgbWlzbWF0Y2hlZCBwcmVmaXgvbmFtZXNwYWNlPwogICAg
ICAgICBpZiAoIWhhc1ZhbGlkTmFtZXNwYWNlRm9yRWxlbWVudHMob2xkRWxlbWVudC50YWdRTmFt
ZSgpKSkgewpAQCAtMTQxNCwxMyArMTQxNCwxMyBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVu
dEZyb21Qb2ludChjb25zdCBMYXlvdXRQb2ludCYgY2xpZW50UG9pbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVGcm9tUG9pbnQoY2xpZW50UG9pbnQp
OwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUg
KG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpOwogCiAgICAgaWYgKG5vZGUpCiAgICAgICAgIG5vZGUgPSBhbmNlc3RvckluVGhpc1Nj
b3BlKG5vZGUpOwogCi0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50Ojpj
YXJldFJhbmdlRnJvbVBvaW50KGludCB4LCBpbnQgeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRleCA3OGIwODQ3ZTIxYjg1
NDExOGY0YzZhYzllY2EwZmM0MmNlODRiMDRlLi5jZGE2YzA3Y2JhNGM0MGUzZGE0NjAxMjQzMDc2
YjBmNzY0ZjJlNDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24uY3BwCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0
cjxTdHlsZVMKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9IGVsc2UgaWYgKGlzPEhU
TUxMaW5rRWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSB8fCBp
czxTVkdTdHlsZUVsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVu
dCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRpdGxlID0g
ZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAgICBib29sIGVu
YWJsZWRWaWFTY3JpcHQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpczxIVE1MTGlua0VsZW1l
bnQ+KGVsZW1lbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMjFhZDU2NmFhMTk0MWQz
Yzc5YTZlMDMxOGE4MjhiNGI1MmRmYWMyNy4uZTljYmUwNzgyMGIzNTRmYWY5NGY0MjcwNDcxMWVh
NTBkNDUwMGFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjE5NSw4ICsyMTk1LDggQEAg
QXRvbWljU3RyaW5nIEVsZW1lbnQ6OmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpIGNvbnN0CiAg
ICAgLy8gVGhlIGxhbmd1YWdlIHByb3BlcnR5IGlzIGluaGVyaXRlZCwgc28gd2UgaXRlcmF0ZSBv
dmVyIHRoZSBwYXJlbnRzIHRvIGZpbmQgdGhlIGZpcnN0IGxhbmd1YWdlLgogICAgIGNvbnN0IE5v
ZGUqIGN1cnJlbnROb2RlID0gdGhpczsKICAgICB3aGlsZSAoKGN1cnJlbnROb2RlID0gY3VycmVu
dE5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc0VsZW1l
bnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSB0b0VsZW1lbnQoKmN1cnJlbnROb2RlKS5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgIGlm
IChpczxFbGVtZW50PihjdXJyZW50Tm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBFbGVt
ZW50RGF0YSogZWxlbWVudERhdGEgPSBkb3duY2FzdDxFbGVtZW50PigqY3VycmVudE5vZGUpLmVs
ZW1lbnREYXRhKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBlbGVtZW50RGF0YS0+ZmluZExhbmd1YWdlQXR0cmlidXRlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAppbmRleCA1MjM5MzU1NDRhZTY0ZGVlNDE1MDg2MWI5ZmJjYzg2NmI5MTE1OTM4
Li4xODdlOWQzMjcwY2IxNjYwMjBjYTk2MjQ1NzA0ZDNmMTU2MjM1MTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmgKQEAgLTY2NiwyOSArNjY2LDI0IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEVsZW1lbnRE
YXRhPiBtX2VsZW1lbnREYXRhOwogfTsKIAotaW5saW5lIGJvb2wgaXNFbGVtZW50KGNvbnN0IE5v
ZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpOyB9Ci0KLU5PREVfVFlQRV9D
QVNUUyhFbGVtZW50KQotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxj
b25zdCBFbGVtZW50LCBjb25zdCBOb2RlPiB7Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpOyB9Ci19OworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihFbGVtZW50KQorICAgIHN0YXRpYyBib29sIGlzRWxlbWVu
dChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiBpbmxpbmUgYm9vbCBOb2RlOjpoYXNBdHRyaWJ1
dGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudCh0
aGlzKS0+aGFzQXR0cmlidXRlcygpOworICAgIHJldHVybiBpczxFbGVtZW50PigqdGhpcykgJiYg
ZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmhhc0F0dHJpYnV0ZXMoKTsKIH0KIAogaW5saW5lIE5h
bWVkTm9kZU1hcCogTm9kZTo6YXR0cmlidXRlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzRWxl
bWVudE5vZGUoKSA/ICZ0b0VsZW1lbnQodGhpcyktPmF0dHJpYnV0ZXMoKSA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIGlzPEVsZW1lbnQ+KCp0aGlzKSA/ICZkb3duY2FzdDxFbGVtZW50PigqdGhpcyku
YXR0cmlidXRlcygpIDogbnVsbHB0cjsKIH0KIAogaW5saW5lIEVsZW1lbnQqIE5vZGU6OnBhcmVu
dEVsZW1lbnQoKSBjb25zdAogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKLSAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpID8gdG9F
bGVtZW50KHBhcmVudCkgOiBudWxscHRyOworICAgIHJldHVybiBwYXJlbnQgJiYgaXM8RWxlbWVu
dD4ocGFyZW50KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudCkgOiBudWxscHRyOwogfQogCiBp
bmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZl
cnNhbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRUcmF2ZXJzYWwuaAppbmRleCAxYmJl
NTg5YWYyOTQwOWM1ODc5YTk5OGQ1NTQ2ZDkzMmNhMzQyYjlhLi4wMmZmZDMzNDZiN2I5ODc5NDgw
ZDRjYzdiMjkyOTM4NmNmZjUwNGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2Fs
LmgKQEAgLTk1LDkgKzk1LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgogaW5s
aW5lIEVsZW1lbnQqIFRyYXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRUeXBl
KiBjdXJyZW50KQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJl
bnQpOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hp
bGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChu
b2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIHRlbXBsYXRl
IDw+CkBAIC0xMDUsOSArMTA1LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEN1cnJlbnRUeXBlPgog
aW5saW5lIEVsZW1lbnQqIFRyYXZlcnNhbDxFbGVtZW50Pjo6bmV4dFRlbXBsYXRlKEN1cnJlbnRU
eXBlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5vZGUqIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChu
b2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIC8vIEdlbmVyaWMgdmVy
c2lvbnMuCkBAIC0yNTgsMzMgKzI1OCwzMyBAQCBpbmxpbmUgRWxlbWVudFR5cGUqIFRyYXZlcnNh
bDxFbGVtZW50VHlwZT46Om5leHQoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZQogaW5s
aW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGNv
bnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSog
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKGN1cnJlbnQsIHN0
YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6cHJldmlvdXNJbmNsdWRpbmdQc2V1ZG8obm9kZSwgc3RheVdpdGhpbik7Ci0g
ICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiB9CiAKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVk
aW5nUHNldWRvKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7
CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG8oY3Vy
cmVudCwgc3RheVdpdGhpbik7Ci0gICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4p
OwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpOwogfQogCiBpbmxpbmUgRWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dElu
Y2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4oY3VycmVudCwgc3RheVdpdGhpbik7Ci0g
ICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICB3aGlsZSAobm9k
ZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0SW5jbHVkaW5nUHNldWRvU2tpcHBpbmdDaGlsZHJlbihub2RlLCBzdGF5V2l0aGluKTsKLSAg
ICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKTsKIH0KIAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVkb0F3YXJl
UHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpCiB7CiAgICAgTm9kZSogbm9kZSA9
IGN1cnJlbnQtPnBzZXVkb0F3YXJlUHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKG5vZGUg
JiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVu
dD4obm9kZSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wc2V1ZG9Bd2FyZVByZXZpb3VzU2libGlu
ZygpOwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2
ZU5vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCmluZGV4
IDRmOGE0NWM2YTkzOTE5NzNhYTM5M2Q5M2E1NDFkN2YzMDRlNjVmY2UuLmVlMjBlMTFkZGE0NGE0
M2EyNjZjOTRlNzYyYTg1YjY2MWMxOGQwNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9MaXZlTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3Qu
Y3BwCkBAIC02OCwxMSArNjgsMTEgQEAgTm9kZSogTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpcy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUp
OworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgZ2V0SWRBdHRy
aWJ1dGUgaW5zdGVhZCBvZiBpZEZvclN0eWxlUmVzb2x1dGlvbi4KLSAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBlbGVtZW50
SWQpCisgICAgICAgIGlmIChlbGVtZW50Lmhhc0lEKCkgJiYgZWxlbWVudC5pZEZvclN0eWxlUmVz
b2x1dGlvbigpID09IGVsZW1lbnRJZCkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGVhOTJkYTgwYTIwOGMwYmNhMzAxNGIyMzVjMzBhMDg3NWI3
OGJhZWEuLjIyODkyYmU3ODk5NzRkNjJjOTc4OWMyYWQ3NWJlZTQ4ZGFhM2U2MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTEzNyw5ICsxMzcsOSBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkK
IAogICAgICAgICBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewogICAgICAgICAgICAgKytub2Rl
c1dpdGhSYXJlRGF0YTsKLSAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
KyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgICsr
ZWxlbWVudHNXaXRoUmFyZURhdGE7Ci0gICAgICAgICAgICAgICAgaWYgKHRvRWxlbWVudChub2Rl
KS0+aGFzTmFtZWROb2RlTWFwKCkpCisgICAgICAgICAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5oYXNOYW1lZE5vZGVNYXAoKSkKICAgICAgICAgICAgICAgICAgICAgKytlbGVt
ZW50c1dpdGhOYW1lZE5vZGVNYXA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0OSwx
MiArMTQ5LDEyIEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAg
ICsrZWxlbWVudE5vZGVzOwogCiAgICAgICAgICAgICAgICAgLy8gVGFnIHN0YXRzCi0gICAgICAg
ICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICAgICAgICAg
ICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IHBlclRhZ0Nv
dW50LmFkZChlbGVtZW50LT50YWdOYW1lKCksIDEpOworICAgICAgICAgICAgICAgIEVsZW1lbnQm
IGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIHNpemVfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBwZXJUYWdDb3VudC5hZGQo
ZWxlbWVudC50YWdOYW1lKCksIDEpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAot
ICAgICAgICAgICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50LT5l
bGVtZW50RGF0YSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEVsZW1lbnREYXRhKiBlbGVtZW50
RGF0YSA9IGVsZW1lbnQuZWxlbWVudERhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBlbGVtZW50RGF0YS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZXMgKz0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0
aEF0dHJpYnV0ZVN0b3JhZ2U7CkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxp
emUoKQogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIE5vZGVUeXBlIHR5cGUgPSBub2RlLT5u
b2RlVHlwZSgpOwogICAgICAgICBpZiAodHlwZSA9PSBFTEVNRU5UX05PREUpCi0gICAgICAgICAg
ICB0b0VsZW1lbnQobm9kZS5nZXQoKSktPm5vcm1hbGl6ZUF0dHJpYnV0ZXMoKTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5ub3JtYWxpemVBdHRyaWJ1dGVzKCk7CiAKICAg
ICAgICAgaWYgKG5vZGUgPT0gdGhpcykKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODk2LDE0ICs4
OTYsMTQgQEAgTm9kZSogTm9kZTo6cHNldWRvQXdhcmVOZXh0U2libGluZygpIGNvbnN0CiAKIE5v
ZGUqIE5vZGU6OnBzZXVkb0F3YXJlRmlyc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRWxl
bWVudE5vZGUoKSkgewotICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHRv
RWxlbWVudCh0aGlzKTsKLSAgICAgICAgTm9kZSogZmlyc3QgPSBjdXJyZW50RWxlbWVudC0+YmVm
b3JlUHNldWRvRWxlbWVudCgpOworICAgIGlmIChpczxFbGVtZW50PigqdGhpcykpIHsKKyAgICAg
ICAgY29uc3QgRWxlbWVudCYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqdGhp
cyk7CisgICAgICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVsZW1lbnQuYmVmb3JlUHNldWRvRWxl
bWVudCgpOwogICAgICAgICBpZiAoZmlyc3QpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3Q7Ci0g
ICAgICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgZmly
c3QgPSBjdXJyZW50RWxlbWVudC5maXJzdENoaWxkKCk7CiAgICAgICAgIGlmICghZmlyc3QpCi0g
ICAgICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsK
KyAgICAgICAgICAgIGZpcnN0ID0gY3VycmVudEVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7
CiAgICAgICAgIHJldHVybiBmaXJzdDsKICAgICB9CiAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsK
QEAgLTkxMSwxNCArOTExLDE0IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlRmlyc3RDaGlsZCgp
IGNvbnN0CiAKIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTGFzdENoaWxkKCkgY29uc3QKIHsKLSAg
ICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIGNvbnN0IEVsZW1lbnQqIGN1cnJlbnRF
bGVtZW50ID0gdG9FbGVtZW50KHRoaXMpOwotICAgICAgICBOb2RlKiBsYXN0ID0gY3VycmVudEVs
ZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOworICAgIGlmIChpczxFbGVtZW50PigqdGhpcykp
IHsKKyAgICAgICAgY29uc3QgRWxlbWVudCYgY3VycmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50PigqdGhpcyk7CisgICAgICAgIE5vZGUqIGxhc3QgPSBjdXJyZW50RWxlbWVudC5hZnRlclBz
ZXVkb0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGxhc3QpCiAgICAgICAgICAgICByZXR1cm4gbGFz
dDsKLSAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAg
bGFzdCA9IGN1cnJlbnRFbGVtZW50Lmxhc3RDaGlsZCgpOwogICAgICAgICBpZiAoIWxhc3QpCi0g
ICAgICAgICAgICBsYXN0ID0gY3VycmVudEVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsK
KyAgICAgICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgICAgIHJldHVybiBsYXN0OwogICAgIH0KICAgICByZXR1cm4gbGFzdENoaWxkKCk7CkBA
IC05MjcsOCArOTI3LDggQEAgTm9kZSogTm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBjb25z
dAogUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0g
bm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jb21wdXRl
ZFN0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4o
bm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmNvbXB1
dGVkU3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAgICAgfQogICAgIHJldHVybiBudWxs
cHRyOwogfQpAQCAtMTAwNywxMCArMTAwNywxMCBAQCBFbGVtZW50KiBOb2RlOjpwYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCkgY29uc3QKICAgICBpZiAoaXM8U2hhZG93Um9vdD4ocGFyZW50KSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHBhcmVudCktPmhvc3RFbGVtZW50
KCk7CiAKLSAgICBpZiAoIXBhcmVudC0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxl
bWVudD4ocGFyZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9F
bGVtZW50KHBhcmVudCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudCk7CiB9
CiAKIE5vZGUqIE5vZGU6Omluc2VydGlvblBhcmVudEZvckJpbmRpbmcoKSBjb25zdApAQCAtMTA1
NSwxMSArMTA1NSwxMSBAQCBFbGVtZW50KiBOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KEVkaXRh
YmxlVHlwZSBlZGl0YWJsZVR5cGUpIGNvbnN0CiAKIEVsZW1lbnQqIE5vZGU6OnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSBjb25zdAogewotICAgIEVsZW1lbnQqIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChO
b2RlKiBuID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG4gJiYgbi0+aGFzRWRpdGFibGVTdHls
ZSgpOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICByZXN1bHQgPSB0b0VsZW1lbnQobik7Ci0gICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKGJvZHlUYWcpKQorICAgIEVsZW1lbnQqIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyk7IG5vZGUgJiYgbm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOworICAgICAgICBpZiAoaXM8SFRNTEJvZHlFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTEwMiw3ICsx
MTAyLDcgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShOb2RlKiBvdGhlcikgY29uc3QKICAgICBp
ZiAobm9kZVZhbHVlKCkgIT0gb3RoZXItPm5vZGVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgaWYgKGlzRWxlbWVudE5vZGUoKSAmJiAhdG9FbGVtZW50KHRoaXMpLT5o
YXNFcXVpdmFsZW50QXR0cmlidXRlcyh0b0VsZW1lbnQob3RoZXIpKSkKKyAgICBpZiAoaXM8RWxl
bWVudD4oKnRoaXMpICYmICFkb3duY2FzdDxFbGVtZW50PigqdGhpcykuaGFzRXF1aXZhbGVudEF0
dHJpYnV0ZXMoZG93bmNhc3Q8RWxlbWVudD4ob3RoZXIpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwpAQCAtMTE0NCwxMyArMTE0
NCwxMyBAQCBib29sIE5vZGU6OmlzRGVmYXVsdE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSU1heWJlRW1wdHkpIGNvbnN0CiAKICAgICBzd2l0Y2ggKG5vZGVUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6IHsKLSAgICAgICAgICAgIGNvbnN0IEVsZW1l
bnQqIGVsZW0gPSB0b0VsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoZWxlbS0+cHJlZml4KCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW0tPm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVSSTsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50LnByZWZpeCgpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50
Lm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVSSTsKIAotICAgICAgICAgICAgaWYgKGVsZW0t
Pmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgOiBlbGVtLT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgICAgICAgICAg
aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0
b20pCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLnZhbHVlKCkgPT0g
bmFtZXNwYWNlVVJJOwogICAgICAgICAgICAgICAgIH0KQEAgLTEyODQsMTAgKzEyODQsMTAgQEAg
U3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFjZVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9u
YW1lc3BhY2VVUkksIGNvbnN0IEVsZW0KICAgICBpZiAob3JpZ2luYWxFbGVtZW50LT5sb29rdXBO
YW1lc3BhY2VVUkkocHJlZml4KCkpID09IF9uYW1lc3BhY2VVUkkpCiAgICAgICAgIHJldHVybiBw
cmVmaXgoKTsKICAgICAKLSAgICBBU1NFUlQoaXNFbGVtZW50Tm9kZSgpKTsKLSAgICBjb25zdCBF
bGVtZW50KiB0aGlzRWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsKLSAgICBpZiAodGhpc0VsZW1l
bnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlIDogdGhpc0VsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgQVNTRVJU
KGlzPEVsZW1lbnQ+KCp0aGlzKSk7CisgICAgY29uc3QgRWxlbWVudCYgdGhpc0VsZW1lbnQgPSBk
b3duY2FzdDxFbGVtZW50PigqdGhpcyk7CisgICAgaWYgKHRoaXNFbGVtZW50Lmhhc0F0dHJpYnV0
ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogdGhpc0Vs
ZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUu
cHJlZml4KCkgPT0geG1sbnNBdG9tICYmIGF0dHJpYnV0ZS52YWx1ZSgpID09IF9uYW1lc3BhY2VV
UkkKICAgICAgICAgICAgICAgICAmJiBvcmlnaW5hbEVsZW1lbnQtPmxvb2t1cE5hbWVzcGFjZVVS
SShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpID09IF9uYW1lc3BhY2VVUkkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGF0dHJpYnV0ZS5sb2NhbE5hbWUoKTsKQEAgLTEzODMsMTEgKzEzODMsMTEgQEAg
dm9pZCBOb2RlOjpzZXRUZXh0Q29udGVudChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogRWxlbWVudCogTm9kZTo6YW5jZXN0b3JFbGVtZW50KCkgY29uc3QKIHsKICAgICAv
LyBJbiB0aGVvcnksIHRoZXJlIGNhbiBiZSBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMgYmV0d2VlbiBl
bGVtZW50cywgYnV0IHRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCi0gICAgZm9yIChD
b250YWluZXJOb2RlKiBuID0gcGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gdG9F
bGVtZW50KG4pOworICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2Rl
KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKGlzPEVsZW1lbnQ+KGFuY2VzdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiBib29sIE5vZGU6Om9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0CkBAIC0x
NTI5LDEwICsxNTI5LDEwIEBAIEZsb2F0UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0
IEZsb2F0UG9pbnQmIHApIGNvbnN0CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2Mo
Y29uc3QgTm9kZSogbm9kZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgY2hhciogYXR0ckRlc2MpCiB7Ci0gICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGF0dHIgPSB0b0VsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0
ZShuYW1lKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHIgPSBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuZ2V0QXR0cmlidXRlKG5hbWUpOwogICAgIGlmIChhdHRyLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xNTg0LDggKzE1ODQsOCBAQCB2b2lkIE5vZGU6OnNob3dOb2Rl
UGF0aEZvclRoaXMoKSBjb25zdAogICAgICAgICBjYXNlIEVMRU1FTlRfTk9ERTogewogICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIvJXMiLCBub2RlLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRh
KCkpOwogCi0gICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5v
ZGUpOwotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZGF0dHIgPSBlbGVtZW50LT5n
ZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAgICAgY29uc3QgRWxlbWVudCYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRhdHRyID0gZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgYm9vbCBoYXNJ
ZEF0dHIgPSAhaWRhdHRyLmlzTnVsbCgpICYmICFpZGF0dHIuaXNFbXB0eSgpOwogICAgICAgICAg
ICAgaWYgKG5vZGUtPnByZXZpb3VzU2libGluZygpIHx8IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAwOwpAQCAtMTcyNCwxMCArMTcyNCwxMCBAQCBF
bGVtZW50KiBOb2RlOjplbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKQogICAgICAgICAv
LyBTbyB3ZSBkb24ndCBsZXQgaW1hZ2VzIGJlIHRoZSBlbmNsb3NpbmcgbGluayBlbGVtZW50LCBl
dmVuIHRob3VnaCBpc0xpbmsgc29tZXRpbWVzIHJldHVybnMKICAgICAgICAgLy8gdHJ1ZSBmb3Ig
dGhlbS4KICAgICAgICAgaWYgKG5vZGUtPmlzTGluaygpICYmICFpczxIVE1MSW1hZ2VFbGVtZW50
Pihub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIE5vZGU6OmV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKQEAgLTIwMTgsNyArMjAxOCw3IEBAIHZvaWQgTm9k
ZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAgIGlmICghaGFzRXZlbnRUYXJn
ZXREYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc0VsZW1lbnROb2RlKCkgJiYg
dG9FbGVtZW50KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVudC5pc01vdXNl
RXZlbnQoKSkKKyAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpICYmIGRvd25jYXN0PEVsZW1lbnQ+
KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVudC5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKCZldmVudCk7CkBAIC0y
MTY0LDkgKzIxNjQsOSBAQCBib29sIE5vZGU6OndpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMo
KQogewogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhlIGlPUyBjb2RlIHBhdGggZGlmZmVyZW50IGZy
b20gdGhlIG5vbi1pT1MgY29kZSBwYXRoPwogI2lmICFQTEFURk9STShJT1MpCi0gICAgaWYgKCFp
c0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAodG9FbGVtZW50KHRoaXMpLT5pc0Rpc2FibGVkRm9ybUNvbnRy
b2woKSkKKyAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gaGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB8fCBoYXNFdmVudExpc3Rl
bmVycyhldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHx8IGhhc0V2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KTsKQEAgLTIxNzgsOSArMjE3OCw5IEBAIGJvb2wgTm9k
ZTo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKQogI2lmIFBMQVRGT1JNKElPUykKICAg
ICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUoKSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQpIHx8IGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KTsKICNlbHNlCi0gICAgaWYgKCFpc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50
PigqdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodG9FbGVtZW50KHRoaXMp
LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKnRo
aXMpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxl
KSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB8fCBoYXNF
dmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHx8IGhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2FsLmNwcAppbmRleCAyOGQxNDMxOWUyOGY0MmVjZWVkNTU1
ODkxN2QyYTdjZDU0YTI3M2Q2Li44MmVjN2RiNjJlYWM5NDQyMmM1YTk5Nzg2MDkyMzY0Y2UyZDg0
OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNh
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3Bw
CkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuQmVEaXN0cmlidXRl
ZChjb25zdCBOb2RlKiBub2RlKQogICAgIGlmIChwYXJlbnQtPmlzU2hhZG93Um9vdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocGFyZW50LT5pc0VsZW1lbnROb2RlKCkgJiYg
dG9FbGVtZW50KHBhcmVudCktPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoaXM8RWxlbWVudD4ocGFy
ZW50KSAmJiBkb3duY2FzdDxFbGVtZW50PigqcGFyZW50KS5zaGFkb3dSb290KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCmluZGV4IDM5YTQ3ODRmYmUzYjlmODVkMjhjMWIyZDY4ZGQxYTJhZTE0NjY3YTEuLmRjODIx
OTBjNWJlMGZmYTMxNmUwNGI3Y2U3MjIzNDZmOGE4NmY1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcApAQCAtMjkwLDEwICsyOTAsMTAgQEAgUG9zaXRpb246OkFuY2hvclR5cGUgUG9zaXRpb246
OmFuY2hvclR5cGVGb3JMZWdhY3lFZGl0aW5nUG9zaXRpb24oTm9kZSogYW5jaG9yTm8KIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBpcyBjb25mdXNpbmcgKGRvZXMgaXQgcmV0dXJuIGFuY2hvck5vZGUo
KSBvciBjb250YWluZXJOb2RlKCk/KSBhbmQgc2hvdWxkIGJlIHJlbmFtZWQgb3IgcmVtb3ZlZAog
RWxlbWVudCogUG9zaXRpb246OmVsZW1lbnQoKSBjb25zdAogewotICAgIE5vZGUqIG4gPSBhbmNo
b3JOb2RlKCk7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
biA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG4pOworICAgIE5vZGUq
IG5vZGUgPSBhbmNob3JOb2RlKCk7CisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5v
ZGUpKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAogUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzKFBv
c2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA4OGI5
YjYxMDg4MjgwYzc5MzEwZjE4MGI0OTViZWRmYzFhZDlmOTQ1Li45ZWIwZGMwN2QyNDk3MTM2MzM5
ODJhODE0NDYyYjVjNDg3ZjRhZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTIyMjQsOCArMjIy
NCw4IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYgcXVhZHMpIGNvbnN0CiAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNTZXQucmVtb3ZlKHBhcmVu
dCk7CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiBzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUpICYm
ICFzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAg
ICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3Qg
PSB0b0VsZW1lbnQobm9kZSktPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpICYmIHNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZSkg
JiYgIXNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkgewor
ICAgICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVj
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CiAg
ICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAg
ICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7
CiAgICAgICAgICAgICAgICAgb3duZXJEb2N1bWVudCgpLmFkanVzdEZsb2F0UXVhZHNGb3JTY3Jv
bGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKGVsZW1lbnRRdWFkcywgcmVuZGVyQm94TW9k
ZWxPYmplY3QtPnN0eWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggNzBkMTJmODk5
OGJjZGM1YWU4NmE5MzY2ODBkMDdiNzI2ZjUwYmNmMi4uYmZlNWI2Zjg0N2I1ZDMxOWY2OTQyMTA4
M2EzZmFmNjg2MDkxNzQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC0xMDEsOSArMTAx
LDkgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiBpbmxpbmUgU2hhZG93Um9vdCog
Tm9kZTo6c2hhZG93Um9vdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc0VsZW1lbnROb2RlKCkpCisg
ICAgaWYgKCFpczxFbGVtZW50PigqdGhpcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiB0b0VsZW1lbnQodGhpcyktPnNoYWRvd1Jvb3QoKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8RWxlbWVudD4oKnRoaXMpLnNoYWRvd1Jvb3QoKTsKIH0KIAogaW5saW5lIENvbnRhaW5lck5v
ZGUqIE5vZGU6OnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
dGF0aWNOb2RlTGlzdC5jcHAKaW5kZXggN2UxZjRjMmI1NzEwM2M4Nzg5Njg3ZTRhMTRkZDY0MTMy
ZjA0OWRjOC4uOTQ5NjdiN2JlZmRjMThlMTgyMDRiMjUzNzlmZGE0Zjk1NjlhYWY2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIE5vZGUqIFN0
YXRpY05vZGVMaXN0OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNv
bnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gbV9ub2Rlcy5zaXplKCk7
IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBOb2RlJiBub2RlID0gY29uc3RfY2FzdDxOb2Rl
Jj4obV9ub2Rlc1tpXS5nZXQoKSk7Ci0gICAgICAgIGlmIChub2RlLmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQobm9kZSkuZ2V0SWRBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5nZXRJZEF0
dHJpYnV0ZSgpID09IGVsZW1lbnRJZCkKICAgICAgICAgICAgIHJldHVybiAmbm9kZTsKICAgICB9
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlQWRvcHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5j
cHAKaW5kZXggNjQxMGYyYzBhNmVmODZiMjhkN2JmY2E2ODlhNzEyMGNiYWNmYjJlZC4uMDQ1ZTg4
ZTQzMTk3YjgzZGFmYjhlYzNkOWQyNTMxMmI1ZmQ0N2FkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGVBZG9wdGVyLmNwcApAQCAtNjAsMTEgKzYwLDExIEBAIHZvaWQgVHJlZVNjb3BlQWRv
cHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKE5vZGUqIHJvb3QpIGNvbnN0CiAgICAgICAgICAgICAg
ICAgcmFyZURhdGEtPm5vZGVMaXN0cygpLT5hZG9wdFRyZWVTY29wZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxl
bWVudD4obm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAobm9kZS0+
aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkgewotICAgICAgICAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxBdHRyPj4mIGF0dHJzID0gdG9FbGVtZW50KG5vZGUpLT5hdHRyTm9kZUxpc3QoKTsK
KyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXR0cj4+JiBhdHRycyA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5hdHRyTm9kZUxpc3QoKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhdHRycy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBtb3ZlVHJl
ZVRvTmV3U2NvcGUoYXR0cnNbaV0uZ2V0KCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IGYyMTg1MmY2ZTA0ZDgzNmU1ZDVi
ODMxMjM3OGI5MGIzODJmZjQyZDYuLjg2ZDRhNTQ3ZmYyMDYwOWJkNjRmMWRlM2Q5MWFkMDAwZDUx
YzE5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CkBAIC00MjAsMTAgKzQyMCwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0
aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAKIHN0YXRpYyBDb250YWlu
ZXJOb2RlKiBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAg
ICB3aGlsZSAobm9kZSAmJiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhaXNTdHlsZVNwYW5P
clNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKHRvRWxlbWVudChub2RlKSkpKQorICAgIHdoaWxl
IChub2RlICYmICghaXM8RWxlbWVudD4obm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9u
bHlTdHlsZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQogICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIAotICAgIHJldHVybiBub2RlID8gbm9kZS0+cGFy
ZW50Tm9kZSgpIDogMDsKKyAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5vZGUoKSA6IG51
bGxwdHI7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxl
U3R5bGVTcGFucyhDb250YWluZXJOb2RlKiBkdW1teVNwYW5BbmNlc3RvcikKQEAgLTQ4Niw3ICs0
ODYsNyBAQCBIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0
aFVuaWNvZGVCaWRpKE5vZGUqIG5vZGUsIGJvb2wgYgogICAgIC8vIFNwbGl0IGV2ZXJ5IGFuY2Vz
dG9yIHRocm91Z2ggaGlnaGVzdCBhbmNlc3RvciB3aXRoIGVtYmVkZGluZy4KICAgICBSZWZQdHI8
Tm9kZT4gY3VycmVudE5vZGUgPSBub2RlOwogICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewotICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gdG9FbGVtZW50KGN1cnJlbnROb2RlLT5wYXJl
bnROb2RlKCkpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmIChiZWZvcmUgPyBj
dXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkgOiBjdXJyZW50Tm9kZS0+bmV4dFNpYmxpbmco
KSkKICAgICAgICAgICAgIHNwbGl0RWxlbWVudChwYXJlbnQsIGJlZm9yZSA/IGN1cnJlbnROb2Rl
IDogY3VycmVudE5vZGUtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBpZiAocGFyZW50ID09IGhp
Z2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdT
dHlsZSogc3R5bGUsIE5vZGUqCiAgICAgICAgIGdldENoaWxkTm9kZXMoKmN1cnJlbnQuZ2V0KCks
IGN1cnJlbnRDaGlsZHJlbik7CiAKICAgICAgICAgUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IHN0eWxl
ZEVsZW1lbnQ7Ci0gICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50PigqY3VycmVudCkgJiYgaXNT
dHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUodG9FbGVtZW50KGN1cnJlbnQuZ2V0KCkpKSkgewor
ICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oKmN1cnJlbnQpICYmIGlzU3R5bGVkSW5saW5l
RWxlbWVudFRvUmVtb3ZlKGRvd25jYXN0PEVsZW1lbnQ+KGN1cnJlbnQuZ2V0KCkpKSkgewogICAg
ICAgICAgICAgc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGN1cnJlbnQu
Z2V0KCkpOwogICAgICAgICAgICAgZWxlbWVudHNUb1B1c2hEb3duLmFwcGVuZCgqc3R5bGVkRWxl
bWVudCk7CiAgICAgICAgIH0KQEAgLTEyODYsOCArMTI4Niw4IEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYg
c3RhcnQsCiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gc3RhcnROb2RlLT5wcmV2aW91c1Np
YmxpbmcoKTsKIAogICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgYXJlSWRlbnRpY2FsRWxlbWVu
dHMoc3RhcnROb2RlLCBwcmV2aW91c1NpYmxpbmcpKSB7Ci0gICAgICAgIEVsZW1lbnQqIHByZXZp
b3VzRWxlbWVudCA9IHRvRWxlbWVudChwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gdG9FbGVtZW50KHN0YXJ0Tm9kZSk7CisgICAgICAgIEVsZW1lbnQqIHByZXZp
b3VzRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3VzU2libGluZyk7CisgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOwogICAgICAg
ICBOb2RlKiBzdGFydENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBBU1NF
UlQoc3RhcnRDaGlsZCk7CiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNF
bGVtZW50LCBlbGVtZW50KTsKQEAgLTEzMTksOCArMTMxOSw4IEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6Om1lcmdlRW5kV2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0CiAKICAgICBOb2RlKiBuZXh0U2libGluZyA9IGVuZE5vZGUtPm5leHRTaWJsaW5nKCk7
CiAgICAgaWYgKG5leHRTaWJsaW5nICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVuZE5vZGUsIG5l
eHRTaWJsaW5nKSkgewotICAgICAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IHRvRWxlbWVudChu
ZXh0U2libGluZyk7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoZW5kTm9k
ZSk7CisgICAgICAgIEVsZW1lbnQqIG5leHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obmV4
dFNpYmxpbmcpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
ZW5kTm9kZSk7CiAgICAgICAgIE5vZGUqIG5leHRDaGlsZCA9IG5leHRFbGVtZW50LT5maXJzdENo
aWxkKCk7CiAKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCBuZXh0RWxl
bWVudCk7CkBAIC0xMzU5LDE1ICsxMzU5LDE1IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnN1
cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxOb2RlPiBwYXNzZWRTdGFyCiAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50LT5uZXh0U2libGluZygpOwog
ICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c1NpYmxp
bmcoKTsKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmlzRWxlbWVudE5vZGUo
KSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpCi0gICAgICAgICYmIGFyZUlkZW50
aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIHRvRWxlbWVudChuZXh0U2libGluZy5nZXQoKSkp
KQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIHRvRWxlbWVu
dChuZXh0U2libGluZy5nZXQoKSkpOworICAgIGlmIChuZXh0U2libGluZyAmJiBpczxFbGVtZW50
PigqbmV4dFNpYmxpbmcpICYmIG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkKKyAgICAg
ICAgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVu
dD4obmV4dFNpYmxpbmcuZ2V0KCkpKSkKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhl
bGVtZW50LmdldCgpLCBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwogCi0g
ICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBwcmV2aW91c1NpYmxpbmctPmlzRWxlbWVudE5vZGUo
KSAmJiBwcmV2aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgIGlmIChwcmV2
aW91c1NpYmxpbmcgJiYgaXM8RWxlbWVudD4oKnByZXZpb3VzU2libGluZykgJiYgcHJldmlvdXNT
aWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgTm9kZSogbWVyZ2VkRWxlbWVu
dCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG1lcmdlZEVs
ZW1lbnQtPmlzRWxlbWVudE5vZGUoKSAmJiBtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxl
KCkKLSAgICAgICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKHRvRWxlbWVudChwcmV2aW91
c1NpYmxpbmcuZ2V0KCkpLCB0b0VsZW1lbnQobWVyZ2VkRWxlbWVudCkpKQotICAgICAgICAgICAg
bWVyZ2VJZGVudGljYWxFbGVtZW50cyh0b0VsZW1lbnQocHJldmlvdXNTaWJsaW5nLmdldCgpKSwg
dG9FbGVtZW50KG1lcmdlZEVsZW1lbnQpKTsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG1lcmdl
ZEVsZW1lbnQpICYmIG1lcmdlZEVsZW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKQorICAgICAgICAg
ICAgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNTaWJs
aW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4obWVyZ2VkRWxlbWVudCkpKQorICAgICAgICAg
ICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxp
bmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50PihtZXJnZWRFbGVtZW50KSk7CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBjYWxsIHVwZGF0ZVN0YXJ0RW5kIGlmIHRo
ZSBzdGFydCBvciBlbmQgd2FzIGluIHRoZSBub2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAppbmRleCBmNjE3MTFhYTlmMDA3ZDU2ZTBk
Y2NjYTEyZDNlZmZkNTgyZmFjMThkLi41NTIzM2M1YmM5OTg0NDM4YWEzZmI1ZjllYTkzZGJhZWE5
YWE5YzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZC5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICBhbmNlc3RvcnMuYXBwZW5kKG5vZGUpOwogICAgIAogICAg
IC8vIEluc2VydCBhIGNsb25lIG9mIHRoZSB0b3AgYmxvY2txdW90ZSBhZnRlciB0aGUgYnJlYWsu
Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGNsb25lZEJsb2NrcXVvdGUgPSB0b0VsZW1lbnQodG9wQmxv
Y2txdW90ZSktPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOworICAgIFJlZlB0cjxFbGVt
ZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gZG93bmNhc3Q8RWxlbWVudD4oKnRvcEJsb2NrcXVvdGUp
LmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwogICAgIGluc2VydE5vZGVBZnRlcihjbG9u
ZWRCbG9ja3F1b3RlLmdldCgpLCBicmVha05vZGUuZ2V0KCkpOwogICAgIAogICAgIC8vIENsb25l
IHN0YXJ0Tm9kZSdzIGFuY2VzdG9ycyBpbnRvIHRoZSBjbG9uZWQgYmxvY2txdW90ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggNWRk
NGMzMGE2NDdlY2M5MzlmOGVmYTA2N2Q0YzdkOGViYmNlMWU1Ni4uYTZlNTU0MTY2OGM0N2U1Njg4
YTNlYmI5NTY2MzJiNTQ4MDQ3ZWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM5LDcgKzM5LDkgQEAKICNpbmNsdWRlICJFbGVt
ZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmgiCkBAIC0zMjIsMTQgKzMyNCwxNCBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoKQogCiBib29sIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppc1JlbW92YWJsZUJsb2NrKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
LT5oYXNUYWdOYW1lKGRpdlRhZykpCisgICAgaWYgKCFpczxIVE1MRGl2RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CiAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+Zmlyc3RDaGls
ZCgpICE9IHBhcmVudE5vZGUtPmxhc3RDaGlsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+aGFzQXR0cmlidXRlcygpKQorICAgIGlmICghZG93
bmNhc3Q8SFRNTERpdkVsZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2OSw3ICsxMDcxLDcgQEAgdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcGhVbmRlck5ld0VsZW1lbnQoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LAogICAgICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNp
emUoKTsgaSAhPSAwOyAtLWkpIHsKICAgICAgICAgICAgIE5vZGUqIGl0ZW0gPSBhbmNlc3RvcnNb
aSAtIDFdLmdldCgpOwogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gaXRlbS0+Y2xv
bmVOb2RlKGlzUmVuZGVyZWRUYWJsZShpdGVtKSk7Ci0gICAgICAgICAgICBhcHBlbmROb2RlKGNo
aWxkLCB0b0VsZW1lbnQobGFzdE5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGFwcGVuZE5vZGUo
Y2hpbGQsIGRvd25jYXN0PEVsZW1lbnQ+KGxhc3ROb2RlLmdldCgpKSk7CiAgICAgICAgICAgICBs
YXN0Tm9kZSA9IGNoaWxkLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNDcsMTMg
KzEzNDksMTMgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlz
dEl0ZW0oKQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0Jsb2NrID0gMDsKICAgICBpZiAoQ29u
dGFpbmVyTm9kZSogYmxvY2tFbmNsb3NpbmdMaXN0ID0gbGlzdE5vZGUtPnBhcmVudE5vZGUoKSkg
ewotICAgICAgICBpZiAoYmxvY2tFbmNsb3NpbmdMaXN0LT5oYXNUYWdOYW1lKGxpVGFnKSkgeyAv
LyBsaXN0Tm9kZSBpcyBpbnNpZGUgYW5vdGhlciBsaXN0IGl0ZW0KKyAgICAgICAgaWYgKGlzPEhU
TUxMSUVsZW1lbnQ+KGJsb2NrRW5jbG9zaW5nTGlzdCkpIHsgLy8gbGlzdE5vZGUgaXMgaW5zaWRl
IGFub3RoZXIgbGlzdCBpdGVtCiAgICAgICAgICAgICBpZiAodmlzaWJsZVBvc2l0aW9uQWZ0ZXJO
b2RlKGJsb2NrRW5jbG9zaW5nTGlzdCkgPT0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKGxpc3RO
b2RlLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIElmIGxpc3ROb2RlIGFwcGVhcnMgYXQg
dGhlIGVuZCBvZiB0aGUgb3V0ZXIgbGlzdCBpdGVtLCB0aGVuIG1vdmUgbGlzdE5vZGUgb3V0c2lk
ZSBvZiB0aGlzIGxpc3QgaXRlbQogICAgICAgICAgICAgICAgIC8vIGUuZy4gPHVsPjxsaT5oZWxs
byA8dWw+PGxpPjxicj48L2xpPjwvdWw+IDwvbGk+PC91bD4gc2hvdWxkIGJlY29tZSA8dWw+PGxp
PmhlbGxvPC9saT4gPHVsPjxsaT48YnI+PC9saT48L3VsPiA8L3VsPiBhZnRlciB0aGlzIHNlY3Rp
b24KICAgICAgICAgICAgICAgICAvLyBJZiBsaXN0Tm9kZSBkb2VzIE5PVCBhcHBlYXIgYXQgdGhl
IGVuZCwgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIgaXQgYXMgYSByZWd1bGFyIHBhcmFncmFwaC4K
ICAgICAgICAgICAgICAgICAvLyBlLmcuIDx1bD48bGk+IDx1bD48bGk+PGJyPjwvbGk+PC91bD4g
aGVsbG88L2xpPjwvdWw+IHNob3VsZCBiZWNvbWUgPHVsPjxsaT4gPGRpdj48YnI+PC9kaXY+IGhl
bGxvPC9saT48L3VsPiBhdCB0aGUgZW5kCi0gICAgICAgICAgICAgICAgc3BsaXRFbGVtZW50KHRv
RWxlbWVudChibG9ja0VuY2xvc2luZ0xpc3QpLCBsaXN0Tm9kZSk7CisgICAgICAgICAgICAgICAg
c3BsaXRFbGVtZW50KGRvd25jYXN0PEhUTUxMSUVsZW1lbnQ+KGJsb2NrRW5jbG9zaW5nTGlzdCks
IGxpc3ROb2RlKTsKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
KGxpc3ROb2RlLT5wYXJlbnROb2RlKCkpOwogICAgICAgICAgICAgICAgIG5ld0Jsb2NrID0gY3Jl
YXRlTGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgfQpAQCAtMTM2OSw3
ICsxMzcxLDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlz
dEl0ZW0oKQogICAgIGlmIChpc0xpc3RJdGVtKG5leHRMaXN0Tm9kZS5nZXQoKSkgfHwgaXNMaXN0
RWxlbWVudChuZXh0TGlzdE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIC8vIElmIGVtcHR5TGlzdEl0
ZW0gZm9sbG93cyBhbm90aGVyIGxpc3QgaXRlbSBvciBuZXN0ZWQgbGlzdCwgc3BsaXQgdGhlIGxp
c3Qgbm9kZS4KICAgICAgICAgaWYgKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkg
fHwgaXNMaXN0RWxlbWVudChwcmV2aW91c0xpc3ROb2RlLmdldCgpKSkKLSAgICAgICAgICAgIHNw
bGl0RWxlbWVudCh0b0VsZW1lbnQobGlzdE5vZGUuZ2V0KCkpLCBlbXB0eUxpc3RJdGVtKTsKKyAg
ICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxFbGVtZW50PihsaXN0Tm9kZS5nZXQoKSks
IGVtcHR5TGlzdEl0ZW0pOwogCiAgICAgICAgIC8vIElmIGVtcHR5TGlzdEl0ZW0gaXMgZm9sbG93
ZWQgYnkgb3RoZXIgbGlzdCBpdGVtIG9yIG5lc3RlZCBsaXN0LCB0aGVuIGluc2VydCBuZXdCbG9j
ayBiZWZvcmUgdGhlIGxpc3Qgbm9kZS4KICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIHNwbGl0
dGVkIHRoZSBlbGVtZW50LCBlbXB0eUxpc3RJdGVtIGlzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBsaXN0IG5vZGUuCkBAIC0xNTIyLDEzICsxNTI0LDEzIEBAIFBhc3NSZWZQdHI8Tm9kZT4gQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VHJlZVRvTm9kZShOb2RlKiBzdGFydCwgTm9kZSogZW5k
LCBiCiAKICAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9IGVuZDsKICAgICBmb3IgKG5vZGUgPSBz
dGFydDsgbm9kZSAmJiBub2RlLT5wYXJlbnROb2RlKCkgIT0gZW5kTm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPnBhcmVudE5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUtPnBhcmVudE5vZGUoKSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgLy8gRG8gbm90IHNwbGl0IGEgbm9kZSB3aGVu
IGRvaW5nIHNvIGludHJvZHVjZXMgYW4gZW1wdHkgbm9kZS4KICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uSW5QYXJlbnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUtPnBhcmVudE5v
ZGUoKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluTm9kZSA9IGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKTsKICAgICAgICAgaWYgKHBvc2l0aW9uSW5Q
YXJlbnQgIT0gcG9zaXRpb25Jbk5vZGUpCi0gICAgICAgICAgICBzcGxpdEVsZW1lbnQodG9FbGVt
ZW50KG5vZGUtPnBhcmVudE5vZGUoKSksIG5vZGUpOworICAgICAgICAgICAgc3BsaXRFbGVtZW50
KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUtPnBhcmVudE5vZGUoKSksIG5vZGUpOwogICAgIH0KIAog
ICAgIHJldHVybiBub2RlLnJlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IGJlMzc2ZmY5M2Y5MTkzMzFmNzA1NmM1
MThhOGI3NGQ5ZjEyMDM3NGQuLmFiYzUzMzZmMDE1NTI1MDJkNGM2NWNmNTQ2N2I0ZTBiMjMwM2U4
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcApAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
aHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTExpbmtFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC00MzQs
NyArNDM2LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1l
bnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHIKICAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsKICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdl
LT5wYXN0TGFzdE5vZGUoKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoKG5vZGUtPmhhc1RhZ05h
bWUoc3R5bGVUYWcpICYmICEodG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5oYXNBdHRyaWJ1dGUoc2Nv
cGVkQXR0cikpKSB8fCBub2RlLT5oYXNUYWdOYW1lKGxpbmtUYWcpKSB7CisgICAgICAgIGlmICgo
aXM8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50
Pigqbm9kZSkuaGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpKSB8fCBpczxIVE1MTGlua0VsZW1lbnQ+
KCpub2RlKSkgewogICAgICAgICAgICAgbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKICAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgICAgICAgICAgaWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCA5MGRhMDE5MDIwNTJjMDZlNzRmMjE1OGNkODEwYjRjNjc2Njk1OTM3Li5h
YzQ1OGFjMDBhYTU5NzdjNjNhNGNjYTU1MGM1ZDY2NzcxM2RiMTk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC0yMzc4LDcgKzIzNzgsNyBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENo
ZWNraW5nRW5hYmxlZEZvcihOb2RlKiBub2RlKSBjb25zdAogewogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0g
bm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFyZW50RWxl
bWVudCgpOworICAgIGNvbnN0IEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gaXM8RWxlbWVudD4o
bm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsK
ICAgICBpZiAoIWZvY3VzZWRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIGZvY3VzZWRFbGVtZW50LT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CkBAIC0zMTAwLDcg
KzMxMDAsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkg
Y29uc3QKICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBkb2N1bWVudCgpLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJib2R5Iik7CiAgICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBhcHBseUVkaXRp
bmdTdHlsZVRvRWxlbWVudCh0b0VsZW1lbnQobGlzdC0+aXRlbShpKSkpOworICAgICAgICBhcHBs
eUVkaXRpbmdTdHlsZVRvRWxlbWVudChkb3duY2FzdDxFbGVtZW50PihsaXN0LT5pdGVtKGkpKSk7
CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRC
bG9ja0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1h
bmQuY3BwCmluZGV4IDQ2OTBmMjE3NTM1NzMwYjI0ODc5NWE5OGE4NTY2MzZmOTYzMDdjNmYuLjMx
NzQ1ZjkzNWJmYmI3OTBmOWQxYjZmNGQyZWQ4MTQ1ZDM2Y2M3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgc3Rh
dGljIE5vZGUqIGVuY2xvc2luZ0Jsb2NrVG9TcGxpdFRyZWVUbyhOb2RlKiBzdGFydE5vZGUpOwog
c3RhdGljIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSk7CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soTm9k
ZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIGlzRWxlbWVu
dEZvckZvcm1hdEJsb2NrKHRvRWxlbWVudChub2RlKS0+dGFnUU5hbWUoKSk7CisgICAgcmV0dXJu
IGlzPEVsZW1lbnQ+KG5vZGUpICYmIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKS50YWdRTmFtZSgpKTsKIH0KIAogRm9ybWF0QmxvY2tDb21tYW5kOjpGb3Jt
YXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKQpAQCAtMTAwLDIwICsxMDAsMjAgQEAgdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZv
cm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwKIEVs
ZW1lbnQqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChS
YW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgd2hpbGUgKGNv
bW1vbkFuY2VzdG9yICYmICFpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb21tb25BbmNlc3Rvcikp
CiAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3ItPnBhcmVudE5vZGUoKTsK
IAogICAgIGlmICghY29tbW9uQW5jZXN0b3IpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmICghcm9v
dEVkaXRhYmxlRWxlbWVudCB8fCBjb21tb25BbmNlc3Rvci0+Y29udGFpbnMocm9vdEVkaXRhYmxl
RWxlbWVudCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBjb21tb25BbmNlc3Rvci0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KGNv
bW1vbkFuY2VzdG9yKSA6IDA7CisgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLT5pc0VsZW1lbnRO
b2RlKCkgPyBkb3duY2FzdDxFbGVtZW50Pihjb21tb25BbmNlc3RvcikgOiBudWxscHRyOwogfQog
CiBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGMxN2Y2
YjkxNmY2ODA5OWYwODUzOTZlOGY3YzE5OGM3ODNjNDcyODcuLjMwM2Q2NmEwM2Y1ZTk2ZWY3NWZj
YTViOTBhMWNmZTE2YjE3NWI0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0zOTgsMTAgKzM5OCwxMCBAQCBzdGF0aWMgYm9vbCByZW1vdmluZ05vZGVS
ZW1vdmVzUG9zaXRpb24oTm9kZSogbm9kZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAg
IGlmIChwb3NpdGlvbi5hbmNob3JOb2RlKCkgPT0gbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0g
dG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKICAgICByZXR1cm4gZWxlbWVudC0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00o
cG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKIH0KIApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgdm9pZCBD
YXJldEJhc2U6OnBhaW50Q2FyZXQoTm9kZSogbm9kZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBMYXlvdXRQb2kKIAogICAgIENvbG9yIGNhcmV0Q29sb3IgPSBDb2xvcjo6YmxhY2s7
CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQjsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUp
IDogbm9kZS0+cGFyZW50RWxlbWVudCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVt
ZW50Pihub2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiAKICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7
CkBAIC0xNTIwLDEzICsxNTIwLDEzIEBAIHZvaWQgQ2FyZXRCYXNlOjpwYWludENhcmV0KE5vZGUq
IG5vZGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0UG9pCiAjZW5kaWYK
IH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QqIHIs
IGJvb2wgc2VsZWN0ZWQpIGNvbnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVy
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgc2VsZWN0ZWQpIGNvbnN0CiB7Ci0gICAgaWYg
KHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQoci0+bm9kZSgpKTsKKyAgICBpZiAoaXM8RWxlbWVudD4ocmVuZGVyZXItPm5v
ZGUoKSkpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHJl
bmRlcmVyLT5ub2RlKCkpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVj
dGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICB9IGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7Ci0gICAgICAgIFJlbmRl
clRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChyKTsKKyAgICB9IGVsc2UgaWYgKHJl
bmRlcmVyLT5pc1RleHQoKSkgeworICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0
b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAgICAgICBpZiAoIXRleHRSZW5kZXJlci0+dGV4dExl
bmd0aCgpIHx8ICF0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzI3RleHQgKGVtcHR5KVxuIiwgc2VsZWN0ZWQgPyAiPT0+ICIgOiAi
ICAgICIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzNyw5ICsxNTM3LDkgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QqIHIsIGJvb2wgc2VsZWN0
ZWQpIGNvbnN0CiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKICAgICAg
ICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQoKS5jb250YWluZXJOb2RlKCkp
CisgICAgICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5zdGFydCgp
LmNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5z
dGFydCgpLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCkpCisgICAg
ICAgICAgICBlbHNlIGlmIChyZW5kZXJlci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLmNv
bnRhaW5lck5vZGUoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5lbmQo
KS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAKICAgICAgICAgICAgIGludCBwb3M7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmlu
ZGV4IDNhMWMxZTYwOWE4ZDRmNDRiZWQxYmZiNjNhOTk4M2NiNDU0ZmFlYTkuLmE3YzdjNzFhYjNl
YjNiNWQ1NTdlNjA2Yzg0NjdjY2Q5OWMyMGI1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBJ
bmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgICAgICAgICAgICAg
aWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKICAgICAgICAg
ICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykKICAg
ICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFyZW50Tm9kZSgpLT5oYXNF
ZGl0YWJsZVN0eWxlKCkpIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhlcmUgaXMgbm8gcGxhY2Ug
dG8gZ28hCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudCh0b0VsZW1lbnQoc3BsaXRQ
b2ludFBhcmVudCksIHNwbGl0UG9pbnQpOworICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1l
bnQoZG93bmNhc3Q8RWxlbWVudD4oc3BsaXRQb2ludFBhcmVudCksIHNwbGl0UG9pbnQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEluZGVudE91
dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKCkKICAgICBlbHNlIHsKICAgICAgICAgLy8g
V2Ugc3BsaXQgdGhlIGJsb2NrcXVvdGUgYXQgd2hlcmUgd2Ugc3RhcnQgb3V0ZGVudGluZy4KICAg
ICAgICAgTm9kZSogaGlnaGVzdElubGluZU5vZGUgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlw
ZSh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLCBpc0lubGluZSwgQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnksIGVuY2xvc2luZ0Jsb2NrRmxvdyk7Ci0gICAgICAgIHNw
bGl0RWxlbWVudCh0b0VsZW1lbnQoZW5jbG9zaW5nTm9kZSksIChoaWdoZXN0SW5saW5lTm9kZSkg
PyBoaWdoZXN0SW5saW5lTm9kZSA6IHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxF
bGVtZW50PihlbmNsb3NpbmdOb2RlKSwgaGlnaGVzdElubGluZU5vZGUgPyBoaWdoZXN0SW5saW5l
Tm9kZSA6IHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgfQogICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJy
ZWFrRWxlbWVudChkb2N1bWVudCgpKTsKICAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVy
LCBzcGxpdEJsb2NrcXVvdGVOb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IDJiZmMxMDc0
NjU4ZmMyNGJlZWY2ZjEyMTA3ZTI3MDIyMzE5NmVhY2MuLmU5ZmU1YWQ0ZGUzNjA3OGVjYzliMWIx
MmE5MDZjY2ZmNDlmMTRiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApAQCAtMjI3LDcgKzIyNyw3
IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgICAgICAvLyBpbnRvIGFuIHVucXVvdGVkIGFyZWEuIFdlIHRoZW4gZG9uJ3Qgd2FudCB0aGUg
bmV3bGluZSB3aXRoaW4gdGhlIGJsb2NrcXVvdGUgb3IgZWxzZSBpdCB3aWxsIGFsc28gYmUgcXVv
dGVkLgogICAgICAgICAgICAgaWYgKG1fcGFzdGVCbG9ja3F1dG9lSW50b1VucXVvdGVkQXJlYSkg
ewogICAgICAgICAgICAgICAgIGlmIChOb2RlKiBoaWdoZXN0QmxvY2txdW90ZSA9IGhpZ2hlc3RF
bmNsb3NpbmdOb2RlT2ZUeXBlKGNhbm9uaWNhbFBvcywgJmlzTWFpbEJsb2NrcXVvdGUpKQotICAg
ICAgICAgICAgICAgICAgICBzdGFydEJsb2NrID0gdG9FbGVtZW50KGhpZ2hlc3RCbG9ja3F1b3Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRCbG9jayA9IGRvd25jYXN0PEVsZW1lbnQ+KGhp
Z2hlc3RCbG9ja3F1b3RlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTW9zdCBv
ZiB0aGUgdGltZSB3ZSB3YW50IHRvIHN0YXkgYXQgdGhlIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIHN0
YXJ0QmxvY2sgKGUuZy4sIHdoZW4gbmVzdGluZyB3aXRoaW4gbGlzdHMpLiAgSG93ZXZlciwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggNzNlMTli
YWZkN2Q1MjcyYTZiMDM3ZmIwZmE4ZjY1ZDY3ZmNhYWU3ZC4uMWQ3ZWZhMzNjMGFkMGI0N2JiNTcy
OTZiYzBkMTI4NTlmOTY1YWRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAKQEAgLTEzOSw5ICsxMzksOSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5v
ZAogICAgIGlmICgmdGFyZ2V0Tm9kZSA9PSBub2RlVG9Ta2lwKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAodGFnTmFtZXNUb1NraXAgJiYgdGFyZ2V0Tm9kZS5pc0VsZW1lbnROb2RlKCkpIHsK
KyAgICBpZiAodGFnTmFtZXNUb1NraXAgJiYgaXM8RWxlbWVudD4odGFyZ2V0Tm9kZSkpIHsKICAg
ICAgICAgZm9yIChhdXRvJiBuYW1lIDogKnRhZ05hbWVzVG9Ta2lwKSB7Ci0gICAgICAgICAgICBp
ZiAodG9FbGVtZW50KHRhcmdldE5vZGUpLmhhc1RhZ05hbWUobmFtZSkpCisgICAgICAgICAgICBp
ZiAoZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0Tm9kZSkuaGFzVGFnTmFtZShuYW1lKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC01NzAsNyArNTcwLDcgQEAg
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBjb25zdCBOb2RlJiBub2QKICAgICAgICAgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0
aW9uKHJlc3VsdCwgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihub2RlKS50YXJnZXQo
KSwgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihub2RlKS5kYXRhKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKLSAgICAgICAgYXBwZW5kRWxl
bWVudChyZXN1bHQsIHRvRWxlbWVudChub2RlKSwgbmFtZXNwYWNlcyk7CisgICAgICAgIGFwcGVu
ZEVsZW1lbnQocmVzdWx0LCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgbmFtZXNwYWNlcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgogICAgICAg
ICBhcHBlbmRDREFUQVNlY3Rpb24ocmVzdWx0LCBkb3duY2FzdDxDREFUQVNlY3Rpb24+KG5vZGUp
LmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5k
ZXggZmNmMDVlYmFiODgyMDBjZGUwNWI1NDkzOGU3OTQzNzExZDY2ZDk4Mi4uOGIzMGQ0NmI4M2Fl
N2JiZTgxNTU0OWI5MWI0ZDBhYTRlZGIzYzRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaApAQCAtNzYsOCArNzYsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRFbmRUYWcoY29u
c3QgTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmlzRWxlbWVudE5vZGUoKSkK
LSAgICAgICAgICAgIGFwcGVuZEVuZFRhZyh0b0VsZW1lbnQobm9kZSkpOworICAgICAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgICAgICBhcHBlbmRFbmRUYWcoZG93bmNhc3Q8RWxl
bWVudD4obm9kZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoY29u
c3QgRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwCmluZGV4IGU1Zjg4NGFmMmJkMjJjZWQwMDY5ZTBmZmMxZjM0ZmQ3
NmRiNWNjMjIuLmRmY2U1NTNkNTMwYWU4MTI3ZDJkN2UzYmYyNWE4ZTJlY2MxOWQzOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgTm9kZSogcHJldmlvdXNJdGVtID0gc3RhcnRMaXN0Q2hpbGQt
PnJlbmRlcmVyKCktPnByZXZpb3VzU2libGluZygpLT5ub2RlKCk7CiAgICAgaWYgKGlzTGlzdEVs
ZW1lbnQocHJldmlvdXNJdGVtKSkgewogICAgICAgICAvLyBtb3ZlIG5vZGVzIHVwIGludG8gcHJl
Y2VkaW5nIGxpc3QKLSAgICAgICAgYXBwZW5kU2libGluZ05vZGVSYW5nZShzdGFydExpc3RDaGls
ZCwgZW5kTGlzdENoaWxkLCB0b0VsZW1lbnQocHJldmlvdXNJdGVtKSk7CisgICAgICAgIGFwcGVu
ZFNpYmxpbmdOb2RlUmFuZ2Uoc3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RDaGlsZCwgZG93bmNhc3Q8
RWxlbWVudD4ocHJldmlvdXNJdGVtKSk7CiAgICAgICAgIG1fbGlzdEVsZW1lbnQgPSBwcmV2aW91
c0l0ZW07CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gY3JlYXRlIGEgc3VibGlzdCBmb3IgdGhl
IHByZWNlZGluZyBlbGVtZW50IGFuZCBtb3ZlIG5vZGVzIHRoZXJlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDhlODhkNTAy
YTAxYzEwZmY2NmY2ZmQ2MGNmNDcyNmIzZjYwMzA4NzkuLjE1NWUxN2FmNzU5YjQwMTBhOTZmNDRl
ODBjN2E4OTMwNDMxZjY2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00MzAsNyArNDMwLDcgQEAgYm9vbCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkTWVyZ2VFbmQoYm9vbCBzZWxlY3Rpb25FbmRXYXNFbmRP
ZlBhcmFncmFwaCkKIAogc3RhdGljIGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29u
c3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGJs
b2NrcXVvdGVUYWcpICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSkt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IEFwcGxlUGFzdGVBc1F1b3RhdGlvbjsKKyAgICBy
ZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpICYmIGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBBcHBsZVBhc3RlQXNR
dW90YXRpb247CiB9CiAKIHN0YXRpYyBib29sIGlzSGVhZGVyRWxlbWVudChjb25zdCBOb2RlKiBh
KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHN0YXRpYyBib29sIGlzSGVhZGVyRWxlbWVudChjb25zdCBO
b2RlKiBhKQogCiBzdGF0aWMgYm9vbCBoYXZlU2FtZVRhZ05hbWUoTm9kZSogYSwgTm9kZSogYikK
IHsKLSAgICByZXR1cm4gYSAmJiBiICYmIGEtPmlzRWxlbWVudE5vZGUoKSAmJiBiLT5pc0VsZW1l
bnROb2RlKCkgJiYgdG9FbGVtZW50KGEpLT50YWdOYW1lKCkgPT0gdG9FbGVtZW50KGIpLT50YWdO
YW1lKCk7CisgICAgcmV0dXJuIGEgJiYgYiAmJiBpczxFbGVtZW50PihhKSAmJiBpczxFbGVtZW50
PihiKSAmJiBkb3duY2FzdDxFbGVtZW50PigqYSkudGFnTmFtZSgpID09IGRvd25jYXN0PEVsZW1l
bnQ+KCpiKS50YWdOYW1lKCk7CiB9CiAKIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNo
b3VsZE1lcmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc291cmNlLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGRlc3RpbmF0aW9uKQpAQCAtNzU1LDcgKzc1NSw3IEBAIHN0YXRpYyBib29sIGhhbmRs
ZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24oUmVwbGFjZW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IGNvbnN0CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdHJpbmcgY29tcGFyaXNvbiBpcyBhIG5haXZl
IHdheSBvZiBjb21wYXJpbmcgdHdvIHN0eWxlcy4KICAgICAvLyBXZSBzaG91bGQgYmUgdGFraW5n
IHRoZSBkaWZmIGFuZCBjaGVjayB0aGF0IHRoZSBkaWZmIGlzIGVtcHR5LgotICAgIGlmIChzdHls
ZVRleHQgIT0gdG9FbGVtZW50KHdyYXBwaW5nU3R5bGVTcGFuKS0+Z2V0QXR0cmlidXRlKHN0eWxl
QXR0cikpCisgICAgaWYgKHN0eWxlVGV4dCAhPSBkb3duY2FzdDxFbGVtZW50Pigqd3JhcHBpbmdT
dHlsZVNwYW4pLmdldEF0dHJpYnV0ZShzdHlsZUF0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBmcmFnbWVudC5yZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdyYXBwaW5nU3R5
bGVTcGFuKTsKQEAgLTEyMzQsNyArMTIzNCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICBtZXJnZUVuZElmTmVlZGVkKCk7CiAKICAgICBpZiAoTm9k
ZSogbWFpbEJsb2NrcXVvdGUgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0aW9uQXRTdGFydE9m
SW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKSwgaXNNYWlsUGFzdGVBc1F1b3RhdGlv
bk5vZGUpKQotICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKHRvRWxlbWVudChtYWlsQmxvY2tx
dW90ZSksIGNsYXNzQXR0cik7CisgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8
RWxlbWVudD4obWFpbEJsb2NrcXVvdGUpLCBjbGFzc0F0dHIpOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1TbWFydFJlcGxhY2UoKSkKICAgICAgICAgYWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggNzA3NzZmYzY1NTRm
NTVkYTUwOTU1OGNmYmY4YjBkZjI0ZDAzYjhmYi4uZTk1ZDg1NDZlYzFlMDQzNTA4MmJmMDg5MDg2
ZDJjNmIzNzhhM2Y2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApA
QCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgU3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZShSYW5nZSog
cmFuZ2UpIGNvbnN0CiAgICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UtPmZpcnN0Tm9kZSgpIHx8ICFy
YW5nZS0+Zmlyc3ROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICF0b0VsZW1lbnQobm9kZSktPmlzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAobm9kZSAmJiBpczxFbGVtZW50Pihub2RlKSAmJiAh
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5jcHAKaW5kZXggNzBkNWI1NzQ1MzQzMTJkNjdmNzY2NDA0YTBhZWRlZGYxMGU3NGIw
ZC4uOGY3YmRmNTg0MjhmMmM1NWY2Nzk4YzA3NjQ1YTQ4N2Y1ODlhYjFmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHZvaWQgU3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFwYXJlbnRSZW5k
ZXJlciB8fCAhcGFyZW50UmVuZGVyZXItPmlzSW5saW5lKCkpIHsKICAgICAgICAgd3JhcENvbnRl
bnRzSW5EdW1teVNwYW4ocGFyZW50KTsKICAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IHBhcmVu
dC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgIWZpcnN0Q2hpbGQt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFmaXJzdENoaWxkIHx8ICFpczxFbGVtZW50
PihmaXJzdENoaWxkKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcGFyZW50ID0gdG9F
bGVtZW50KGZpcnN0Q2hpbGQpOworICAgICAgICBwYXJlbnQgPSBkb3duY2FzdDxFbGVtZW50Pihm
aXJzdENoaWxkKTsKICAgICB9CiAKICAgICBzcGxpdEVsZW1lbnQocGFyZW50LCBtX3RleHQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDI1N2Y0YjQzOWU3NTRk
NWNmYjIzMDUzMjA3ZDU5MmYxYzgxODYzNjUuLmE1ZDI4NmM1YjRhOGJiY2RiNTk2ZjA4NzExNmQ4
MDk5YWU2YmM2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAg
LTI1NSw4ICsyNTUsOCBAQCBib29sIGlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKICAgICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSB8fCByZW5kZXJlci0+
aXNXaWRnZXQoKSB8fCByZW5kZXJlci0+aXNNZWRpYSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmIChyZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzRWxlbWVu
dE5vZGUoKSkgewotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpyZW5kZXJl
ci0+bm9kZSgpKTsKKyAgICBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiBpczxFbGVtZW50PihyZW5k
ZXJlci0+bm9kZSgpKSkgeworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpOwogICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTExlZ2VuZEVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlz
PEhUTUxNZXRlckVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxQcm9ncmVzc0VsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0dHIpLCAiaW1nIikpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggZDQ4ZGEw
ZTY0OWRlOTk2ZTc4YzAzYmQzNzU4ZmU2YjZmZTgzZjA5NS4uYTdlMGI0Nzg2NzI5ZGJiNmUyMDlj
ZWJlYWYwMmM0NjM4NjFhNTRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCAiRnJhbWVMb2FkZXIu
aCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MRnJhbWVFbGVtZW50QmFz
ZS5oIgorI2ltcG9ydCAiSFRNTEltYWdlRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTElucHV0RWxl
bWVudC5oIgogI2ltcG9ydCAiSFRNTE1ldGFFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMu
aCIKQEAgLTczOCwxNCArNzM5LDE0IEBAIHN0YXRpYyBib29sIHN0cmluZ0Zyb21DU1NWYWx1ZShD
U1NWYWx1ZSYgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogCiBTdHJpbmcgSFRNTENvbnZlcnRlckNh
Y2hlczo6cHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlkKQogewotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgIGlmIChOb2RlKiBwYXJlbnQgPSBub2RlLnBhcmVu
dE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlRm9yTm9kZSgqcGFyZW50
LCBwcm9wZXJ0eUlkKTsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAgIGJv
b2wgaW5oZXJpdCA9IGZhbHNlOwotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxl
bWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAgICAgICBTdHJpbmcgcmVzdWx0OwogICAg
ICAgICBpZiAoc3RyaW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KSkKQEAgLTg4MywxMyAr
ODg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1CiAKIGJvb2wgSFRNTENvbnZlcnRlckNh
Y2hlczo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SWQsIGZsb2F0JiByZXN1bHQpCiB7Ci0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5v
ZGUoKSkgeworICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgaWYgKENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0
b0VsZW1lbnQobm9kZSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVBy
b3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewogICAgICAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVlKHRv
Q1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTA1MiwxMyArMTA1MywxMyBAQCBzdGF0aWMgQ29sb3Igbm9ybWFsaXplZENvbG9y
KENvbG9yIGNvbG9yLCBib29sIGlnbm9yZUJsYWNrKQogCiBDb2xvciBIVE1MQ29udmVydGVyQ2Fj
aGVzOjpjb2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCkKIHsKLSAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gY29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9k
ZSgqcGFyZW50LCBwcm9wZXJ0eUlkKTsKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgfQog
Ci0gICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3Bl
cnR5SWQpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NT
UHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkpCiAgICAgICAgICAgICByZXR1cm4g
bm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JB
MzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKQEAgLTEzNTYsMTEg
KzEzNTcsMTEgQEAgTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphdHRyaWJ1dGVzRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQogTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphZ2dy
ZWdhdGVkQXR0cmlidXRlc0ZvckFuY2VzdG9ycyhDaGFyYWN0ZXJEYXRhJiBub2RlKQogewogICAg
IE5vZGUqIGFuY2VzdG9yID0gbm9kZS5wYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGFuY2VzdG9y
ICYmICFhbmNlc3Rvci0+aXNFbGVtZW50Tm9kZSgpKQorICAgIHdoaWxlIChhbmNlc3RvciAmJiAh
aXM8RWxlbWVudD4oYW5jZXN0b3IpKQogICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnROb2RlKCk7CiAgICAgaWYgKCFhbmNlc3RvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycygq
dG9FbGVtZW50KGFuY2VzdG9yKSk7CisgICAgcmV0dXJuIGFnZ3JlZ2F0ZWRBdHRyaWJ1dGVzRm9y
RWxlbWVudEFuZEl0c0FuY2VzdG9ycyhkb3duY2FzdDxFbGVtZW50PigqYW5jZXN0b3IpKTsKIH0K
IAogTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVs
ZW1lbnRBbmRJdHNBbmNlc3RvcnMoRWxlbWVudCYgZWxlbWVudCkKQEAgLTEzNzMsNyArMTM3NCw3
IEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JF
bGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lCiAgICAgQVNTRVJUKGF0dHJpYnV0ZXNGb3JDdXJy
ZW50RWxlbWVudCk7CiAKICAgICBOb2RlKiBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZSgp
OwotICAgIHdoaWxlIChhbmNlc3RvciAmJiAhYW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICB3aGlsZSAoYW5jZXN0b3IgJiYgIWlzPEVsZW1lbnQ+KGFuY2VzdG9yKSkKICAgICAgICAgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKCFhbmNlc3RvcikgewpA
QCAtMTM4MSw3ICsxMzgyLDcgQEAgTlNEaWN0aW9uYXJ5KiBIVE1MQ29udmVydGVyOjphZ2dyZWdh
dGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoRWxlbWUKICAgICAgICAgcmV0
dXJuIGF0dHJpYnV0ZXNGb3JDdXJyZW50RWxlbWVudDsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlc0ZvckFuY2VzdG9ycyA9IGFkb3B0TlMoW2Fn
Z3JlZ2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycygqdG9FbGVtZW50KGFu
Y2VzdG9yKSkgbXV0YWJsZUNvcHldKTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eT4gYXR0cmlidXRlc0ZvckFuY2VzdG9ycyA9IGFkb3B0TlMoW2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVz
Rm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycyhkb3duY2FzdDxFbGVtZW50PigqYW5jZXN0b3IpKSBt
dXRhYmxlQ29weV0pOwogICAgIFthdHRyaWJ1dGVzRm9yQW5jZXN0b3JzIGFkZEVudHJpZXNGcm9t
RGljdGlvbmFyeTphdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnRdOwogICAgIG1fYWdncmVnYXRl
ZEF0dHJpYnV0ZXNGb3JFbGVtZW50cy5zZXQoJmVsZW1lbnQsIGF0dHJpYnV0ZXNGb3JBbmNlc3Rv
cnMpOwogCkBAIC0yMzk0LDggKzIzOTUsOCBAQCB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJz
ZU5vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgZGVwdGgsIGJvb2wgZW1iZWRkZWQpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChub2RlLmlzRWxlbWVudE5vZGUoKSkgewotICAg
ICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgIH0gZWxzZSBpZiAo
aXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpOwogICAgICAgICBpZiAoX2VudGVyRWxlbWVudChlbGVtZW50LCBlbWJl
ZGRlZCkpIHsKICAgICAgICAgICAgIE5TVUludGVnZXIgc3RhcnRJbmRleCA9IFtfYXR0clN0ciBs
ZW5ndGhdOwogICAgICAgICAgICAgaWYgKF9wcm9jZXNzRWxlbWVudChlbGVtZW50LCBkZXB0aCkp
IHsKQEAgLTI1NzAsOCArMjU3MSw4IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAKICAgICAgICAgaWYg
KHN0YXJ0Q29udGFpbmVyID09IGVuZENvbnRhaW5lciAmJiAoc3RhcnRPZmZzZXQgPT0gZW5kT2Zm
c2V0IC0gMSkpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFydENvbnRhaW5lci0+dHJh
dmVyc2VUb0NoaWxkQXQoc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7Ci0gICAgICAgICAgICAgICAgTlNGaWxlV3JhcHBlciog
ZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBlckZvckVsZW1lbnQodG9FbGVtZW50KG5vZGUpKTsKKyAg
ICAgICAgICAgIGlmIChub2RlICYmIGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgTlNGaWxlV3JhcHBlciogZmlsZVdyYXBwZXIgPSBmaWxlV3JhcHBlckZvckVs
ZW1lbnQoZG93bmNhc3Q8SFRNTEltYWdlRWxlbWVudD4obm9kZSkpOwogICAgICAgICAgICAgICAg
IE5TVGV4dEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2Nd
IGluaXRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXJdOwogICAgICAgICAgICAgICAgIFtzdHJp
bmcgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRT
dHJpbmdXaXRoQXR0YWNobWVudDphdHRhY2htZW50XV07CiAgICAgICAgICAgICAgICAgW2F0dGFj
aG1lbnQgcmVsZWFzZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4
IGQxMGIxMWIyM2YzNjNjYTk2MThjMGU1ZTJkN2ZkZWEzY2UzYTMxMzUuLmViZjViNWNiMWU4MjBl
YzczNGM4OGFjZThhZDdjN2ExZWY5MmJmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgRWxlbWVudCogdW5zcGxpdHRhYmxlRWxlbWVu
dEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIC8vIFNpbmNlIGVuY2xvc2lu
Z05vZGVPZlR5cGUgd29uJ3Qgc2VhcmNoIGJleW9uZCB0aGUgaGlnaGVzdCByb290IGVkaXRhYmxl
IG5vZGUsCiAgICAgLy8gdGhpcyBjb2RlIHdvcmtzIGV2ZW4gaWYgdGhlIGNsb3Nlc3QgdGFibGUg
Y2VsbCB3YXMgb3V0c2lkZSBvZiB0aGUgcm9vdCBlZGl0YWJsZSBub2RlLgotICAgIEVsZW1lbnQq
IGVuY2xvc2luZ0NlbGwgPSB0b0VsZW1lbnQoZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAmaXNUYWJs
ZUNlbGwpKTsKKyAgICBFbGVtZW50KiBlbmNsb3NpbmdDZWxsID0gZG93bmNhc3Q8RWxlbWVudD4o
ZW5jbG9zaW5nTm9kZU9mVHlwZShwLCAmaXNUYWJsZUNlbGwpKTsKICAgICBpZiAoZW5jbG9zaW5n
Q2VsbCkKICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0NlbGw7CiAKQEAgLTMxNiw3ICszMTYsNyBA
QCBib29sIGlzSW5saW5lKGNvbnN0IE5vZGUqIG5vZGUpCiBFbGVtZW50KiBlbmNsb3NpbmdCbG9j
ayhOb2RlKiBub2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKICAgICBO
b2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUobm9kZSksIGlzQmxvY2ssIHJ1bGUpOwotICAgIHJldHVybiBlbmNsb3NpbmdO
b2RlICYmIGVuY2xvc2luZ05vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChlbmNsb3Np
bmdOb2RlKSA6IDA7CisgICAgcmV0dXJuIGVuY2xvc2luZ05vZGUgJiYgaXM8RWxlbWVudD4oZW5j
bG9zaW5nTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA6IG51bGxwdHI7
CiB9CiAKIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pCkBAIC01NTAsMTAgKzU1MCwxMCBAQCBFbGVtZW50KiBlbmNsb3NpbmdF
bGVtZW50V2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFF1YWxpZmllZE5h
bWUmCiAgICAgZm9yIChOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocm9vdCAmJiAhbm9k
ZS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICh0b0VsZW1lbnQoKm5vZGUpLmhh
c1RhZ05hbWUodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOwor
ICAgICAgICBpZiAoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmhhc1RhZ05hbWUodGFnTmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgICAgIGlm
IChub2RlID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC02
MjksNyArNjI5LDcgQEAgTm9kZSogaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZyhOb2RlKiBu
b2RlKQogCiBOb2RlKiBlbmNsb3NpbmdUYWJsZUNlbGwoY29uc3QgUG9zaXRpb24mIHApCiB7Ci0g
ICAgcmV0dXJuIHRvRWxlbWVudChlbmNsb3NpbmdOb2RlT2ZUeXBlKHAsIGlzVGFibGVDZWxsKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgaXNU
YWJsZUNlbGwpKTsKIH0KIAogRWxlbWVudCogZW5jbG9zaW5nQW5jaG9yRWxlbWVudChjb25zdCBQ
b3NpdGlvbiYgcCkKQEAgLTYzOCw4ICs2MzgsOCBAQCBFbGVtZW50KiBlbmNsb3NpbmdBbmNob3JF
bGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGZvciAoTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5v
ZGUtPmlzTGluaygpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAg
ICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIG5vZGUtPmlzTGluaygpKQorICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KQEAgLTExODQsMTEgKzExODQsMTEgQEAgYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVU
YWJsZUltYWdlT3JIUihjb25zdCBOb2RlKiBub2RlKQogCiBib29sIGFyZUlkZW50aWNhbEVsZW1l
bnRzKGNvbnN0IE5vZGUqIGZpcnN0LCBjb25zdCBOb2RlKiBzZWNvbmQpCiB7Ci0gICAgaWYgKCFm
aXJzdC0+aXNFbGVtZW50Tm9kZSgpIHx8ICFzZWNvbmQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KGZpcnN0KSB8fCAhaXM8RWxlbWVudD4oc2Vjb25kKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gdG9FbGVt
ZW50KGZpcnN0KTsKLSAgICBjb25zdCBFbGVtZW50KiBzZWNvbmRFbGVtZW50ID0gdG9FbGVtZW50
KHNlY29uZCk7CisgICAgY29uc3QgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oZmlyc3QpOworICAgIGNvbnN0IEVsZW1lbnQqIHNlY29uZEVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50PihzZWNvbmQpOwogICAgIGlmICghZmlyc3RFbGVtZW50LT5oYXNUYWdOYW1lKHNl
Y29uZEVsZW1lbnQtPnRhZ1FOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEx
OTcsMjEgKzExOTcsMTcgQEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlKiBm
aXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQogCiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2Nr
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50
ID0gdG9FbGVtZW50KG5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKGxpc3Rp
bmdUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2xUYWcpCi0gICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUocHJlVGFnKQotICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVt
ZW50PihlbGVtZW50KQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKQotICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHhtcFRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShoMVRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShoMlRhZykK
LSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykKLSAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShoNFRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShoNVRh
Zyk7CisgICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUobGlzdGluZ1RhZykKKyAgICAgICAgfHwg
bm9kZS0+aGFzVGFnTmFtZShvbFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVU
YWcpCisgICAgICAgIHx8IGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUodWxUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoeG1wVGFn
KQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgxVGFnKQorICAgICAgICB8fCBub2RlLT5o
YXNUYWdOYW1lKGgyVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgzVGFnKQorICAg
ICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg0VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKGg1VGFnKTsKIH0KIAogUG9zaXRpb24gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxl
Q29tcHV0YXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQpAQCAtMTI1MSwx
NCArMTI0NywxNCBAQCBib29sIGlzQmxvY2tGbG93RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQog
RWxlbWVudCogZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAoaXNCbG9ja0Zsb3dFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4g
dG9FbGVtZW50KG5vZGUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7
CiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICBpZiAo
aXNCbG9ja0Zsb3dFbGVtZW50KG5vZGUpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCi0g
ICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAgICBpZiAoaXNCbG9ja0Zs
b3dFbGVtZW50KG5vZGUpIHx8IGlzPEhUTUxCb2R5RWxlbWVudD4obm9kZSkpCisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY2FyZXRSZW5kZXJz
SW5zaWRlTm9kZShOb2RlKiBub2RlKQpAQCAtMTI2OSwxMSArMTI2NSwxMSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgY2FyZXRSZW5kZXJzSW5zaWRlTm9kZShOb2RlKiBub2RlKQogUmVuZGVyT2JqZWN0
KiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIElm
IGNhcmV0Tm9kZSBpcyBhIGJsb2NrIGFuZCBjYXJldCBpcyBpbnNpZGUgaXQsIHRoZW4gY2FyZXQg
c2hvdWxkIGJlIHBhaW50ZWQgYnkgdGhhdCBibG9jay4KICAgICBib29sIHBhaW50ZWRCeUJsb2Nr
ID0gcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgY2FyZXRSZW5kZXJzSW5zaWRlTm9k
ZShub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBkOTEwMDJkMjk4ZDYxN2Yy
ZmY1ZWQ5NTRmMDUyOGIxYzI0Y2M0ZmYxLi4xYjkwYmUyNTcwMGIyNzE3NTk5ODc5NjE0NmJmMDk1
OGM0ZDBiYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0xODEsMTAgKzE4MSwx
MCBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yKFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQQogdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6d3JhcFdpdGhOb2RlKE5vZGUmIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywg
UmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKICAgICBTdHJp
bmdCdWlsZGVyIG1hcmt1cDsKLSAgICBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
IGFwcGVuZEVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQobm9kZSksIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMgJiYgaXNCbG9jaygmbm9kZSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgZG93bmNh
c3Q8RWxlbWVudD4obm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9jaygmbm9k
ZSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CiAgICAgZWxzZQotICAgICAgICBhcHBlbmRTdGFy
dE1hcmt1cChtYXJrdXAsIG5vZGUsIDApOworICAgICAgICBhcHBlbmRTdGFydE1hcmt1cChtYXJr
dXAsIG5vZGUsIG51bGxwdHIpOwogICAgIG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5k
KG1hcmt1cC50b1N0cmluZygpKTsKICAgICBhcHBlbmRFbmRUYWcobm9kZSk7CiAgICAgaWYgKG1f
bm9kZXMpCkBAIC01NzEsNyArNTcxLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRl
cm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QKICAgICBk
b2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGF1
dG8qIGJvZHkgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNv
bW1vbkFuY2VzdG9yKSwgYm9keVRhZyk7Ci0gICAgTm9kZSogZnVsbHlTZWxlY3RlZFJvb3QgPSAw
OworICAgIEVsZW1lbnQqIGZ1bGx5U2VsZWN0ZWRSb290ID0gbnVsbHB0cjsKICAgICAvLyBGSVhN
RTogRG8gdGhpcyBmb3IgYWxsIGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJv
ZHkuCiAgICAgaWYgKGJvZHkgJiYgVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Ym9keSkpID09IFZpc2libGVQb3NpdGlvbihyYW5nZS5zdGFydFBvc2l0aW9uKCkpCiAgICAgICAg
ICYmIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoYm9keSkpID09IFZpc2libGVQ
b3NpdGlvbihyYW5nZS5lbmRQb3NpdGlvbigpKSkKQEAgLTYwOCw4ICs2MDgsOCBAQCBzdGF0aWMg
U3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmFu
Z2UmIHJhbmdlLCBjb25zdAogICAgICAgICAgICAgICAgIC8vIEJyaW5nIHRoZSBiYWNrZ3JvdW5k
IGF0dHJpYnV0ZSBvdmVyLCBidXQgbm90IGFzIGFuIGF0dHJpYnV0ZSBiZWNhdXNlIGEgYmFja2dy
b3VuZCBhdHRyaWJ1dGUgb24gYSBkaXYKICAgICAgICAgICAgICAgICAvLyBhcHBlYXJzIHRvIGhh
dmUgbm8gZWZmZWN0LgogICAgICAgICAgICAgICAgIGlmICgoIWZ1bGx5U2VsZWN0ZWRSb290U3R5
bGUgfHwgIWZ1bGx5U2VsZWN0ZWRSb290U3R5bGUtPnN0eWxlKCkgfHwgIWZ1bGx5U2VsZWN0ZWRS
b290U3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kSW1hZ2UpKQotICAgICAgICAgICAgICAgICAgICAmJiB0b0VsZW1lbnQoZnVsbHlTZWxlY3Rl
ZFJvb3QpLT5oYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKQotICAgICAgICAgICAgICAgICAg
ICBmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUJhY2tncm91bmRJbWFnZSwgInVybCgnIiArIHRvRWxlbWVudChmdWxseVNlbGVjdGVkUm9vdCkt
PmdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikgKyAiJykiKTsKKyAgICAgICAgICAgICAgICAg
ICAgJiYgZnVsbHlTZWxlY3RlZFJvb3QtPmhhc0F0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpCisg
ICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRSb290U3R5bGUtPnN0eWxlKCktPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCAidXJsKCciICsgZnVsbHlTZWxlY3Rl
ZFJvb3QtPmdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikgKyAiJykiKTsKIAogICAgICAgICAg
ICAgICAgIGlmIChmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlc2V0IHRoZSBDU1MgcHJvcGVydGllcyB0byBhdm9pZCBhbiBhc3NlcnRp
b24gZXJyb3IgaW4gYWRkU3R5bGVNYXJrdXAoKS4KQEAgLTgwNCw3ICs4MDQsNyBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRl
eHQsIGNvbnN0IFN0cmluZwogCiAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8gcGFyYWdyYXBocy4g
RXh0cmEgbGluZSBicmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMuCiAgICAgTm9kZSog
YmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY29udGV4dC5maXJzdE5vZGUoKSk7Ci0gICAgRWxl
bWVudCogYmxvY2sgPSB0b0VsZW1lbnQoYmxvY2tOb2RlKTsKKyAgICBFbGVtZW50KiBibG9jayA9
IGRvd25jYXN0PEVsZW1lbnQ+KGJsb2NrTm9kZSk7CiAgICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xv
c2luZ0Jsb2NrID0gYmxvY2tOb2RlCiAgICAgICAgICYmIGJsb2NrTm9kZS0+aXNFbGVtZW50Tm9k
ZSgpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShib2R5VGFnKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCmluZGV4IDIzZDIxOTM5ODBiY2U2ZDU5NWIz
NGJhOWY2NjA0NDk1MTY3NzY1MzguLjI2ZmExNGFkNjc1MzQwNDk4MzVkZTY5MzRlNzFmMGM5YTM0
YmI2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAKQEAg
LTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGZhbGxiYWNrU3VtbWFyeSgpCiAg
ICAgewogICAgICAgICBBU1NFUlQoZmlyc3RDaGlsZCgpICYmIGZpcnN0Q2hpbGQoKS0+aGFzVGFn
TmFtZShzdW1tYXJ5VGFnKSk7Ci0gICAgICAgIHJldHVybiB0b0VsZW1lbnQoZmlyc3RDaGlsZCgp
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0Q2hpbGQoKSk7CiAgICAg
fQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBiY2QyNjdk
Y2E2NmUxMWI2YjQ4MjIwMjY0MzU2NzgyNmEzYjVkMTcxLi45YWM0MTNmMDEwNzVkMzY4ZWQ0ZGU1
OGRlMjY3YmRiYjMzMDVjYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAt
NjQyLDggKzY0Miw4IEBAIEVsZW1lbnQqIEhUTUxFbGVtZW50OjppbnNlcnRBZGphY2VudEVsZW1l
bnQoY29uc3QgU3RyaW5nJiB3aGVyZSwgRWxlbWVudCogbmV3Q2hpCiAgICAgfQogCiAgICAgTm9k
ZSogcmV0dXJuVmFsdWUgPSBpbnNlcnRBZGphY2VudCh3aGVyZSwgbmV3Q2hpbGQsIGVjKTsKLSAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcmV0dXJuVmFsdWUgfHwgcmV0dXJu
VmFsdWUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChyZXR1cm5WYWx1
ZSk7IAorICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFyZXR1cm5WYWx1ZSB8
fCBpczxFbGVtZW50PihyZXR1cm5WYWx1ZSkpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
PihyZXR1cm5WYWx1ZSk7IAogfQogCiAvLyBTdGVwIDMgb2YgaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvYXBpcy1pbi1odG1sLWRvY3Vt
ZW50cy5odG1sI2luc2VydGFkamFjZW50aHRtbCgpCkBAIC02NTEsMTIgKzY1MSwxMiBAQCBzdGF0
aWMgRWxlbWVudCogY29udGV4dEVsZW1lbnRGb3JJbnNlcnRpb24oY29uc3QgU3RyaW5nJiB3aGVy
ZSwgRWxlbWVudCogZWxlbWVudAogewogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwg
ImJlZm9yZUJlZ2luIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uod2hlcmUsICJhZnRlckVuZCIpKSB7
CiAgICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKHBhcmVudCAmJiAhaXM8RWxlbWVudD4ocGFyZW50KSkgewogICAgICAgICAgICAgZWMg
PSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
cGFyZW50IHx8IHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIHRvRWxl
bWVudChwYXJlbnQpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
cGFyZW50IHx8IGlzPEVsZW1lbnQ+KHBhcmVudCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
RWxlbWVudD4ocGFyZW50KTsKICAgICB9CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHdoZXJl
LCAiYWZ0ZXJCZWdpbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYmVmb3JlRW5kIikp
CiAgICAgICAgIHJldHVybiBlbGVtZW50OwpAQCAtOTM0LDE0ICs5MzQsMTQgQEAgVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpIGMKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAvLyBTa2lwIGJkaSwg
c2NyaXB0LCBzdHlsZSBhbmQgdGV4dCBmb3JtIGNvbnRyb2xzLgogICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2Uobm9kZS0+bm9kZU5hbWUoKSwgImJkaSIpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
c2NyaXB0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHN0eWxlVGFnKSAKLSAgICAgICAgICAgIHx8
IChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5pc1RleHRGb3JtQ29u
dHJvbCgpKSkgeworICAgICAgICAgICAgfHwgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKS5pc1RleHRGb3JtQ29udHJvbCgpKSkgewogICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHRoaXMpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTa2lwIGVsZW1lbnRz
IHdpdGggdmFsaWQgZGlyIGF0dHJpYnV0ZQotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgZGlyQXR0cmlidXRlVmFsdWUgPSB0b0Vs
ZW1lbnQobm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CisgICAgICAgIGlmIChpczxF
bGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGRpckF0dHJpYnV0ZVZh
bHVlID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7
CiAgICAgICAgICAgICBpZiAoaXNMVFJPclJUTElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1
ZSkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJhdXRvIikpIHsKICAg
ICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
bm9kZSwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IGQ5MjA4M2EwNjc2YTVhOGVlOTVk
NzZmMDE3ZDQ1MmQ1MDhkNGU0MGMuLmMyMjRlNmVkYmQ3ZGU5ODM3NGYzYzdkYmQ5YTFmNzAxMDAw
ZGM0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CkBAIC0xOTIsNyArMTkyLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihIVE1MRm9ybUNvbnRyb2xFbGVtZW50KQogICAgIHN0YXRpYyBib29sIGlzSFRNTEZvcm1D
b250cm9sRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJldHVybiBlbGVtZW50Lmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkg
JiYgdG9FbGVtZW50KG5vZGUpLmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4g
aXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuaXNGb3JtQ29udHJv
bEVsZW1lbnQoKTsgfQogICAgIHN0YXRpYyBib29sIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChj
b25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaXNG
b3JtQ29udHJvbEVsZW1lbnQoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGQzN2ExNDEwZmNkOTZjMDc3
ZmEzNDY5MGEwYTUyMDhjMGZkNWVmYjguLjI3ZmNkZDJlNzRjOGU2MGQyZWQzMGIzZjJkNmMzNDgz
M2YxNWE4ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC05MTEs
NyArOTExLDcgQEAgc3RydWN0IFZhbHVlVG9TdHJpbmc8VGV4dFRyYWNrQ3VlKj4gewogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKEhUTUxNZWRpYUVsZW1lbnQpCiAgICAgc3RhdGljIGJv
b2wgaXNIVE1MTWVkaWFFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVs
ZW1lbnQuaXNNZWRpYUVsZW1lbnQoKTsgfQotICAgIHN0YXRpYyBib29sIGlzSFRNTE1lZGlhRWxl
bWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKSAmJiBp
c0hUTUxNZWRpYUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKTsgfQorICAgIHN0YXRpYyBib29sIGlz
SFRNTE1lZGlhRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBpczxFbGVtZW50Pihu
b2RlKSAmJiBpc0hUTUxNZWRpYUVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOyB9CiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IDhkYTk0M2YxNDE4ZjUyMWFkNGVl
Yzk0YzUxZTQzM2YzZGJhOTJjZTcuLjE0OTM4ZmFkMGM0Yzc2NmVkYmY3NWJmODMyMDdhOTE3ZGEy
NGIwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC00
MjMsMTAgKzQyMywxMCBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1lZEl0
ZW0oKQogICAgIGJvb2wgaXNOYW1lZEl0ZW0gPSB0cnVlOwogICAgIE5vZGUqIGNoaWxkID0gZmly
c3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCAmJiBpc05hbWVkSXRlbSkgewotICAgICAgICBp
ZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudChjaGlsZCk7CisgICAgICAgIGlmIChpczxFbGVtZW50PihjaGlsZCkpIHsK
KyAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY2hpbGQp
OwogICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBvZiBpc1JlY29nbml6ZWRUYWdOYW1lIGlzIGFs
bW9zdCBjZXJ0YWlubHkgd3JvbmcgaGVyZS4KLSAgICAgICAgICAgIGlmIChpc1JlY29nbml6ZWRU
YWdOYW1lKGVsZW1lbnQtPnRhZ1FOYW1lKCkpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKHBhcmFt
VGFnKSkKKyAgICAgICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWdOYW1lKGVsZW1lbnQudGFnUU5h
bWUoKSkgJiYgIWVsZW1lbnQuaGFzVGFnTmFtZShwYXJhbVRhZykpCiAgICAgICAgICAgICAgICAg
aXNOYW1lZEl0ZW0gPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0PihjaGlsZCkp
IHsKICAgICAgICAgICAgIGlmICghZG93bmNhc3Q8VGV4dD4oKmNoaWxkKS5jb250YWluc09ubHlX
aGl0ZXNwYWNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCmlu
ZGV4IDRmNzU5MTYzMjRkOWE1MjgwZWUzMTU2ZDIxZmUxODc4ODgxMTIwYzcuLjc3MTM1ODljZjgw
ZTBlMzI4ZTc0YTM0MGMxOGRlMTAyZTcyOWRkOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCkBAIC0zMzgsMTAgKzMzOCwxMCBAQCBTdHJpbmcgSFRNTE9wdGlv
bkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1
aWxkZXIgdGV4dDsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7ICkg
ewotICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBpZiAoaXM8VGV4dD4o
bm9kZSkpCiAgICAgICAgICAgICB0ZXh0LmFwcGVuZChub2RlLT5ub2RlVmFsdWUoKSk7CiAgICAg
ICAgIC8vIFRleHQgbm9kZXMgaW5zaWRlIHNjcmlwdCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2Yg
dGhlIG9wdGlvbiB0ZXh0LgotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
U2NyaXB0RWxlbWVudElmUG9zc2libGUodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgaWYgKGlz
PEVsZW1lbnQ+KG5vZGUpICYmIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93bmNhc3Q8RWxl
bWVudD4obm9kZSkpKQogICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKG5vZGUsIHRoaXMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU291cmNlRWxlbWVudC5jcHAKaW5kZXggOGRhZjM0MGRkMDkwNGZlY2VlOWQwMjRlMWM5Mzhl
NDljNDVhMjdiNy4uOWNlOWU1Y2EwNDgwMzNmY2QyZDVhNDU5YTBmNTYxYzljMDAzMDQxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTYzLDggKzYzLDgg
QEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU291cmNlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJlbW92YWxSb290KQogewogICAgIEVsZW1lbnQqIHBhcmVu
dCA9IHBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAoIXBhcmVudCAmJiByZW1vdmFsUm9vdC5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgIHBhcmVudCA9ICZ0b0VsZW1lbnQocmVtb3ZhbFJvb3QpOwor
ICAgIGlmICghcGFyZW50ICYmIGlzPEVsZW1lbnQ+KHJlbW92YWxSb290KSkKKyAgICAgICAgcGFy
ZW50ID0gJmRvd25jYXN0PEVsZW1lbnQ+KHJlbW92YWxSb290KTsKICAgICBpZiAocGFyZW50ICYm
IGlzPEhUTUxNZWRpYUVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxNZWRp
YUVsZW1lbnQ+KCpwYXJlbnQpLnNvdXJjZVdhc1JlbW92ZWQodGhpcyk7CiAgICAgSFRNTEVsZW1l
bnQ6OnJlbW92ZWRGcm9tKHJlbW92YWxSb290KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1
bW1hcnlFbGVtZW50LmNwcAppbmRleCA0NGI0ZGZkNDk5N2JiMjZkZjdiZTI1NDk0N2E3YjE1NjVm
Njk3OWEzLi5lYzZjM2EyMGZmOTliYTJjOTQxNDkzM2ViZDZhOGE5MDhjM2E2ODQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCkBAIC0xMDIsMTIgKzEwMiwx
MiBAQCBib29sIEhUTUxTdW1tYXJ5RWxlbWVudDo6aXNNYWluU3VtbWFyeSgpIGNvbnN0CiAKIHN0
YXRpYyBib29sIGlzQ2xpY2thYmxlQ29udHJvbChOb2RlKiBub2RlKQogewotICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwor
ICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAgaWYg
KGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBFbGVtZW50KiBob3N0ID0gZWxlbWVudC0+c2hhZG93SG9zdCgpOworICAgIEVsZW1l
bnQqIGhvc3QgPSBlbGVtZW50LnNoYWRvd0hvc3QoKTsKICAgICByZXR1cm4gaG9zdCAmJiBpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Pihob3N0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDMzMzdmZDkzNzQzY2M5NWY1
YWE5YzM1YTIxZmRhZjUyNmU1NjViNzYuLjlkYzdkOTI2YmIxY2I2YzMzMTFjYWNlYzE2MmJkNDk0
NzNiYjVkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmgKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KQogICAgIHN0YXRpYyBi
b29sIGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkg
eyByZXR1cm4gZWxlbWVudC5pc1RleHRGb3JtQ29udHJvbCgpOyB9Ci0gICAgc3RhdGljIGJvb2wg
aXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBu
b2RlLmlzRWxlbWVudE5vZGUoKSAmJiBpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KHRvRWxl
bWVudChub2RlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGlzSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOyB9CiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiBl
bmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY29uc3QgUG9zaXRpb24mKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBhOWYw
ZjhkMzcxNjI2MDlhNWMxMDJiYWE1Nzc4Y2IyNjUyNGI0MjdjLi5kNzRjMTQ1NDk3MGU1MzZmNzA3
MjZiMWJmNWU5NTNlOTQ4YzcwYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGV4ZWN1dGVUYXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykK
IAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoTGF0ZXIoQ29udGFpbmVyTm9kZSog
cGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkLCBib29sIHNlbGZDbG9zaW5nKQogewot
ICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVudFBvbGlj
eSkgfHwgIXBycENoaWxkLmdldCgpLT5pc0VsZW1lbnROb2RlKCkgfHwgIXRvU2NyaXB0RWxlbWVu
dElmUG9zc2libGUodG9FbGVtZW50KHBycENoaWxkLmdldCgpKSkpOworICAgIEFTU0VSVChzY3Jp
cHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVudFBvbGljeSkgfHwgIWlzPEVsZW1l
bnQ+KHBycENoaWxkLmdldCgpKSB8fCAhdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShkb3duY2Fz
dDxFbGVtZW50PihwcnBDaGlsZC5nZXQoKSkpKTsKICAgICBBU1NFUlQocGx1Z2luQ29udGVudElz
QWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICFwcnBDaGlsZC0+aXNQbHVnaW5FbGVt
ZW50KCkpOwogCiAgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2soSFRNTENvbnN0cnVj
dGlvblNpdGVUYXNrOjpJbnNlcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRWxlbWVudFN0YWNrLmNwcAppbmRleCBjZDZhMjAxMGZkMTdlNjQwNWQ4YjNiMGQ0MjU3Mzgw
YjA5OTQ5Y2I2Li45MTlhYzBlM2EyNTI1OGVjOWRkMDU5OTYxMDU2NTFmMzg5OWFkZGFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAt
NTQxLDcgKzU0MSw3IEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aGFzVGVtcGxhdGVJbkhUTUxT
Y29wZSgpIGNvbnN0CiBFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxlbWVudCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKG1fcm9vdE5vZGUpOwotICAgIHJldHVybiB0b0VsZW1lbnQobV9y
b290Tm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG1fcm9vdE5vZGUpOwogfQog
CiBFbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpoZWFkRWxlbWVudCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmgKaW5kZXggOTUzYTY3OTYwOWUzYzM3
NWE3Y2ViOThkY2NkYjMzZDM2ZmQ3Y2NiOS4uMzcwMTM1NGZjODFjZDUwMDE2MWY2ZWY4ZWY0NGEw
ZGE5MGM1MTE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0
YWNrSXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFja0l0ZW0u
aApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SFRNTFN0YWNrSXRlbShub2RlLCB0b2tlbiwgbmFtZXNwYWNlVVJJKSk7CiAgICAgfQogCi0gICAg
RWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkp
OyB9CisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1l
bnQ+KG1fbm9kZS5nZXQoKSk7IH0KICAgICBDb250YWluZXJOb2RlKiBub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAgICBib29sIGlzRG9jdW1lbnRGcmFnbWVudE5vZGUo
KSBjb25zdCB7IHJldHVybiBtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCmluZGV4IDZlOGI3Y2MxYzVhZGVmM2Qy
ZmRjOTg4MmJmZTI0M2U2N2NhMWE5MjUuLjlmMDQyNjRlMTRiNDcxMjY1YTQyODBiNzBkMmRlZTcx
Yjc2NDIwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlv
blBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQu
aApAQCAtMTAwLDExICsxMDAsMTEgQEAgaW5saW5lIE5vZGUqIHBhcmVudE5vZGVGb3JEaXN0cmli
dXRpb24oY29uc3QgTm9kZSogbm9kZSkKIGlubGluZSBFbGVtZW50KiBwYXJlbnRFbGVtZW50Rm9y
RGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKE5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24obm9kZSkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnQpOwor
ICAgICAgICBpZiAoaXM8RWxlbWVudD4ocGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50PihwYXJlbnQpOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiBpbmxpbmUgU2hhZG93Um9vdCogc2hhZG93Um9vdE9mUGFyZW50Rm9y
RGlzdHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCkBAIC0xMTMsNyArMTEzLDcgQEAgaW5saW5l
IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVudEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2Rl
KiBub2RlKQogICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50Rm9yRGlzdHJp
YnV0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm4gcGFyZW50LT5zaGFkb3dSb290KCk7CiAKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogSW5zZXJ0aW9uUG9pbnQqIGZp
bmRJbnNlcnRpb25Qb2ludE9mKGNvbnN0IE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBkNDJkNWE0Nzk1OGM3
YWZiYjRlOWZlMmMwYzQ2NTlmMDRmYTMwMzNjLi5kNWE0NTZiYTk4MzJjZjlhZDk5ZGUzOWMwYzBh
ZDQ3MGI0ODAyNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBNZWRpYUNvbnRy
b2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW4KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgTm9kZSogdGFyZ2V0ID0gZXZl
bnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICAgICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIXRhcmdldCB8fCAhaXM8RWxlbWVudD4odGFy
Z2V0KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBXaGVuIHdlIGNyZWF0ZWQg
dGhlIGVsZW1lbnRzIGluIHRoZSB0cmFjayBsaXN0LCB3ZSBnYXZlIHRoZW0gYSBjdXN0b20KQEAg
LTY5OCw3ICs2OTgsNyBAQCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbgogICAgICAgICAvLyB0ZWxs
IHRoZSBIVE1MTWVkaWFFbGVtZW50IHRvIGVuYWJsZSB0aGF0IHRyYWNrLgogCiAgICAgICAgIFJl
ZlB0cjxUZXh0VHJhY2s+IHRleHRUcmFjazsKLSAgICAgICAgTWVudUl0ZW1Ub1RyYWNrTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9tZW51VG9UcmFja01hcC5maW5kKHRvRWxlbWVudCh0YXJnZXQpKTsK
KyAgICAgICAgTWVudUl0ZW1Ub1RyYWNrTWFwOjppdGVyYXRvciBpdGVyID0gbV9tZW51VG9UcmFj
a01hcC5maW5kKGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldCkpOwogICAgICAgICBpZiAoaXRlciAh
PSBtX21lbnVUb1RyYWNrTWFwLmVuZCgpKQogICAgICAgICAgICAgdGV4dFRyYWNrID0gaXRlci0+
dmFsdWU7CiAgICAgICAgIG1fbWVudVRvVHJhY2tNYXAuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVlRUQ3VlLmNwcAppbmRleCA1OWNmNmU5NTM1ZTQxODNhZTNkYTQwNjdjMzc3Yzk4Njkx
NmM2M2JmLi4zZGIwYmZjOGM3N2U2YmU3M2ZlNzU0MGQwM2JkNWFiZjhhNmM3ZmIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBWVFRD
dWU6Om1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSogcm9vdCwgY29uc3QgTWVk
aWFUaW1lJiBwcmV2aW8KICAgICAgICAgICAgIGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCpjaGls
ZCkuc2V0SXNQYXN0Tm9kZShpc1Bhc3ROb2RlKTsKICAgICAgICAgICAgIC8vIE1ha2UgYW4gZWxl
bWVuZXQgaWQgbWF0Y2ggYSBjdWUgaWQgZm9yIHN0eWxlIG1hdGNoaW5nIHB1cnBvc2VzLgogICAg
ICAgICAgICAgaWYgKCFpZCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0VsZW1lbnQo
Y2hpbGQpLT5zZXRJZEF0dHJpYnV0ZShpZCgpKTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxX
ZWJWVFRFbGVtZW50PigqY2hpbGQpLnNldElkQXR0cmlidXRlKGlkKCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3Vw
cG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcApp
bmRleCA2NzJlNWJlNmRkZGNiOWVhMTY5NmExNTk4MGRmZGZkZmE4YTgwMTFmLi4wM2QzYzA2YmI1
YjBhMTRiYjJmZDc2ZTAzYTg3OWZlY2E1MTRjZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcApAQCAtMTgxLDggKzE4MSw4IEBAIGJvb2wgRE9NUGF0
Y2hTdXBwb3J0Ojppbm5lclBhdGNoTm9kZShEaWdlc3QqIG9sZERpZ2VzdCwgRGlnZXN0KiBuZXdE
aWdlc3QsIEV4Y2VwCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gUGF0Y2ggYXR0cmli
dXRlcwotICAgIEVsZW1lbnQqIG9sZEVsZW1lbnQgPSB0b0VsZW1lbnQob2xkTm9kZSk7Ci0gICAg
RWxlbWVudCogbmV3RWxlbWVudCA9IHRvRWxlbWVudChuZXdOb2RlKTsKKyAgICBFbGVtZW50KiBv
bGRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4ob2xkTm9kZSk7CisgICAgRWxlbWVudCogbmV3
RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5ld05vZGUpOwogICAgIGlmIChvbGREaWdlc3Qt
Pm1fYXR0cnNTSEExICE9IG5ld0RpZ2VzdC0+bV9hdHRyc1NIQTEpIHsKICAgICAgICAgLy8gRklY
TUU6IENyZWF0ZSBhIGZ1bmN0aW9uIGluIEVsZW1lbnQgZm9yIHJlbW92aW5nIGFsbCBwcm9wZXJ0
aWVzLiBUYWtlIGluIGFjY291bnQgd2hldGhlciBkaWQvd2lsbE1vZGlmeUF0dHJpYnV0ZSBhcmUg
aW1wb3J0YW50LgogICAgICAgICBpZiAob2xkRWxlbWVudC0+aGFzQXR0cmlidXRlc1dpdGhvdXRV
cGRhdGUoKSkgewpAQCAtNDI2LDcgKzQyNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxET01QYXRjaFN1
cHBvcnQ6OkRpZ2VzdD4gRE9NUGF0Y2hTdXBwb3J0OjpjcmVhdGVEaWdlc3QoTm9kZSogbm9kCiAg
ICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgZGln
ZXN0LT5tX2NoaWxkcmVuLmFwcGVuZChXVEY6Om1vdmUoY2hpbGRJbmZvKSk7CiAgICAgICAgIH0K
LSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogCiAgICAgICAgIGlmIChl
bGVtZW50LT5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKSB7CiAgICAgICAgICAgICBTSEEx
IGF0dHJzU0hBMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCmluZGV4IDY5MWZiMDRjZmRmYTQ0YWE1NWQ3YWU1YTFhMDcwOTYzZWEzY2E1ZjYuLmVj
M2ExMGVkNGM2NWNjNzA5NzVjZGQxMDY5YTI1NmM1M2NjZTU4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtODk2LDExICs4OTYsMTEg
QEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgICAgICplcnJvclN0cmluZyA9ICJObyBub2Rl
IHdpdGggZ2l2ZW4gaWQgZm91bmQiOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0g
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5v
ZGUpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJOb3QgYW4gZWxlbWVudCBub2RlIjsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiBpbnQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmRvY3VtZW50Tm9kZVdpdGhSZXF1ZXN0ZWRGbG93c0lkKERvY3VtZW50KiBkb2N1
bWVudCkKQEAgLTExMDgsNyArMTEwOCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb24+PiBJbnNwZWN0CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lvbkxpc3QtPmxlbmd0aCgpOyArK2kpIHsKICAg
ICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVn
aW9uT3ZlcnNldDsKIAotICAgICAgICBzd2l0Y2ggKHRvRWxlbWVudChyZWdpb25MaXN0LT5pdGVt
KGkpKS0+cmVnaW9uT3ZlcnNldFN0YXRlKCkpIHsKKyAgICAgICAgc3dpdGNoIChkb3duY2FzdDxF
bGVtZW50PihyZWdpb25MaXN0LT5pdGVtKGkpKS0+cmVnaW9uT3ZlcnNldFN0YXRlKCkpIHsKICAg
ICAgICAgY2FzZSBSZWdpb25GaXQ6CiAgICAgICAgICAgICByZWdpb25PdmVyc2V0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSZWdpb246OlJlZ2lvbk92ZXJzZXQ6OkZpdDsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTIwMSw3ICsxMjAxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1bWVudHNU
b0NoYW5nZTsKICAgICBmb3IgKE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0
ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmJlZ2luKCksIGVuZCA9IG1fbm9kZUlkVG9G
b3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+a2V5
KSkpCisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obV9k
b21BZ2VudC0+bm9kZUZvcklkKGl0LT5rZXkpKSkKICAgICAgICAgICAgIGRvY3VtZW50c1RvQ2hh
bmdlLmFkZCgmZWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBjZjJmNzQ1Mzk2YzJhOGZh
ZGNmOWM3NDRmM2RiOWEzNTUxY2ZjOWIwLi4wZjgyMzI2NzZmODc1MGVlMzFlODk4YTU1NTcwZTA0
YWFhNTNmMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJp
bmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgICAgICAgICAgdW5iaW5k
KGNvbnRlbnREb2N1bWVudCwgbm9kZXNNYXApOwogICAgIH0KIAotICAgIGlmIChub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSB0b0VsZW1lbnQo
bm9kZSktPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAg
ICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuc2hhZG93
Um9vdCgpKQogICAgICAgICAgICAgdW5iaW5kKHJvb3QsIG5vZGVzTWFwKTsKICAgICB9CiAKQEAg
LTM5MSwxMSArMzkxLDExIEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVt
ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm9k
ZSBpcyBub3QgYW4gRWxlbWVudCI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAg
ICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKTsKIH0KIAogTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCkBAIC02NzUsNyArNjc1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVs
ZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvRWxlbWVudChjaGlsZCk7CisgICAgRWxlbWVudCogY2hp
bGRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOwogICAgIGlmICghY2hpbGRFbGVt
ZW50LT5oYXNBdHRyaWJ1dGVzKCkgJiYgbmFtZSkgewogICAgICAgICBtX2RvbUVkaXRvci0+cmVt
b3ZlQXR0cmlidXRlKGVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTcyMiw3ICs3MjIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlTmFt
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgKm5ld0lk
ID0gMDsKIAogICAgIE5vZGUqIG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAo
IW9sZE5vZGUgfHwgIW9sZE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW9sZE5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG9sZE5vZGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKQEAgLTczMSw3ICs3MzEsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdz
IGF0dHJpYnV0ZXMuCi0gICAgbmV3RWxlbS0+Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKnRv
RWxlbWVudChvbGROb2RlKSk7CisgICAgbmV3RWxlbS0+Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQoKmRvd25jYXN0PEVsZW1lbnQ+KG9sZE5vZGUpKTsKIAogICAgIC8vIENvcHkgb3ZlciB0aGUg
b3JpZ2luYWwgbm9kZSdzIGNoaWxkcmVuLgogICAgIE5vZGUqIGNoaWxkOwpAQCAtMTI3NywxMSAr
MTI3NywxMSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZQogICAgICAgICAgICAgdmFsdWUtPnNl
dENoaWxkcmVuKGNoaWxkcmVuLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPmlz
RWxlbWVudE5vZGUoKSkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5v
ZGUpOwotICAgICAgICB2YWx1ZS0+c2V0QXR0cmlidXRlcyhidWlsZEFycmF5Rm9yRWxlbWVudEF0
dHJpYnV0ZXMoZWxlbWVudCkpOwotICAgICAgICBpZiAoaXM8SFRNTEZyYW1lT3duZXJFbGVtZW50
Pihub2RlKSkgewotICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVy
ID0gZG93bmNhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Pigqbm9kZSk7CisgICAgaWYgKGlzPEVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSk7CisgICAgICAgIHZhbHVlLT5zZXRBdHRyaWJ1dGVzKGJ1aWxkQXJyYXlGb3JF
bGVtZW50QXR0cmlidXRlcygmZWxlbWVudCkpOworICAgICAgICBpZiAoaXM8SFRNTEZyYW1lT3du
ZXJFbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
JiBmcmFtZU93bmVyID0gZG93bmNhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50PihlbGVtZW50KTsK
ICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXIuY29udGVudEZyYW1lKCk7CiAg
ICAgICAgICAgICBpZiAoZnJhbWUpCiAgICAgICAgICAgICAgICAgdmFsdWUtPnNldEZyYW1lSWQo
bV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlCiAgICAgICAgICAgICAgICAgdmFsdWUtPnNldENvbnRlbnREb2N1
bWVudChidWlsZE9iamVjdEZvck5vZGUoZG9jdW1lbnQsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQtPnNoYWRvd1Jvb3Qo
KSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgp
KSB7CiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gc2hhZG93Um9vdHMgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIHNoYWRvd1Jvb3RzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShyb290LCAw
LCBub2Rlc01hcCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKHNoYWRvd1Jv
b3RzKTsKQEAgLTEyOTgsNyArMTI5OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlCiAKICNp
ZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICAgICAgaWYgKGlzPEhUTUxUZW1wbGF0ZUVs
ZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICAgICAgdmFsdWUtPnNldFRlbXBsYXRlQ29udGVudChi
dWlsZE9iamVjdEZvck5vZGUoZG93bmNhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudD4oKmVsZW1lbnQp
LmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0
ZUNvbnRlbnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+
KGVsZW1lbnQpLmNvbnRlbnQoKSwgMCwgbm9kZXNNYXApKTsKICNlbmRpZgogCiAgICAgfSBlbHNl
IGlmIChpczxEb2N1bWVudD4obm9kZSkpIHsKQEAgLTE1MzAsOCArMTUzMCw4IEBAIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5z
cGVjdG9yRE9NQWdlbnQ6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0gdG9FbGVtZW50KG5vZGUpLT5pc0ZvY3VzYWJsZSgp
OworICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
c3VwcG9ydHNGb2N1c2VkID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlzRm9jdXNhYmxlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgICAgICAg
ICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5pc0ZvY3VzZWQoKTsKICAgICAgICAgICAgIH0KQEAgLTE4
OTIsNyArMTg5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEludmFsaWRhdGVTdHls
ZUF0dHIoTm9kZSogbm9kZSkKIAogICAgIGlmICghbV9yZXZhbGlkYXRlU3R5bGVBdHRyVGFzaykK
ICAgICAgICAgbV9yZXZhbGlkYXRlU3R5bGVBdHRyVGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8UmV2
YWxpZGF0ZVN0eWxlQXR0cmlidXRlVGFzaz4odGhpcyk7Ci0gICAgbV9yZXZhbGlkYXRlU3R5bGVB
dHRyVGFzay0+c2NoZWR1bGVGb3IodG9FbGVtZW50KG5vZGUpKTsKKyAgICBtX3JldmFsaWRhdGVT
dHlsZUF0dHJUYXNrLT5zY2hlZHVsZUZvcihkb3duY2FzdDxFbGVtZW50Pihub2RlKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQqIGhvc3Qs
IFNoYWRvd1Jvb3QqIHJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTm9kZUZpbmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTm9kZUZpbmRlci5jcHAKaW5kZXggNDk0ZGFlMjBkNmFhOWM4Nzc3YWJhYTExZmNiNTY3MDE0
Yjc4OWI3MC4uZGQxNWE4ZDk0ODdlYjA2MGIyMWQ1ZWNhZDA5MjUyZDk5NDA0MzA3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNwcApAQCAt
ODUsNyArODUsNyBAQCB2b2lkIEluc3BlY3Rvck5vZGVGaW5kZXI6OnNlYXJjaFVzaW5nRE9NVHJl
ZVRyYXZlcnNhbChOb2RlKiBwYXJlbnROb2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKLSAgICAgICAgICAgIGlmICht
YXRjaGVzRWxlbWVudCgqdG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgICAgIGlmIChtYXRjaGVz
RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkpKQogICAgICAgICAgICAgICAgIG1fcmVz
dWx0cy5hZGQobm9kZSk7CiAKICAgICAgICAgICAgIC8vIFNlYXJjaCBpbnNpZGUgZnJhbWUgZWxl
bWVudHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAK
aW5kZXggZTI1N2YxYTZhNzMxZDYxMmM0MWFmZGE3MjE4MDgxZjlmNjYzZWE1MC4uNmU2NWE4MTBh
OThkYWRjMTY4ZmRlNGFiZWI2MjlmNDU4NjEzMTU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNjc2LDE5ICs2NzYsMTkgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclNoYXBlT3V0c2lkZShG
cmFtZSogY29udGFpbmluZ0YKIAogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5p
c0VsZW1lbnROb2RlKCkgfHwgIW5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpIHx8ICFub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZWxlbWVudEluZm8g
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRv
RWxlbWVudChub2RlKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmlz
WEhUTUxEb2N1bWVudCgpOwotICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInRhZ05hbWUiLCBp
c1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIo
KSk7Ci0gICAgZWxlbWVudEluZm8tPnNldFN0cmluZygiaWRWYWx1ZSIsIGVsZW1lbnQtPmdldElk
QXR0cmlidXRlKCkpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSk7CisgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC5kb2N1bWVudCgpLmlzWEhUTUxEb2N1
bWVudCgpOworICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInRhZ05hbWUiLCBpc1hIVE1MID8g
ZWxlbWVudC5ub2RlTmFtZSgpIDogZWxlbWVudC5ub2RlTmFtZSgpLmxvd2VyKCkpOworICAgIGVs
ZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkp
OwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICBpZiAoZWxl
bWVudC0+aGFzQ2xhc3MoKSAmJiBpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkgeworICAgIGlm
IChlbGVtZW50Lmhhc0NsYXNzKCkgJiYgaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjbGFzc05hbWVzOwotICAgICAgICBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKmVsZW1l
bnQpLmNsYXNzTmFtZXMoKTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NO
YW1lc1N0cmluZyA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpLmNsYXNzTmFtZXMo
KTsKICAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXpl
KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkg
ewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVz
U3RyaW5nW2ldOwpAQCAtNzAxLDcgKzcwMSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogICAgICAgICBl
bGVtZW50SW5mby0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCBjbGFzc05hbWVzLnRvU3RyaW5nKCkp
OwogICAgIH0KIAotICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVy
ZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsK
ICAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwog
ICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsK
ICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gc25hcHBlZEludFJlY3QoY29udGFpbmluZ1ZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
CmluZGV4IDcyMWFiZTMyZGQ5NDVmNDNhZmY5ZDNhZDNjZDNmNzJmMjNhZTc3MjAuLmE5MjY1NzFh
NTEyYzczMThkY2YxNzkwZGRiZDRjMGVjYzczYTg0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTEzODgsMTMgKzEzODgsMTMg
QEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcq
IHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZSogb3duZXJO
b2RlID0gbV9wYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lck5vZGUg
fHwgIW93bmVyTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghb3duZXJOb2RlIHx8ICFp
czxFbGVtZW50Pihvd25lck5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gdG9FbGVtZW50KG93bmVyTm9kZSk7CisgICAgRWxlbWVudCYgb3du
ZXJFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm93bmVyTm9kZSk7CiAKICAgICBpZiAoIWlz
PEhUTUxTdHlsZUVsZW1lbnQ+KG93bmVyRWxlbWVudCkgJiYgIWlzPFNWR1N0eWxlRWxlbWVudD4o
b3duZXJFbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpyZXN1bHQgPSBvd25l
ckVsZW1lbnQtPnRleHRDb250ZW50KCk7CisgICAgKnJlc3VsdCA9IG93bmVyRWxlbWVudC50ZXh0
Q29udGVudCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDYxNmQxMzEzNWViM2RmYmNlZGJlNzhhMzljM2JmNDVlM2JjMTc1
Y2IuLjRhNzQzMGIwNWRjMmJhZTRmNTgwZWM2ZTU2MGMxNGE2N2M2Mzg2ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0yODksMTMgKzI4OSwxMyBAQCBzdGF0aWMg
RWxlbWVudCogZWxlbWVudFVuZGVyTW91c2UoRG9jdW1lbnQqIGRvY3VtZW50VW5kZXJNb3VzZSwg
Y29uc3QgSW50UG9pbnQmCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwogICAgIGRv
Y3VtZW50VW5kZXJNb3VzZS0+cmVuZGVyVmlldygpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KCks
IHJlc3VsdCk7CiAKLSAgICBOb2RlKiBuID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIHdoaWxl
IChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKG4pCi0gICAgICAgIG4gPSBuLT5kZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2Rl
KCk7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICB3aGlsZSAobm9k
ZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIG5vZGUgPSBub2RlLT5kZXByZWNhdGVkU2hhZG93
QW5jZXN0b3JOb2RlKCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG4pOworICAgIHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9j
dW1lbnREcmFnKERyYWdEYXRhJiBkcmFnRGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2ssIERyYWdPcGVyYXRpb24mIGRyYWdPcGVyYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggNWQ5MTBmMzI2YjFkYjYzZTczMjVlNjFhNGE5MDA4MzJjNzViNjBh
Yy4uMzNhOWE1Mzg5YmNjOWY0MzgxNzU2N2YzMzdhYjhhZDY4MGEzMmQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjE4Niw3ICsyMTg2LDcgQEAgc3RhdGljIGJvb2wg
aGFzRHJvcFpvbmVUeXBlKERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyLCBjb25zdCBTdHJpbmcm
IGtleXdvcmQpCiAKIHN0YXRpYyBib29sIGZpbmREcm9wWm9uZShOb2RlKiB0YXJnZXQsIERhdGFU
cmFuc2ZlciogZGF0YVRyYW5zZmVyKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXQt
PmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudCh0YXJnZXQpIDogdGFyZ2V0LT5wYXJlbnRFbGVt
ZW50KCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KHRhcmdldCkgPyBkb3du
Y2FzdDxFbGVtZW50Pih0YXJnZXQpIDogdGFyZ2V0LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgZm9y
ICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAg
ICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAgICAgICAgIFN0cmluZyBkcm9wWm9uZVN0ciA9IGVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUod2Via2l0ZHJvcHpvbmVBdHRyKTsKQEAgLTIyMzMsMTAg
KzIyMzMsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIERhdGFUcmFuc2YKICAgICBSZWZQdHI8RWxlbWVudD4g
bmV3VGFyZ2V0OwogICAgIGlmIChOb2RlKiB0YXJnZXROb2RlID0gbW91c2VFdmVudC50YXJnZXRO
b2RlKCkpIHsKICAgICAgICAgLy8gRHJhZyBldmVudHMgc2hvdWxkIG5ldmVyIGdvIHRvIG5vbi1l
bGVtZW50IG5vZGVzIChmb2xsb3dpbmcgSUUsIGFuZCBwcm9wZXIgbW91c2VvdmVyL291dCBkaXNw
YXRjaCkKLSAgICAgICAgaWYgKCF0YXJnZXROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IGlmICghaXM8RWxlbWVudD4odGFyZ2V0Tm9kZSkpCiAgICAgICAgICAgICBuZXdUYXJnZXQgPSB0
YXJnZXROb2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ld1RhcmdldCA9IHRvRWxlbWVudCh0YXJnZXROb2RlKTsKKyAgICAgICAgICAg
IG5ld1RhcmdldCA9IGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldE5vZGUpOwogICAgIH0KIAogICAg
IG1fYXV0b3Njcm9sbENvbnRyb2xsZXItPnVwZGF0ZURyYWdBbmREcm9wKG5ld1RhcmdldC5nZXQo
KSwgZXZlbnQucG9zaXRpb24oKSwgZXZlbnQudGltZXN0YW1wKCkpOwpAQCAtMjM5NCwxMCArMjM5
NCwxMCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUoTm9k
ZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICB0YXJnZXRFbGVtZW50ID0g
bV9jYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQuZ2V0KCk7CiAgICAgZWxzZSBpZiAodGFyZ2V0
Tm9kZSkgewogICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgYSBub24tZWxlbWVudCwg
ZGlzcGF0Y2ggb24gdGhlIHBhcmVudC4gPHJkYXI6Ly9wcm9ibGVtLzQxOTY2NDY+Ci0gICAgICAg
IGlmICghdGFyZ2V0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1l
bnQ+KHRhcmdldE5vZGUpKQogICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCA9IHRhcmdldE5vZGUt
PnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGFyZ2V0RWxlbWVudCA9IHRvRWxlbWVudCh0YXJnZXROb2RlKTsKKyAgICAgICAgICAgIHRhcmdl
dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pih0YXJnZXROb2RlKTsKICAgICB9CiAKICAgICBt
X2VsZW1lbnRVbmRlck1vdXNlID0gdGFyZ2V0RWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAppbmRleCBjMTRkMDk3ZGU1ODY1MWMzNGQ0MTM0OTk2MjBiMGIxYzIz
ODRiNTNiLi4xM2U1MWMyYzdiMzMyNDA2NWU5MzEyODhkMTAyMWEwMTA3ZmQ3YTI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC0xMDMsOCArMTAzLDggQEAgRm9j
dXNOYXZpZ2F0aW9uU2NvcGUgRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlvblNj
b3BlT2YoTm9kZSogbm9kZSkKIEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlvblNj
b3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlTaGFkb3dIb3N0KE5vZGUqIG5vZGUpCiB7
CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVCh0b0VsZW1lbnQobm9kZSktPnNoYWRvd1Jv
b3QoKSk7Ci0gICAgcmV0dXJuIEZvY3VzTmF2aWdhdGlvblNjb3BlKHRvRWxlbWVudChub2RlKS0+
c2hhZG93Um9vdCgpKTsKKyAgICBBU1NFUlQoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnNoYWRv
d1Jvb3QoKSk7CisgICAgcmV0dXJuIEZvY3VzTmF2aWdhdGlvblNjb3BlKGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5zaGFkb3dSb290KCkpOwogfQogCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1
c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5SUZyYW1lKEhUTUxG
cmFtZU93bmVyRWxlbWVudCogZnJhbWUpCkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KEVsZW1lbnQmIGVsZW1lbnQsIEtleWJv
YXJkRXZlbnQmIGV2ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGb2N1c2FibGVTaGFkb3dIb3N0
KE5vZGUmIG5vZGUsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIHJldHVybiBub2RlLmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSkuaXNLZXlib2FyZEZvY3VzYWJsZSgmZXZl
bnQpICYmIHRvRWxlbWVudChub2RlKS5zaGFkb3dSb290KCkgJiYgIWhhc0N1c3RvbUZvY3VzTG9n
aWModG9FbGVtZW50KG5vZGUpKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4obm9kZSkgJiYgZG93
bmNhc3Q8RWxlbWVudD4obm9kZSkuaXNLZXlib2FyZEZvY3VzYWJsZSgmZXZlbnQpICYmIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSAmJiAhaGFzQ3VzdG9tRm9jdXNMb2dpYyhk
b3duY2FzdDxFbGVtZW50Pihub2RlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVk
VGFiSW5kZXgoTm9kZSYgbm9kZSwgS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAgaWYgKCFu
b2RlLmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KHRvRWxlbWVu
dChub2RlKSwgZXZlbnQpID8gMCA6IHRvRWxlbWVudChub2RlKS50YWJJbmRleCgpOworICAgIHJl
dHVybiBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIGV2
ZW50KSA/IDAgOiBkb3duY2FzdDxFbGVtZW50Pihub2RlKS50YWJJbmRleCgpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkVmlzaXQoRWxlbWVudCYgZWxlbWVudCwgS2V5Ym9hcmRFdmVu
dCYgZXZlbnQpCkBAIC0zNTAsNyArMzUwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFu
Y2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKIAog
RWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlRWxlbWVudEFjcm9zc0ZvY3Vz
U2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c05hdmlnYXRpb25TY29wZSBzY29w
ZSwgTm9kZSogY3VycmVudE5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VS
VCghY3VycmVudE5vZGUgfHwgIWN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIWlzTm9u
Rm9jdXNhYmxlU2hhZG93SG9zdCgqdG9FbGVtZW50KGN1cnJlbnROb2RlKSwgKmV2ZW50KSk7Cisg
ICAgQVNTRVJUKCFjdXJyZW50Tm9kZSB8fCAhaXM8RWxlbWVudD4oY3VycmVudE5vZGUpIHx8ICFp
c05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoKmRvd25jYXN0PEVsZW1lbnQ+KGN1cnJlbnROb2RlKSwg
KmV2ZW50KSk7CiAgICAgRWxlbWVudCogZm91bmQ7CiAgICAgaWYgKGN1cnJlbnROb2RlICYmIGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQgJiYgaXNGb2N1c2FibGVTaGFkb3dIb3N0
KCpjdXJyZW50Tm9kZSwgKmV2ZW50KSkgewogICAgICAgICBFbGVtZW50KiBmb3VuZEluSW5uZXJG
b2N1c1Njb3BlID0gZmluZEZvY3VzYWJsZUVsZW1lbnRSZWN1cnNpdmVseShkaXJlY3Rpb24sIEZv
Y3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU93bmVkQnlTaGFkb3dIb3N0
KGN1cnJlbnROb2RlKSwgMCwgZXZlbnQpOwpAQCAtNDEwLDkgKzQxMCw5IEBAIEVsZW1lbnQqIEZv
Y3VzQ29udHJvbGxlcjo6ZmluZEVsZW1lbnRXaXRoRXhhY3RUYWJJbmRleChOb2RlKiBzdGFydCwg
aW50IHRhYkluZGV4CiAgICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAogICAgIHVz
aW5nIG5hbWVzcGFjZSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOwogICAgIGZvciAoTm9kZSogbm9k
ZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2Fy
ZCA/IG5leHRJblNjb3BlKG5vZGUpIDogcHJldmlvdXNJblNjb3BlKG5vZGUpKSB7Ci0gICAgICAg
IGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5v
ZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0
b0VsZW1lbnQoKm5vZGUpOworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oKm5vZGUpOwogICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAm
JiBhZGp1c3RlZFRhYkluZGV4KGVsZW1lbnQsICpldmVudCkgPT0gdGFiSW5kZXgpCiAgICAgICAg
ICAgICByZXR1cm4gJmVsZW1lbnQ7CiAgICAgfQpAQCAtNDI1LDkgKzQyNSw5IEBAIHN0YXRpYyBF
bGVtZW50KiBuZXh0RWxlbWVudFdpdGhHcmVhdGVyVGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0
YWJJbmRleCwgS2V5Ym9hCiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2hvcnQ+OjptYXgoKSArIDE7CiAgICAgRWxlbWVudCogd2lubmVyID0gbnVsbHB0cjsK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IE5vZGVSZW5kZXJpbmdU
cmF2ZXJzYWw6Om5leHRJblNjb3BlKG5vZGUpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKm5vZGUpOwor
ICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
ICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgZXZlbnQpICYmIGVsZW1lbnQudGFiSW5kZXgo
KSA+IHRhYkluZGV4ICYmIGVsZW1lbnQudGFiSW5kZXgoKSA8IHdpbm5pbmdUYWJJbmRleCkgewog
ICAgICAgICAgICAgd2lubmVyID0gJmVsZW1lbnQ7CiAgICAgICAgICAgICB3aW5uaW5nVGFiSW5k
ZXggPSBlbGVtZW50LnRhYkluZGV4KCk7CkBAIC00NDMsOSArNDQzLDkgQEAgc3RhdGljIEVsZW1l
bnQqIHByZXZpb3VzRWxlbWVudFdpdGhMb3dlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFi
SW5kZXgsIEtleWIKICAgICBpbnQgd2lubmluZ1RhYkluZGV4ID0gMDsKICAgICBFbGVtZW50KiB3
aW5uZXIgPSBudWxscHRyOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2Rl
ID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cHJldmlvdXNJblNjb3BlKG5vZGUpKSB7Ci0gICAg
ICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQg
PSB0b0VsZW1lbnQoKm5vZGUpOworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwogICAgICAgICBpbnQgY3VycmVudFRhYkluZGV4ID0gYWRqdXN0ZWRU
YWJJbmRleChlbGVtZW50LCBldmVudCk7CiAgICAgICAgIGlmICgoc2hvdWxkVmlzaXQoZWxlbWVu
dCwgZXZlbnQpIHx8IGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChlbGVtZW50LCBldmVudCkpICYm
IGN1cnJlbnRUYWJJbmRleCA8IHRhYkluZGV4ICYmIGN1cnJlbnRUYWJJbmRleCA+IHdpbm5pbmdU
YWJJbmRleCkgewogICAgICAgICAgICAgd2lubmVyID0gJmVsZW1lbnQ7CkBAIC00NjQsOSArNDY0
LDkgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlRWxlbWVudChGb2N1
c05hdmlnYXRpb25TY29wZSBzY29wZSwgTm9kZSoKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIGV4
Y2x1ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJiaW5nIGN5Y2xlLCB0aGUgbmV4dCBmb2N1c2FibGUg
bm9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRyZWUgb3JkZXIKICAgICAgICAgaWYgKHRhYkluZGV4IDwg
MCkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbmV4dEluU2NvcGUoc3RhcnQpOyBu
b2RlOyBub2RlID0gbmV4dEluU2NvcGUobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgICAgIGlm
IChzaG91bGRWaXNpdChlbGVtZW50LCAqZXZlbnQpICYmIGFkanVzdGVkVGFiSW5kZXgoZWxlbWVu
dCwgKmV2ZW50KSA+PSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmVsZW1lbnQ7CiAg
ICAgICAgICAgICB9CkBAIC01MTYsOSArNTE2LDkgQEAgRWxlbWVudCogRm9jdXNDb250cm9sbGVy
OjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQoRm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE4K
ICAgICAvLyBIb3dldmVyLCBpZiBhIG5vZGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgbm9ybWFsIHRh
YmJpbmcgY3ljbGUsIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgbm9kZSBpcyBkZXRlcm1pbmVkIGJ5
IHRyZWUgb3JkZXIKICAgICBpZiAoc3RhcnRpbmdUYWJJbmRleCA8IDApIHsKICAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOyBub2RlOyBub2RlID0gcHJldmlvdXNJblNjb3Bl
KG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAg
ICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYklu
ZGV4KGVsZW1lbnQsICpldmVudCkgPj0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gJmVsZW1l
bnQ7CiAgICAgICAgIH0KQEAgLTg2MCw3ICs4NjAsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6
YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29u
cwogICAgIH0KIAogICAgIC8vIFdlIGZvdW5kIGEgbmV3IGZvY3VzIG5vZGUsIG5hdmlnYXRlIHRv
IGl0LgotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoZm9jdXNDYW5kaWRhdGUuZm9j
dXNhYmxlTm9kZSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGZv
Y3VzQ2FuZGlkYXRlLmZvY3VzYWJsZU5vZGUpOwogICAgIEFTU0VSVChlbGVtZW50KTsKIAogICAg
IGVsZW1lbnQtPmZvY3VzKGZhbHNlLCBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAppbmRleCBmNjEzNGVkZGQ1MjRmNDJjMDAwZTAzZTM0Y2I1ZDI4NjA1Mjg5
NTVkLi41NGNhOTY3OTgwZGI3YzU2MzE0ZDRkYWJjNDFiYWZiZjlmYjI0OTljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjIyLDEwICsyMjIsMTAgQEAgdm9pZCBQ
YWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogCiAgICAgZm9yIChW
ZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZXMuYmVnaW4oKTsgaXRlciAhPSBub2Rl
cy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKLSAgICAgICAg
aWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0g
dG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5
bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91
bmQgaW1hZ2VzKS4KICAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKQogICAg
ICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKGRvd25jYXN0PFN0eWxlZEVs
ZW1lbnQ+KGVsZW1lbnQpLmlubGluZVN0eWxlKCksIGRvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCBlYmJhYmQxNWMzNjI2ZmY5OGYyM2M5
YzViZTlmMjc3ZmRiYmY2ZTM3Li43MjFiZDU4YjBlZDY4NmVmMDRmZjI3MjYxMTFkOGEzZDI4M2Zi
OTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0y
MjMsMTAgKzIyMywxMSBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlv
biYgZGlyKSBjb25zdAogICAgIC8vIEZpbmQgdGhlIHRpdGxlIGluIHRoZSBuZWFyZXN0IGVuY2xv
c2luZyBET00gbm9kZS4KICAgICAvLyBGb3IgPGFyZWE+IHRhZ3MgaW4gaW1hZ2UgbWFwcywgd2Fs
ayB0aGUgdHJlZSBmb3IgdGhlIDxhcmVhPiwgbm90IHRoZSA8aW1nPiB1c2luZyBpdC4KICAgICBm
b3IgKE5vZGUqIHRpdGxlTm9kZSA9IG1faW5uZXJOb2RlLmdldCgpOyB0aXRsZU5vZGU7IHRpdGxl
Tm9kZSA9IHRpdGxlTm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICh0aXRsZU5vZGUt
PmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gdG9FbGVtZW50
KHRpdGxlTm9kZSktPnRpdGxlKCk7CisgICAgICAgIGlmIChpczxFbGVtZW50Pih0aXRsZU5vZGUp
KSB7CisgICAgICAgICAgICBFbGVtZW50JiB0aXRsZUVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
PigqdGl0bGVOb2RlKTsKKyAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IHRpdGxlRWxlbWVudC50
aXRsZSgpOwogICAgICAgICAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRpdGxlTm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRpdGxlRWxlbWVudC5yZW5kZXJlcigpKQogICAg
ICAgICAgICAgICAgICAgICBkaXIgPSByZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdGl0bGU7CiAgICAgICAgICAgICB9CkBAIC0yMzgsMTcgKzIz
OSwxNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlvbiYgZGlyKSBj
b25zdAogU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OmlubmVyVGV4dElmVHJ1bmNhdGVkKFRleHREaXJl
Y3Rpb24mIGRpcikgY29uc3QKIHsKICAgICBmb3IgKE5vZGUqIHRydW5jYXRlZE5vZGUgPSBtX2lu
bmVyTm9kZS5nZXQoKTsgdHJ1bmNhdGVkTm9kZTsgdHJ1bmNhdGVkTm9kZSA9IHRydW5jYXRlZE5v
ZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIXRydW5jYXRlZE5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pih0cnVuY2F0ZWROb2RlKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gdG9FbGVtZW50
KHRydW5jYXRlZE5vZGUpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVy
ID0gZG93bmNhc3Q8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUpLnJlbmRlcmVyKCkpIHsKICAgICAg
ICAgICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSkgewogICAgICAgICAgICAg
ICAgIFJlbmRlckJsb2NrRmxvdyogYmxvY2sgPSB0b1JlbmRlckJsb2NrRmxvdyhyZW5kZXJlcik7
CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdHlsZSgpLnRleHRPdmVyZmxvdygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGJsb2NrLT5maXJz
dFJvb3RCb3goKTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaW5lLT5oYXNFbGxpcHNpc0JveCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlyID0gYmxvY2stPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudCh0cnVuY2F0ZWROb2RlKS0+
aW5uZXJUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KCp0cnVuY2F0ZWROb2RlKS5pbm5lclRleHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTMy
Miw3ICszMjMsNyBAQCBVUkwgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCgpIGNvbnN0
CiAgICAgICAgIHx8IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSkK
ICAgICAgICAgfHwgaXM8SFRNTE9iamVjdEVsZW1lbnQ+KCptX2lubmVyTm9uU2hhcmVkTm9kZSkK
ICAgICAgICAgfHwgaXM8U1ZHSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5vZGUpKSB7
Ci0gICAgICAgIHVybFN0cmluZyA9IHRvRWxlbWVudCgqbV9pbm5lck5vblNoYXJlZE5vZGUpLmlt
YWdlU291cmNlVVJMKCk7CisgICAgICAgIHVybFN0cmluZyA9IGRvd25jYXN0PEVsZW1lbnQ+KCpt
X2lubmVyTm9uU2hhcmVkTm9kZSkuaW1hZ2VTb3VyY2VVUkwoKTsKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuIFVSTCgpOwogCkBAIC02NzQsOSArNjc1LDkgQEAgRWxlbWVudCogSGl0VGVzdFJl
c3VsdDo6aW5uZXJFbGVtZW50KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gbV9pbm5lck5v
ZGUuZ2V0KCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAg
IHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICByZXR1cm4gbm9kZS0+cGFyZW50
RWxlbWVudCgpOwogfQogCkBAIC02ODQsOSArNjg1LDkgQEAgRWxlbWVudCogSGl0VGVzdFJlc3Vs
dDo6aW5uZXJOb25TaGFyZWRFbGVtZW50KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gbV9p
bm5lck5vblNoYXJlZE5vZGUuZ2V0KCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9FbGVt
ZW50KG5vZGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXM8RWxlbWVudD4o
bm9kZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICByZXR1
cm4gbm9kZS0+cGFyZW50RWxlbWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKaW5kZXggZTVjNmMwM2Vl
NmE3NjIyNzA0ZjYyODhjNzQxODBhMjNlY2I4ZGI2NS4uOTQ3NGU4ODk0YzhjYmEzZGFiNGNhNGQ0
ZWQzNGJlNjUyOTU3NTRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaApAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6
CiAgICAgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94KEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRl
clN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94KCk7CiAK
LSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JO
b25Bbm9ueW1vdXMoKSk7IH0KKyAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAppbmRleCA5M2YwNmIyZjJkMDUxNWIy
MzUyM2ZmZTJlYTlkZGI0N2IwMzQ1YmNmLi5jOTU2NmRmN2U5MTY0ZTQzMmViYmE4ODA4OTk2OWVh
ZDI3Mzg4OTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0
YWlsc01hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTERldGFpbHNFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtMTQzLDggKzE0NCw4IEBAIGJvb2wgUmVuZGVy
RGV0YWlsc01hcmtlcjo6aXNPcGVuKCkgY29uc3QKICAgICBmb3IgKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBwYXJlbnQoKTsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgp
KSB7CiAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShkZXRhaWxzVGFnKSkK
LSAgICAgICAgICAgIHJldHVybiAhdG9FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5nZXRBdHRy
aWJ1dGUob3BlbkF0dHIpLmlzTnVsbCgpOworICAgICAgICBpZiAoaXM8SFRNTERldGFpbHNFbGVt
ZW50PihyZW5kZXJlci0+bm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8SFRN
TERldGFpbHNFbGVtZW50PigqcmVuZGVyZXItPm5vZGUoKSkuZ2V0QXR0cmlidXRlKG9wZW5BdHRy
KS5pc051bGwoKTsKICAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlcmVyLT5u
b2RlKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggNDJiNWRjMDIwMTFmZGI0ZjA2YWQzOGI3ZmRm
MGM1ZjViYTg3NDdmNi4uMDVjZTc5NGQxOWE0Y2ZlNTkzZjc3MzZjYzhjZTEwODA4MjMwZjRjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC00OCw4ICs0OCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFuaW1hdGFibGVTdHlsZShQYXNzUmVmPFJlbmRlclN0
eWxlPik7CiAKICAgICAvLyBUaGlzIGlzIG51bGwgZm9yIGFub255bW91cyByZW5kZXJlcnMuCi0g
ICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChSZW5kZXJPYmpl
Y3Q6Om5vZGUoKSk7IH0KLSAgICBFbGVtZW50KiBub25Qc2V1ZG9FbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6bm9uUHNldWRvTm9kZSgpKTsgfQorICAgIEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxFbGVtZW50PihSZW5kZXJP
YmplY3Q6Om5vZGUoKSk7IH0KKyAgICBFbGVtZW50KiBub25Qc2V1ZG9FbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVuZGVyT2JqZWN0Ojpub25Qc2V1ZG9Ob2RlKCkp
OyB9CiAgICAgRWxlbWVudCogZ2VuZXJhdGluZ0VsZW1lbnQoKSBjb25zdDsKIAogICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQpAQCAt
MzE2LDcgKzMxNiw3IEBAIGlubGluZSBFbGVtZW50KiBSZW5kZXJFbGVtZW50OjpnZW5lcmF0aW5n
RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKHBhcmVudCgpICYmIGlzUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5nZW5lcmF0aW5nRWxlbWVudCgp
OwotICAgIHJldHVybiB0b0VsZW1lbnQoUmVuZGVyT2JqZWN0OjpnZW5lcmF0aW5nTm9kZSgpKTsK
KyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVuZGVyT2JqZWN0OjpnZW5lcmF0aW5nTm9k
ZSgpKTsKIH0KIAogaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1JlbmRlckxheWVyTW9kZWxP
YmplY3QoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXggMDI0
M2I2M2YxNDhhMzNlMGQ3ODBjM2VkOTVlZGU4Y2IxNjEyYmNkNy4uOTE5NDYxMDc2MjU1ZDc0ZTRk
YjkxMzQyYmJjYjNhMzliNTA4YWU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJHcmlkKEVsZW1lbnQmLCBQ
YXNzUmVmPFJlbmRlclN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVyR3JpZCgpOwogCi0gICAg
RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA2NGE2ZjQ3NzdiMDYxNmQ5ODFiNmI1ZGNjMDVm
YmI1NmJjM2FhZWZiLi4yMTNjYzkwZmNlYWI2OWFiYjllM2M1NWY3ZTQ1MDYxZGQyMDYxOTU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApA
QCAtMTY4MCw3ICsxNjgwLDcgQEAgc3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4oUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKICAgICBpZiAoIXJlbmRlcmVyLT5pc0VtYmVkZGVkT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1l
bnQocmVuZGVyZXItPm5vZGUoKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpOwogICAgIGlmICghZWxlbWVudCB8fCAhaXM8SFRNTFBs
dWdJbkVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKaW5kZXggZDJlMzhiZGQwYWJhM2UzNjcz
ZTFhNjZmMzBhZjljMWVmODY2ZWZhMi4uNzk1ZGUzYWUzMDgwMWVkNmQ0MjE4ZjlhZDVmOTE4NDYz
MDg5YmUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKQEAg
LTM0LDcgKzM0LDcgQEAgY2xhc3MgUmVuZGVyTGlzdE1hcmtlcjsKIGNsYXNzIFJlbmRlckxpc3RJ
dGVtIGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6CiAgICAgUmVuZGVy
TGlzdEl0ZW0oRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKLSAgICBFbGVtZW50JiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
IH0KKyAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCiAgICAgaW50IHZhbHVlKCkgY29uc3QgeyBp
ZiAoIW1faXNWYWx1ZVVwVG9EYXRlKSB1cGRhdGVWYWx1ZU5vdygpOyByZXR1cm4gbV92YWx1ZTsg
fQogICAgIHZvaWQgdXBkYXRlVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggNmZlOGFiOTVlZmIxZmY2ZWU1ZWJj
MzRiMDc5ZjAxNjEyYjc1ZjE5Ny4uODFkYzlmZWZiNzlmNmNmNjgzMDVjZmE5Njk2MzZlYmJiMmU2
ZTUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAKQEAgLTU0NSwxMyArNTQ1LDEzIEBAIGJvb2wgUmVuZGVyTmFtZWRGbG93VGhy
ZWFkOjppc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmIGNoaWxkLCBjb25zdCBSZW5k
CiAgICAgaWYgKCFjaGlsZC5ub2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQVNT
RVJUKGNoaWxkLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBBU1NFUlQoaXM8RWxlbWVu
dD4oY2hpbGQubm9kZSgpKSk7CiAKICAgICBOb2RlKiBvcmlnaW5hbFBhcmVudCA9IE5vZGVSZW5k
ZXJpbmdUcmF2ZXJzYWw6OnBhcmVudChjaGlsZC5ub2RlKCkpOwotICAgIGlmICghb3JpZ2luYWxQ
YXJlbnQgfHwgIW9yaWdpbmFsUGFyZW50LT5pc0VsZW1lbnROb2RlKCkgfHwgIW9yaWdpbmFsUGFy
ZW50LT5yZW5kZXJlcigpKQorICAgIGlmICghb3JpZ2luYWxQYXJlbnQgfHwgIWlzPEVsZW1lbnQ+
KG9yaWdpbmFsUGFyZW50KSB8fCAhb3JpZ2luYWxQYXJlbnQtPnJlbmRlcmVyKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIHRvRWxlbWVudChvcmlnaW5hbFBhcmVudCktPnJl
bmRlcmVyKCktPmlzQ2hpbGRBbGxvd2VkKGNoaWxkLCBzdHlsZSk7CisgICAgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KCpvcmlnaW5hbFBhcmVudCkucmVuZGVyZXIoKS0+aXNDaGlsZEFsbG93ZWQo
Y2hpbGQsIHN0eWxlKTsKIH0KIAogdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRpc3BhdGNo
UmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50SWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA2ZGUzNWQwNDRmMjQ3YzY0MTA4NjEyZjRlOTZiNGEz
ZDAyYzRiNjIyLi4yNGVmNDk2ODQ0MjhhYzFjMjZiNzYxZjA4ODk3YjlmZDU4MjY1MjkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTAzMywxMyArMTAz
MywxMyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogCiAgICAgaWYgKHVybFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgTm9kZSogbiA9IG5vZGUoKTsKLSAgICBpZiAoIW4g
fHwgIW4tPmlzTGluaygpIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgTm9kZSogbm9kZSA9
IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzTGluaygpIHx8ICFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aHJlZiA9IHRvRWxlbWVudChuKS0+Z2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGhyZWYgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZ2V0QXR0cmlidXRl
KGhyZWZBdHRyKTsKICAgICBpZiAoaHJlZi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zZXRVUkxGb3JSZWN0KG4tPmRvY3VtZW50KCkuY29tcGxldGVV
UkwoaHJlZiksIHNuYXBwZWRJbnRSZWN0KHVybFJlY3QpKTsKKyAgICBwYWludEluZm8uY29udGV4
dC0+c2V0VVJMRm9yUmVjdChub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKGhyZWYpLCBzbmFw
cGVkSW50UmVjdCh1cmxSZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxp
bmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKQEAg
LTIxNDEsNyArMjE0MSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUoYm9v
bCBkcmFnT24pCiB7CiAgICAgYm9vbCB2YWx1ZUNoYW5nZWQgPSAoZHJhZ09uICE9IGlzRHJhZ2dp
bmcoKSk7CiAgICAgc2V0SXNEcmFnZ2luZyhkcmFnT24pOwotICAgIGlmICh2YWx1ZUNoYW5nZWQg
JiYgbm9kZSgpICYmIChzdHlsZSgpLmFmZmVjdGVkQnlEcmFnKCkgfHwgKG5vZGUoKS0+aXNFbGVt
ZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKCkpLT5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkp
KSkKKyAgICBpZiAodmFsdWVDaGFuZ2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5
RHJhZygpIHx8IChpczxFbGVtZW50Pihub2RlKCkpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KCkpLmNoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKSkpKQogICAgICAgICBub2RlKCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGRT
bG93KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJyLT51
cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKQEAgLTIyMjUsNyArMjIyNSw3IEBAIFJlbmRlclN0eWxl
KiBSZW5kZXJPYmplY3Q6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgUmVu
ZGVyU3R5bGUqIHBhCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJl
cXVlc3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBj
b25zdAogewogICAgIGlmIChwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRCAmJiAhb3duU3R5bGUgJiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNl
dWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIGlmICghcGFyZW50U3R5bGUpIHsKICAgICAgICAgQVNT
RVJUKCFvd25TdHlsZSk7CkBAIC0yMjMzLDIwICsyMjMzLDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IFJlbmRlck9iamVjdDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9T
dHlsZVJlCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgImZpbmQgbmVhcmVzdCBlbGVtZW50
IHBhcmVudCIgc2hvdWxkIGJlIGEgaGVscGVyIGZ1bmN0aW9uLgotICAgIE5vZGUqIG4gPSBub2Rl
KCk7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgbiA9IG4t
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobik7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKKyAgICB3aGlsZSAobm9kZSAmJiAhaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
CiAgICAgaWYgKHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVS
SVRFRCkgewotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IGRvY3VtZW50KCku
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRTdHls
ZSwgRGlzYWxsb3dTdHlsZVNoYXJpbmcpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJl
c3VsdCA9IGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgm
ZWxlbWVudCwgcGFyZW50U3R5bGUsIERpc2FsbG93U3R5bGVTaGFyaW5nKTsKICAgICAgICAgcmVz
dWx0LT5zZXRTdHlsZVR5cGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVT
dHlsZVJlc29sdmVyKCkucHNldWRvU3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb1N0eWxl
UmVxdWVzdCwgcGFyZW50U3R5bGUpOworICAgIHJldHVybiBkb2N1bWVudCgpLmVuc3VyZVN0eWxl
UmVzb2x2ZXIoKS5wc2V1ZG9TdHlsZUZvckVsZW1lbnQoJmVsZW1lbnQsIHBzZXVkb1N0eWxlUmVx
dWVzdCwgcGFyZW50U3R5bGUpOwogfQogCiBzdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9yKFJl
bmRlclN0eWxlKiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSdWJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCmluZGV4
IGQ4Y2M3ZDQ1M2FmN2IzNjkxOWQ3YjllZTVlYWNmMWQ5MTlhOTVlZmUuLjg3OTVkZTAzOWEzZWRk
ZTM1NTEwZThkOWUxNTM0MzQ4ZGMyMDVlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSdWJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnkuaApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyUnVieUFzQmxvY2so
RWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKICAgICB2aXJ0dWFsIH5SZW5kZXJSdWJ5
QXNCbG9jaygpOwogCi0gICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxl
bWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaAppbmRleCAxNjNiMjA0NzFmMjgyZjNiYjcx
MjlhMWQzMWQwNjJhMWQ4YTQ4MDhhLi41NjdmMDFlOGUzYTc1MzQ4MWNmMTM3NjFhOWM2NTU0M2U4
OTE0ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaApAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyUnVieVRleHQoRWxlbWVudCYsIFBhc3NS
ZWY8UmVuZGVyU3R5bGU+KTsKICAgICB2aXJ0dWFsIH5SZW5kZXJSdWJ5VGV4dCgpOwogCi0gICAg
RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYp
IGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDYXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDYXB0aW9uLmgKaW5kZXggNjQ0MTYwOTA5ZGFlZDk3ZTE1ZWU5MzZiMTk1MTliMmQwNjdhMjMx
NS4uMTRiYTlkMmQzOGMyYWQzZjkxNWJiMTNmNTNlNDcxYmQwNDMzMDQxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaApAQCAtMzEsNyArMzEsNyBA
QCBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVDYXB0aW9uKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRl
clN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFibGVDYXB0aW9uKCk7CiAKLSAgICBFbGVt
ZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1v
dXMoKSk7IH0KKyAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdCBvdmVycmlk
ZTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNvbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKaW5kZXgg
MjcwYThhNGNlMzlkYzBiY2EyNGQ2ODgyMGY0NjdjNjlmNmUxNTQxMS4uOWRkOTM1NjRmNmE4MGYw
ZTY4MWI3OGJhMzc4MjRmNDFiODZhY2Y5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgUmVuZGVyVGFibGVDZWxsOwog
Y2xhc3MgUmVuZGVyVGFibGVDb2wgZmluYWwgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoK
ICAgICBSZW5kZXJUYWJsZUNvbChFbGVtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pOwotICAg
IEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobm9kZUZvck5vbkFu
b255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKICAgICB2b2lkIGNsZWFy
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5Qml0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBiYTY3NWYwNGVlNDU0ZjhlY2Q5MDRiYzRiYWZjMjY5
NzRhZjIyNGE2Li45NzQ3YjRhMjE2Yzg1YjIyNzA4OGRjZDkzYWI4N2I1N2Y4Y2E4YzM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTgwMiw2NyArODAyLDY3
IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
IG8pIGNvbnN0CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1p
bmF0ZSgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwotICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIE5vZGUqIG5vZGUgPSBy
ZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICF0b0VsZW1lbnQobm9kZSktPmlzRGlzYWJs
ZWRGb3JtQ29udHJvbCgpOworICAgIHJldHVybiAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1c2Vk
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9
IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
IE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZm9jdXNE
ZWxlZ2F0ZSA9IHRvRWxlbWVudChub2RlKS0+Zm9jdXNEZWxlZ2F0ZSgpOworICAgIEVsZW1lbnQq
IGZvY3VzRGVsZWdhdGUgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZm9jdXNEZWxlZ2F0ZSgp
OwogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGZvY3VzRGVsZWdhdGUtPmRvY3VtZW50KCk7CiAg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICByZXR1cm4gZm9jdXNEZWxl
Z2F0ZSA9PSBkb2N1bWVudC5mb2N1c2VkRWxlbWVudCgpICYmIGZyYW1lICYmIGZyYW1lLT5zZWxl
Y3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNQ
cmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6Omlz
UHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICgh
by5ub2RlKCkgfHwgIW8ubm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFyZW5kZXJl
ci5ub2RlKCkgfHwgIWlzPEVsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG8ubm9kZSgpKS0+YWN0aXZlKCk7CisgICAg
cmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpyZW5kZXJlci5ub2RlKCkpLmFjdGl2ZSgpOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFBy
ZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2RlKiBu
b2RlID0gby5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIWlz
PEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICBpZiAoIWVsZW1lbnQtPmFjdGl2ZSgpIHx8ICFl
bGVtZW50LT5pc1NwaW5CdXR0b25FbGVtZW50KCkpCisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICBpZiAoIWVsZW1lbnQuYWN0aXZlKCkgfHwgIWVs
ZW1lbnQuaXNTcGluQnV0dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4oZWxlbWVudCktPnVwRG93blN0
YXRlKCkgPT0gU3BpbkJ1dHRvbkVsZW1lbnQ6OlVwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
cGluQnV0dG9uRWxlbWVudCY+KGVsZW1lbnQpLnVwRG93blN0YXRlKCkgPT0gU3BpbkJ1dHRvbkVs
ZW1lbnQ6OlVwOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc1JlYWRPbmx5Q29udHJvbChjb25z
dCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1JlYWRPbmx5Q29u
dHJvbChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBvLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwogICAgIGlm
ICghbm9kZSB8fCAhaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gIXRvRWxlbWVudCgqbm9kZSkubWF0Y2hlc1JlYWRXcml0
ZVBzZXVkb0NsYXNzKCk7CisgICAgcmV0dXJuICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkubWF0
Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzSG92
ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0hv
dmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2RlKiBu
b2RlID0gby5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIWlz
PEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF0b0VsZW1l
bnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVu
dChub2RlKS0+aG92ZXJlZCgpOworICAgIGlmICghZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmlz
U3BpbkJ1dHRvbkVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKS5ob3ZlcmVkKCk7CiAgICAgU3BpbkJ1dHRvbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KG5vZGUpOwogICAgIHJldHVybiBlbGVtZW50LT5ob3Zl
cmVkKCkgJiYgZWxlbWVudC0+dXBEb3duU3RhdGUoKSAhPSBTcGluQnV0dG9uRWxlbWVudDo6SW5k
ZXRlcm1pbmF0ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0SG92
ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1Nw
aW5VcEJ1dHRvblBhcnRIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0
CiB7Ci0gICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNFbGVtZW50Tm9kZSgpIHx8ICF0b0VsZW1lbnQobm9kZSktPmlzU3BpbkJ1dHRvbkVsZW1lbnQo
KSkKKyAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOworICAgIGlmICghbm9kZSB8fCAh
aXM8RWxlbWVudD4obm9kZSkgfHwgIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwaW5CdXR0
b25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTcGluQnV0dG9uRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4obm9kZSk7CiAgICAg
cmV0dXJuIGVsZW1lbnQtPnVwRG93blN0YXRlKCkgPT0gU3BpbkJ1dHRvbkVsZW1lbnQ6OlVwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggY2JkOTJh
Yjk4OTlmMzYzNTg1ZDJkMTExYjk0YTZhNjQ1NWE1YmM2ZS4uNDgzODhlYmMzMGQwNWVkNzk2MTFl
YWUwOTk5NmE3YWI5MDhmZGFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuY3BwCkBAIC0zMTYsMTUgKzMxNiwxNSBAQCBzdGF0aWMgYm9vbCBub2RlSGFzUHNl
dWRvKE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykKIAogc3RhdGljIGJvb2wgbm9kZUhh
c0NsYXNzKE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKIHsKLSAgICBpZiAoIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUp
OworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CiAKLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc0NsYXNzKCkpCisgICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBlbGVtZW50LT5jbGFzc05hbWVz
KCkuY29udGFpbnMoY2xhc3NOYW1lKTsKKyAgICByZXR1cm4gZWxlbWVudC5jbGFzc05hbWVzKCku
Y29udGFpbnMoY2xhc3NOYW1lKTsKIH0KIAogUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3Rr
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAzNmUw
NzcxNjJmNjU1ZGZjMDQxZGViNjk4ODJkYjQ1ZTAwMGQ3OTYxLi45MjAwMjZjZDhjNmY4OTgwZjU2
ODk1OTY4MTExNjQ4Njg1NzY4ZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBk
YXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQogdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKQogewogICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxp
Z2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IG8ubm9kZSgpICYmIG8ubm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkgJiYgdG9FbGVtZW50KG8ubm9kZSgpKS0+YWN0aXZlKCk7CisgICAgYm9vbCBwcmVz
c2VkID0gby5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkpICYmIGRvd25jYXN0PEVsZW1l
bnQ+KCpvLm5vZGUoKSkuYWN0aXZlKCk7CiAgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkK
ICAgICAgICAgW2NlbGwgc2V0SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07CiB9CkBAIC0xNTMxLDcgKzE1
MzEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYQogCiAgICAgLy8gVXBkYXRlIHRoZSB2YXJp
b3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzbGlkZXJU
aHVtYkNlbGwsIG8pOwotICAgICAgICBFbGVtZW50KiBmb2N1c0RlbGVnYXRlID0gKG8ubm9kZSgp
ICYmIG8ubm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpID8gdG9FbGVtZW50KG8ubm9kZSgpKS0+Zm9j
dXNEZWxlZ2F0ZSgpIDogMDsKKyAgICAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLm5v
ZGUoKSAmJiBpczxFbGVtZW50PihvLm5vZGUoKSkpID8gZG93bmNhc3Q8RWxlbWVudD4oby5ub2Rl
KCkpLT5mb2N1c0RlbGVnYXRlKCkgOiBudWxscHRyOwogICAgIGlmIChmb2N1c0RlbGVnYXRlKQog
ICAgICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCAqZm9jdXNEZWxlZ2F0
ZS0+cmVuZGVyZXIoKSk7CiAKQEAgLTE2NzMsNyArMTY3Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQCiB7CiAgICAgRWxlbWVudCogaW5wdXQgPSBvLm5vZGUoKS0+c2hhZG93SG9zdCgpOwog
ICAgIGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gdG9FbGVtZW50KG8ubm9kZSgpKTsKKyAg
ICAgICAgaW5wdXQgPSBkb3duY2FzdDxFbGVtZW50PihvLm5vZGUoKSk7CiAKICAgICBpZiAoIWlu
cHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggMWU3ZDc1MmUy
ZTQyMzY5OTk4OTg5MTM2NmI1MGMxYTI3Mjc4MDA5Zi4uZDQ1YmM1YmQ0ZjA4MjI5N2Y3ZTc3YTc3
ZGJjNDUzMWY3NmU5ZWU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcApAQCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6
d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywK
ICAgICB9CiAgICAgCiAgICAgaWYgKGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0U2hvd0lEQW5kQ2xh
c3MpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBvLm5vZGUoKSAmJiBvLm5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG8ubm9kZSgpKSA6IDApIHsKKyAgICAgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBvLm5vZGUoKSAmJiBpczxFbGVtZW50PihvLm5vZGUoKSkg
PyBkb3duY2FzdDxFbGVtZW50PihvLm5vZGUoKSkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzSUQoKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIGlkPVwiIiArIGVs
ZW1lbnQtPmdldElkQXR0cmlidXRlKCkgKyAiXCIiOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5jcHAKaW5kZXggYjJkOTVhOWVmMWNiYTA0OTg2MWM3NzBkY2ZjZWE4
NmIwMDMwYmU4MC4uZDM5MmQ4ODcwZmUwN2FjYTgyY2E3MGI1NTBkYWJhZGQxOTU3MzhmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcApAQCAtMjc2LDggKzI3
Niw4IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpCiAg
ICAgICAgIHJldHVybiByZW5kZXJlci0+aXNGbG9hdGluZygpIHx8IHJlbmRlcmVyLT5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKTsKICAgICAvLyBBdm9pZCBjcmVhdGluZyBjb250YWluZXJzIGZvciB0
ZXh0IHdpdGhpbiB0ZXh0IGNvbnRyb2xzLCBidXR0b25zLCBvciA8c2VsZWN0PiBidXR0b25zLgot
ICAgIE5vZGUqIHBhcmVudE5vZGUgPSByZW5kZXJlci0+cGFyZW50KCkgPyByZW5kZXJlci0+cGFy
ZW50KCktPmdlbmVyYXRpbmdOb2RlKCkgOiAwOwotICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVu
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBmb3JtSW5wdXRUYWdzKCkuY29udGFpbnModG9FbGVt
ZW50KHBhcmVudE5vZGUpLT50YWdRTmFtZSgpKSkKKyAgICBOb2RlKiBwYXJlbnROb2RlID0gcmVu
ZGVyZXItPnBhcmVudCgpID8gcmVuZGVyZXItPnBhcmVudCgpLT5nZW5lcmF0aW5nTm9kZSgpIDog
bnVsbHB0cjsKKyAgICBpZiAocGFyZW50Tm9kZSAmJiBpczxFbGVtZW50PihwYXJlbnROb2RlKSAm
JiBmb3JtSW5wdXRUYWdzKCkuY29udGFpbnMoZG93bmNhc3Q8RWxlbWVudD4oKnBhcmVudE5vZGUp
LnRhZ1FOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTM4OCw4ICszODgsOCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lckNvbnRhaW5z
T25lT2ZUYWdzKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbgogICAgIGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjb250YWluZXI7CiAgICAgd2hpbGUgKHJlbmRlcmVyKSB7
CiAgICAgICAgIGNvbnN0IE5vZGUqIHJlbmRlcmVyTm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Ci0g
ICAgICAgIGlmIChyZW5kZXJlck5vZGUgJiYgcmVuZGVyZXJOb2RlLT5pc0VsZW1lbnROb2RlKCkp
IHsKLSAgICAgICAgICAgIGlmICh0YWdzLmNvbnRhaW5zKHRvRWxlbWVudChyZW5kZXJlck5vZGUp
LT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJlbmRlcmVyTm9kZSAmJiBpczxFbGVtZW50Pihy
ZW5kZXJlck5vZGUpKSB7CisgICAgICAgICAgICBpZiAodGFncy5jb250YWlucyhkb3duY2FzdDxF
bGVtZW50PigqcmVuZGVyZXJOb2RlKS50YWdRTmFtZSgpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZW5kZXJlciA9IG5leHRJblByZU9yZGVyU2tp
cHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhyZW5kZXJlciwgY29udGFpbmVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5j
cHAKaW5kZXggMGFmOTE2MDFhM2ExYzE3ZTBkMjc2NWJiNjg1ZjMxY2I3NDUyOWYxNC4uMjRjMTkw
ZDI5ODE4ODdlYjUzZWRhZWQ3MmFlNzMxNGZmZTNiYTExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKQEAgLTU1LDcg
KzU1LDcgQEAgUmVuZGVyTWF0aE1MQmxvY2s6OlJlbmRlck1hdGhNTEJsb2NrKERvY3VtZW50JiBk
b2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3QKIAogYm9vbCBSZW5kZXJNYXRoTUxCbG9j
azo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3QgUmVuZGVy
U3R5bGUmKSBjb25zdAogewotICAgIHJldHVybiBjaGlsZC5ub2RlKCkgJiYgaXNFbGVtZW50KCpj
aGlsZC5ub2RlKCkpOworICAgIHJldHVybiBjaGlsZC5ub2RlKCkgJiYgaXM8RWxlbWVudD4oKmNo
aWxkLm5vZGUoKSk7CiB9CiAKIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxCbG9jaz4gUmVuZGVyTWF0
aE1MQmxvY2s6OmNyZWF0ZUFub255bW91c01hdGhNTEJsb2NrKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKaW5kZXggOGE4NmE5NThjZDgzMDY0MDBlMmQxYTgzYTE4
ZGMxMmExOTQ2Yjg3ZC4uMjJlOGUxYWQ2Y2IyOGY3NmQyZDE1ZmM0NmQ1MTNhN2MwNGE1NzVmMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKQEAgLTQ4Miw4ICs0
ODIsOCBAQCBzdGF0aWMgdm9pZCBhdHRhY2hDaGlsZHJlbihDb250YWluZXJOb2RlJiBjdXJyZW50
LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUsCiAgICAgICAgICAgICBhdHRhY2hUZXh0UmVu
ZGVyZXIoZG93bmNhc3Q8VGV4dD4oKmNoaWxkKSwgcmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgYXR0YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwg
aW5oZXJpdGVkU3R5bGUsIHJlbmRlclRyZWVQb3NpdGlvbiwgbnVsbHB0cik7CisgICAgICAgIGlm
IChpczxFbGVtZW50PihjaGlsZCkpCisgICAgICAgICAgICBhdHRhY2hSZW5kZXJUcmVlKGRvd25j
YXN0PEVsZW1lbnQ+KCpjaGlsZCksIGluaGVyaXRlZFN0eWxlLCByZW5kZXJUcmVlUG9zaXRpb24s
IG51bGxwdHIpOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzUwMSw4IEBAIHN0YXRpYyB2b2lkIGF0
dGFjaERpc3RyaWJ1dGVkQ2hpbGRyZW4oSW5zZXJ0aW9uUG9pbnQmIGluc2VydGlvblBvaW50LCBS
ZW5kZXJTdHlsCiAgICAgICAgICAgICBhdHRhY2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8VGV4dD4o
KmN1cnJlbnQpLCByZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAg
ICAgICAgRWxlbWVudCYgY3VycmVudEVsZW1lbnQgPSB0b0VsZW1lbnQoKmN1cnJlbnQpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oY3VycmVudCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQmIGN1
cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnQpOwogICAgICAgICAgICAg
aWYgKGN1cnJlbnRFbGVtZW50LnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgZGV0YWNoUmVu
ZGVyVHJlZShjdXJyZW50RWxlbWVudCk7CiAgICAgICAgICAgICBhdHRhY2hSZW5kZXJUcmVlKGN1
cnJlbnRFbGVtZW50LCBpbmhlcml0ZWRTdHlsZSwgcmVuZGVyVHJlZVBvc2l0aW9uLCBudWxscHRy
KTsKQEAgLTY1NSw4ICs2NTUsOCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hEaXN0cmlidXRlZENoaWxk
cmVuKEluc2VydGlvblBvaW50JiBpbnNlcnRpb25Qb2ludCkKICAgICAgICAgICAgIGRldGFjaFRl
eHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY3VycmVudCkpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSkKLSAg
ICAgICAgICAgIGRldGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjdXJyZW50KSk7CisgICAgICAg
IGlmIChpczxFbGVtZW50PihjdXJyZW50KSkKKyAgICAgICAgICAgIGRldGFjaFJlbmRlclRyZWUo
ZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnQpKTsKICAgICB9CiB9CiAKQEAgLTY3MCw4ICs2NzAs
OCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hDaGlsZHJlbihDb250YWluZXJOb2RlJiBjdXJyZW50LCBE
ZXRhY2hUeXBlIGRldGFjaFR5cGUpCiAgICAgICAgICAgICBTdHlsZTo6ZGV0YWNoVGV4dFJlbmRl
cmVyKGRvd25jYXN0PFRleHQ+KCpjaGlsZCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBk
ZXRhY2hSZW5kZXJUcmVlKCp0b0VsZW1lbnQoY2hpbGQpLCBkZXRhY2hUeXBlKTsKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KGNoaWxkKSkKKyAgICAgICAgICAgIGRldGFjaFJlbmRlclRyZWUoZG93
bmNhc3Q8RWxlbWVudD4oKmNoaWxkKSwgZGV0YWNoVHlwZSk7CiAgICAgfQogICAgIGN1cnJlbnQu
Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KQEAgLTgxOSw4ICs4MTksOCBAQCBzdGF0
aWMgdm9pZCByZXNvbHZlU2hhZG93VHJlZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBFbGVtZW50
JiBob3N0LCBTdHlsZTo6Q2hhbgogICAgICAgICAgICAgcmVzb2x2ZVRleHROb2RlKGRvd25jYXN0
PFRleHQ+KCpjaGlsZCksIHJlbmRlclRyZWVQb3NpdGlvbik7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAg
ICAgICAgIHJlc29sdmVUcmVlKCp0b0VsZW1lbnQoY2hpbGQpLCBob3N0LnJlbmRlcmVyKCktPnN0
eWxlKCksIHJlbmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsKKyAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KGNoaWxkKSkKKyAgICAgICAgICAgIHJlc29sdmVUcmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpj
aGlsZCksIGhvc3QucmVuZGVyZXIoKS0+c3R5bGUoKSwgcmVuZGVyVHJlZVBvc2l0aW9uLCBjaGFu
Z2UpOwogICAgIH0KIAogICAgIHNoYWRvd1Jvb3QuY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CkBA
IC05NDMsMTkgKzk0MywxOSBAQCB2b2lkIHJlc29sdmVUcmVlKEVsZW1lbnQmIGN1cnJlbnQsIFJl
bmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSwgUmVuZGVyVHJlZVBvc2l0aQogICAgICAgICAgICAg
ICAgIHJlc29sdmVUZXh0Tm9kZShkb3duY2FzdDxUZXh0PigqY2hpbGQpLCBjaGlsZFJlbmRlclRy
ZWVQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBpZiAo
IWlzPEVsZW1lbnQ+KGNoaWxkKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICAgICAgRWxlbWVudCogY2hpbGRFbGVtZW50ID0gdG9FbGVtZW50KGNoaWxkKTsKKyAgICAgICAg
ICAgIEVsZW1lbnQmIGNoaWxkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCk7CiAg
ICAgICAgICAgICBpZiAoZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0FmZmVjdHNOZXh0U2libGlu
Z0VsZW1lbnRTdHlsZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZEVsZW1lbnQtPnN0eWxl
SXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIGNoaWxk
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICAgICAgICAgIGVsZW1lbnRO
ZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUgPSBjaGlsZEVs
ZW1lbnQtPmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjaGlsZEVsZW1lbnQtPnN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5n
ZSkKLSAgICAgICAgICAgICAgICBlbGVtZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRT
aWJsaW5nRWxlbWVudFN0eWxlID0gY2hpbGRFbGVtZW50LT5hZmZlY3RzTmV4dFNpYmxpbmdFbGVt
ZW50U3R5bGUoKTsKLSAgICAgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGlsZEVs
ZW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGNoaWxkRWxlbWVudC0+bmVlZHNTdHls
ZVJlY2FsYygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWxlbWVudC5zdHlsZUlzQWZm
ZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQorICAgICAgICAgICAgICAgICAgICBjaGlsZEVsZW1l
bnQuc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgICAgIGVsZW1lbnROZWVkaW5n
U3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUgPSBjaGlsZEVsZW1lbnQu
YWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkRWxlbWVudC5zdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCisgICAg
ICAgICAgICAgICAgZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0FmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSA9IGNoaWxkRWxlbWVudC5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKKyAgICAgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGlsZEVsZW1lbnQuY2hp
bGROZWVkc1N0eWxlUmVjYWxjKCkgfHwgY2hpbGRFbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSkg
ewogICAgICAgICAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7Ci0gICAgICAgICAgICAgICAg
cmVzb2x2ZVRyZWUoKmNoaWxkRWxlbWVudCwgcmVuZGVyZXItPnN0eWxlKCksIGNoaWxkUmVuZGVy
VHJlZVBvc2l0aW9uLCBjaGFuZ2UpOworICAgICAgICAgICAgICAgIHJlc29sdmVUcmVlKGNoaWxk
RWxlbWVudCwgcmVuZGVyZXItPnN0eWxlKCksIGNoaWxkUmVuZGVyVHJlZVBvc2l0aW9uLCBjaGFu
Z2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAppbmRleCA4NDlkZjg5ZGVlMWI0YTRiYzU4OGNhMzBiZDQ4N2IyM2IxYzcwMzYyLi5k
ZTMzMjc4YjMyYTZkZGIzNzUzM2MzYTI4NjI4N2E4ODYyYWQ4MzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCkBAIC03NjAsOSArNzYwLDEwIEBAIHZvaWQgU1ZHVXNlRWxlbWVu
dDo6ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkKICAgICAgICAg
ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoY2hpbGQuZ2V0KCkpOwogfQogCi12b2lkIFNW
R1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1l
bnQpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVl
KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN5
bWJvbFRhZykpIHsKKyAgICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4obm9kZSkpIHsKKyAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PFNWR1N5bWJvbEVsZW1lbnQ+KG5vZGUpOwog
ICAgICAgICAvLyBTcGVjOiBUaGUgcmVmZXJlbmNlZCAnc3ltYm9sJyBhbmQgaXRzIGNvbnRlbnRz
IGFyZSBkZWVwLWNsb25lZCBpbnRvIHRoZSBnZW5lcmF0ZWQgdHJlZSwKICAgICAgICAgLy8gd2l0
aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlICdzeW1ib2wnIGlzIHJlcGxhY2VkIGJ5IGFuICdzdmcn
LiBUaGlzIGdlbmVyYXRlZCAnc3ZnJyB3aWxsCiAgICAgICAgIC8vIGFsd2F5cyBoYXZlIGV4cGxp
Y2l0IHZhbHVlcyBmb3IgYXR0cmlidXRlcyB3aWR0aCBhbmQgaGVpZ2h0LiBJZiBhdHRyaWJ1dGVz
IHdpZHRoIGFuZC9vcgpAQCAtNzcyLDcgKzc3Myw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhw
YW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkKICAgICAgICAgUmVm
UHRyPFNWR1NWR0VsZW1lbnQ+IHN2Z0VsZW1lbnQgPSBTVkdTVkdFbGVtZW50OjpjcmVhdGUoU1ZH
TmFtZXM6OnN2Z1RhZywgKnJlZmVyZW5jZWREb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBUcmFu
c2ZlciBhbGwgZGF0YSAoYXR0cmlidXRlcywgZXRjLikgZnJvbSA8c3ltYm9sPiB0byB0aGUgbmV3
IDxzdmc+IGVsZW1lbnQuCi0gICAgICAgIHN2Z0VsZW1lbnQtPmNsb25lRGF0YUZyb21FbGVtZW50
KCp0b0VsZW1lbnQoZWxlbWVudCkpOworICAgICAgICBzdmdFbGVtZW50LT5jbG9uZURhdGFGcm9t
RWxlbWVudCgqZWxlbWVudCk7CiAKICAgICAgICAgLy8gT25seSBjbG9uZSBzeW1ib2wgY2hpbGRy
ZW4sIGFuZCBhZGQgdGhlbSB0byB0aGUgbmV3IDxzdmc+IGVsZW1lbnQKICAgICAgICAgZm9yIChO
b2RlKiBjaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKQEAgLTc4OCw3ICs3ODksNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAgICAgICAg
IGlmIChzdWJ0cmVlQ29udGFpbnNEaXNhbGxvd2VkRWxlbWVudCgqc3ZnRWxlbWVudCkpCiAgICAg
ICAgICAgICByZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZSgqc3ZnRWxlbWVudCk7
CiAKLSAgICAgICAgUmVmUHRyPE5vZGU+IHJlcGxhY2luZ0VsZW1lbnQoc3ZnRWxlbWVudC5nZXQo
KSk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiByZXBsYWNpbmdFbGVtZW50KHN2Z0VsZW1lbnQu
Z2V0KCkpOwogCiAgICAgICAgIC8vIFJlcGxhY2UgPHN5bWJvbD4gd2l0aCA8c3ZnPi4KICAgICAg
ICAgZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZXBsYWNlQ2hpbGQoc3ZnRWxlbWVudC5yZWxlYXNl
KCksIGVsZW1lbnQpOwpAQCAtODAwLDcgKzgwMSw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhw
YW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkKICAgICAgICAgICAg
IGV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKHNpYmxpbmcuZ2V0KCkpOwogICAgIH0K
IAotICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCiAgICAgICAgIGV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKGNoaWxk
LmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAppbmRleCAxMDQ5ZTZiNDE5NmZlMjgwZGY3NGRkYzA0NWE1YTQ5NTkwMjY2NWJj
Li5kNTQ1ZTlkZGVhMTI1YmEzN2RjOGFjZDBkNWU4Mzg5NjFjZGY4Yjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1
Nyw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogICAg
IGlmICghaW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB0YXJnZXQgZWxlbWVu
dCBpZiB3ZSBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudC4KLSAgICAgICAgc2V0VGFyZ2V0
RWxlbWVudCgwKTsKKyAgICAgICAgc2V0VGFyZ2V0RWxlbWVudChudWxscHRyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShY
TGlua05hbWVzOjpocmVmQXR0cik7CiAgICAgRWxlbWVudCogdGFyZ2V0OwogICAgIGlmIChocmVm
LmlzRW1wdHkoKSkKLSAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KHBhcmVudE5vZGUoKSkgOiBudWxscHRyOwor
ICAgICAgICB0YXJnZXQgPSBwYXJlbnROb2RlKCkgJiYgaXM8RWxlbWVudD4ocGFyZW50Tm9kZSgp
KSA/IGRvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUoKSkgOiBudWxscHRyOwogICAgIGVsc2UK
ICAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0
cmluZyhocmVmLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIFNWR0VsZW1lbnQqIHN2Z1RhcmdldCA9
IHRhcmdldCAmJiBpczxTVkdFbGVtZW50Pih0YXJnZXQpID8gZG93bmNhc3Q8U1ZHRWxlbWVudD4o
dGFyZ2V0KSA6IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhG
dW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRl
eCAxZTM2ZTliZGZjOGE4NjJjOWNkNGUzMmVhZmZhMTJlODNiZjI1YmE2Li4xZmY4Mzg0MDQwYjU0
ZjllMmQ4MDMwN2NiM2Q3YzdjMTM0ZDcwNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAKQEAgLTU4MCwxMyArNTgwLDEzIEBAIFZhbHVlIEZ1bkxhbmc6OmV2YWx1YXRlKCkg
Y29uc3QKIHsKICAgICBTdHJpbmcgbGFuZyA9IGFyZ3VtZW50KDApLmV2YWx1YXRlKCkudG9TdHJp
bmcoKTsKIAotICAgIGNvbnN0IEF0dHJpYnV0ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSAwOworICAg
IGNvbnN0IEF0dHJpYnV0ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBudWxscHRyOwogICAgIE5vZGUq
IG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
LT5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBl
bGVtZW50LT5maW5kQXR0cmlidXRlQnlOYW1lKFhNTE5hbWVzOjpsYW5nQXR0cik7CisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0
dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGVsZW1lbnQu
ZmluZEF0dHJpYnV0ZUJ5TmFtZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChsYW5ndWFnZUF0dHJpYnV0ZSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmNwcAppbmRleCAwZmQ0MTBjMzMzMmM2NDJiMTYzZmYwZTJjNzcwN2Y5
MTFmMzRmMWMzLi5iODYxNjgxMjY4MGFmYjkyZTEyZmMzM2NhMGQ4OTYwYmIwOWVmOWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcApAQCAtMjA3LDE5ICsyMDcsMTkgQEAgdm9pZCBO
b2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KCkgY29uc3QKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBz
b3J0ZWROb2RlczsKICAgICBzb3J0ZWROb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVD
b3VudCk7CiAKLSAgICBmb3IgKE5vZGUqIG4gPSBmaW5kUm9vdE5vZGUobV9ub2Rlcy5maXJzdCgp
LmdldCgpKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKLSAgICAgICAgaWYgKG5v
ZGVzLmNvbnRhaW5zKG4pKQotICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKG4pOworICAg
IGZvciAoTm9kZSogbm9kZSA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgICAgICBpZiAobm9k
ZXMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICBzb3J0ZWROb2Rlcy5hcHBlbmQobm9kZSk7
CiAKLSAgICAgICAgaWYgKCFjb250YWluc0F0dHJpYnV0ZU5vZGVzIHx8ICFuLT5pc0VsZW1lbnRO
b2RlKCkpCisgICAgICAgIGlmICghY29udGFpbnNBdHRyaWJ1dGVOb2RlcyB8fCAhaXM8RWxlbWVu
dD4obm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gdG9FbGVtZW50KG4pOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMo
KSkKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
KyAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50
LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgUmVmUHRyPEF0dHI+IGF0dHIg
PSBlbGVtZW50LT5hdHRySWZFeGlzdHMoYXR0cmlidXRlLm5hbWUoKSk7CisgICAgICAgIGZvciAo
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigp
KSB7CisgICAgICAgICAgICBSZWZQdHI8QXR0cj4gYXR0ciA9IGVsZW1lbnQuYXR0cklmRXhpc3Rz
KGF0dHJpYnV0ZS5uYW1lKCkpOwogICAgICAgICAgICAgaWYgKGF0dHIgJiYgbm9kZXMuY29udGFp
bnMoYXR0ci5nZXQoKSkpCiAgICAgICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKGF0dHIp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCmluZGV4IDQ5MTZjNzM3MDEyNjM3
NmE4MTczNmY5MjJhNjBjNTI3MDc2OTUyMDguLmFmYzI5YWFhMDMwMWUzMDRiZGFiYjk5OTM3YWFh
OTg4ODU4NDBmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCkBAIC0yMDEsMjEgKzIwMSwy
MSBAQCBpbmxpbmUgYm9vbCBub2RlTWF0Y2hlc0Jhc2ljVGVzdChOb2RlJiBub2RlLCBTdGVwOjpB
eGlzIGF4aXMsIGNvbnN0IFN0ZXA6Ok5vZGVUZQogCiAgICAgICAgICAgICAvLyBGb3Igb3RoZXIg
YXhlcywgdGhlIHByaW5jaXBhbCBub2RlIHR5cGUgaXMgZWxlbWVudC4KICAgICAgICAgICAgIEFT
U0VSVChwcmltYXJ5Tm9kZVR5cGUoYXhpcykgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAg
ICAgaWYgKG5hbWUgPT0gc3RhckF0b20pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFj
ZVVSSS5pc0VtcHR5KCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCk7CiAK
LSAgICAgICAgICAgIGlmIChub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4obm9kZS5kb2N1bWVudCgpKSkgewogICAgICAg
ICAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gUGF0aHMgd2l0aG91dCBuYW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1MIGVsZW1lbnRz
IGluIEhUTUwgZG9jdW1lbnRzIGRlc3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1MIG5hbWVzcGFj
ZS4gTmFtZXMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRpdmVseS4KICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2Rl
KS5sb2NhbE5hbWUoKSwgbmFtZSkgJiYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBuYW1lc3Bh
Y2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIC8vIEFuIGV4cHJlc3Npb24gd2l0aG91dCBhbnkgcHJlZml4IHNob3VsZG4ndCBt
YXRjaCBuby1uYW1lc3BhY2Ugbm9kZXMgKGJlY2F1c2UgSFRNTDUgc2F5cyBzbykuCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS5oYXNMb2NhbE5hbWUobmFtZSkgJiYgbmFt
ZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCkgJiYgIW5hbWVzcGFjZVVSSS5pc051bGwo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuaGFzTG9j
YWxOYW1lKG5hbWUpICYmIG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpICYmICFu
YW1lc3BhY2VVUkkuaXNOdWxsKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dG9FbGVtZW50KG5vZGUpLmhhc0xvY2FsTmFtZShuYW1lKSAmJiBuYW1lc3BhY2VVUkkgPT0gbm9k
ZS5uYW1lc3BhY2VVUkkoKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKS5oYXNMb2NhbE5hbWUobmFtZSkgJiYgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNl
VVJJKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
NDMsMTAgKzM0MywxMCBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUmIGNvbnRleHQsIE5v
ZGVTZXQmIG5vZGVzKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQXR0cmlidXRlQXhpczogewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBFbGVtZW50JiBjb250ZXh0RWxlbWVu
dCA9IHRvRWxlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIEVsZW1lbnQmIGNvbnRleHRFbGVt
ZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oY29udGV4dCk7CiAKICAgICAgICAgICAgIC8vIEF2b2lk
IGxhemlseSBjcmVhdGluZyBhdHRyaWJ1dGUgbm9kZXMgZm9yIGF0dHJpYnV0ZXMgdGhhdCB3ZSBk
byBub3QgbmVlZCBhbnl3YXkuCiAgICAgICAgICAgICBpZiAobV9ub2RlVGVzdC5tX2tpbmQgPT0g
Tm9kZVRlc3Q6Ok5hbWVUZXN0ICYmIG1fbm9kZVRlc3QubV9kYXRhICE9IHN0YXJBdG9tKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKaW5kZXggOGFlNTExZGE4ZTM0YzY1NjQ0ZjA2MjFiOTg3YWUwMWZhOTYxYTQ3ZC4u
OTZkYWNmN2M3ZTFkYTU0ZWFkYjNmOWVlMGYyMmQ5MzI5Mzk1YmUzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApA
QCAtNjIxLDEwICs2MjEsMTAgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICB3aGlsZSAo
cGFyZW50RWxlbWVudCkgewogICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1lbnQp
OwogCi0gICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBDb250
YWluZXJOb2RlKiBub2RlID0gcGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICBp
ZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHBhcmVudEVsZW1lbnQgPSB0b0VsZW1lbnQobik7CisgICAgICAgIHBhcmVudEVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CiAKICAgICBpZiAoZWxlbVN0YWNrLmlz
RW1wdHkoKSkKQEAgLTg4MSwzNCArODgxLDM0IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVu
ZEVsZW1lbnROcygpCiAKICAgICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IG4gPSBtX2N1cnJlbnROb2RlOwotICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwor
ICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICBub2Rl
LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIC8vIE9uY2Ugd2UgcmVhY2ggdGhlIGRl
cHRoIGFnYWluIHdoZXJlIGVudGl0eSBleHBhbnNpb24gc3RhcnRlZCwgc3RvcCBleGVjdXRpbmcg
dGhlIHdvcmstYXJvdW5kLgogICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5UGFyc2luZ0J1
ZygpICYmIGNvbnRleHQoKS0+ZGVwdGggPD0gZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9u
KCkpCiAgICAgICAgIHNldERlcHRoVHJpZ2dlcmluZ0VudGl0eUV4cGFuc2lvbigtMSk7CiAKLSAg
ICBpZiAoIXNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQocGFyc2VyQ29udGVudFBvbGljeSgpKSAm
JiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSh0b0VsZW1l
bnQobi5nZXQoKSkpKSB7CisgICAgaWYgKCFzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKHBhcnNl
ckNvbnRlbnRQb2xpY3koKSkgJiYgaXM8RWxlbWVudD4oKm5vZGUpICYmIHRvU2NyaXB0RWxlbWVu
dElmUG9zc2libGUoZG93bmNhc3Q8RWxlbWVudD4obm9kZS5nZXQoKSkpKSB7CiAgICAgICAgIHBv
cEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIG4tPnJlbW92ZShJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICAgICAgbm9kZS0+cmVtb3ZlKElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgeworICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFtX3ZpZXcpIHsKICAgICAgICAgcG9wQ3VycmVu
dE5vZGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobi5nZXQoKSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKTsKIAogICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFs
cmVhZHkgYmVlbiByZW1vdmVkIGZyb20gZG9jdW1lbnQuCiAgICAgLy8gUGFyc2luZyBjb250aW51
ZXMgaW4gdGhpcyBjYXNlLCBidXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFl
bGVtZW50LT5pbkRvY3VtZW50KCkpIHsKKyAgICBpZiAoIWVsZW1lbnQuaW5Eb2N1bWVudCgpKSB7
CiAgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJs
ZShlbGVtZW50KTsKKyAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZSgmZWxlbWVudCk7CiAgICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7CiAg
ICAgICAgIHBvcEN1cnJlbnROb2RlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTkyNiwxNCArOTI2
LDE0IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAgICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBv
c2l0aW9uKSk7CiAgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4
ZWN1dGVkKCkpIHsKICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQt
PmNhY2hlZFNjcmlwdCgpOwotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsK
KyAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICAgICAgbV9w
ZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiAKICAgICAgICAgICAgIC8vIG1fcGVuZGlu
Z1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xp
ZW50KCkgZXhlY3V0ZWQgaXQuCiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQogICAg
ICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fc2NyaXB0RWxlbWVudCA9IDA7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBudWxs
cHRyOwogCiAgICAgICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNl
cgogICAgICAgICBpZiAoaXNEZXRhY2hlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUmVuZGVyTGF5ZXIubW0KaW5kZXggMmY0NTc4ZDg0MjgzOGY5YThiOTM4NTMzZTkyYzE3ZmIz
MDM5YmQ0My4uODRmYjM3NjAwYjMzYWQ3NmFmNzE2N2M5M2I0YWMyYjVkODllYmE4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tCkBAIC01Miw3ICs1Miw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKICAgICBOU1N0cmluZyAqbmFtZSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpyZW5kZXJlci5yZW5kZXJOYW1lKCldOwogCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5ub2RlKCkgJiYgcmVuZGVyZXIubm9kZSgpLT5p
c0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQocmVuZGVyZXIubm9kZSgpKSA6IDApIHsKKyAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLm5vZGUoKSAmJiBpczxFbGVtZW50PihyZW5k
ZXJlci5ub2RlKCkpID8gZG93bmNhc3Q8RWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKSA6IG51bGxw
dHIpIHsKICAgICAgICAgbmFtZSA9IFtuYW1lIHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiICVA
IiwgKE5TU3RyaW5nICopZWxlbWVudC0+dGFnTmFtZSgpXTsKICAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc0lEKCkpCiAgICAgICAgICAgICBuYW1lID0gW25hbWUgc3RyaW5nQnlBcHBlbmRpbmdGb3Jt
YXQ6QCIgaWQ9XCIlQFwiIiwgKE5TU3RyaW5nICopZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuY3BwCmluZGV4IGIxYjZmZTY5MDkxNmUy
NDYwNGRhYzVlYzg0YjY4MDNjMzhiZDZkZGMuLjUxMWJkOGU4YzJhOWQzMWU0OTI2YjQwYzUxZmVm
N2RiOWJkNzY1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNz
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuY3BwCkBAIC01
NTAsNyArNTUwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01Nb3VzZUV2ZW50Ojpm
cm9tRWxlbWVudCgKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTU1vdXNlRXZlbnQ6OnRvRWxlbWVudCggCitIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTU1vdXNlRXZlbnQ6OnRvRWxlbWVudCgKICAgICAvKiBbcmV0dmFsXVtvdXRdICov
IElET01Ob2RlKiogLypyZXN1bHQqLykKIHsKICAgICByZXR1cm4gRV9OT1RJTVBMOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5oIGIvU291cmNlL1dlYktp
dC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5oCmluZGV4IGI4ODE2MDQyM2ExMzU5NWM2NmY5OGI4ZTA5
NTU1NjVmYzdlM2YxOTUuLjcxYzU3NmU2YmM1MWMwYzg0Y2YyZDhmYWI2NDcwY2VjZTM3MzE0YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmgKQEAgLTYxMyw3ICs2MTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGZyb21FbGVtZW50
KCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9NTm9kZSoqIHJlc3VsdCk7CiAgICAg
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHRvRWxlbWVudCggCisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHRvRWxlbWVudCgKICAgICAgICAgLyog
W3JldHZhbF1bb3V0XSAqLyBJRE9NTm9kZSoqIHJlc3VsdCk7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCmluZGV4IDZjZWRhZGE5ZmNkNTc5MTIwZmIzMWVm
NjRiMDIzMDQ0YTk0OGUzNjkuLjE5NjAzYzVjMDEzYTM5N2ZhODI5MjBmZDRkMzlmMzc0MzdkNjUx
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCkBAIC02Niwx
NyArNjYsMTcgQEAgV2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgYm9vbCBzaG91bGRJbmNsdWRlRGVzY2UKICAgICBtX25hbWUgPSByZW5kZXJl
ci0+cmVuZGVyTmFtZSgpOwogCiAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgp
KSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBtX2VsZW1lbnRU
YWdOYW1lID0gZWxlbWVudC0+dGFnTmFtZSgpOwotICAgICAgICAgICAgbV9lbGVtZW50SUQgPSBl
bGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkp
IHsKKyAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSk7CisgICAgICAgICAgICBtX2VsZW1lbnRUYWdOYW1lID0gZWxlbWVudC50YWdOYW1lKCk7Cisg
ICAgICAgICAgICBtX2VsZW1lbnRJRCA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIGVs
ZW1lbnQtPmhhc0NsYXNzKCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmlzU3R5bGVkRWxl
bWVudCgpICYmIGVsZW1lbnQuaGFzQ2xhc3MoKSkgewogICAgICAgICAgICAgICAgIFZlY3RvcjxS
ZWZQdHI8QVBJOjpPYmplY3Q+PiBjbGFzc05hbWVzOwotICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBjbGFzc05hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZWxlbWVu
dC5jbGFzc05hbWVzKCkuc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gZWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0
ZShlbGVtZW50LT5jbGFzc05hbWVzKClbaV0pKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IGVsZW1lbnQuY2xhc3NOYW1lcygpLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNy
ZWF0ZShlbGVtZW50LmNsYXNzTmFtZXMoKVtpXSkpOwogCiAgICAgICAgICAgICAgICAgbV9lbGVt
ZW50Q2xhc3NOYW1lcyA9IEFQSTo6QXJyYXk6OmNyZWF0ZShXVEY6Om1vdmUoY2xhc3NOYW1lcykp
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0KaW5kZXggNGU5
YjJmZmM2ODYwYzMzY2IyZDI1YzFjYzRhYzQ4ZTI4ZDY2OGU2Yi4uY2Y3MWIxYTIxYWYwNDMxNDM1
MThlZjk3MDYyYTRhYzliNDRmZmMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRWxlbWVudC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50Lm1t
CkBAIC0zNSwyNCArMzUsMjQgQEAKIAogLSAoQk9PTCloYXNBdHRyaWJ1dGU6KE5TU3RyaW5nICop
YXR0cmlidXRlCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnRvRWxlbWVudChfaW1wbC5nZXQoKSkt
Pmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiBXZWJDb3JlOjpkb3duY2FzdDxX
ZWJDb3JlOjpFbGVtZW50PigqX2ltcGwpLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiAt
IChOU1N0cmluZyAqKWdldEF0dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKIHsKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50KF9pbXBsLmdldCgpKS0+Z2V0QXR0cmlidXRlKGF0dHJp
YnV0ZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpf
aW1wbCkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAKIC0gKHZvaWQpc2V0QXR0cmlidXRl
OihOU1N0cmluZyAqKW5hbWUgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUKIHsKICAgICAvLyBGSVhN
RTogRG8gc29tZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBXZWJDb3JlOjp0b0VsZW1lbnQoX2ltcGwuZ2V0KCkpLT5zZXRBdHRy
aWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsKKyAgICBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3JlOjpF
bGVtZW50PigqX2ltcGwpLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZWMpOwogfQogCiAtIChO
U1N0cmluZyAqKXRhZ05hbWUKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50KF9pbXBs
LmdldCgpKS0+dGFnTmFtZSgpOworICAgIHJldHVybiBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3Jl
OjpFbGVtZW50PigqX2ltcGwpLnRhZ05hbWUoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKaW5kZXggMzJlMTg3YmNjOWJlMWE2Njkz
ZDcwM2M4ZWZlODBmNTM2YjE2OTBmNC4uMTZhMDI2Mzk2YmMzYzc1MmFhZTRlNGI0ZDUwYzViYjUz
NWZlOGZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUu
Y3BwCkBAIC0xMTgsMTAgKzExOCwxMCBAQCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhh
bmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpkb2N1bWVudCgpCiAKIEludFJlY3QgSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjplbGVtZW50Qm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4oKm1fbm9kZSkp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG1fbm9k
ZS5nZXQoKSktPmJvdW5kc0luUm9vdFZpZXdTcGFjZSgpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50PigqbV9ub2RlKS5ib3VuZHNJblJvb3RWaWV3U3BhY2UoKTsKIH0KICAgICAKIEludFJl
Y3QgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpyZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKaW5k
ZXggZGZiYjc5MmY1ZjI0MDNlMGYwMWRmMTk0MmI3MDMwM2Q4MGRlYmFiYi4uZjQ0NDczNGY4M2Mx
NzJhMzhmYzJiNTE0MGNlMzhlMDY0ZWM2ZWI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAtMTE0LDEwICsxMTQsMTAgQEAgQnVuZGxlSGl0VGVz
dFJlc3VsdE1lZGlhVHlwZSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSgp
IGNvbnN0CiAgICAgcmV0dXJuIEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVOb25lOwogI2Vs
c2UKICAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpOwotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFU
eXBlTm9uZTsKICAgICAKLSAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+aXNNZWRpYUVsZW1lbnQo
KSkKKyAgICBpZiAoIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc01lZGlhRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7CiAgICAgCiAg
ICAgcmV0dXJuIG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSA/IEJ1bmRsZUhpdFRlc3RS
ZXN1bHRNZWRpYVR5cGVWaWRlbyA6IEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVBdWRpbzsg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KaW5kZXggNjYzMTE2MTNjY2JmOTc2NjRhYjhlMGNlNzAwYjM3NDk1Yzc1MzBiNy4u
N2QyOWMwMzZkNzBkN2IwMTIyNjlmN2U2ZjkzM2Q4YWNiYTVjODFkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNTE1
LDggKzUxNSw4IEBAIHZvaWQgV2ViUGFnZTo6c2VuZFRhcEhpZ2hsaWdodEZvck5vZGVJZk5lY2Vz
c2FyeSh1aW50NjRfdCByZXF1ZXN0SUQsIE5vZGUqIG5vZGUpCiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNFbGVtZW50KCpub2RlKSkKLSAgICAgICAgcHJlZmV0
Y2hETlModG9FbGVtZW50KCpub2RlKS5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkpOworICAgIGlm
IChpczxFbGVtZW50Pigqbm9kZSkpCisgICAgICAgIHByZWZldGNoRE5TKGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKS5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkpOwogCiAgICAgVmVjdG9yPEZsb2F0
UXVhZD4gcXVhZHM7CiAgICAgaWYgKFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpKSB7CkBAIC02MDQsOCArNjA0LDggQEAgdm9pZCBXZWJQYWdlOjppbnNwZWN0b3JOb2Rl
U2VhcmNoRW5kZWRBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogCiB2b2lk
IFdlYlBhZ2U6OmJsdXJBc3Npc3RlZE5vZGUoKQogewotICAgIGlmIChtX2Fzc2lzdGVkTm9kZSAm
JiBtX2Fzc2lzdGVkTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICB0b0VsZW1lbnQobV9h
c3Npc3RlZE5vZGUuZ2V0KCkpLT5ibHVyKCk7CisgICAgaWYgKG1fYXNzaXN0ZWROb2RlICYmIGlz
PEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkpCisgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpt
X2Fzc2lzdGVkTm9kZSkuYmx1cigpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldEFzc2lzdGVkTm9k
ZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0xODg4LDcgKzE4ODgsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbnRl
cmFjdGlvbkluZm9ybWF0aQogICAgIGlmIChoaXROb2RlKSB7CiAgICAgICAgIGluZm8uY2xpY2th
YmxlRWxlbWVudE5hbWUgPSBoaXROb2RlLT5ub2RlTmFtZSgpOwogCi0gICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBoaXROb2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQoaGl0Tm9kZSkg
OiAwOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4oaGl0Tm9kZSkgPyBk
b3duY2FzdDxFbGVtZW50PihoaXROb2RlKSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChlbGVtZW50
KSB7CiAgICAgICAgICAgICBFbGVtZW50KiBsaW5rRWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1Jl
bmRlckltYWdlKCkpIHsKQEAgLTIwMDYsNyArMjAwNiw3IEBAIHN0YXRpYyBpbmxpbmUgRWxlbWVu
dCogbmV4dEZvY3VzYWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBQYWdlKiBwYWdlLCBib29s
IGlzCiB7CiAgICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGtleSA9IEtleWJvYXJkRXZlbnQ6OmNy
ZWF0ZSgpOwogCi0gICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSB0b0VsZW1lbnQoc3RhcnROb2Rl
KTsKKyAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHN0YXJ0Tm9k
ZSk7CiAgICAgZG8gewogICAgICAgICBuZXh0RWxlbWVudCA9IGlzRm9yd2FyZCA/IHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLm5leHRGb2N1c2FibGVFbGVtZW50KEZvY3VzTmF2aWdhdGlvblNjb3Bl
Ojpmb2N1c05hdmlnYXRpb25TY29wZU9mKCZuZXh0RWxlbWVudC0+ZG9jdW1lbnQoKSksIG5leHRF
bGVtZW50LCBrZXkuZ2V0KCkpCiAgICAgICAgICAgICA6IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudChGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZp
Z2F0aW9uU2NvcGVPZigmbmV4dEVsZW1lbnQtPmRvY3VtZW50KCkpLCBuZXh0RWxlbWVudCwga2V5
LmdldCgpKTsKQEAgLTIxNjMsNyArMjE2Myw3IEBAIHZvaWQgV2ViUGFnZTo6ZWxlbWVudERpZEZv
Y3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiAgICAgICAgIC8vIGEgcHJvZ3JhbW1hdGljIGZvY3Vz
IGhhcHBlbmluZyB3aGlsZSB0aGUga2V5Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4gT25jZSB3ZSBo
YXZlIGEgd2F5IHRvCiAgICAgICAgIC8vIGtub3cgdGhlIGtleWJvYXJkIHN0YXRlIGluIHRoZSBX
ZWIgUHJvY2Vzcywgd2Ugc2hvdWxkIHJlZmluZSB0aGUgY29uZGl0aW9uLgogICAgICAgICBpZiAo
bV91c2VySXNJbnRlcmFjdGluZykKLSAgICAgICAgICAgIG1fZm9ybUNsaWVudC0+d2lsbEJlZ2lu
SW5wdXRTZXNzaW9uKHRoaXMsIHRvRWxlbWVudChub2RlKSwgV2ViRnJhbWU6OmZyb21Db3JlRnJh
bWUoKm5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSksIHVzZXJEYXRhKTsKKyAgICAgICAgICAgIG1f
Zm9ybUNsaWVudC0+d2lsbEJlZ2luSW5wdXRTZXNzaW9uKHRoaXMsIGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpLCBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
KSwgdXNlckRhdGEpOwogCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3Rh
cnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0aW9uLCBtX3VzZXJJc0ludGVyYWN0aW5nLCBtX2hhc1Bl
bmRpbmdCbHVyTm90aWZpY2F0aW9uLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1
c2VyRGF0YS5nZXQoKSkpKTsKICAgICAgICAgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiA9
IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238901</attachid>
            <date>2014-09-29 19:05:56 -0700</date>
            <delta_ts>2014-09-29 20:22:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137241-20140929190557.patch</filename>
            <type>text/plain</type>
            <size>213069</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFiZDhkN2UxMGU4OTFh
NWVkY2UwZDcyNDJmODRkMjU4NDE5MGJiOC4uMGIzNGY0YzhmNWQwZDdlOTA3ZjQ2OTMzNzg4NDll
MzM0ZTI1MzJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NCBAQAorMjAxNC0wOS0yOSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQgaW5zdGVh
ZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzUm9sZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJlZ2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlTWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51
TGlzdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6bmF0aXZlQWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpjbGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmhlbHBUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhhbmRsZUFjdGl2ZURl
c2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0
c1ByZXNlbnRhdGlvbmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRBY2Nlc3NpYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdSb2xlRm9yTVNBQSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0b25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6cHJlc3MpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp3cmFw
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNSZWFjaGFibGVGcm9tRE9NKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnN0eWxlZE5vZGUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lSZW5kZXJU
cmVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6bm90aWZ5Q2hp
bGRSZW1vdmVkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeURlc2Nl
bmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVS
ZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5RGVzY2VuZGFu
dFJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRDb25uZWN0ZWRTdWJy
YW1lQ291bnRJc0NvbnNpc3RlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFu
Z3VhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBh
cmVudEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50VHJhdmVyc2FsLmg6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVk
b0F3YXJlUHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3JtYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXB1dGVkU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmlzRXF1YWxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRGVm
YXVsdE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VQ
cmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3Np
bmdMaW5rRXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFuZGxl
TG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6d2lsbFJlc3BvbmRUb01vdXNl
TW92ZUV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cyk6CisgICAgICAgICogZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6bm9kZUNhbkJlRGlzdHJp
YnV0ZWQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6ZWxlbWVudCk6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9TaGFk
b3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzaGFkb3dSb290KToKKyAgICAgICAg
KiBkb20vU3RhdGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxp
c3Q6Om5hbWVkSXRlbSk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3Vz
SWZJZGVudGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdl
RW5kV2l0aE5leHRJZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVt
b3ZhYmxlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNs
b25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9Q
cmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQpOgorICAgICAg
ICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmluZ05vZGVSZW1vdmVz
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjpwYWludENhcmV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKToKKyAgICAgICAg
KiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXApOgorICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbmRUYWcpOgorICAgICAgICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
aGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZSk6
CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNo
ZXM6OnByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hl
czo6Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjph
Z2dyZWdhdGVkQXR0cmlidXRlc0ZvckFuY2VzdG9ycyk6CisgICAgICAgIChIVE1MQ29udmVydGVy
OjphZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMpOgorICAgICAg
ICAoSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRp
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5n
VGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0FuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6YXJlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmRl
cHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
bmRlcmVyRm9yQ2FyZXRQYWludGluZyk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXBJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVGcmFnbWVudEZyb21UZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxEZXRhaWxz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWxzU3VtbWFyeUVsZW1lbnQ6OmZh
bGxiYWNrU3VtbWFyeSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNIVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1l
ZEl0ZW0pOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxTdW1tYXJ5
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NsaWNrYWJsZUNvbnRyb2wpOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjphdHRhY2hMYXRlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxl
bWVudCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6ZWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
SW5zZXJ0aW9uUG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudEVsZW1lbnRGb3JEaXN0
cmlidXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdE9mUGFyZW50Rm9yRGlzdHJp
YnV0aW9uKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6bWFya0Z1dHVyZUFuZFBhc3ROb2Rlcyk6
CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVp
bGRBcnJheUZvclJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OnJlc2V0UHNldWRvU3RhdGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmls
aXR5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVG
aW5kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNo
VXNpbmdET01UcmVlVHJhdmVyc2FsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dCk6CisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50
VW5kZXJNb3VzZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZERyb3Bab25lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRh
dGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdh
dGlvblNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2Fi
bGVTaGFkb3dIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlRWxlbWVudEFjcm9z
c0ZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRWxl
bWVudFdpdGhFeGFjdFRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRFbGVtZW50V2l0
aEdyZWF0ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0VsZW1lbnRXaXRo
TG93ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6Om5leHRG
b2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6cHJl
dmlvdXNGb2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemVGcmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Ojppbm5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6aW5uZXJOb25TaGFyZWRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNP
cGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bGVtZW50Ojpub25Qc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OmdlbmVyYXRpbmdFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UnVieS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpub2RlSGFzQ2xhc3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6Y29udGFpbmVyQ29udGFpbnNPbmVPZlRhZ3MpOgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNv
bHZlVHJlZSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUpOgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiB4
bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6
OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBh
dGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpub2RlTWF0Y2hlc0Jhc2ljVGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOgorICAgICAg
ICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKwogMjAxNC0wOS0yOSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlzPD4o
KSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZkOGVi
ZTNmODk4N2Y2M2YxMWE2ODA2MWFhYTIyMjE1OGMxNjQ4Li4wNzk3YjNkN2ZjNWQ5YzY0ZDZlNGQ4
MTI2ZWI0NWQwZjNhNWE2MWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
aXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBF
bGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAgICAgICAgdG9FbGVtZW50KCku
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tOgorICAgICAgICAoK1tXZWJS
ZW5kZXJMYXllciBuYW1lRm9yTGF5ZXI6XSk6CisKIDIwMTQtMDktMjggIEd5dXlvdW5nIEtpbSAg
PGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIENvbG9ySW5wdXRUeXBl
IGNsYXNzIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGY2NzEyZmU5NmY0
Yjk5YTc4NGE5ODAzYmEwZTFiMjA4M2ViNGY3NzcuLjI2OTBkYzE0OTU0NjRlYjM0NjAzNzdkZDQx
ODEyNjYwZDllOTQxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0w
OS0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+
KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1l
bnQgaW5zdGVhZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKwor
ICAgICAgICAqIERPTUV2ZW50c0NsYXNzZXMuY3BwOgorICAgICAgICAoRE9NTW91c2VFdmVudDo6
dG9FbGVtZW50KToKKyAgICAgICAgKiBET01FdmVudHNDbGFzc2VzLmg6CisKIDIwMTQtMDktMjkg
IENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8
PigpIC8gZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNz
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCA2NWI1NjkzNmE5MWQ4NDkzNWYzNTYzYWVkNzRlZTc1ZWQ5MDg2YjNl
Li43NDg1MjM4Njk2NmRiM2FlNWQ3Y2JiMWNkZjliZTUxZGNhNmE5ZWVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFbGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAg
ICAgICAgdG9FbGVtZW50KCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmplY3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQu
bW06CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBoYXNBdHRyaWJ1dGU6XSk6CisgICAgICAgICgt
W1dLRE9NRWxlbWVudCBnZXRBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBz
ZXRBdHRyaWJ1dGU6dmFsdWU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCB0YWdOYW1lXSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjplbGVtZW50Qm91bmRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlSGl0VGVzdFJlc3VsdDo6bWVkaWFUeXBlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbmRU
YXBIaWdobGlnaHRGb3JOb2RlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpibHVyQXNzaXN0ZWROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRp
b25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om5leHRGb2N1c2FibGVFbGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKwogMjAxNC0wOS0y
OSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlz
PD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDY3NDc1YzI3YmZjMDE1Nzg1YjlhMGMx
MWMwNTFmYWUzM2ZjOGFmOGUuLjZkMmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVh
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cApAQCAtMjUzLDEwICsyNTMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNo
ZTo6Z2V0KE5vZGUqIG5vZGUpCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFrZSBhIGNvbnN0IGNo
YXIqLCBidXQgb25lIGNhbGxlciBwYXNzZXMgbnVsbEF0b20uCiBib29sIG5vZGVIYXNSb2xlKE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiByb2xlVmFsdWUgPSB0b0VsZW1lbnQo
bm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0dHIpOworICAgIGF1dG8mIHJvbGVWYWx1ZSA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKICAg
ICBpZiAocm9sZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHJvbGVWYWx1ZS5pc0VtcHR5KCk7
CiAgICAgaWYgKHJvbGVWYWx1ZS5pc0VtcHR5KCkpCkBAIC0yOTQsNyArMjk0LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTVkdSb290Ojpj
cmVhdGUocmVuZGVyZXIpOwogICAgIAogICAgIC8vIFNlYXJjaCBmaWVsZCBidXR0b25zCi0gICAg
aWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKKyAgICBpZiAobm9kZSAmJiBpczxFbGVt
ZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbjo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICBpZiAocmVuZGVyZXIt
PmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtNjUzLDEwICs2NTMsMTAgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKE5vZGUqIG5vZGUpCiAgICAgCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlh
X2xpdmVBdHRyKTsKICAgICBpZiAobGl2ZVJlZ2lvblN0YXR1cy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhUm9sZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUocm9sZUF0dHIpOwpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlTWVudUl0ZW1TZWxlY3RlZChOb2RlKiBub2RlKQogICAgIGlmICghbm9kZUhhc1JvbGUobm9k
ZSwgIm1lbnVpdGVtIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbXJhZGlvIikgJiYg
IW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbWNoZWNrYm94IikpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+Zm9jdXNlZCgpICYmICFlcXVhbElnbm9y
aW5nQ2FzZSh0b0VsZW1lbnQobm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0
dHIpLCAidHJ1ZSIpKQorICAgIGlmICghZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzZWQo
KSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRB
dHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0dHIpLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgcG9zdE5vdGlmaWNhdGlvbihnZXRPckNyZWF0ZShub2RlKSwgJmRvY3VtZW50KCks
IEFYTWVudUxpc3RJdGVtU2VsZWN0ZWQpOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgdm9pZCBBWE9i
amVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0
YSYgdGV4dE1hcmtlckQKIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRh
YmxlRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGNvbnN0IEVsZW1lbnQqIHJlc3Vs
dCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpOworICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pihu
b2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwog
CiAgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKG5vZGVJc1RleHRDb250cm9sKGVsZW1lbnQpKQpAQCAtMTA3Myw4ICsx
MDczLDggQEAgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKiBub2RlKQogICAgIC8vIFRvIGRl
dGVybWluZSBpZiBhIG5vZGUgaXMgQVJJQSB2aXNpYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBw
YXJlbnQgaGllcmFyY2h5IHRvIHNlZSBpZiBhbnlvbmUgc3BlY2lmaWVzCiAgICAgLy8gYXJpYS1o
aWRkZW4gZXhwbGljaXRseS4KICAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVzdE5v
ZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAodGVz
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhcmlhSGlkZGVuVmFsdWUgPSB0b0VsZW1lbnQodGVzdE5vZGUpLT5mYXN0R2V0QXR0cmlidXRl
KGFyaWFfaGlkZGVuQXR0cik7CisgICAgICAgIGlmIChpczxFbGVtZW50Pih0ZXN0Tm9kZSkpIHsK
KyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUhpZGRlblZhbHVlID0gZG93bmNh
c3Q8RWxlbWVudD4oKnRlc3ROb2RlKS5mYXN0R2V0QXR0cmlidXRlKGFyaWFfaGlkZGVuQXR0cik7
CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJpYUhpZGRlblZhbHVlLCAiZmFs
c2UiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhcmlhSGlkZGVuVmFsdWUsICJ0cnVlIikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKaW5kZXgg
MDRjNzk4N2Y1ZTg5MmE1ZTlhYmQ4YTBkNWFlOTg4MWM4YzZhNWY5My4uNmUyY2U1NGMyZmUxYTdh
MmM5NjcwOTU4ODAzNjg1MDVjYzdiNmQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcApAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNv
bnN0CiAgICAgaWYgKCFub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biAhdG9FbGVtZW50KG5vZGUoKSktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOworICAgIHJldHVy
biAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUoKSkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24oaW50
IG9wdGlvbkluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAwMjYyZmZkOGE4Mjg0ZGI3NzZmMzli
OWIzNzM0MDY3Mzc1Yjc1ZTk5Li5iZGJlMzQ0ZTAxZTdjMTQzZjg5YzYxMGYxOTFhNzY4YWI5MjFh
ZjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKQEAgLTMyNCw3ICszMjUsNyBAQCBBY2Nlc3NpYmls
aXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJv
bGUoKQogICAgICAgICByZXR1cm4gUGFyYWdyYXBoUm9sZTsKICAgICBpZiAoaXM8SFRNTExhYmVs
RWxlbWVudD4obm9kZSgpKSkKICAgICAgICAgcmV0dXJuIExhYmVsUm9sZTsKLSAgICBpZiAobm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUoKSktPmlzRm9jdXNhYmxlKCkp
CisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUoKSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUo
KSkuaXNGb2N1c2FibGUoKSkKICAgICAgICAgcmV0dXJuIEdyb3VwUm9sZTsKICAgICAKICAgICBy
ZXR1cm4gVW5rbm93blJvbGU7CkBAIC00NDEsOSArNDQyLDkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3QK
IHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQorICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTENhbnZh
c0VsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCYgY2Fu
dmFzRWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgSFRNTENhbnZhc0VsZW1lbnQmIGNh
bnZhc0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKm5vZGUpOwogICAgIC8v
IElmIGl0IGhhcyBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZWxlbWVudHMsIHdlJ2xsIGFzc3VtZSBp
dCBtaWdodCBiZSBmYWxsYmFjawogICAgIC8vIGNvbnRlbnQuIElmIGl0IGhhcyBubyBjaGlsZHJl
biBvciBpdHMgb25seSBjaGlsZHJlbiBhcmUgbm90IGVsZW1lbnRzCiAgICAgLy8gKGUuZy4ganVz
dCB0ZXh0IG5vZGVzKSwgaXQgZG9lc24ndCBoYXZlIGZhbGxiYWNrIGNvbnRlbnQuCkBAIC02NDIs
MTAgKzY0MywxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBp
ZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIHJldHVybiAhdG9FbGVtZW50KG5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAg
ICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2wo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbmRldGVybWluYXRlKCkg
Y29uc3QKQEAgLTY3Nyw5ICs2NzgsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c1ByZXNzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSktPmFjdGl2ZSgp
OworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYWN0aXZlKCk7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CkBAIC03MTksNyAr
NzIwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIb3ZlcmVkKCkgY29uc3QK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBub2Rl
LT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5ob3ZlcmVkKCk7CisgICAgcmV0
dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5ob3ZlcmVk
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3QKQEAgLTk2NSw3ICs5NjYsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YW5jaG9yRWxlbWVudCgpIGNvbnN0CiAgICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRo
YXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hvciBpcyBhbiBIVE1MQW5jaG9yRWxlbWVudAog
ICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5vZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNh
Y2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKS0+aXNBbmNob3IoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtOTk0LDcg
Kzk5NSw3IEBAIHN0YXRpYyBFbGVtZW50KiBuYXRpdmVBY3Rpb25FbGVtZW50KE5vZGUqIHN0YXJ0
KQogICAgIAogICAgIGZvciAoTm9kZSogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoaXNOb2RlQWN0
aW9uRWxlbWVudChjaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KGNoaWxkKTsK
KyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihjaGlsZCk7CiAKICAgICAgICAg
aWYgKEVsZW1lbnQqIHN1YkNoaWxkID0gbmF0aXZlQWN0aW9uRWxlbWVudChjaGlsZCkpCiAgICAg
ICAgICAgICByZXR1cm4gc3ViQ2hpbGQ7CkBAIC0xMDA5LDEwICsxMDEwLDEwIEBAIEVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY3Rpb25FbGVtZW50KCkgY29uc3QKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoaXNOb2RlQWN0aW9uRWxlbWVudChub2RlKSkKLSAg
ICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOwogICAgIAogICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJ
bnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2Rl
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogCiAgICAgc3dpdGNo
IChyb2xlVmFsdWUoKSkgewogICAgIGNhc2UgQnV0dG9uUm9sZToKQEAgLTEwMjYsNyArMTAyNyw3
IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY3Rpb25FbGVtZW50KCkgY29u
c3QKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF1dGhvciBpcyBoaWRpbmcgdGhlIHJlYWwgY29u
dHJvbCBlbGVtZW50IGluc2lkZSB0aGUgQVJJQSBlbGVtZW50LgogICAgICAgICBpZiAoRWxlbWVu
dCogbmF0aXZlRWxlbWVudCA9IG5hdGl2ZUFjdGlvbkVsZW1lbnQobm9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbmF0aXZlRWxlbWVudDsKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNDUsNyArMTA0Niw3IEBAIEVsZW1lbnQqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRvbkxpc3RlbmVyKE1vdXNlQnV0dG9uTGlzdGVu
ZXJSZXN1bHRGCiAKICAgICAvLyBjaGVjayBpZiBvdXIgcGFyZW50IGlzIGEgbW91c2UgYnV0dG9u
IGxpc3RlbmVyCiAgICAgLy8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2VhcmNoIGxpa2Ug
YW5jaG9yRWxlbWVudCBkb2VzCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVh
Z2Uobm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFyZW50
RWxlbWVudCgpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdlKGlz
PEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRF
bGVtZW50KCkpKSB7CiAgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvZHkgYW5kIHRo
aXMgaXMgbm90IGEgY29udHJvbCBlbGVtZW50LCBkbyBub3QgZXhwb3NlIHByZXNzIGFjdGlvbiBm
b3IgdGhpcyBlbGVtZW50IHVubGVzcyBmaWx0ZXIgaXMgSW5jbHVkZUJvZHlFbGVtZW50LgogICAg
ICAgICAvLyBJdCBjYW4gY2F1c2UgZmFsc2UgcG9zaXRpdmVzLCB3aGVyZSBldmVyeSBwaWVjZSBv
ZiB0ZXh0IGlzIGxhYmVsZWQgYXMgYWNjZXB0aW5nIHByZXNzIGFjdGlvbnMuCiAgICAgICAgIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNUZXh0KCkgJiYgZmlsdGVy
ID09IEV4Y2x1ZGVCb2R5RWxlbWVudCkKQEAgLTEyNTMsOCArMTI1NCw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yCiAgICAgCiAgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxl
bWVudD4obm9kZSk7CiAgICAgaWYgKGlzSW5wdXRUYWcgfHwgQWNjZXNzaWJpbGl0eU9iamVjdDo6
aXNBUklBSW5wdXQoYXJpYVJvbGVBdHRyaWJ1dGUoKSkgfHwgaXNDb250cm9sKCkpIHsKLSAgICAg
ICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQodG9FbGVtZW50KG5v
ZGUpKTsKLSAgICAgICAgaWYgKGxhYmVsKSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50
KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpIHsKICAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShsYWJlbCk7CiAgICAgICAgICAgICBTdHJpbmcgaW5uZXJUZXh0ID0g
bGFiZWwtPmlubmVyVGV4dCgpOwogICAgICAgICAgICAgLy8gT25seSB1c2UgdGhlIDxsYWJlbD4g
dGV4dCBpZiB0aGVyZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCkBAIC0xNTMyLDIxICsxNTMyLDIyIEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogICAgICAg
ICByZXR1cm4gZGVzY3JpYmVkQnk7CiAgICAgCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgZm9yIChOb2RlKiBjdXJyID0gbm9kZTsgY3Vy
cjsgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoY3Vyci0+aXNIVE1M
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSB0
b0VsZW1lbnQoY3VyciktPmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CisgICAgZm9yIChOb2Rl
KiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PihhbmNlc3RvcikpIHsKKyAgICAg
ICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCphbmNl
c3Rvcik7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSBlbGVtZW50
LmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiAgICAgICAgICAgICBpZiAoIXN1bW1hcnkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdW1tYXJ5OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIHNob3VsZCBiZSB1c2VkIGFzIGhlbHAg
dGV4dCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGFzIGRlc2NyaXB0aXZlIHRleHQu
Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gdG9FbGVtZW50KGN1cnIp
LT5nZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGl0bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICAgICAg
aWYgKCF0aXRsZS5pc0VtcHR5KCkgJiYgZGVzY3JpcHRpb24gIT0gdGl0bGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRpdGxlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBPbmx5
IHRha2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBv
ciBhbiB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAogICAgICAgICAvLyBhZGRlZCB0byB0aG9z
ZSBraW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdhcyBtZWFudCBmb3IgYSBjaGls
ZCBlbGVtZW50LgotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iaiA9IGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY3Vycik7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGF4T2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShhbmNlc3Rvcik7CiAgICAgICAg
IGlmIChheE9iaikgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGF4T2Jq
LT5yb2xlVmFsdWUoKTsKICAgICAgICAgICAgIGlmIChyb2xlICE9IEdyb3VwUm9sZSAmJiByb2xl
ICE9IFVua25vd25Sb2xlKQpAQCAtMTU2MCwxMCArMTU2MSwxMCBAQCBTdHJpbmcgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXJpYUxldmVsID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xldmVs
QXR0cik7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMZXZlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJp
YnV0ZShhcmlhX2xldmVsQXR0cik7CiAgICAgaWYgKCFhcmlhTGV2ZWwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gYXJpYUxldmVsLnRvSW50KCk7CiAgICAgCkBAIC0xNzA1LDcgKzE3MDYsNyBA
QCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKICAgICB9CiAK
ICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChh
cmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0NvbnRyb2woKSkgewotICAgICAgICBIVE1MTGFiZWxF
bGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpOworICAgICAg
ICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVt
ZW50Pihub2RlKSk7CiAgICAgICAgIC8vIFVzZSB0aGUgbGFiZWwgdGV4dCBhcyB0aGUgdGl0bGUg
aWYgMSkgdGhlIHRpdGxlIGVsZW1lbnQgaXMgTk9UIGFuIGV4cG9zZWQgZWxlbWVudCBhbmQgMikg
dGhlcmUncyBubyBBUklBIG92ZXJyaWRlLgogICAgICAgICBpZiAobGFiZWwgJiYgIWV4cG9zZXNU
aXRsZVVJRWxlbWVudCgpICYmICFhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkubGVuZ3Ro
KCkpCiAgICAgICAgICAgICByZXR1cm4gbGFiZWwtPmlubmVyVGV4dCgpOwpAQCAtMTc3MSw3ICsx
NzcyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLT5pbm5lclRleHQoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSgpIGNvbnN0CkBAIC0xODQzLDE1ICsxODQ0LDE1
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQm
IGcsIGludCYgYikgY29uc3QKIHN0YXRpYyBTdHJpbmcgYWNjZXNzaWJsZU5hbWVGb3JOb2RlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KG5vZGUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVsID0gZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFy
aWFMYWJlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAg
aWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAg
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShhbHRBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IGVsZW1lbnQuZmFzdEdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBhbHQ7CiAKQEAgLTE4NzIsMTIgKzE4NzMsMTIgQEAgc3RhdGljIFN0cmluZyBhY2Nlc3Np
YmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGF4T2JqZWN0LT5hY2Nlc3Np
YmxlTmFtZURlcml2ZXNGcm9tQ29udGVudCgpKQogICAgICAgICAgICAgdGV4dCA9IGF4T2JqZWN0
LT50ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZShBY2Nl
c3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGU6OlRleHRVbmRlckVsZW1lbnRNb2RlSW5jbHVk
ZU5hbWVGcm9tQ29udGVudHNDaGlsZHJlbiwgdHJ1ZSkpOwogICAgIH0gZWxzZQotICAgICAgICB0
ZXh0ID0gZWxlbWVudC0+aW5uZXJUZXh0KCk7CisgICAgICAgIHRleHQgPSBlbGVtZW50LmlubmVy
VGV4dCgpOwogCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRleHQ7
CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKICAgICAKQEAgLTE5NDMsMTUgKzE5NDQsMTUgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25z
dAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsK
KyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogCi0gICAg
aWYgKGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChlbGVtZW50Lmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZWxlbWVudC0+c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVybiBlbGVtZW50LnN1cHBvcnRz
Rm9jdXMoKTsKIH0KIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDJjZjQwYzNi
ZWQxMWU1MTQ2MWM4ZGM4ZWEwNjQwYzA2NDViYWUxYTMuLjkxNGRiZGRhNzI5OWE2NTc5NjBiMzYx
NWQwZTBiNmZlYjI5ZWJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtODUxLDggKzg1MSw4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MoKQogICAgICAgICBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5oaXRUZXN0KHJlcXVlc3QsIGhpdFRlc3RSZXN1bHQpOwogICAgICAgICBpZiAoaGl0VGVzdFJl
c3VsdC5pbm5lck5vZGUoKSkgewogICAgICAgICAgICAgTm9kZSogaW5uZXJOb2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAg
ICAgICAgICAgaWYgKGlubmVyTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
IGhpdFRlc3RFbGVtZW50ID0gdG9FbGVtZW50KGlubmVyTm9kZSk7CisgICAgICAgICAgICBpZiAo
aXM8RWxlbWVudD4oaW5uZXJOb2RlKSkKKyAgICAgICAgICAgICAgICBoaXRUZXN0RWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KGlubmVyTm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0xNzU5LDIwICsxNzU5LDE5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbnZhbGlk
U3RhdHVzKCkgY29uc3QKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlz
LT5ub2RlKCk7Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudCgqbm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKTsKKyAgICByZXR1cm4gbm9kZSAmJiBp
czxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaGFzVGFnTmFtZSh0
YWdOYW1lKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICBOb2RlKiBlbGVt
ZW50Tm9kZSA9IG5vZGUoKTsKLSAgICBpZiAoIWVsZW1lbnROb2RlKQorICAgIE5vZGUqIG5vZGUg
PSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCFlbGVtZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gdG9FbGVtZW50KGVsZW1lbnROb2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+
ZmFzdEhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuZmFzdEhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogICAgIAogY29uc3QgQXRv
bWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdApAQCAtMTk2Nyw4ICsxOTY2LDggQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAogRWxlbWVudCogQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
IHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIApAQCAtMjExNSwxMCArMjExNCwxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6aWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0CiB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmNsYXNzTGlzdChWZWN0b3I8U3RyaW5nPiYgY2xhc3NMaXN0KSBjb25zdAogewogICAg
IE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIERP
TVRva2VuTGlzdCYgbGlzdCA9IGVsZW1lbnQtPmNsYXNzTGlzdCgpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGxpc3QubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aDsgaysrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggODU2MDVlOTM3NGQwODZiZjc0ZTYyNzUy
NjFhZDFhZjA5ZjlkOWM0Zi4uOTcwZWIyZTBmZGRmMzZiYjBiN2M2YTE4ZmMyZjA1NDgxYzAyMGUx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01ODYsNyArNTg2LDcgQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaG9yRWxlbWVudCgpIGNvbnN0CiAgICAgTm9kZSog
bm9kZSA9IGN1cnJSZW5kZXJlci0+bm9kZSgpOwogICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5v
ZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5k
ZXJlcigpKS0+aXNBbmNob3IoKSkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUp
OworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYwNiwyMSArNjA2LDIyIEBAIFN0cmluZyBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBk
ZXNjcmliZWRCeTsKICAgICAKICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24oKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG1fcmVuZGVyZXI7
IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+bm9kZSgp
ICYmIGN1cnItPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHN1bW1hcnkgPSB0b0VsZW1lbnQoY3Vyci0+bm9kZSgpKS0+Z2V0QXR0cmli
dXRlKHN1bW1hcnlBdHRyKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBtX3Jl
bmRlcmVyOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGFuY2VzdG9yLT5ub2RlKCkgJiYgaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yLT5ub2Rl
KCkpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxF
bGVtZW50PigqYW5jZXN0b3ItPm5vZGUoKSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHN1bW1hcnkgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiAgICAgICAg
ICAgICBpZiAoIXN1bW1hcnkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdW1t
YXJ5OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIHNo
b3VsZCBiZSB1c2VkIGFzIGhlbHAgdGV4dCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBiZWluZyB1c2Vk
IGFzIGRlc2NyaXB0aXZlIHRleHQuCi0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRp
dGxlID0gdG9FbGVtZW50KGN1cnItPm5vZGUoKSktPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwor
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSAmJiBkZXNj
cmlwdGlvbiAhPSB0aXRsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGU7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIE9ubHkgdGFrZSBoZWxwIHRleHQgZnJvbSBhbiBhbmNl
c3RvciBlbGVtZW50IGlmIGl0cyBhIGdyb3VwIG9yIGFuIHVua25vd24gcm9sZS4gSWYgaGVscCB3
YXMgCiAgICAgICAgIC8vIGFkZGVkIHRvIHRob3NlIGtpbmRzIG9mIGVsZW1lbnRzLCBpdCBpcyBs
aWtlbHkgaXQgd2FzIG1lYW50IGZvciBhIGNoaWxkIGVsZW1lbnQuCi0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGF4T2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjdXJyKTsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmogPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKGFuY2VzdG9yKTsKICAgICAgICAgaWYgKGF4T2JqKSB7CiAgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXhPYmotPnJvbGVWYWx1ZSgpOwogICAgICAgICAgICAg
aWYgKHJvbGUgIT0gR3JvdXBSb2xlICYmIHJvbGUgIT0gVW5rbm93blJvbGUpCkBAIC04NDUsNyAr
ODQ2LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGVja2JveE9y
UmFkaW9SZWN0KCkgY29uc3QKICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAgICAgCi0gICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZv
ckVsZW1lbnQodG9FbGVtZW50KG1fcmVuZGVyZXItPm5vZGUoKSkpOworICAgIEhUTUxMYWJlbEVs
ZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG1fcmVuZGVy
ZXItPm5vZGUoKSkpOwogICAgIGlmICghbGFiZWwgfHwgIWxhYmVsLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7CiAgICAgCkBAIC0xMTA1LDkgKzExMDYsOSBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZVVJ
RWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKHRvUmVuZGVyRmllbGRzZXQobV9yZW5kZXJlciktPmZpbmRMZWdlbmQoUmVuZGVyRmllbGRz
ZXQ6OkluY2x1ZGVGbG9hdGluZ09yT3V0T2ZGbG93KSk7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVu
dCh0b0VsZW1lbnQobm9kZSkpOworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxG
b3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKICAgICBpZiAobGFiZWwgJiYgbGFi
ZWwtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGxhYmVsKTsKIApAQCAtMTQ2Niw5ICsxNDY3LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NLZXkoKSBjb25zdAogICAgIE5vZGUqIG5v
ZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
bnVsbEF0b207Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxBdG9tOwotICAgIHJldHVybiB0b0Vs
ZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKIH0KIAog
VmlzaWJsZVNlbGVjdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb24oKSBj
b25zdApAQCAtMTU0MiwxMSArMTU0MywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSwgKHZhbHVlKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOyAgICAgICAgCisgICAg
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCAodmFs
dWUpID8gInRydWUiIDogImZhbHNlIik7CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKSBjb25zdApAQCAtMTY0Niw3ICsxNjQ2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgb24pCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwogCi0g
ICAgaWYgKCFvbiB8fCAhbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYg
KCFvbiB8fCAhbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgZG9jdW1lbnQt
PnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTY1Nyw3ICsxNjU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1
c2VkKGJvb2wgb24pCiAgICAgaWYgKGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IG5vZGUp
CiAgICAgICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKIAotICAgIHRv
RWxlbWVudChub2RlKS0+Zm9jdXMoKTsKKyAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZm9j
dXMoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWxlY3RlZFJvd3MpCkBAIC0xNjc4LDkg
KzE2NzgsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93
cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNlbAogICAgIAogdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBp
ZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5kZXJlci0+bm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVy
LT5ub2RlKCkgfHwgIWlzPEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5vZGUoKSkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCptX3JlbmRlcmVyLT5ub2Rl
KCkpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqbV9yZW5kZXJl
ci0+bm9kZSgpKTsKIAogICAgIGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMzQzLDcgKzIzNDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZWQoKQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkKIHsKLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAg
RWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRlcmVyKCktPm5vZGUoKSk7
CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFyZW5kZXJlcigp
LT5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpIHx8IHJlbmRlcmVyKCkt
PmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSAhPSBlbGVtZW50KQpAQCAtMjM4MSw5ICsyMzgx
LDggQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29y
cmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9
IGxhYmVsRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpOwotICAgICAgICBpZiAobGFiZWwpCisg
ICAgaWYgKG5vZGUgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChIVE1M
TGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxIVE1MRWxlbWVu
dD4obm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUobGFiZWwpOwogICAgIH0KIApAQCAtMjQwNSw3ICsyNDA0LDcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJPYmplY3RJc09ic2VydmFibGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBUZXh0Ym94ZXMgc2hvdWxk
IHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMuCi0gICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUsICJ0ZXh0
Ym94IikgfHwgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBjb250ZW50RWRpdGFibGVBdHRyaWJ1
dGVJc0VuYWJsZWQodG9FbGVtZW50KG5vZGUpKSkpCisgICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUs
ICJ0ZXh0Ym94IikgfHwgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIGNvbnRlbnRFZGl0YWJsZUF0dHJp
YnV0ZUlzRW5hYmxlZChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjk1LDEzICsyNjk0LDEzIEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUo
KSBjb25zdAogICAgICAgICBpZiAoIXBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIGVsZW1l
bnROb2RlID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHBhcmVudCktPm5vZGUoKTsKLSAg
ICAgICAgaWYgKCFlbGVtZW50Tm9kZSB8fCAhZWxlbWVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgTm9kZSogbm9kZSA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChwYXJlbnQp
LT5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIG5hdGl2ZSB0YWcgb2Yg
dGhlIHBhcmVudCBlbGVtZW50IG1hdGNoZXMgYW4gYWNjZXB0YWJsZSBuYW1lLCB0aGVuIHJldHVy
bgogICAgICAgICAvLyBiYXNlZCBvbiBpdHMgcHJlc2VudGF0aW9uYWwgc3RhdHVzLgotICAgICAg
ICBpZiAocG9zc2libGVQYXJlbnRUYWdOYW1lcy0+Y29udGFpbnModG9FbGVtZW50KGVsZW1lbnRO
b2RlKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChwb3NzaWJsZVBhcmVudFRhZ05hbWVzLT5j
b250YWlucyhkb3duY2FzdDxFbGVtZW50Pihub2RlKS0+dGFnUU5hbWUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gcGFyZW50LT5yb2xlVmFsdWUoKSA9PSBQcmVzZW50YXRpb25hbFJvbGU7CiAgICAg
fQogICAgIApAQCAtMzI0NCwxNSArMzI0MywxNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICBp
ZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIGRvbU5vZGUgPSBu
dWxscHRyOworICAgIE5vZGUqIG5vZGUgPSBudWxscHRyOwogICAgIC8vIEZvciB3ZWIgYXJlYXMs
IHNldCB0aGUgYXJpYS1sYWJlbCBvbiB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChpc1dlYkFy
ZWEoKSkKLSAgICAgICAgZG9tTm9kZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCkuZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgICAgIG5vZGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmRvY3VtZW50
RWxlbWVudCgpOwogICAgIGVsc2UKLSAgICAgICAgZG9tTm9kZSA9IG1fcmVuZGVyZXItPm5vZGUo
KTsKKyAgICAgICAgbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKIAotICAgIGlmIChkb21Ob2Rl
ICYmIGRvbU5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgdG9FbGVtZW50KGRvbU5vZGUp
LT5zZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIsIG5hbWUpOworICAgIGlmIChub2RlICYmIGlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuc2V0QXR0
cmlidXRlKGFyaWFfbGFiZWxBdHRyLCBuYW1lKTsKIH0KICAgICAKIHN0YXRpYyBib29sIGlzTGlu
a2FibGUoY29uc3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAtMzM3Miwx
NCArMzM3MSwxNCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nUm9s
ZUZvck1TQUEoKSBjb25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBOb2RlKiBu
b2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7Ci0gICAgaWYgKCFzaG91bGRSZXR1cm5UYWdOYW1lQXNSb2xlRm9yTVNBQSgqZWxlbWVudCkp
CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICBp
ZiAoIXNob3VsZFJldHVyblRhZ05hbWVBc1JvbGVGb3JNU0FBKGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gZWxlbWVudC0+dGFnTmFtZSgpOworICAgIHJl
dHVybiBlbGVtZW50LnRhZ05hbWUoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnBvc2l0aW9uYWxEZXNjcmlwdGlvbkZvck1TQUEoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNlYXJj
aEZpZWxkQnV0dG9ucy5jcHAKaW5kZXggZmEzZGNjZGYwNjUyZGI3MTRjMGI1ZTQ0Zjg3MGRjZDM4
ZWUwMGU3MC4uMmM1YzI0NjVhZGVlNTE2MTgxNDY1NzE1MzJhYWNiNDIxMGZjOWZhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmll
bGRCdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTZWFyY2hGaWVsZEJ1dHRvbnMuY3BwCkBAIC01OCwxMyArNTgsMTMgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXQKIGJvb2wgQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
OjpwcmVzcygpCiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIFRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgb24gU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50IHJlcXVpcmVzIGhvdmVyLgotICAgIGVsZW1lbnQt
PnNldEhvdmVyZWQodHJ1ZSk7Ci0gICAgZWxlbWVudC0+YWNjZXNzS2V5QWN0aW9uKHRydWUpOwor
ICAgIGVsZW1lbnQuc2V0SG92ZXJlZCh0cnVlKTsKKyAgICBlbGVtZW50LmFjY2Vzc0tleUFjdGlv
bih0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwCmluZGV4IDA1NzQyN2VkOTc2MjEyNGQyY2Q2NjdlZDk4N2ZlZTRhYjFhOTUxYTcuLmUxZDJh
ODIzMTYxNmNkOGQ1ZDVmZTBkNGQ5YTA0NmJlNmNkNTM5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAKQEAgLTUwNiw4ICs1MDYsOCBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3
ZWJraXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyhBdGtPYmplY3QqIG9iamVjdCkKICAgICAvLyBj
YW5ub3QgYmUgZG9uZSBmcm9tIHRoZSBVSVByb2Nlc3MuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMg
aGF2ZSBubyBuZWVkCiAgICAgLy8gZm9yIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgTm9kZSogbm9k
ZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0VsZW1lbnRO
b2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIGlkID0gdG9FbGVtZW50KG5vZGUpLT5nZXRJZEF0dHJp
YnV0ZSgpLnN0cmluZygpOworICAgIGlmIChub2RlICYmIGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIFN0cmluZyBpZCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRJZEF0dHJpYnV0
ZSgpLnN0cmluZygpOwogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGF0
dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgImh0bWwtaWQi
LCBpZC51dGY4KCkuZGF0YSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRlLmNwcAppbmRleCBlNmM5NTA0YzcyMTNjMzBm
YTFlYWU5MTUzMzBlMmY1N2JmODBlY2I4Li4wOGM1ZjAyNzY0NjYyNWFlNTNmNWJmODVmYWI5Yjdi
ZTRhNTRmOGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTVByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NUHJpdmF0ZS5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgV2ViS2l0RE9NTm9kZSogd3Jh
cChOb2RlKiBub2RlKQogICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgogICAgICAgICBpZiAo
aXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9E
RSh3cmFwKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSkpOwotICAgICAgICByZXR1cm4gV0VC
S0lUX0RPTV9OT0RFKHdyYXBFbGVtZW50KHRvRWxlbWVudChub2RlKSkpOworICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9OT0RFKHdyYXBFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSk7
CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAgcmV0dXJuIFdFQktJVF9E
T01fTk9ERSh3cmFwQXR0cihzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSkpKTsKICAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCmluZGV4IGNmODA2MDlkYTBiZGY2MmY5ZGY4NmE5MmI0ZWFhZTFiMmIwOGI3OTQuLmQ2YzNj
OWRlNmFmNzgzZDhkZGRiOTdlZjdmNDkwOTdlNGVlMWMwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApAQCAtOTcsOCArOTcsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTTm9kZSoganNOb2RlLCBOb2RlKiBub2RlKQogc3RhdGlj
IGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShKU05vZGUqIGpzTm9kZSwgTm9kZSogbm9k
ZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgYXV0
byYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgIGlmIChpczxFbGVtZW50Pihu
b2RlKSkgeworICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKTsKIAogICAgICAgICAgICAgLy8gSWYgYSB3cmFwcGVyIGlzIHRoZSBsYXN0IHJlZmVyZW5j
ZSB0byBhbiBpbWFnZSBlbGVtZW50CiAgICAgICAgICAgICAvLyB0aGF0IGlzIGxvYWRpbmcgYnV0
IG5vdCBpbiB0aGUgZG9jdW1lbnQsIHRoZSB3cmFwcGVyIGlzIG9ic2VydmFibGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXgg
ODJiNjViYTQ5M2UxMTVjY2M4YzhkMjk3ZGNjMDU1Yzk2ODMzODRhMi4uMDc5MDE2NzM4ODU2Zjkx
MGU4N2VmMDdjN2U1MzVlZGQ0YjFmMzcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTE2MjksMTUgKzE2MjksMTUgQEAg
Tm9kZSogQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6c3R5bGVkTm9kZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghbV9ub2RlLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50PigqbV9ub2RlKSkKICAgICAgICAg
cmV0dXJuIG1fbm9kZS5nZXQoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1f
bm9kZS5nZXQoKSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpt
X25vZGUpOwogICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQ7Ci0gICAgaWYgKG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllciA9PSBCRUZPUkUgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50
LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpKQorICAgIGlmIChtX3BzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIgPT0gQkVGT1JFICYmIChwc2V1ZG9FbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkpKQogICAgICAgICByZXR1cm4gcHNldWRvRWxlbWVudDsKLSAgICBpZiAobV9wc2V1ZG9F
bGVtZW50U3BlY2lmaWVyID09IEFGVEVSICYmIChwc2V1ZG9FbGVtZW50ID0gZWxlbWVudC0+YWZ0
ZXJQc2V1ZG9FbGVtZW50KCkpKQorICAgIGlmIChtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIgPT0g
QUZURVIgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKSkK
ICAgICAgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnQ7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
cmV0dXJuICZlbGVtZW50OwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBFVXBkYXRlTGF5b3V0IHVwZGF0ZUxheW91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAppbmRleCBkYjRhNGIxYjc4NjQwYzBlNzQyMDlhNTUyNmZhN2Q2YTE3ZWYz
NmIwLi4wNzhhNWNhMmUyYzRjZWQ1OWE2ZDMyZGE4MGIzMjA0ZDM2ZDNhODhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NjcsNyArNDY3LDcgQEAgTm9kZSogU3R5bGVS
ZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUNvdW4KICAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CiAgICAgICAgICAgICAr
K3N1YmNvdW50OwogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09
IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKQotICAgICAgICAgICAgICAg
ICYmIGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXBhcmVudEVsZW1lbnRQcmV2ZW50
c1NoYXJpbmcodG9FbGVtZW50KGN1cnJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICAmJiBpczxF
bGVtZW50PihjdXJyZW50Tm9kZSkgJiYgIXBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoZG93
bmNhc3Q8RWxlbWVudD4oY3VycmVudE5vZGUpKQogICAgICAgICAgICAgICAgICkgewogICAgICAg
ICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgogICAgICAgICAg
ICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggNjUzZjY5NzFiN2EyZTg2
NTNjMTAyOTk4NjdhMWUwZTg4NWNkODM0Yi4uZGNiMTk5MWI3YjFkNDdkZjdhMDNhMmFmYTE5Nzdl
MmY0NDE2MDBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMTAwLDgg
KzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95UmVuZGVyVHJlZUlmTmVlZGVkKE5v
ZGUmIGNoaWxkKQogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBuYW1lZCBmbG93IHRlc3Qu
CiAgICAgaWYgKCFjaGlsZC5yZW5kZXJlcigpICYmICFjaGlsZC5pc05hbWVkRmxvd0NvbnRlbnRO
b2RlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2hpbGQuaXNFbGVtZW50Tm9kZSgpKQot
ICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQoY2hpbGQpKTsKKyAgICBp
ZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZShk
b3duY2FzdDxFbGVtZW50PihjaGlsZCkpOwogICAgIGVsc2UgaWYgKGlzPFRleHQ+KGNoaWxkKSkK
ICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PihjaGlsZCkp
OwogfQpAQCAtMzQ3LDkgKzM0Nyw5IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6bm90aWZ5Q2hpbGRJ
bnNlcnRlZChOb2RlJiBjaGlsZCwgQ2hpbGRDaGFuZ2VTb3VyY2Ugc291cmNlKQogdm9pZCBDb250
YWluZXJOb2RlOjpub3RpZnlDaGlsZFJlbW92ZWQoTm9kZSYgY2hpbGQsIE5vZGUqIHByZXZpb3Vz
U2libGluZywgTm9kZSogbmV4dFNpYmxpbmcsIENoaWxkQ2hhbmdlU291cmNlIHNvdXJjZSkKIHsK
ICAgICBDaGlsZENoYW5nZSBjaGFuZ2U7Ci0gICAgY2hhbmdlLnR5cGUgPSBjaGlsZC5pc0VsZW1l
bnROb2RlKCkgPyBFbGVtZW50UmVtb3ZlZCA6IGNoaWxkLmlzVGV4dE5vZGUoKSA/IFRleHRSZW1v
dmVkIDogTm9uQ29udGVudHNDaGlsZENoYW5nZWQ7Ci0gICAgY2hhbmdlLnByZXZpb3VzU2libGlu
Z0VsZW1lbnQgPSAoIXByZXZpb3VzU2libGluZyB8fCBwcmV2aW91c1NpYmxpbmctPmlzRWxlbWVu
dE5vZGUoKSkgPyB0b0VsZW1lbnQocHJldmlvdXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpOwotICAgIGNoYW5nZS5uZXh0U2libGlu
Z0VsZW1lbnQgPSAoIW5leHRTaWJsaW5nIHx8IG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkp
ID8gdG9FbGVtZW50KG5leHRTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KG5leHRTaWJsaW5nKTsKKyAgICBjaGFuZ2UudHlwZSA9IGlzPEVsZW1lbnQ+KGNoaWxkKSA/IEVs
ZW1lbnRSZW1vdmVkIDogaXM8VGV4dD4oY2hpbGQpID8gVGV4dFJlbW92ZWQgOiBOb25Db250ZW50
c0NoaWxkQ2hhbmdlZDsKKyAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJl
dmlvdXNTaWJsaW5nIHx8IGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZykpID8gZG93bmNhc3Q8
RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZyhwcmV2aW91c1NpYmxpbmcpOworICAgIGNoYW5nZS5uZXh0U2libGluZ0VsZW1lbnQgPSAo
IW5leHRTaWJsaW5nIHx8IGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVt
ZW50PihuZXh0U2libGluZykgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2li
bGluZyk7CiAgICAgY2hhbmdlLnNvdXJjZSA9IHNvdXJjZTsKIAogICAgIGNoaWxkcmVuQ2hhbmdl
ZChjaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGht
cy5jcHAKaW5kZXggMjE3OTE4ZTZiOTMyZDNmYmNjOGMwODRkOGI3YTJlMDNjNTIwNDY4OS4uYWY1
ZDQxMDk0ZmI2MWNmNTY3ZDRhOTc3MjkyMmFjYjJkNDYzNzY0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCkBAIC00MCwxMCArNDAsMTAgQEAg
dm9pZCBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVk
SW50b0RvY3VtZW50KENvbnRhaW5lck4KICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudCgqY2hpbGQpOwogICAgIH0KIAotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2Rl
KCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gdG9FbGVtZW50KG5vZGUpLnNoYWRvd1Jvb3Qo
KSkgeworICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpLnNoYWRvd1Jvb3QoKSkgewogICAgICAgICBpZiAobm9kZS5pbkRvY3VtZW50KCkgJiYg
cm9vdC0+aG9zdEVsZW1lbnQoKSA9PSAmbm9kZSkKICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudCgqcm9vdCk7CiAgICAgfQpAQCAtNzEsMTMgKzcxLDEzIEBAIHZvaWQg
Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1
bWVudChDb250YWluZXJOb2RlCiAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1
bWVudCgqY2hpbGQuZ2V0KCkpOwogICAgIH0KIAotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2Rl
KCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG5vZGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSA9PSAmbm9kZSkKICAgICAgICAgbm9kZS5k
b2N1bWVudCgpLnNldENTU1RhcmdldCgwKTsKIAotICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4g
cm9vdCA9IHRvRWxlbWVudChub2RlKS5zaGFkb3dSb290KCkpIHsKKyAgICBpZiAoUmVmUHRyPFNo
YWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpIHsK
ICAgICAgICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0RWxlbWVudCgpID09
ICZub2RlKQogICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoKnJvb3Qu
Z2V0KCkpOwogICAgIH0KQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxO
b3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudFJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBu
bwogICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSgqdG9Db250YWluZXJOb2Rl
KGNoaWxkKSk7CiAgICAgfQogCi0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkKKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUmVmUHRy
PFNoYWRvd1Jvb3Q+IHJvb3QgPSB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpKQorICAgIGlm
IChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRv
d1Jvb3QoKSkKICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSgqcm9vdC5nZXQoKSk7
CiB9CiAKQEAgLTEwMiwxMSArMTAyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBhc3NlcnRDb25uZWN0
ZWRTdWJyYW1lQ291bnRJc0NvbnNpc3RlbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkKIHsKICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CiAKLSAgICBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVy
RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Pihub2RlKS5j
b250ZW50RnJhbWUoKSkKICAgICAgICAgICAgICsrY291bnQ7CiAKLSAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHJvb3QgPSB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpKQorICAgICAgICBpZiAo
U2hhZG93Um9vdCogcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgIGNvdW50ICs9IGFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCgqcm9vdCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA4ZTgzZTkx
MjAxNGNjYjg2YjZkODEwOGEyZGYzMjk0ODEwN2ViNGUyLi4zZThhY2JjNjY5OThiZWNiNzE1MTg5
MWIxNDA1YWM5ZWRlM2U1ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTk0MSw3ICs5
NDEsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGltcG9y
dGVkTm9kZSwgYm9vbCBkZWVwLCBFeGNlcHRpb25DbwogICAgIGNhc2UgQ09NTUVOVF9OT0RFOgog
ICAgICAgICByZXR1cm4gY3JlYXRlQ29tbWVudChpbXBvcnRlZE5vZGUtPm5vZGVWYWx1ZSgpKTsK
ICAgICBjYXNlIEVMRU1FTlRfTk9ERTogewotICAgICAgICBFbGVtZW50JiBvbGRFbGVtZW50ID0g
dG9FbGVtZW50KCppbXBvcnRlZE5vZGUpOworICAgICAgICBFbGVtZW50JiBvbGRFbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKmltcG9ydGVkTm9kZSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGNoZWNrIG1pZ2h0IGJlIHVubmVjZXNzYXJ5LiBJcyBpdCBwb3NzaWJsZSB0aGF0
CiAgICAgICAgIC8vIG9sZEVsZW1lbnQgaGFzIG1pc21hdGNoZWQgcHJlZml4L25hbWVzcGFjZT8K
ICAgICAgICAgaWYgKCFoYXNWYWxpZE5hbWVzcGFjZUZvckVsZW1lbnRzKG9sZEVsZW1lbnQudGFn
UU5hbWUoKSkpIHsKQEAgLTE0MTQsMTMgKzE0MTQsMTMgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmVs
ZW1lbnRGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudFBvaW50KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIE5vZGUqIG5vZGUgPSBub2RlRnJvbVBvaW50KGNsaWVudFBv
aW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIHdo
aWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKIAogICAgIGlmIChub2RlKQogICAgICAgICBub2RlID0gYW5jZXN0b3JJblRo
aXNTY29wZShub2RlKTsKIAotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVu
dDo6Y2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXggNzhiMDg0N2Uy
MWI4NTQxMThmNGM2YWM5ZWNhMGZjNDJjZTg0YjA0ZS4uY2RhNmMwN2NiYTRjNDBlM2RhNDYwMTI0
MzA3NmIwZjc2NGYyZTQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxS
ZWZQdHI8U3R5bGVTCiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmIChp
czxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkg
fHwgaXM8U1ZHU3R5bGVFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQmIGVs
ZW1lbnQgPSB0b0VsZW1lbnQoKm5vZGUpOworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0aXRs
ZSA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICAgICAgYm9v
bCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtF
bGVtZW50PihlbGVtZW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDIxYWQ1NjZhYTE5
NDFkM2M3OWE2ZTAzMThhODI4YjRiNTJkZmFjMjcuLmU5Y2JlMDc4MjBiMzU0ZmFmOTRmNDI3MDQ3
MTFlYTUwZDQ1MDBhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIxOTUsOCArMjE5NSw4
IEBAIEF0b21pY1N0cmluZyBFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKSBjb25z
dAogICAgIC8vIFRoZSBsYW5ndWFnZSBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQsIHNvIHdlIGl0ZXJh
dGUgb3ZlciB0aGUgcGFyZW50cyB0byBmaW5kIHRoZSBmaXJzdCBsYW5ndWFnZS4KICAgICBjb25z
dCBOb2RlKiBjdXJyZW50Tm9kZSA9IHRoaXM7CiAgICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1
cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudERhdGEqIGVsZW1l
bnREYXRhID0gdG9FbGVtZW50KCpjdXJyZW50Tm9kZSkuZWxlbWVudERhdGEoKSkgeworICAgICAg
ICBpZiAoaXM8RWxlbWVudD4oY3VycmVudE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoY29uc3Qg
RWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnROb2Rl
KS5lbGVtZW50RGF0YSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gZWxlbWVudERhdGEtPmZpbmRMYW5ndWFnZUF0dHJpYnV0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgKaW5kZXggNTIzOTM1NTQ0YWU2NGRlZTQxNTA4NjFiOWZiY2M4NjZiOTEx
NTkzOC4uMTg3ZTlkMzI3MGNiMTY2MDIwY2E5NjI0NTcwNGQzZjE1NjIzNTE0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCkBAIC02NjYsMjkgKzY2NiwyNCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFbGVt
ZW50RGF0YT4gbV9lbGVtZW50RGF0YTsKIH07CiAKLWlubGluZSBib29sIGlzRWxlbWVudChjb25z
dCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQotCi1OT0RFX1RZ
UEVfQ0FTVFMoRWxlbWVudCkKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBOb2RlVHlwZUNhc3RUcmFp
dHM8Y29uc3QgRWxlbWVudCwgY29uc3QgTm9kZT4gewotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQotfTsKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oRWxlbWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0Vs
ZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogaW5saW5lIGJvb2wgTm9kZTo6aGFzQXR0
cmlidXRlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1l
bnQodGhpcyktPmhhc0F0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4oKnRoaXMp
ICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5oYXNBdHRyaWJ1dGVzKCk7CiB9CiAKIGlubGlu
ZSBOYW1lZE5vZGVNYXAqIE5vZGU6OmF0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIHJldHVybiBp
c0VsZW1lbnROb2RlKCkgPyAmdG9FbGVtZW50KHRoaXMpLT5hdHRyaWJ1dGVzKCkgOiBudWxscHRy
OworICAgIHJldHVybiBpczxFbGVtZW50PigqdGhpcykgPyAmZG93bmNhc3Q8RWxlbWVudD4oKnRo
aXMpLmF0dHJpYnV0ZXMoKSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBFbGVtZW50KiBOb2RlOjpw
YXJlbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7Ci0gICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/
IHRvRWxlbWVudChwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gcGFyZW50ICYmIGlzPEVs
ZW1lbnQ+KHBhcmVudCkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIGJvb2wgRWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRU
cmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKaW5kZXgg
MWJiZTU4OWFmMjk0MDljNTg3OWE5OThkNTU0NmQ5MzJjYTM0MmI5YS4uMDJmZmQzMzQ2YjdiOTg3
OTQ4MGQ0Y2M3YjI5MjkzODZjZmY1MDRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZl
cnNhbC5oCkBAIC05NSw5ICs5NSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4K
IGlubGluZSBFbGVtZW50KiBUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZShDdXJyZW50
VHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChj
dXJyZW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
IHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOwotICAgIHJldHVybiB0b0VsZW1l
bnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiB0ZW1w
bGF0ZSA8PgpAQCAtMTA1LDkgKzEwNSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlw
ZT4KIGlubGluZSBFbGVtZW50KiBUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZShDdXJy
ZW50VHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBzdGF5V2l0aGluKTsKLSAgICB3aGls
ZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIHdoaWxlIChub2RlICYmICFp
czxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOwotICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiAvLyBHZW5lcmlj
IHZlcnNpb25zLgpAQCAtMjU4LDMzICsyNTgsMzMgQEAgaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2
ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUK
IGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVk
byhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5v
ZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50
LCBzdGF5V2l0aGluKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4p
OwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpOwogfQogCiBpbmxpbmUgRWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dElu
Y2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRv
KGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0
aGluKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKIH0KIAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRoaW4p
OwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUg
KG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiB9CiAKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9B
d2FyZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQogewogICAgIE5vZGUqIG5v
ZGUgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChu
b2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cHNldWRvQXdhcmVQcmV2aW91c1Np
YmxpbmcoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0xpdmVOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcApp
bmRleCA0ZjhhNDVjNmE5MzkxOTczYWEzOTNkOTNhNTQxZDdmMzA0ZTY1ZmNlLi5lZTIwZTExZGRh
NDRhNDNhMjY2Yzk0ZTc2MmE4NWI2NjFjMThkMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVM
aXN0LmNwcApAQCAtNjgsMTEgKzY4LDExIEBAIE5vZGUqIExpdmVOb2RlTGlzdDo6bmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElk
QXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JTdHlsZVJlc29sdXRpb24uCi0gICAgICAgIGlmIChl
bGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gZWxl
bWVudElkKQorICAgICAgICBpZiAoZWxlbWVudC5oYXNJRCgpICYmIGVsZW1lbnQuaWRGb3JTdHls
ZVJlc29sdXRpb24oKSA9PSBlbGVtZW50SWQpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBlYTkyZGE4MGEyMDhjMGJjYTMwMTRiMjM1YzMwYTA4
NzViNzhiYWVhLi4yMjg5MmJlNzg5OTc0ZDYyYzk3ODljMmFkNzViZWU0OGRhYTNlNjAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC0xMzcsOSArMTM3LDkgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGlj
cygpCiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgICAgICsr
bm9kZXNXaXRoUmFyZURhdGE7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAg
ICArK2VsZW1lbnRzV2l0aFJhcmVEYXRhOwotICAgICAgICAgICAgICAgIGlmICh0b0VsZW1lbnQo
bm9kZSktPmhhc05hbWVkTm9kZU1hcCgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuaGFzTmFtZWROb2RlTWFwKCkpCiAgICAgICAgICAgICAgICAgICAgICsr
ZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
NDksMTIgKzE0OSwxMiBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAg
ICAgICArK2VsZW1lbnROb2RlczsKIAogICAgICAgICAgICAgICAgIC8vIFRhZyBzdGF0cwotICAg
ICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHNpemVfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBwZXJU
YWdDb3VudC5hZGQoZWxlbWVudC0+dGFnTmFtZSgpLCAxKTsKKyAgICAgICAgICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOworICAgICAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gcGVyVGFnQ291bnQu
YWRkKGVsZW1lbnQudGFnTmFtZSgpLCAxKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7
CiAKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZWxlbWVu
dC0+ZWxlbWVudERhdGEoKSkgeworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxl
bWVudERhdGEgPSBlbGVtZW50LmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudERhdGEtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzICs9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgKytlbGVtZW50
c1dpdGhBdHRyaWJ1dGVTdG9yYWdlOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgTm9kZTo6bm9y
bWFsaXplKCkKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBOb2RlVHlwZSB0eXBlID0gbm9k
ZS0+bm9kZVR5cGUoKTsKICAgICAgICAgaWYgKHR5cGUgPT0gRUxFTUVOVF9OT0RFKQotICAgICAg
ICAgICAgdG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5ub3JtYWxpemVBdHRyaWJ1dGVzKCk7CisgICAg
ICAgICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkubm9ybWFsaXplQXR0cmlidXRlcygpOwog
CiAgICAgICAgIGlmIChub2RlID09IHRoaXMpCiAgICAgICAgICAgICBicmVhazsKQEAgLTg5Niwx
NCArODk2LDE0IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBjb25zdAog
CiBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQoKSBjb25zdAogewotICAgIGlmIChp
c0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgY29uc3QgRWxlbWVudCogY3VycmVudEVsZW1lbnQg
PSB0b0VsZW1lbnQodGhpcyk7Ci0gICAgICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVsZW1lbnQt
PmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7Cisg
ICAgICAgIGNvbnN0IEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
KnRoaXMpOworICAgICAgICBOb2RlKiBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LmJlZm9yZVBzZXVk
b0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGZpcnN0KQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0
OwotICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAg
IGZpcnN0ID0gY3VycmVudEVsZW1lbnQuZmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoIWZpcnN0
KQotICAgICAgICAgICAgZmlyc3QgPSBjdXJyZW50RWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50
KCk7CisgICAgICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LmFmdGVyUHNldWRvRWxlbWVu
dCgpOwogICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgfQogICAgIHJldHVybiBmaXJzdENoaWxk
KCk7CkBAIC05MTEsMTQgKzkxMSwxNCBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hp
bGQoKSBjb25zdAogCiBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RDaGlsZCgpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJy
ZW50RWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsKLSAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJl
bnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICBpZiAoaXM8RWxlbWVudD4oKnRo
aXMpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKnRoaXMpOworICAgICAgICBOb2RlKiBsYXN0ID0gY3VycmVudEVsZW1lbnQuYWZ0
ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgICAgIGlmIChsYXN0KQogICAgICAgICAgICAgcmV0dXJu
IGxhc3Q7Ci0gICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC0+bGFzdENoaWxkKCk7CisgICAg
ICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKCFsYXN0
KQotICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5iZWZvcmVQc2V1ZG9FbGVtZW50
KCk7CisgICAgICAgICAgICBsYXN0ID0gY3VycmVudEVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVu
dCgpOwogICAgICAgICByZXR1cm4gbGFzdDsKICAgICB9CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgp
OwpAQCAtOTI3LDggKzkyNyw4IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTGFzdENoaWxkKCkg
Y29uc3QKIFJlbmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIpCiB7CiAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+Y29t
cHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5j
b21wdXRlZFN0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KQEAgLTEwMDcsMTAgKzEwMDcsMTAgQEAgRWxlbWVudCogTm9kZTo6cGFyZW50
T3JTaGFkb3dIb3N0RWxlbWVudCgpIGNvbnN0CiAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHBhcmVu
dCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTaGFkb3dSb290PihwYXJlbnQpLT5ob3N0RWxl
bWVudCgpOwogCi0gICAgaWYgKCFwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlz
PEVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IHRvRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihwYXJlbnQp
OwogfQogCiBOb2RlKiBOb2RlOjppbnNlcnRpb25QYXJlbnRGb3JCaW5kaW5nKCkgY29uc3QKQEAg
LTEwNTUsMTEgKzEwNTUsMTEgQEAgRWxlbWVudCogTm9kZTo6cm9vdEVkaXRhYmxlRWxlbWVudChF
ZGl0YWJsZVR5cGUgZWRpdGFibGVUeXBlKSBjb25zdAogCiBFbGVtZW50KiBOb2RlOjpyb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QKIHsKLSAgICBFbGVtZW50KiByZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSogbiA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBuICYmIG4tPmhhc0VkaXRhYmxl
U3R5bGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgcmVzdWx0ID0gdG9FbGVtZW50KG4pOwotICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShib2R5VGFnKSkKKyAgICBFbGVtZW50KiByZXN1bHQgPSBudWxscHRyOwor
ICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBub2RlICYmIG5v
ZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgICAgICByZXN1bHQgPSBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKKyAgICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4obm9kZSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMDIs
NyArMTEwMiw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAg
ICAgaWYgKG5vZGVWYWx1ZSgpICE9IG90aGVyLT5ub2RlVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGlmIChpc0VsZW1lbnROb2RlKCkgJiYgIXRvRWxlbWVudCh0aGlz
KS0+aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXModG9FbGVtZW50KG90aGVyKSkpCisgICAgaWYgKGlz
PEVsZW1lbnQ+KCp0aGlzKSAmJiAhZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmhhc0VxdWl2YWxl
bnRBdHRyaWJ1dGVzKGRvd25jYXN0PEVsZW1lbnQ+KG90aGVyKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKQEAgLTExNDQsMTMg
KzExNDQsMTMgQEAgYm9vbCBOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUklNYXliZUVtcHR5KSBjb25zdAogCiAgICAgc3dpdGNoIChub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgRUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBjb25zdCBF
bGVtZW50KiBlbGVtID0gdG9FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgY29uc3QgRWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGVsZW0tPnByZWZpeCgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CisgICAgICAgICAgICBp
ZiAoZWxlbWVudC5wcmVmaXgoKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CiAKLSAgICAgICAgICAgIGlmIChl
bGVtLT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlIDogZWxlbS0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubG9jYWxOYW1lKCkgPT0geG1s
bnNBdG9tKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS52YWx1ZSgp
ID09IG5hbWVzcGFjZVVSSTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjg0LDEwICsxMjg0LDEw
IEBAIFN0cmluZyBOb2RlOjpsb29rdXBOYW1lc3BhY2VQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5n
ICZfbmFtZXNwYWNlVVJJLCBjb25zdCBFbGVtCiAgICAgaWYgKG9yaWdpbmFsRWxlbWVudC0+bG9v
a3VwTmFtZXNwYWNlVVJJKHByZWZpeCgpKSA9PSBfbmFtZXNwYWNlVVJJKQogICAgICAgICByZXR1
cm4gcHJlZml4KCk7CiAgICAgCi0gICAgQVNTRVJUKGlzRWxlbWVudE5vZGUoKSk7Ci0gICAgY29u
c3QgRWxlbWVudCogdGhpc0VsZW1lbnQgPSB0b0VsZW1lbnQodGhpcyk7Ci0gICAgaWYgKHRoaXNF
bGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUm
IGF0dHJpYnV0ZSA6IHRoaXNFbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgIEFT
U0VSVChpczxFbGVtZW50PigqdGhpcykpOworICAgIGNvbnN0IEVsZW1lbnQmIHRoaXNFbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpOworICAgIGlmICh0aGlzRWxlbWVudC5oYXNBdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IHRo
aXNFbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlLnByZWZpeCgpID09IHhtbG5zQXRvbSAmJiBhdHRyaWJ1dGUudmFsdWUoKSA9PSBfbmFtZXNw
YWNlVVJJCiAgICAgICAgICAgICAgICAgJiYgb3JpZ2luYWxFbGVtZW50LT5sb29rdXBOYW1lc3Bh
Y2VVUkkoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSA9PSBfbmFtZXNwYWNlVVJJKQogICAgICAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUubG9jYWxOYW1lKCk7CkBAIC0xMzgzLDExICsxMzgzLDEx
IEBAIHZvaWQgTm9kZTo6c2V0VGV4dENvbnRlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykKIEVsZW1lbnQqIE5vZGU6OmFuY2VzdG9yRWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgLy8gSW4gdGhlb3J5LCB0aGVyZSBjYW4gYmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGJldHdl
ZW4gZWxlbWVudHMsIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgotICAgIGZv
ciAoQ29udGFpbmVyTm9kZSogbiA9IHBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRvRWxlbWVudChuKTsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50
Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50PihhbmNlc3RvcikpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4oYW5jZXN0b3IpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBOb2RlOjpvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApA
QCAtMTUyOSwxMCArMTUyOSwxMCBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShj
b25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVE
ZXNjKGNvbnN0IE5vZGUqIG5vZGUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQogewotICAgIGlmICgh
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyID0gdG9FbGVtZW50KG5vZGUpLT5nZXRBdHRy
aWJ1dGUobmFtZSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0gZG93bmNhc3Q8RWxl
bWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShuYW1lKTsKICAgICBpZiAoYXR0ci5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTU4NCw4ICsxNTg0LDggQEAgdm9pZCBOb2RlOjpzaG93
Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLyVzIiwgbm9kZS0+bm9kZU5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVu
dChub2RlKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRhdHRyID0gZWxlbWVu
dC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkYXR0ciA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGJvb2wg
aGFzSWRBdHRyID0gIWlkYXR0ci5pc051bGwoKSAmJiAhaWRhdHRyLmlzRW1wdHkoKTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5wcmV2aW91c1NpYmxpbmcoKSB8fCBub2RlLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKQEAgLTE3MjQsMTAgKzE3MjQsMTAg
QEAgRWxlbWVudCogTm9kZTo6ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkKICAgICAg
ICAgLy8gU28gd2UgZG9uJ3QgbGV0IGltYWdlcyBiZSB0aGUgZW5jbG9zaW5nIGxpbmsgZWxlbWVu
dCwgZXZlbiB0aG91Z2ggaXNMaW5rIHNvbWV0aW1lcyByZXR1cm5zCiAgICAgICAgIC8vIHRydWUg
Zm9yIHRoZW0uCiAgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSAmJiAhaXM8SFRNTEltYWdlRWxl
bWVudD4obm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBOb2Rl
OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lk
IE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIWhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudCgqdGhpcykuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNN
b3VzZUV2ZW50KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxFbGVt
ZW50PigqdGhpcykuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNNb3VzZUV2ZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOwpA
QCAtMjE2NCw5ICsyMTY0LDkgQEAgYm9vbCBOb2RlOjp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZl
bnRzKCkKIHsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoZSBpT1MgY29kZSBwYXRoIGRpZmZlcmVu
dCBmcm9tIHRoZSBub24taU9TIGNvZGUgcGF0aD8KICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGlm
ICghaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4oKnRoaXMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvRWxlbWVudCh0aGlzKS0+aXNEaXNhYmxlZEZvcm1D
b250cm9sKCkpCisgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIGhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgfHwgaGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7CkBAIC0yMTc4LDkgKzIxNzgsOSBAQCBib29s
IE5vZGU6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tF
dmVudCk7CiAjZWxzZQotICAgIGlmICghaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxl
bWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvRWxlbWVudCh0
aGlzKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+
KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0
YWJsZSkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgfHwg
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB8fCBoYXNFdmVu
dExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAKaW5kZXggMjhkMTQzMTllMjhmNDJlY2Vl
ZDU1NTg5MTdkMmE3Y2Q1NGEyNzNkNi4uODJlYzdkYjYyZWFjOTQ0MjJjNWE5OTc4NjA5MjM2NGNl
MmQ4NDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2
ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2Fs
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhbkJlRGlzdHJp
YnV0ZWQoY29uc3QgTm9kZSogbm9kZSkKICAgICBpZiAocGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudChwYXJlbnQpLT5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+
KHBhcmVudCkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnBhcmVudCkuc2hhZG93Um9vdCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAppbmRleCAzOWE0Nzg0ZmJlM2I5Zjg1ZDI4YzFiMmQ2OGRkMWEyYWUxNDY2N2ExLi5k
YzgyMTkwYzViZTBmZmEzMTZlMDRiN2NlNzIyMzQ2ZjhhODZmNTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAKQEAgLTI5MCwxMCArMjkwLDEwIEBAIFBvc2l0aW9uOjpBbmNob3JUeXBlIFBvc2l0
aW9uOjphbmNob3JUeXBlRm9yTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKE5vZGUqIGFuY2hvck5vCiAv
LyBGSVhNRTogVGhpcyBtZXRob2QgaXMgY29uZnVzaW5nIChkb2VzIGl0IHJldHVybiBhbmNob3JO
b2RlKCkgb3IgY29udGFpbmVyTm9kZSgpPykgYW5kIHNob3VsZCBiZSByZW5hbWVkIG9yIHJlbW92
ZWQKIEVsZW1lbnQqIFBvc2l0aW9uOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlKiBuID0g
YW5jaG9yTm9kZSgpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChuKTsKKyAgICBO
b2RlKiBub2RlID0gYW5jaG9yTm9kZSgpOworICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91
cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXgg
ODhiOWI2MTA4ODI4MGM3OTMxMGYxODBiNDk1YmVkZmMxYWQ5Zjk0NS4uOWViMGRjMDdkMjQ5NzEz
NjMzOTgyYTgxNDQ2MmI1YzQ4N2Y0YWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0yMjI0LDgg
KzIyMjQsOCBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzKSBjb25zdAogICAgICAgICBzZWxlY3RlZEVsZW1lbnRzU2V0LnJlbW92ZShw
YXJlbnQpOwogCiAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3Rv
cE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2Rl
KSAmJiAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2Jq
ZWN0ID0gdG9FbGVtZW50KG5vZGUpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5v
ZGUpICYmICFzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5vZGUoKSkp
IHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxP
YmplY3QgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkucmVuZGVyQm94TW9kZWxPYmplY3QoKSkg
ewogICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKICAgICAg
ICAgICAgICAgICByZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVh
ZHMpOwogICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQoKS5hZGp1c3RGbG9hdFF1YWRzRm9y
U2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2FsZShlbGVtZW50UXVhZHMsIHJlbmRlckJv
eE1vZGVsT2JqZWN0LT5zdHlsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDcwZDEy
Zjg5OThiY2RjNWFlODZhOTM2NjgwZDA3YjcyNmY1MGJjZjIuLmJmZTViNmY4NDdiNWQzMTlmNjk0
MjEwODNhM2ZhZjY4NjA5MTc0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtMTAxLDkg
KzEwMSw5IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogaW5saW5lIFNoYWRvd1Jv
b3QqIE5vZGU6OnNoYWRvd1Jvb3QoKSBjb25zdAogewotICAgIGlmICghaXNFbGVtZW50Tm9kZSgp
KQorICAgIGlmICghaXM8RWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gdG9FbGVtZW50KHRoaXMpLT5zaGFkb3dSb290KCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5zaGFkb3dSb290KCk7CiB9CiAKIGlubGluZSBDb250YWlu
ZXJOb2RlKiBOb2RlOjpwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3RhdGljTm9kZUxpc3QuY3BwCmluZGV4IDdlMWY0YzJiNTcxMDNjODc4OTY4N2U0YTE0ZGQ2
NDEzMmYwNDlkYzguLjk0OTY3YjdiZWZkYzE4ZTE4MjA0YjI1Mzc5ZmRhNGY5NTY5YWFmNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcApAQCAtNDcsNyArNDcsNyBAQCBOb2Rl
KiBTdGF0aWNOb2RlTGlzdDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElk
KSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IG1fbm9kZXMuc2l6
ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGNvbnN0X2Nhc3Q8
Tm9kZSY+KG1fbm9kZXNbaV0uZ2V0KCkpOwotICAgICAgICBpZiAobm9kZS5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KG5vZGUpLmdldElkQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuZ2V0
SWRBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCiAgICAgICAgICAgICByZXR1cm4gJm5vZGU7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZUFkb3B0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0
ZXIuY3BwCmluZGV4IDY0MTBmMmMwYTZlZjg2YjI4ZDdiZmNhNjg5YTcxMjBjYmFjZmIyZWQuLjA0
NWU4OGU0MzE5N2I4M2RhZmI4ZWMzZDlkMjUzMTJiNWZkNDdhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlQWRvcHRlci5jcHAKQEAgLTYwLDExICs2MCwxMSBAQCB2b2lkIFRyZWVTY29w
ZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wZShOb2RlKiByb290KSBjb25zdAogICAgICAgICAg
ICAgICAgIHJhcmVEYXRhLT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG5v
ZGUtPmhhc1N5bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8QXR0cj4+JiBhdHRycyA9IHRvRWxlbWVudChub2RlKS0+YXR0ck5vZGVMaXN0
KCk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEF0dHI+PiYgYXR0cnMgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0ck5vZGVMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbW92
ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ldLmdldCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBmMjE4NTJmNmUwNGQ4MzZl
NWQ1YjgzMTIzNzhiOTBiMzgyZmY0MmQ2Li44NmQ0YTU0N2ZmMjA2MDliZDY0ZjFkZTNkOTFhZDAw
MGQ1MWMxOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcApAQCAtNDIwLDEwICs0MjAsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogCiBzdGF0aWMgQ29u
dGFpbmVyTm9kZSogZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7
Ci0gICAgd2hpbGUgKG5vZGUgJiYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIWlzU3R5bGVT
cGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZSh0b0VsZW1lbnQobm9kZSkpKSkKKyAgICB3
aGlsZSAobm9kZSAmJiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFpc1N0eWxlU3Bhbk9yU3Bhbldp
dGhPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAKLSAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PnBhcmVudE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5wYXJlbnROb2RlKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRB
cHBsZVN0eWxlU3BhbnMoQ29udGFpbmVyTm9kZSogZHVtbXlTcGFuQW5jZXN0b3IpCkBAIC00ODYs
NyArNDg2LDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9y
c1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGIKICAgICAvLyBTcGxpdCBldmVyeSBh
bmNlc3RvciB0aHJvdWdoIGhpZ2hlc3QgYW5jZXN0b3Igd2l0aCBlbWJlZGRpbmcuCiAgICAgUmVm
UHRyPE5vZGU+IGN1cnJlbnROb2RlID0gbm9kZTsKICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsK
LSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCA9IHRvRWxlbWVudChjdXJyZW50Tm9kZS0+
cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoYmVmb3Jl
ID8gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpIDogY3VycmVudE5vZGUtPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgICAgICBzcGxpdEVsZW1lbnQocGFyZW50LCBiZWZvcmUgPyBjdXJyZW50
Tm9kZSA6IGN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKTsKICAgICAgICAgaWYgKHBhcmVudCA9
PSBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkpCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0
aW5nU3R5bGUqIHN0eWxlLCBOb2RlKgogICAgICAgICBnZXRDaGlsZE5vZGVzKCpjdXJyZW50Lmdl
dCgpLCBjdXJyZW50Q2hpbGRyZW4pOwogCiAgICAgICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBz
dHlsZWRFbGVtZW50OwotICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oKmN1cnJlbnQpICYm
IGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKHRvRWxlbWVudChjdXJyZW50LmdldCgpKSkp
IHsKKyAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KCpjdXJyZW50KSAmJiBpc1N0eWxlZElu
bGluZUVsZW1lbnRUb1JlbW92ZShkb3duY2FzdDxFbGVtZW50PihjdXJyZW50LmdldCgpKSkpIHsK
ICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihjdXJy
ZW50LmdldCgpKTsKICAgICAgICAgICAgIGVsZW1lbnRzVG9QdXNoRG93bi5hcHBlbmQoKnN0eWxl
ZEVsZW1lbnQpOwogICAgICAgICB9CkBAIC0xMjg2LDggKzEyODYsOCBAQCBib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LAogICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9IHN0YXJ0Tm9kZS0+cHJldmlv
dXNTaWJsaW5nKCk7CiAKICAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIGFyZUlkZW50aWNhbEVs
ZW1lbnRzKHN0YXJ0Tm9kZSwgcHJldmlvdXNTaWJsaW5nKSkgewotICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSB0b0VsZW1lbnQocHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChzdGFydE5vZGUpOworICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKICAg
ICAgICAgTm9kZSogc3RhcnRDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
QVNTRVJUKHN0YXJ0Q2hpbGQpOwogICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZp
b3VzRWxlbWVudCwgZWxlbWVudCk7CkBAIC0xMzE5LDggKzEzMTksOCBAQCBib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdAogCiAgICAgTm9kZSogbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGlu
ZygpOwogICAgIGlmIChuZXh0U2libGluZyAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbmROb2Rl
LCBuZXh0U2libGluZykpIHsKLSAgICAgICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSB0b0VsZW1l
bnQobmV4dFNpYmxpbmcpOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGVu
ZE5vZGUpOworICAgICAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5leHRTaWJsaW5nKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KGVuZE5vZGUpOwogICAgICAgICBOb2RlKiBuZXh0Q2hpbGQgPSBuZXh0RWxlbWVudC0+Zmly
c3RDaGlsZCgpOwogCiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgbmV4
dEVsZW1lbnQpOwpAQCAtMTM1OSwxNSArMTM1OSwxNSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3Rh
cgogCiAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmco
KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkgJiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKQotICAgICAgICAmJiBhcmVJ
ZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0
KCkpKSkKLSAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0b0Vs
ZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkpKTsKKyAgICBpZiAobmV4dFNpYmxpbmcgJiYgaXM8RWxl
bWVudD4oKm5leHRTaWJsaW5nKSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpCisg
ICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIGRvd25jYXN0PEVs
ZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSkpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVu
dHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsK
IAotICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkgJiYgcHJldmlvdXNTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKKyAgICBpZiAo
cHJldmlvdXNTaWJsaW5nICYmIGlzPEVsZW1lbnQ+KCpwcmV2aW91c1NpYmxpbmcpICYmIHByZXZp
b3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVs
ZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJn
ZWRFbGVtZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFibGVT
dHlsZSgpCi0gICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyh0b0VsZW1lbnQocHJl
dmlvdXNTaWJsaW5nLmdldCgpKSwgdG9FbGVtZW50KG1lcmdlZEVsZW1lbnQpKSkKLSAgICAgICAg
ICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHModG9FbGVtZW50KHByZXZpb3VzU2libGluZy5nZXQo
KSksIHRvRWxlbWVudChtZXJnZWRFbGVtZW50KSk7CisgICAgICAgIGlmIChpczxFbGVtZW50Piht
ZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkKKyAgICAg
ICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3Vz
U2libGluZy5nZXQoKSksIGRvd25jYXN0PEVsZW1lbnQ+KG1lcmdlZEVsZW1lbnQpKSkKKyAgICAg
ICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNT
aWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4obWVyZ2VkRWxlbWVudCkpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCB1cGRhdGVTdGFydEVuZCBp
ZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggZjYxNzExYWE5ZjAwN2Q1
NmUwZGNjY2ExMmQzZWZmZDU4MmZhYzE4ZC4uNTUyMzNjNWJjOTk4NDQzOGFhM2ZiNWY5ZWE5M2Ri
YWVhOWFhOWMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKICAgICAK
ICAgICAvLyBJbnNlcnQgYSBjbG9uZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIgdGhlIGJy
ZWFrLgotICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gdG9FbGVtZW50KHRv
cEJsb2NrcXVvdGUpLT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKKyAgICBSZWZQdHI8
RWxlbWVudD4gY2xvbmVkQmxvY2txdW90ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0b3BCbG9ja3F1
b3RlKS5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKICAgICBpbnNlcnROb2RlQWZ0ZXIo
Y2xvbmVkQmxvY2txdW90ZS5nZXQoKSwgYnJlYWtOb2RlLmdldCgpKTsKICAgICAKICAgICAvLyBD
bG9uZSBzdGFydE5vZGUncyBhbmNlc3RvcnMgaW50byB0aGUgY2xvbmVkIGJsb2NrcXVvdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4
IDVkZDRjMzBhNjQ3ZWNjOTM5ZjhlZmEwNjdkNGM3ZDhlYmJjZTFlNTYuLmE2ZTU1NDE2NjhjNDdl
NTY4OGEzZWJiOTU2NjMyYjU0ODA0N2VlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0zOSw3ICszOSw5IEBACiAjaW5jbHVkZSAi
RWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIgpAQCAtMzIyLDE0ICszMjQsMTQgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6aXNSZW1vdmFibGVCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICgh
bm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpKQorICAgIGlmICghaXM8SFRNTERpdkVsZW1lbnQ+KG5v
ZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmZpcnN0
Q2hpbGQoKSAhPSBwYXJlbnROb2RlLT5sYXN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICBpZiAo
IWRvd25jYXN0PEhUTUxEaXZFbGVtZW50Pigqbm9kZSkuaGFzQXR0cmlidXRlcygpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNjksNyArMTA3MSw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGFuY2VzdG9y
cy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7CiAgICAgICAgICAgICBOb2RlKiBpdGVtID0gYW5jZXN0
b3JzW2kgLSAxXS5nZXQoKTsKICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IGl0ZW0t
PmNsb25lTm9kZShpc1JlbmRlcmVkVGFibGUoaXRlbSkpOwotICAgICAgICAgICAgYXBwZW5kTm9k
ZShjaGlsZCwgdG9FbGVtZW50KGxhc3ROb2RlLmdldCgpKSk7CisgICAgICAgICAgICBhcHBlbmRO
b2RlKGNoaWxkLCBkb3duY2FzdDxFbGVtZW50PihsYXN0Tm9kZS5nZXQoKSkpOwogICAgICAgICAg
ICAgbGFzdE5vZGUgPSBjaGlsZC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzQ3
LDEzICsxMzQ5LDEzIEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKCkKIAogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdCbG9jayA9IDA7CiAgICAgaWYg
KENvbnRhaW5lck5vZGUqIGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKGJsb2NrRW5jbG9zaW5nTGlzdC0+aGFzVGFnTmFtZShsaVRhZykp
IHsgLy8gbGlzdE5vZGUgaXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCisgICAgICAgIGlmIChp
czxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xpc3QpKSB7IC8vIGxpc3ROb2RlIGlzIGlu
c2lkZSBhbm90aGVyIGxpc3QgaXRlbQogICAgICAgICAgICAgaWYgKHZpc2libGVQb3NpdGlvbkFm
dGVyTm9kZShibG9ja0VuY2xvc2luZ0xpc3QpID09IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShs
aXN0Tm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBsaXN0Tm9kZSBhcHBlYXJz
IGF0IHRoZSBlbmQgb2YgdGhlIG91dGVyIGxpc3QgaXRlbSwgdGhlbiBtb3ZlIGxpc3ROb2RlIG91
dHNpZGUgb2YgdGhpcyBsaXN0IGl0ZW0KICAgICAgICAgICAgICAgICAvLyBlLmcuIDx1bD48bGk+
aGVsbG8gPHVsPjxsaT48YnI+PC9saT48L3VsPiA8L2xpPjwvdWw+IHNob3VsZCBiZWNvbWUgPHVs
PjxsaT5oZWxsbzwvbGk+IDx1bD48bGk+PGJyPjwvbGk+PC91bD4gPC91bD4gYWZ0ZXIgdGhpcyBz
ZWN0aW9uCiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgZG9lcyBOT1QgYXBwZWFyIGF0
IHRoZSBlbmQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IGFzIGEgcmVndWxhciBwYXJhZ3Jh
cGguCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPiA8dWw+PGxpPjxicj48L2xpPjwv
dWw+IGhlbGxvPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+IDxkaXY+PGJyPjwvZGl2
PiBoZWxsbzwvbGk+PC91bD4gYXQgdGhlIGVuZAotICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVu
dCh0b0VsZW1lbnQoYmxvY2tFbmNsb3NpbmdMaXN0KSwgbGlzdE5vZGUpOworICAgICAgICAgICAg
ICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xp
c3QpLCBsaXN0Tm9kZSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgICAgICAgICBuZXdCbG9jayA9
IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIH0KQEAgLTEz
NjksNyArMTM3MSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKCkKICAgICBpZiAoaXNMaXN0SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlz
TGlzdEVsZW1lbnQobmV4dExpc3ROb2RlLmdldCgpKSkgewogICAgICAgICAvLyBJZiBlbXB0eUxp
c3RJdGVtIGZvbGxvd3MgYW5vdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHNwbGl0IHRo
ZSBsaXN0IG5vZGUuCiAgICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0
KCkpIHx8IGlzTGlzdEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkpCi0gICAgICAgICAg
ICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KGxpc3ROb2RlLmdldCgpKSwgZW1wdHlMaXN0SXRlbSk7
CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdE5vZGUuZ2V0
KCkpLCBlbXB0eUxpc3RJdGVtKTsKIAogICAgICAgICAvLyBJZiBlbXB0eUxpc3RJdGVtIGlzIGZv
bGxvd2VkIGJ5IG90aGVyIGxpc3QgaXRlbSBvciBuZXN0ZWQgbGlzdCwgdGhlbiBpbnNlcnQgbmV3
QmxvY2sgYmVmb3JlIHRoZSBsaXN0IG5vZGUuCiAgICAgICAgIC8vIEJlY2F1c2Ugd2UgaGF2ZSBz
cGxpdHRlZCB0aGUgZWxlbWVudCwgZW1wdHlMaXN0SXRlbSBpcyB0aGUgZmlyc3QgZWxlbWVudCBp
biB0aGUgbGlzdCBub2RlLgpAQCAtMTUyMiwxMyArMTUyNCwxMyBAQCBQYXNzUmVmUHRyPE5vZGU+
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5vZGUq
IGVuZCwgYgogCiAgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGUgPSBlbmQ7CiAgICAgZm9yIChub2Rl
ID0gc3RhcnQ7IG5vZGUgJiYgbm9kZS0+cGFyZW50Tm9kZSgpICE9IGVuZE5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2RlKCktPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlLT5wYXJlbnROb2Rl
KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUg
d2hlbiBkb2luZyBzbyBpbnRyb2R1Y2VzIGFuIGVtcHR5IG5vZGUuCiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkluUGFyZW50ID0gZmlyc3RQb3NpdGlvbkluTm9kZShub2RlLT5wYXJl
bnROb2RlKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Jbk5vZGUgPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChwb3NpdGlv
bkluUGFyZW50ICE9IHBvc2l0aW9uSW5Ob2RlKQotICAgICAgICAgICAgc3BsaXRFbGVtZW50KHRv
RWxlbWVudChub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHNwbGl0RWxl
bWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKICAgICB9
CiAKICAgICByZXR1cm4gbm9kZS5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBiZTM3NmZmOTNmOTE5MzMxZjcw
NTZjNTE4YThiNzRkOWYxMjAzNzRkLi5hYmM1MzM2ZjAxNTUyNTAyZDRjNjVjZjU0NjdiNGUwYjIz
MDNlODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAt
NDM0LDcgKzQzNiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmdF
bGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByCiAgICAgUmVmUHRyPE5vZGU+
IG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCkpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKChub2RlLT5oYXNU
YWdOYW1lKHN0eWxlVGFnKSAmJiAhKHRvRWxlbWVudChub2RlLmdldCgpKS0+aGFzQXR0cmlidXRl
KHNjb3BlZEF0dHIpKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShsaW5rVGFnKSkgeworICAgICAgICBp
ZiAoKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxl
bWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZShzY29wZWRBdHRyKSkgfHwgaXM8SFRNTExpbmtFbGVt
ZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggOTBkYTAxOTAyMDUyYzA2ZTc0ZjIxNThjZDgxMGI0YzY3NjY5NTkz
Ny4uYWM0NThhYzAwYWE1OTc3YzYzYTRjY2E1NTBjNWQ2Njc3MTNkYjE5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMjM3OCw3ICsyMzc4LDcgQEAgYm9vbCBFZGl0b3I6OmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBFbGVtZW50KiBmb2N1c2VkRWxlbWVu
dCA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChub2RlKSA6IG5vZGUtPnBhcmVu
dEVsZW1lbnQoKTsKKyAgICBjb25zdCBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGlzPEVsZW1l
bnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50
KCk7CiAgICAgaWYgKCFmb2N1c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBmb2N1c2VkRWxlbWVudC0+aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzEw
MCw3ICszMTAwLDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVu
dCgpIGNvbnN0CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZG9jdW1lbnQoKS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiYm9keSIpOwogICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgYXBwbHlF
ZGl0aW5nU3R5bGVUb0VsZW1lbnQodG9FbGVtZW50KGxpc3QtPml0ZW0oaSkpKTsKKyAgICAgICAg
YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdC0+aXRlbShp
KSkpOwogfQogCiB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAppbmRleCA0NjkwZjIxNzUzNTczMGIyNDg3OTVhOThhODU2NjM2Zjk2MzA3YzZm
Li4zMTc0NWY5MzViZmJiNzkwZjlkMWI2ZjRkMmVkODE0NWQzNmNjNzNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC00Myw3ICs0Myw3IEBA
IHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSogc3RhcnROb2Rl
KTsKIHN0YXRpYyBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpOwogc3RhdGljIGlubGluZSBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2Nr
KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBpc0Vs
ZW1lbnRGb3JGb3JtYXRCbG9jayh0b0VsZW1lbnQobm9kZSktPnRhZ1FOYW1lKCkpOworICAgIHJl
dHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkudGFnUU5hbWUoKSk7CiB9CiAKIEZvcm1hdEJsb2NrQ29tbWFuZDo6
Rm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKQEAgLTEwMCwyMCArMTAwLDIwIEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5k
Ojpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQs
CiBFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1h
bmQoUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFu
Z2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKElHTk9SRV9FWENFUFRJT04pOwogICAgIHdoaWxl
IChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0
b3IpKQogICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2Rl
KCk7CiAKICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50ID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAo
IXJvb3RFZGl0YWJsZUVsZW1lbnQgfHwgY29tbW9uQW5jZXN0b3ItPmNvbnRhaW5zKHJvb3RFZGl0
YWJsZUVsZW1lbnQpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gY29tbW9uQW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVu
dChjb21tb25BbmNlc3RvcikgOiAwOworICAgIHJldHVybiBjb21tb25BbmNlc3Rvci0+aXNFbGVt
ZW50Tm9kZSgpID8gZG93bmNhc3Q8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpIDogbnVsbHB0cjsK
IH0KIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBj
MTdmNmI5MTZmNjgwOTlmMDg1Mzk2ZThmN2MxOThjNzgzYzQ3Mjg3Li4zMDNkNjZhMDNmNWU5NmVm
NzVmY2E1YjkwYTFjZmUxNmIxNzViNDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcApAQCAtMzk4LDEwICszOTgsMTAgQEAgc3RhdGljIGJvb2wgcmVtb3ZpbmdO
b2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
ICAgICBpZiAocG9zaXRpb24uYW5jaG9yTm9kZSgpID09IG5vZGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93
RE9NKHBvc2l0aW9uLmFuY2hvck5vZGUoKSk7CiB9CiAKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIHZv
aWQgQ2FyZXRCYXNlOjpwYWludENhcmV0KE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5b3V0UG9pCiAKICAgICBDb2xvciBjYXJldENvbG9yID0gQ29sb3I6OmJs
YWNrOwogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7Ci0g
ICAgRWxlbWVudCogZWxlbWVudCA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8
RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVs
ZW1lbnQoKTsKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogCiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIo
KSkgewpAQCAtMTUyMCwxMyArMTUyMCwxMyBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChO
b2RlKiBub2RlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaQogI2Vu
ZGlmCiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiByLCBib29sIHNlbGVjdGVkKSBjb25zdAordm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIHNlbGVjdGVkKSBjb25zdAogewotICAg
IGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gdG9FbGVtZW50KHItPm5vZGUoKSk7CisgICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVy
LT5ub2RlKCkpKSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
PihyZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBz
ZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgfSBlbHNlIGlmIChyLT5pc1RleHQoKSkgewotICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocik7CisgICAgfSBlbHNlIGlm
IChyZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsKICAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXItPnRl
eHRMZW5ndGgoKSB8fCAhdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKSkgewogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcyN0ZXh0IChlbXB0eSlcbiIsIHNlbGVjdGVkID8gIj09PiAi
IDogIiAgICAiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MzcsOSArMTUzNyw5IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByLCBib29sIHNl
bGVjdGVkKSBjb25zdAogICAgICAgICBpbnQgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9k
ZSgpKQorICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3Rh
cnQoKS5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpKQor
ICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQo
KS5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24u
ZW5kKCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogCiAgICAgICAgICAgICBpbnQg
cG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAppbmRleCAzYTFjMWU2MDlhOGQ0ZjQ0YmVkMWJmYjYzYTk5ODNjYjQ1NGZhZWE5Li5hN2M3Yzcx
YWIzZWIzYjVkNTU3ZTYwNmM4NDY3Y2NkOTljMjBiNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgICAgICAgICAg
ICAgIGlmIChzcGxpdFBvaW50UGFyZW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFzcGxpdFBvaW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcp
CiAgICAgICAgICAgICAgICAgICAgICYmIHNwbGl0UG9pbnRQYXJlbnQtPnBhcmVudE5vZGUoKS0+
aGFzRWRpdGFibGVTdHlsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBs
YWNlIHRvIGdvIQotICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KHNw
bGl0UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRF
bGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KHNwbGl0UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJlIHdlIHN0YXJ0IG91dGRlbnRpbmcu
CiAgICAgICAgIE5vZGUqIGhpZ2hlc3RJbmxpbmVOb2RlID0gaGlnaGVzdEVuY2xvc2luZ05vZGVP
ZlR5cGUodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSwgaXNJbmxpbmUs
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5LCBlbmNsb3NpbmdCbG9ja0Zsb3cpOwotICAgICAg
ICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KGVuY2xvc2luZ05vZGUpLCAoaGlnaGVzdElubGluZU5v
ZGUpID8gaGlnaGVzdElubGluZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNh
c3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSksIGhpZ2hlc3RJbmxpbmVOb2RlID8gaGlnaGVzdElu
bGluZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIH0KICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBjcmVh
dGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFjZWhv
bGRlciwgc3BsaXRCbG9ja3F1b3RlTm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCAyYmZj
MTA3NDY1OGZjMjRiZWVmNmYxMjEwN2UyNzAyMjMxOTZlYWNjLi5lOWZlNWFkNGRlMzYwNzhlY2M5
YjFiMTJhOTA2Y2NmZjQ5ZjE0YjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTIyNyw3ICsy
MjcsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAgICAgLy8gaW50byBhbiB1bnF1b3RlZCBhcmVhLiBXZSB0aGVuIGRvbid0IHdhbnQg
dGhlIG5ld2xpbmUgd2l0aGluIHRoZSBibG9ja3F1b3RlIG9yIGVsc2UgaXQgd2lsbCBhbHNvIGJl
IHF1b3RlZC4KICAgICAgICAgICAgIGlmIChtX3Bhc3RlQmxvY2txdXRvZUludG9VbnF1b3RlZEFy
ZWEpIHsKICAgICAgICAgICAgICAgICBpZiAoTm9kZSogaGlnaGVzdEJsb2NrcXVvdGUgPSBoaWdo
ZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjYW5vbmljYWxQb3MsICZpc01haWxCbG9ja3F1b3RlKSkK
LSAgICAgICAgICAgICAgICAgICAgc3RhcnRCbG9jayA9IHRvRWxlbWVudChoaWdoZXN0QmxvY2tx
dW90ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2sgPSBkb3duY2FzdDxFbGVtZW50
PihoaWdoZXN0QmxvY2txdW90ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE1v
c3Qgb2YgdGhlIHRpbWUgd2Ugd2FudCB0byBzdGF5IGF0IHRoZSBuZXN0aW5nIGxldmVsIG9mIHRo
ZSBzdGFydEJsb2NrIChlLmcuLCB3aGVuIG5lc3Rpbmcgd2l0aGluIGxpc3RzKS4gIEhvd2V2ZXIs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IDcz
ZTE5YmFmZDdkNTI3MmE2YjAzN2ZiMGZhOGY2NWQ2N2ZjYWFlN2QuLjFkN2VmYTMzYzBhZDBiNDdi
YjU3Mjk2YmMwZDEyODU5Zjk2NWFkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuY3BwCkBAIC0xMzksOSArMTM5LDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2Rl
KiBub2QKICAgICBpZiAoJnRhcmdldE5vZGUgPT0gbm9kZVRvU2tpcCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHRhZ05hbWVzVG9Ta2lwICYmIHRhcmdldE5vZGUuaXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgaWYgKHRhZ05hbWVzVG9Ta2lwICYmIGlzPEVsZW1lbnQ+KHRhcmdldE5vZGUpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6ICp0YWdOYW1lc1RvU2tpcCkgewotICAgICAgICAg
ICAgaWYgKHRvRWxlbWVudCh0YXJnZXROb2RlKS5oYXNUYWdOYW1lKG5hbWUpKQorICAgICAgICAg
ICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldE5vZGUpLmhhc1RhZ05hbWUobmFtZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtNTcwLDcgKzU3MCw3
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kCiAgICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJbnN0
cnVjdGlvbihyZXN1bHQsIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkudGFy
Z2V0KCksIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkuZGF0YSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgIGFwcGVu
ZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQobm9kZSksIG5hbWVzcGFjZXMpOworICAgICAgICBh
cHBlbmRFbGVtZW50KHJlc3VsdCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIG5hbWVzcGFjZXMp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKICAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgZG93bmNhc3Q8Q0RBVEFTZWN0aW9uPihu
b2RlKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CmluZGV4IGZjZjA1ZWJhYjg4MjAwY2RlMDViNTQ5MzhlNzk0MzcxMWQ2NmQ5ODIuLjhiMzBkNDZi
ODNhZTdiYmU4MTU1NDliOTFiNGQwYWE0ZWRiM2M0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTc2LDggKzc2LDggQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICBhcHBlbmRFbmRUYWcodG9FbGVtZW50KG5vZGUpKTsKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgYXBwZW5kRW5kVGFnKGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IEVsZW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcAppbmRleCBlNWY4ODRhZjJiZDIyY2VkMDA2OWUwZmZjMWYz
NGZkNzZkYjVjYzIyLi5kZmNlNTUzZDUzMGFlODEyN2QyZDdlM2JmMjVhOGUyZWNjMTlkMzk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIE5vZGUqIHByZXZpb3VzSXRlbSA9IHN0YXJ0TGlzdENo
aWxkLT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKS0+bm9kZSgpOwogICAgIGlmIChpc0xp
c3RFbGVtZW50KHByZXZpb3VzSXRlbSkpIHsKICAgICAgICAgLy8gbW92ZSBub2RlcyB1cCBpbnRv
IHByZWNlZGluZyBsaXN0Ci0gICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlUmFuZ2Uoc3RhcnRMaXN0
Q2hpbGQsIGVuZExpc3RDaGlsZCwgdG9FbGVtZW50KHByZXZpb3VzSXRlbSkpOworICAgICAgICBh
cHBlbmRTaWJsaW5nTm9kZVJhbmdlKHN0YXJ0TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQsIGRvd25j
YXN0PEVsZW1lbnQ+KHByZXZpb3VzSXRlbSkpOwogICAgICAgICBtX2xpc3RFbGVtZW50ID0gcHJl
dmlvdXNJdGVtOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIHN1Ymxpc3QgZm9y
IHRoZSBwcmVjZWRpbmcgZWxlbWVudCBhbmQgbW92ZSBub2RlcyB0aGVyZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4ZTg4
ZDUwMmEwMWMxMGZmNjZmNmZkNjBjZjQ3MjZiM2Y2MDMwODc5Li4xNTVlMTdhZjc1OWI0MDEwYTk2
ZjQ0ZTgwYzdhODkzMDQzMWY2NjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmdlRW5kKGJvb2wgc2VsZWN0aW9uRW5kV2Fz
RW5kT2ZQYXJhZ3JhcGgpCiAKIHN0YXRpYyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFt
ZShibG9ja3F1b3RlVGFnKSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5v
ZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247Cisg
ICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSAmJiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBwbGVQYXN0
ZUFzUXVvdGF0aW9uOwogfQogCiBzdGF0aWMgYm9vbCBpc0hlYWRlckVsZW1lbnQoY29uc3QgTm9k
ZSogYSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgYm9vbCBpc0hlYWRlckVsZW1lbnQoY29u
c3QgTm9kZSogYSkKIAogc3RhdGljIGJvb2wgaGF2ZVNhbWVUYWdOYW1lKE5vZGUqIGEsIE5vZGUq
IGIpCiB7Ci0gICAgcmV0dXJuIGEgJiYgYiAmJiBhLT5pc0VsZW1lbnROb2RlKCkgJiYgYi0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChhKS0+dGFnTmFtZSgpID09IHRvRWxlbWVudChiKS0+
dGFnTmFtZSgpOworICAgIHJldHVybiBhICYmIGIgJiYgaXM8RWxlbWVudD4oYSkgJiYgaXM8RWxl
bWVudD4oYikgJiYgZG93bmNhc3Q8RWxlbWVudD4oKmEpLnRhZ05hbWUoKSA9PSBkb3duY2FzdDxF
bGVtZW50PigqYikudGFnTmFtZSgpOwogfQogCiBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpzaG91bGRNZXJnZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHNvdXJjZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBkZXN0aW5hdGlvbikKQEAgLTc1NSw3ICs3NTUsNyBAQCBzdGF0aWMgYm9vbCBo
YW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBjb25zdAogCiAgICAgLy8gRklYTUU6IFRoaXMgc3RyaW5nIGNvbXBhcmlzb24gaXMgYSBu
YWl2ZSB3YXkgb2YgY29tcGFyaW5nIHR3byBzdHlsZXMuCiAgICAgLy8gV2Ugc2hvdWxkIGJlIHRh
a2luZyB0aGUgZGlmZiBhbmQgY2hlY2sgdGhhdCB0aGUgZGlmZiBpcyBlbXB0eS4KLSAgICBpZiAo
c3R5bGVUZXh0ICE9IHRvRWxlbWVudCh3cmFwcGluZ1N0eWxlU3BhbiktPmdldEF0dHJpYnV0ZShz
dHlsZUF0dHIpKQorICAgIGlmIChzdHlsZVRleHQgIT0gZG93bmNhc3Q8RWxlbWVudD4oKndyYXBw
aW5nU3R5bGVTcGFuKS5nZXRBdHRyaWJ1dGUoc3R5bGVBdHRyKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGlu
Z1N0eWxlU3Bhbik7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgbWVyZ2VFbmRJZk5lZWRlZCgpOwogCiAgICAgaWYg
KE5vZGUqIG1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlvbkF0U3Rh
cnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCksIGlzTWFpbFBhc3RlQXNRdW90
YXRpb25Ob2RlKSkKLSAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSh0b0VsZW1lbnQobWFpbEJs
b2NrcXVvdGUpLCBjbGFzc0F0dHIpOworICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGRvd25j
YXN0PEVsZW1lbnQ+KG1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRyKTsKIAogICAgIGlmIChzaG91
bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkpCiAgICAgICAgIGFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFj
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4IDcwNzc2ZmM2
NTU0ZjU1ZGE1MDk1NThjZmJmOGIwZGYyNGQwM2I4ZmIuLmU5NWQ4NTQ2ZWMxZTA0MzUwODJiZjA4
OTA4NmQyYzZiMzc4YTNmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5j
cHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoUmFu
Z2UqIHJhbmdlKSBjb25zdAogICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5maXJzdE5vZGUoKSB8
fCAhcmFuZ2UtPmZpcnN0Tm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIGlm
IChub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhdG9FbGVtZW50KG5vZGUpLT5pc1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkg
JiYgIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuY3BwCmluZGV4IDcwZDViNTc0NTM0MzEyZDY3Zjc2NjQwNGEwYWVkZWRmMTBl
NzRiMGQuLjhmN2JkZjU4NDI4ZjJjNTVmNjc5OGMwNzY0NWE0ODdmNTg5YWIxZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghcGFyZW50
UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRlcmVyLT5pc0lubGluZSgpKSB7CiAgICAgICAgIHdyYXBD
b250ZW50c0luRHVtbXlTcGFuKHBhcmVudCk7CiAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBw
YXJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFmaXJzdENoaWxkIHx8ICFmaXJzdENo
aWxkLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghZmlyc3RDaGlsZCB8fCAhaXM8RWxl
bWVudD4oZmlyc3RDaGlsZCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhcmVudCA9
IHRvRWxlbWVudChmaXJzdENoaWxkKTsKKyAgICAgICAgcGFyZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oZmlyc3RDaGlsZCk7CiAgICAgfQogCiAgICAgc3BsaXRFbGVtZW50KHBhcmVudCwgbV90ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAyNTdmNGI0Mzll
NzU0ZDVjZmIyMzA1MzIwN2Q1OTJmMWM4MTg2MzY1Li5hNWQyODZjNWI0YThiYmNkYjU5NmYwODcx
MTZkODA5OWFlNmJjNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CkBAIC0yNTUsOCArMjU1LDggQEAgYm9vbCBpc1JlbmRlcmVyUmVwbGFjZWRFbGVtZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKHJlbmRlcmVyLT5pc0ltYWdlKCkgfHwgcmVuZGVy
ZXItPmlzV2lkZ2V0KCkgfHwgcmVuZGVyZXItPmlzTWVkaWEoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqcmVu
ZGVyZXItPm5vZGUoKSk7CisgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgaXM8RWxlbWVudD4o
cmVuZGVyZXItPm5vZGUoKSkpIHsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxMZWdlbmRFbGVtZW50PihlbGVtZW50KSB8
fCBpczxIVE1MTWV0ZXJFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MUHJvZ3Jlc3NFbGVtZW50
PihlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKSwgImltZyIpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IGQ0
OGRhMGU2NDlkZTk5NmU3OGMwM2JkMzc1OGZlNmI2ZmU4M2YwOTUuLmE3ZTBiNDc4NjcyOWRiYjZl
MjA5Y2ViZWFmMDJjNDYzODYxYTU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgIkZyYW1lTG9h
ZGVyLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lRWxlbWVu
dEJhc2UuaCIKKyNpbXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxNZXRhRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE5h
bWVzLmgiCkBAIC03MzgsMTQgKzczOSwxNCBAQCBzdGF0aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFs
dWUoQ1NTVmFsdWUmIHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIAogU3RyaW5nIEhUTUxDb252ZXJ0
ZXJDYWNoZXM6OnByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCkKIHsKLSAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZUZvck5vZGUoKnBh
cmVudCwgcHJvcGVydHlJZCk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAg
ICBib29sIGluaGVyaXQgPSBmYWxzZTsKLSAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50
KG5vZGUpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsK
ICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZv
ckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdDsK
ICAgICAgICAgaWYgKHN0cmluZ0Zyb21DU1NWYWx1ZSgqdmFsdWUsIHJlc3VsdCkpCkBAIC04ODMs
MTMgKzg4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdQogCiBib29sIEhUTUxDb252ZXJ0
ZXJDYWNoZXM6OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlkLCBmbG9hdCYgcmVzdWx0KQogewotICAgIGlmICghbm9kZS5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgIGlmIChD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKCpwYXJlbnQsIHByb3BlcnR5SWQsIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5
bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAgICAgICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1
ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTEwNTIsMTMgKzEwNTMsMTMgQEAgc3RhdGljIENvbG9yIG5vcm1hbGl6ZWRD
b2xvcihDb2xvciBjb2xvciwgYm9vbCBpZ25vcmVCbGFjaykKIAogQ29sb3IgSFRNTENvbnZlcnRl
ckNhY2hlczo6Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQpCiB7Ci0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkgeworICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5v
ZGUucGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlWYWx1ZUZv
ck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCk7CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAg
IH0KIAotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgRWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBw
cm9wZXJ0eUlkKSkgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0
b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQogICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuZ2V0
UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CkBAIC0xMzU2
LDExICsxMzU3LDExIEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YXR0cmlidXRlc0Zv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6
YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYgbm9kZSkKIHsK
ICAgICBOb2RlKiBhbmNlc3RvciA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChhbmNl
c3RvciAmJiAhYW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSkKKyAgICB3aGlsZSAoYW5jZXN0b3Ig
JiYgIWlzPEVsZW1lbnQ+KGFuY2VzdG9yKSkKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
cGFyZW50Tm9kZSgpOwogICAgIGlmICghYW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBhZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3Rv
cnMoKnRvRWxlbWVudChhbmNlc3RvcikpOworICAgIHJldHVybiBhZ2dyZWdhdGVkQXR0cmlidXRl
c0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoZG93bmNhc3Q8RWxlbWVudD4oKmFuY2VzdG9yKSk7
CiB9CiAKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNG
b3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMzczLDcgKzEz
NzQsNyBAQCBOU0RpY3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVz
Rm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycyhFbGVtZQogICAgIEFTU0VSVChhdHRyaWJ1dGVzRm9y
Q3VycmVudEVsZW1lbnQpOwogCiAgICAgTm9kZSogYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5v
ZGUoKTsKLSAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PihhbmNlc3RvcikpCiAgICAgICAg
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKIAogICAgIGlmICghYW5jZXN0b3Ip
IHsKQEAgLTEzODEsNyArMTM4Miw3IEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdn
cmVnYXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lCiAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7CiAgICAgfQogCi0gICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBhZG9wdE5T
KFthZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRvRWxlbWVu
dChhbmNlc3RvcikpIG11dGFibGVDb3B5XSk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBhZG9wdE5TKFthZ2dyZWdhdGVkQXR0cmli
dXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoZG93bmNhc3Q8RWxlbWVudD4oKmFuY2VzdG9y
KSkgbXV0YWJsZUNvcHldKTsKICAgICBbYXR0cmlidXRlc0ZvckFuY2VzdG9ycyBhZGRFbnRyaWVz
RnJvbURpY3Rpb25hcnk6YXR0cmlidXRlc0ZvckN1cnJlbnRFbGVtZW50XTsKICAgICBtX2FnZ3Jl
Z2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudHMuc2V0KCZlbGVtZW50LCBhdHRyaWJ1dGVzRm9yQW5j
ZXN0b3JzKTsKIApAQCAtMjM5NCw4ICsyMzk1LDggQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfdHJh
dmVyc2VOb2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVkKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICAgICAgaWYgKF9lbnRlckVsZW1lbnQoZWxlbWVudCwg
ZW1iZWRkZWQpKSB7CiAgICAgICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJT
dHIgbGVuZ3RoXTsKICAgICAgICAgICAgIGlmIChfcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZGVw
dGgpKSB7CkBAIC0yNTcwLDggKzI1NzEsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgCiAgICAgICAg
IGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVu
ZE9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXIt
PnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChub2RlICYm
IG5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBw
ZXIqIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JFbGVtZW50KHRvRWxlbWVudChub2RlKSk7
CisgICAgICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkgewor
ICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJG
b3JFbGVtZW50KGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKTsKICAgICAgICAgICAg
ICAgICBOU1RleHRBdHRhY2htZW50KiBhdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFs
bG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsKICAgICAgICAgICAgICAgICBb
c3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1
dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF1dOwogICAgICAgICAgICAgICAgIFth
dHRhY2htZW50IHJlbGVhc2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApp
bmRleCBkMTBiMTFiMjNmMzYzY2E5NjE4YzBlNWUyZDdmZGVhM2NlM2EzMTM1Li5lYmY1YjVjYjFl
ODIwZWM3MzRjODhhY2U4YWQ3YzdhMWVmOTJiZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIEVsZW1lbnQqIHVuc3BsaXR0YWJsZUVs
ZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKIHsKICAgICAvLyBTaW5jZSBlbmNs
b3NpbmdOb2RlT2ZUeXBlIHdvbid0IHNlYXJjaCBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm9vdCBlZGl0
YWJsZSBub2RlLAogICAgIC8vIHRoaXMgY29kZSB3b3JrcyBldmVuIGlmIHRoZSBjbG9zZXN0IHRh
YmxlIGNlbGwgd2FzIG91dHNpZGUgb2YgdGhlIHJvb3QgZWRpdGFibGUgbm9kZS4KLSAgICBFbGVt
ZW50KiBlbmNsb3NpbmdDZWxsID0gdG9FbGVtZW50KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlz
VGFibGVDZWxsKSk7CisgICAgRWxlbWVudCogZW5jbG9zaW5nQ2VsbCA9IGRvd25jYXN0PEVsZW1l
bnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlzVGFibGVDZWxsKSk7CiAgICAgaWYgKGVuY2xv
c2luZ0NlbGwpCiAgICAgICAgIHJldHVybiBlbmNsb3NpbmdDZWxsOwogCkBAIC0zMTYsNyArMzE2
LDcgQEAgYm9vbCBpc0lubGluZShjb25zdCBOb2RlKiBub2RlKQogRWxlbWVudCogZW5jbG9zaW5n
QmxvY2soTm9kZSogbm9kZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpCiB7CiAg
ICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKG5vZGUpLCBpc0Jsb2NrLCBydWxlKTsKLSAgICByZXR1cm4gZW5jbG9z
aW5nTm9kZSAmJiBlbmNsb3NpbmdOb2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQoZW5j
bG9zaW5nTm9kZSkgOiAwOworICAgIHJldHVybiBlbmNsb3NpbmdOb2RlICYmIGlzPEVsZW1lbnQ+
KGVuY2xvc2luZ05vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxs
cHRyOwogfQogCiBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNTUwLDEwICs1NTAsMTAgQEAgRWxlbWVudCogZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBRdWFsaWZp
ZWROYW1lJgogICAgIGZvciAoTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3QgJiYg
IW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihu
b2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAodG9FbGVtZW50KCpub2Rl
KS5oYXNUYWdOYW1lKHRhZ05hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2Rl
KTsKKyAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5oYXNUYWdOYW1lKHRhZ05h
bWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgICAg
ICBpZiAobm9kZSA9PSByb290KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpA
QCAtNjI5LDcgKzYyOSw3IEBAIE5vZGUqIGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcoTm9k
ZSogbm9kZSkKIAogTm9kZSogZW5jbG9zaW5nVGFibGVDZWxsKGNvbnN0IFBvc2l0aW9uJiBwKQog
ewotICAgIHJldHVybiB0b0VsZW1lbnQoZW5jbG9zaW5nTm9kZU9mVHlwZShwLCBpc1RhYmxlQ2Vs
bCkpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlT2ZUeXBlKHAs
IGlzVGFibGVDZWxsKSk7CiB9CiAKIEVsZW1lbnQqIGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoY29u
c3QgUG9zaXRpb24mIHApCkBAIC02MzgsOCArNjM4LDggQEAgRWxlbWVudCogZW5jbG9zaW5nQW5j
aG9yRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiBub2RlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBub2RlLT5pc0xpbmsoKSkKKyAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkBAIC0xMTg0LDExICsxMTg0LDExIEBAIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5s
aW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSogbm9kZSkKIAogYm9vbCBhcmVJZGVudGljYWxF
bGVtZW50cyhjb25zdCBOb2RlKiBmaXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQogewotICAgIGlm
ICghZmlyc3QtPmlzRWxlbWVudE5vZGUoKSB8fCAhc2Vjb25kLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgaWYgKCFpczxFbGVtZW50PihmaXJzdCkgfHwgIWlzPEVsZW1lbnQ+KHNlY29uZCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IHRv
RWxlbWVudChmaXJzdCk7Ci0gICAgY29uc3QgRWxlbWVudCogc2Vjb25kRWxlbWVudCA9IHRvRWxl
bWVudChzZWNvbmQpOworICAgIGNvbnN0IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGZpcnN0KTsKKyAgICBjb25zdCBFbGVtZW50KiBzZWNvbmRFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKICAgICBpZiAoIWZpcnN0RWxlbWVudC0+aGFzVGFnTmFt
ZShzZWNvbmRFbGVtZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMTk3LDIxICsxMTk3LDE3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9k
ZSogZmlyc3QsIGNvbnN0IE5vZGUqIHNlY29uZCkKIAogYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxC
bG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShs
aXN0aW5nVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKQotICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHByZVRhZykKLSAgICAgICAgfHwgaXM8SFRNTFRhYmxl
RWxlbWVudD4oZWxlbWVudCkKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykK
LSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh4bXBUYWcpCi0gICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoaDFUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaDJU
YWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaDNUYWcpCi0gICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaDRUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
aDVUYWcpOworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcpCisgICAgICAg
IHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUo
cHJlVGFnKQorICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKQorICAgICAgICB8
fCBub2RlLT5oYXNUYWdOYW1lKHVsVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHht
cFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoMVRhZykKKyAgICAgICAgfHwgbm9k
ZS0+aGFzVGFnTmFtZShoMlRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoM1RhZykK
KyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoNFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFz
VGFnTmFtZShoNVRhZyk7CiB9CiAKIFBvc2l0aW9uIGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JT
dHlsZUNvbXB1dGF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTEy
NTEsMTQgKzEyNDcsMTQgQEAgYm9vbCBpc0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgTm9kZSogbm9k
ZSkKIEVsZW1lbnQqIGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0
dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpOwogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAg
aWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgaWYgKGlzQmxv
Y2tGbG93RWxlbWVudChub2RlKSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KG5vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNhcmV0UmVu
ZGVyc0luc2lkZU5vZGUoTm9kZSogbm9kZSkKQEAgLTEyNjksMTEgKzEyNjUsMTEgQEAgc3RhdGlj
IGlubGluZSBib29sIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSogbm9kZSkKIFJlbmRlck9i
amVjdCogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAv
LyBJZiBjYXJldE5vZGUgaXMgYSBibG9jayBhbmQgY2FyZXQgaXMgaW5zaWRlIGl0LCB0aGVuIGNh
cmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRoYXQgYmxvY2suCiAgICAgYm9vbCBwYWludGVkQnlC
bG9jayA9IHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpICYmIGNhcmV0UmVuZGVyc0luc2lk
ZU5vZGUobm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZDkxMDAyZDI5OGQ2
MTdmMmZmNWVkOTU0ZjA1MjhiMWMyNGNjNGZmMS4uMWI5MGJlMjU3MDBiMjcxNzU5OTg3OTYxNDZi
ZjA5NThjNGQwYmE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTgxLDEwICsx
ODEsMTAgQEAgaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUEKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OndyYXBXaXRoTm9kZShOb2RlJiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7CiAgICAg
U3RyaW5nQnVpbGRlciBtYXJrdXA7Ci0gICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQotICAg
ICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzICYmIGlzQmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgYXBwZW5kRWxlbWVudChtYXJrdXAsIGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2so
Jm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXBwZW5k
U3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKKyAgICAgICAgYXBwZW5kU3RhcnRNYXJrdXAo
bWFya3VwLCBub2RlLCBudWxscHRyKTsKICAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFw
cGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5vZGUpOwogICAgIGlm
IChtX25vZGVzKQpAQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3Vw
SW50ZXJuYWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0CiAg
ICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAg
ICBhdXRvKiBib2R5ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9k
ZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwotICAgIE5vZGUqIGZ1bGx5U2VsZWN0ZWRSb290
ID0gMDsKKyAgICBFbGVtZW50KiBmdWxseVNlbGVjdGVkUm9vdCA9IG51bGxwdHI7CiAgICAgLy8g
RklYTUU6IERvIHRoaXMgZm9yIGFsbCBmdWxseSBzZWxlY3RlZCBibG9ja3MsIG5vdCBqdXN0IHRo
ZSBib2R5LgogICAgIGlmIChib2R5ICYmIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5O
b2RlKGJvZHkpKSA9PSBWaXNpYmxlUG9zaXRpb24ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKQogICAg
ICAgICAmJiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKGJvZHkpKSA9PSBWaXNp
YmxlUG9zaXRpb24ocmFuZ2UuZW5kUG9zaXRpb24oKSkpCkBAIC02MDgsOCArNjA4LDggQEAgc3Rh
dGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRlcm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFJhbmdlJiByYW5nZSwgY29uc3QKICAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgYmFja2dy
b3VuZCBhdHRyaWJ1dGUgb3ZlciwgYnV0IG5vdCBhcyBhbiBhdHRyaWJ1dGUgYmVjYXVzZSBhIGJh
Y2tncm91bmQgYXR0cmlidXRlIG9uIGEgZGl2CiAgICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0
byBoYXZlIG5vIGVmZmVjdC4KICAgICAgICAgICAgICAgICBpZiAoKCFmdWxseVNlbGVjdGVkUm9v
dFN0eWxlIHx8ICFmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpIHx8ICFmdWxseVNlbGVj
dGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFj
a2dyb3VuZEltYWdlKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgdG9FbGVtZW50KGZ1bGx5U2Vs
ZWN0ZWRSb290KS0+aGFzQXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSkKLSAgICAgICAgICAgICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsICJ1cmwoJyIgKyB0b0VsZW1lbnQoZnVsbHlTZWxlY3RlZFJv
b3QpLT5nZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpICsgIicpIik7CisgICAgICAgICAgICAg
ICAgICAgICYmIGZ1bGx5U2VsZWN0ZWRSb290LT5oYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIp
KQorICAgICAgICAgICAgICAgICAgICBmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgInVybCgnIiArIGZ1bGx5U2Vs
ZWN0ZWRSb290LT5nZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpICsgIicpIik7CiAKICAgICAg
ICAgICAgICAgICBpZiAoZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYXZvaWQgYW4gYXNz
ZXJ0aW9uIGVycm9yIGluIGFkZFN0eWxlTWFya3VwKCkuCkBAIC04MDQsNyArODA0LDcgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBj
b250ZXh0LCBjb25zdCBTdHJpbmcKIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFw
aHMuIEV4dHJhIGxpbmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgogICAgIE5v
ZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOwotICAg
IEVsZW1lbnQqIGJsb2NrID0gdG9FbGVtZW50KGJsb2NrTm9kZSk7CisgICAgRWxlbWVudCogYmxv
Y2sgPSBkb3duY2FzdDxFbGVtZW50PihibG9ja05vZGUpOwogICAgIGJvb2wgdXNlQ2xvbmVzT2ZF
bmNsb3NpbmdCbG9jayA9IGJsb2NrTm9kZQogICAgICAgICAmJiBibG9ja05vZGUtPmlzRWxlbWVu
dE5vZGUoKQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoYm9keVRhZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcAppbmRleCAyM2QyMTkzOTgwYmNlNmQ1
OTViMzRiYTlmNjYwNDQ5NTE2Nzc2NTM4Li4yNmZhMTRhZDY3NTM0MDQ5ODM1ZGU2OTM0ZTcxZjBj
OWEzNGJiNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3Bw
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBmYWxsYmFja1N1bW1hcnko
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPmhh
c1RhZ05hbWUoc3VtbWFyeVRhZykpOwotICAgICAgICByZXR1cm4gdG9FbGVtZW50KGZpcnN0Q2hp
bGQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihmaXJzdENoaWxkKCkpOwog
ICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYmNk
MjY3ZGNhNjZlMTFiNmI0ODIyMDI2NDM1Njc4MjZhM2I1ZDE3MS4uOWFjNDEzZjAxMDc1ZDM2OGVk
NGRlNThkZTI2N2JkYmIzMzA1Y2MxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
QEAgLTY0Miw4ICs2NDIsOCBAQCBFbGVtZW50KiBIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRF
bGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQqIG5ld0NoaQogICAgIH0KIAogICAg
IE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0NoaWxkLCBlYyk7
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZhbHVlIHx8IHJl
dHVyblZhbHVlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIHJldHVybiB0b0VsZW1lbnQocmV0dXJu
VmFsdWUpOyAKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcmV0dXJuVmFs
dWUgfHwgaXM8RWxlbWVudD4ocmV0dXJuVmFsdWUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4ocmV0dXJuVmFsdWUpOyAKIH0KIAogLy8gU3RlcCAzIG9mIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2FwaXMtaW4taHRtbC1k
b2N1bWVudHMuaHRtbCNpbnNlcnRhZGphY2VudGh0bWwoKQpAQCAtNjUxLDEyICs2NTEsMTIgQEAg
c3RhdGljIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKGNvbnN0IFN0cmluZyYg
d2hlcmUsIEVsZW1lbnQqIGVsZW1lbnQKIHsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uod2hl
cmUsICJiZWZvcmVCZWdpbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYWZ0ZXJFbmQi
KSkgewogICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChwYXJlbnQgJiYgIWlzPEVsZW1lbnQ+KHBhcmVudCkpIHsKICAgICAgICAgICAg
IGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXBhcmVudCB8fCBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgICAgIHJldHVybiB0
b0VsZW1lbnQocGFyZW50KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXBhcmVudCB8fCBpczxFbGVtZW50PihwYXJlbnQpKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KHBhcmVudCk7CiAgICAgfQogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3
aGVyZSwgImFmdGVyQmVnaW4iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImJlZm9yZUVu
ZCIpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKQEAgLTkzNCwxNCArOTM0LDE0IEBAIFRleHRE
aXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rp
b25hbGl0eVRleHROb2RlKSBjCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgLy8gU2tpcCBi
ZGksIHNjcmlwdCwgc3R5bGUgYW5kIHRleHQgZm9ybSBjb250cm9scy4KICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5vZGUtPm5vZGVOYW1lKCksICJiZGkiKSB8fCBub2RlLT5oYXNUYWdO
YW1lKHNjcmlwdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykgCi0gICAgICAgICAg
ICB8fCAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNUZXh0Rm9y
bUNvbnRyb2woKSkpIHsKKyAgICAgICAgICAgIHx8IChpczxFbGVtZW50Pihub2RlKSAmJiBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuaXNUZXh0Rm9ybUNvbnRyb2woKSkpIHsKICAgICAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU2tpcCBlbGVt
ZW50cyB3aXRoIHZhbGlkIGRpciBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGRpckF0dHJpYnV0ZVZhbHVlID0g
dG9FbGVtZW50KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIpOworICAgICAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJBdHRyaWJ1
dGVWYWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGRpckF0
dHIpOwogICAgICAgICAgICAgaWYgKGlzTFRST3JSVExJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRl
VmFsdWUpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAiYXV0byIpKSB7
CiAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKG5vZGUsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCBkOTIwODNhMDY3NmE1YThl
ZTk1ZDc2ZjAxN2Q0NTJkNTA4ZDRlNDBjLi5jMjI0ZTZlZGJkN2RlOTgzNzRmM2M3ZGJkOWExZjcw
MTAwMGRjNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaApAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oSFRNTEZvcm1Db250cm9sRWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVu
dC5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0
dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzRm9ybUNv
bnRyb2xFbGVtZW50KCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQoY29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50JiBlbGVtZW50KSB7IHJldHVybiBlbGVtZW50
LmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBkMzdhMTQxMGZjZDk2
YzA3N2ZhMzQ2OTBhMGE1MjA4YzBmZDVlZmI4Li4yN2ZjZGQyZTc0YzhlNjBkMmVkMzBiM2YyZDZj
MzQ4MzNmMTVhODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
OTExLDcgKzkxMSw3IEBAIHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFRleHRUcmFja0N1ZSo+IHsKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihIVE1MTWVkaWFFbGVtZW50KQogICAgIHN0YXRp
YyBib29sIGlzSFRNTE1lZGlhRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJldHVy
biBlbGVtZW50LmlzTWVkaWFFbGVtZW50KCk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0hUTUxNZWRp
YUVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkg
JiYgaXNIVE1MTWVkaWFFbGVtZW50KHRvRWxlbWVudChub2RlKSk7IH0KKyAgICBzdGF0aWMgYm9v
bCBpc0hUTUxNZWRpYUVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gaXM8RWxlbWVu
dD4obm9kZSkgJiYgaXNIVE1MTWVkaWFFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsg
fQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA4ZGE5NDNmMTQxOGY1MjFh
ZDRlZWM5NGM1MWU0MzNmM2RiYTkyY2U3Li4xNDkzOGZhZDBjNGM3NjZlZGJmNzViZjgzMjA3YTkx
N2RhMjRiMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApA
QCAtNDIzLDEwICs0MjMsMTAgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFt
ZWRJdGVtKCkKICAgICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKICAgICBOb2RlKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1lZEl0ZW0pIHsKLSAgICAg
ICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0VsZW1lbnQoY2hpbGQpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4oY2hpbGQp
KSB7CisgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNo
aWxkKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2Ugb2YgaXNSZWNvZ25pemVkVGFnTmFtZSBp
cyBhbG1vc3QgY2VydGFpbmx5IHdyb25nIGhlcmUuCi0gICAgICAgICAgICBpZiAoaXNSZWNvZ25p
emVkVGFnTmFtZShlbGVtZW50LT50YWdRTmFtZSgpKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShw
YXJhbVRhZykpCisgICAgICAgICAgICBpZiAoaXNSZWNvZ25pemVkVGFnTmFtZShlbGVtZW50LnRh
Z1FOYW1lKCkpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUocGFyYW1UYWcpKQogICAgICAgICAgICAg
ICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oY2hp
bGQpKSB7CiAgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFRleHQ+KCpjaGlsZCkuY29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAppbmRleCA0Zjc1OTE2MzI0ZDlhNTI4MGVlMzE1NmQyMWZlMTg3ODg4MTEyMGM3Li43NzEzNTg5
Y2Y4MGUwZTMyOGU3NGEzNDBjMThkZTEwMmU3MjlkZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcApAQCAtMzM4LDEwICszMzgsMTAgQEAgU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCkgY29uc3QKIHsKICAgICBTdHJp
bmdCdWlsZGVyIHRleHQ7CiAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2Rl
OyApIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgaWYgKGlzPFRl
eHQ+KG5vZGUpKQogICAgICAgICAgICAgdGV4dC5hcHBlbmQobm9kZS0+bm9kZVZhbHVlKCkpOwog
ICAgICAgICAvLyBUZXh0IG5vZGVzIGluc2lkZSBzY3JpcHQgZWxlbWVudHMgYXJlIG5vdCBwYXJ0
IG9mIHRoZSBvcHRpb24gdGV4dC4KLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHRvRWxlbWVudChub2RlKSkpCisgICAgICAgIGlm
IChpczxFbGVtZW50Pihub2RlKSAmJiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmluZGV4IDhkYWYzNDBkZDA5MDRmZWNlZTlkMDI0ZTFj
OTM4ZTQ5YzQ1YTI3YjcuLjljZTllNWNhMDQ4MDMzZmNkMmQ1YTQ1OWEwZjU2MWM5YzAwMzA0MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC02Myw4ICs2
Myw4IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNvdXJjZUVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlCiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByZW1vdmFsUm9vdCkKIHsKICAgICBFbGVtZW50KiBw
YXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFwYXJlbnQgJiYgcmVtb3ZhbFJvb3Qu
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBwYXJlbnQgPSAmdG9FbGVtZW50KHJlbW92YWxSb290
KTsKKyAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50PihyZW1vdmFsUm9vdCkpCisgICAgICAg
IHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihyZW1vdmFsUm9vdCk7CiAgICAgaWYgKHBhcmVu
dCAmJiBpczxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxIVE1M
TWVkaWFFbGVtZW50PigqcGFyZW50KS5zb3VyY2VXYXNSZW1vdmVkKHRoaXMpOwogICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsUm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggNDRiNGRmZDQ5OTdiYjI2ZGY3YmUyNTQ5NDdhN2Ix
NTY1ZjY5NzlhMy4uZWM2YzNhMjBmZjk5YmEyYzk0MTQ5MzNlYmQ2YThhOTA4YzNhNjg0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTAyLDEyICsx
MDIsMTIgQEAgYm9vbCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmlzTWFpblN1bW1hcnkoKSBjb25zdAog
CiBzdGF0aWMgYm9vbCBpc0NsaWNrYWJsZUNvbnRyb2woTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2Rl
KTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
IGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgRWxlbWVudCogaG9zdCA9IGVsZW1lbnQtPnNoYWRvd0hvc3QoKTsKKyAgICBF
bGVtZW50KiBob3N0ID0gZWxlbWVudC5zaGFkb3dIb3N0KCk7CiAgICAgcmV0dXJuIGhvc3QgJiYg
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oaG9zdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAzMzM3ZmQ5Mzc0M2Nj
OTVmNWFhOWMzNWEyMWZkYWY1MjZlNTY1Yjc2Li45ZGM3ZDkyNmJiMWNiNmMzMzExY2FjZWMxNjJi
ZDQ5NDczYmI1ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5oCkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCkKICAgICBzdGF0
aWMgYm9vbCBpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpIHsgcmV0dXJuIGVsZW1lbnQuaXNUZXh0Rm9ybUNvbnRyb2woKTsgfQotICAgIHN0YXRpYyBi
b29sIGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1
cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCh0
b0VsZW1lbnQobm9kZSkpOyB9CisgICAgc3RhdGljIGJvb2wgaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBp
c0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsgfQog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCogZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnN0IFBvc2l0aW9uJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXgg
YTlmMGY4ZDM3MTYyNjA5YTVjMTAyYmFhNTc3OGNiMjY1MjRiNDI3Yy4uZDc0YzE0NTQ5NzBlNTM2
ZjcwNzI2YjFiZjVlOTUzZTk0OGM3MGE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRh
c2spCiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKENvbnRhaW5lck5v
ZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCwgYm9vbCBzZWxmQ2xvc2luZykK
IHsKLSAgICBBU1NFUlQoc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQ
b2xpY3kpIHx8ICFwcnBDaGlsZC5nZXQoKS0+aXNFbGVtZW50Tm9kZSgpIHx8ICF0b1NjcmlwdEVs
ZW1lbnRJZlBvc3NpYmxlKHRvRWxlbWVudChwcnBDaGlsZC5nZXQoKSkpKTsKKyAgICBBU1NFUlQo
c2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICFpczxF
bGVtZW50PihwcnBDaGlsZC5nZXQoKSkgfHwgIXRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93
bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpKSk7CiAgICAgQVNTRVJUKHBsdWdpbkNvbnRl
bnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhcHJwQ2hpbGQtPmlzUGx1Z2lu
RWxlbWVudCgpKTsKIAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhUTUxDb25z
dHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKaW5kZXggY2Q2YTIwMTBmZDE3ZTY0MDVkOGIzYjBkNDI1
NzM4MGIwOTk0OWNiNi4uOTE5YWMwZTNhMjUyNThlYzlkZDA1OTk2MTA1NjUxZjM4OTlhZGRhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAK
QEAgLTU0MSw3ICs1NDEsNyBAQCBib29sIEhUTUxFbGVtZW50U3RhY2s6Omhhc1RlbXBsYXRlSW5I
VE1MU2NvcGUoKSBjb25zdAogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQo
KSBjb25zdAogewogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICByZXR1cm4gdG9FbGVtZW50
KG1fcm9vdE5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihtX3Jvb3ROb2RlKTsK
IH0KIAogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aGVhZEVsZW1lbnQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCmluZGV4IDk1M2E2Nzk2MDll
M2MzNzVhN2NlYjk4ZGNjZGIzM2QzNmZkN2NjYjkuLjM3MDEzNTRmYzgxY2Q1MDAxNjFmNmVmOGVm
NDRhMGRhOTBjNTExOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTdGFja0l0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJ
dGVtLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxTdGFja0l0ZW0obm9kZSwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOwogICAgIH0KIAot
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobV9ub2RlLmdl
dCgpKTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihtX25vZGUuZ2V0KCkpOyB9CiAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogCiAgICAgYm9vbCBpc0RvY3VtZW50RnJhZ21lbnRO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RvY3VtZW50RnJhZ21lbnROb2RlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAppbmRleCA2ZThiN2NjMWM1YWRl
ZjNkMmZkYzk4ODJiZmUyNDNlNjdjYTFhOTI1Li45ZjA0MjY0ZTE0YjQ3MTI2NWE0MjgwYjcwZDJk
ZWU3MWI3NjQyMDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNl
cnRpb25Qb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBv
aW50LmgKQEAgLTEwMCwxMSArMTAwLDExIEBAIGlubGluZSBOb2RlKiBwYXJlbnROb2RlRm9yRGlz
dHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiBpbmxpbmUgRWxlbWVudCogcGFyZW50RWxlbWVu
dEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmIChOb2RlKiBwYXJl
bnQgPSBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKG5vZGUpKSB7Ci0gICAgICAgIGlmIChwYXJl
bnQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50
KTsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHBhcmVudCkpCisgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogaW5saW5lIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVu
dEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQpAQCAtMTEzLDcgKzExMyw3IEBAIGlu
bGluZSBTaGFkb3dSb290KiBzaGFkb3dSb290T2ZQYXJlbnRGb3JEaXN0cmlidXRpb24oY29uc3Qg
Tm9kZSogbm9kZSkKICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudEZvckRp
c3RyaWJ1dGlvbihub2RlKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+c2hhZG93Um9vdCgpOwog
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEluc2VydGlvblBvaW50
KiBmaW5kSW5zZXJ0aW9uUG9pbnRPZihjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggZDQyZDVhNDc5
NThjN2FmYmI0ZTlmZTJjMGM0NjU5ZjA0ZmEzMDMzYy4uZDVhNDU2YmE5ODMyY2Y5YWQ5OWRlMzlj
MGMwYWQ0NzBiNDgwMjc5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgTWVkaWFD
b250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVuCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIE5vZGUqIHRhcmdldCA9
IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Ci0gICAgICAgIGlmICghdGFyZ2V0IHx8ICF0YXJn
ZXQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCF0YXJnZXQgfHwgIWlzPEVsZW1lbnQ+
KHRhcmdldCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gV2hlbiB3ZSBjcmVh
dGVkIHRoZSBlbGVtZW50cyBpbiB0aGUgdHJhY2sgbGlzdCwgd2UgZ2F2ZSB0aGVtIGEgY3VzdG9t
CkBAIC02OTgsNyArNjk4LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNr
TGlzdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW4KICAgICAgICAgLy8g
dGVsbCB0aGUgSFRNTE1lZGlhRWxlbWVudCB0byBlbmFibGUgdGhhdCB0cmFjay4KIAogICAgICAg
ICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVtVG9UcmFja01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0b0VsZW1lbnQodGFyZ2V0
KSk7CisgICAgICAgIE1lbnVJdGVtVG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRv
VHJhY2tNYXAuZmluZChkb3duY2FzdDxFbGVtZW50Pih0YXJnZXQpKTsKICAgICAgICAgaWYgKGl0
ZXIgIT0gbV9tZW51VG9UcmFja01hcC5lbmQoKSkKICAgICAgICAgICAgIHRleHRUcmFjayA9IGl0
ZXItPnZhbHVlOwogICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggNTljZjZlOTUzNWU0MTgzYWUzZGE0MDY3YzM3N2M5
ODY5MTZjNjNiZi4uM2RiMGJmYzhjNzdlNmJlNzNmZTc1NDBkMDNiZDVhYmY4YTZjN2ZiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcApAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQg
VlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKENvbnRhaW5lck5vZGUqIHJvb3QsIGNvbnN0
IE1lZGlhVGltZSYgcHJldmlvCiAgICAgICAgICAgICBkb3duY2FzdDxXZWJWVFRFbGVtZW50Pigq
Y2hpbGQpLnNldElzUGFzdE5vZGUoaXNQYXN0Tm9kZSk7CiAgICAgICAgICAgICAvLyBNYWtlIGFu
IGVsZW1lbmV0IGlkIG1hdGNoIGEgY3VlIGlkIGZvciBzdHlsZSBtYXRjaGluZyBwdXJwb3Nlcy4K
ICAgICAgICAgICAgIGlmICghaWQoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9FbGVt
ZW50KGNoaWxkKS0+c2V0SWRBdHRyaWJ1dGUoaWQoKSk7CisgICAgICAgICAgICAgICAgZG93bmNh
c3Q8V2ViVlRURWxlbWVudD4oKmNoaWxkKS5zZXRJZEF0dHJpYnV0ZShpZCgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAKaW5kZXggNjcyZTViZTZkZGRjYjllYTE2OTZhMTU5ODBkZmRmZGZhOGE4MDExZi4uMDNkM2Mw
NmJiNWIwYTE0YmIyZmQ3NmUwM2E4NzlmZWNhNTE0Y2UyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKQEAgLTE4MSw4ICsxODEsOCBAQCBib29sIERP
TVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaE5vZGUoRGlnZXN0KiBvbGREaWdlc3QsIERpZ2VzdCog
bmV3RGlnZXN0LCBFeGNlcAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFBhdGNoIGF0
dHJpYnV0ZXMKLSAgICBFbGVtZW50KiBvbGRFbGVtZW50ID0gdG9FbGVtZW50KG9sZE5vZGUpOwot
ICAgIEVsZW1lbnQqIG5ld0VsZW1lbnQgPSB0b0VsZW1lbnQobmV3Tm9kZSk7CisgICAgRWxlbWVu
dCogb2xkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG9sZE5vZGUpOworICAgIEVsZW1lbnQq
IG5ld0VsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihuZXdOb2RlKTsKICAgICBpZiAob2xkRGln
ZXN0LT5tX2F0dHJzU0hBMSAhPSBuZXdEaWdlc3QtPm1fYXR0cnNTSEExKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBDcmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVtZW50IGZvciByZW1vdmluZyBhbGwgcHJv
cGVydGllcy4gVGFrZSBpbiBhY2NvdW50IHdoZXRoZXIgZGlkL3dpbGxNb2RpZnlBdHRyaWJ1dGUg
YXJlIGltcG9ydGFudC4KICAgICAgICAgaWYgKG9sZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXNXaXRo
b3V0VXBkYXRlKCkpIHsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0
Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUqIG5v
ZAogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGRpZ2VzdC0+bV9jaGlsZHJlbi5hcHBlbmQoV1RGOjptb3ZlKGNoaWxkSW5mbykpOwogICAgICAg
ICB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIAogICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAg
U0hBMSBhdHRyc1NIQTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAppbmRleCA2OTFmYjA0Y2ZkZmE0NGFhNTVkN2FlNWExYTA3MDk2M2VhM2NhNWY2
Li5lYzNhMTBlZDRjNjVjYzcwOTc1Y2RkMTA2OWEyNTZjNTNjY2U1OGU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTg5NiwxMSArODk2
LDExIEBAIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8g
bm9kZSB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm90IGFuIGVsZW1lbnQgbm9kZSI7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gdG9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAogaW50IEluc3Bl
Y3RvckNTU0FnZW50Ojpkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZChEb2N1bWVudCog
ZG9jdW1lbnQpCkBAIC0xMTA4LDcgKzExMDgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpb25MaXN0LT5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0
IHJlZ2lvbk92ZXJzZXQ7CiAKLSAgICAgICAgc3dpdGNoICh0b0VsZW1lbnQocmVnaW9uTGlzdC0+
aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93bmNh
c3Q8RWxlbWVudD4ocmVnaW9uTGlzdC0+aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7
CiAgICAgICAgIGNhc2UgUmVnaW9uRml0OgogICAgICAgICAgICAgcmVnaW9uT3ZlcnNldCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0OjpGaXQ7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50Kj4gZG9jdW1l
bnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRv
ciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBtX25vZGVJ
ZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQt
PmtleSkpKQorICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+a2V5KSkpCiAgICAgICAgICAgICBkb2N1bWVudHNU
b0NoYW5nZS5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggY2YyZjc0NTM5NmMy
YThmYWRjZjljNzQ0ZjNkYjlhMzU1MWNmYzliMC4uMGY4MjMyNjc2Zjg3NTBlZTMxZTg5OGE1NTU3
MGUwNGFhYTUzZjMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCkBAIC0zNDMsOCArMzQzLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICAgICAgICAgIHVu
YmluZChjb250ZW50RG9jdW1lbnQsIG5vZGVzTWFwKTsKICAgICB9CiAKLSAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9FbGVt
ZW50KG5vZGUpLT5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnNo
YWRvd1Jvb3QoKSkKICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rlc01hcCk7CiAgICAgfQog
CkBAIC0zOTEsMTEgKzM5MSwxMSBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgTm9kZSog
bm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkg
eworICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0g
Ik5vZGUgaXMgbm90IGFuIEVsZW1lbnQiOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5v
ZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpAQCAtNjc1LDcgKzY3NSw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSB0b0VsZW1lbnQoY2hpbGQpOworICAgIEVsZW1lbnQq
IGNoaWxkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKTsKICAgICBpZiAoIWNoaWxk
RWxlbWVudC0+aGFzQXR0cmlidXRlcygpICYmIG5hbWUpIHsKICAgICAgICAgbV9kb21FZGl0b3It
PnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCAqbmFtZSwgZXJyb3JTdHJpbmcpOwogICAgICAgICBy
ZXR1cm47CkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9k
ZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdAogICAgICpu
ZXdJZCA9IDA7CiAKICAgICBOb2RlKiBvbGROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAg
aWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFvbGRO
b2RlIHx8ICFpczxFbGVtZW50PihvbGROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5v
ZGUncyBhdHRyaWJ1dGVzLgotICAgIG5ld0VsZW0tPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50
KCp0b0VsZW1lbnQob2xkTm9kZSkpOworICAgIG5ld0VsZW0tPmNsb25lQXR0cmlidXRlc0Zyb21F
bGVtZW50KCpkb3duY2FzdDxFbGVtZW50PihvbGROb2RlKSk7CiAKICAgICAvLyBDb3B5IG92ZXIg
dGhlIG9yaWdpbmFsIG5vZGUncyBjaGlsZHJlbi4KICAgICBOb2RlKiBjaGlsZDsKQEAgLTEyNzcs
MTEgKzEyNzcsMTEgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVl
LT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGlmIChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVu
dChub2RlKTsKLSAgICAgICAgdmFsdWUtPnNldEF0dHJpYnV0ZXMoYnVpbGRBcnJheUZvckVsZW1l
bnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKLSAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVyRWxl
bWVudD4obm9kZSkpIHsKLSAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVP
d25lciA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKm5vZGUpOworICAgIGlmIChp
czxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOworICAgICAgICB2YWx1ZS0+c2V0QXR0cmlidXRlcyhidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoJmVsZW1lbnQpKTsKKyAgICAgICAgaWYgKGlzPEhUTUxGcmFt
ZU93bmVyRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCYgZnJhbWVPd25lciA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oZWxlbWVu
dCk7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZU93bmVyLmNvbnRlbnRGcmFtZSgp
OwogICAgICAgICAgICAgaWYgKGZyYW1lKQogICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRGcmFt
ZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSk7CkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZQogICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRDb250ZW50
RG9jdW1lbnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvY3VtZW50LCAwLCBub2Rlc01hcCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT5zaGFkb3dS
b290KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LnNoYWRvd1Jv
b3QoKSkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IHNoYWRvd1Jvb3RzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUocm9v
dCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhzaGFk
b3dSb290cyk7CkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZQog
CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChpczxIVE1MVGVtcGxh
dGVFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRl
bnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCplbGVt
ZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0VGVt
cGxhdGVDb250ZW50KGJ1aWxkT2JqZWN0Rm9yTm9kZShkb3duY2FzdDxIVE1MVGVtcGxhdGVFbGVt
ZW50PihlbGVtZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CiAjZW5kaWYKIAogICAgIH0g
ZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KG5vZGUpKSB7CkBAIC0xNTMwLDggKzE1MzAsOCBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+
IEluc3BlY3RvckRPTUFnZW50OgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAg
ICAgICAgICAgICAgIHN1cHBvcnRzRm9jdXNlZCA9IHRvRWxlbWVudChub2RlKS0+aXNGb2N1c2Fi
bGUoKTsKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAg
ICAgIHN1cHBvcnRzRm9jdXNlZCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc0ZvY3VzYWJs
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICAg
ICAgICAgIGZvY3VzZWQgPSBheE9iamVjdC0+aXNGb2N1c2VkKCk7CiAgICAgICAgICAgICB9CkBA
IC0xODkyLDcgKzE4OTIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRl
U3R5bGVBdHRyKE5vZGUqIG5vZGUpCiAKICAgICBpZiAoIW1fcmV2YWxpZGF0ZVN0eWxlQXR0clRh
c2spCiAgICAgICAgIG1fcmV2YWxpZGF0ZVN0eWxlQXR0clRhc2sgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s+KHRoaXMpOwotICAgIG1fcmV2YWxpZGF0ZVN0
eWxlQXR0clRhc2stPnNjaGVkdWxlRm9yKHRvRWxlbWVudChub2RlKSk7CisgICAgbV9yZXZhbGlk
YXRlU3R5bGVBdHRyVGFzay0+c2NoZWR1bGVGb3IoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQdXNoU2hhZG93Um9vdChFbGVtZW50KiBo
b3N0LCBTaGFkb3dSb290KiByb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck5vZGVGaW5kZXIuY3BwCmluZGV4IDQ5NGRhZTIwZDZhYTljODc3N2FiYWExMWZjYjU2
NzAxNGI3ODliNzAuLmRkMTVhOGQ5NDg3ZWIwNjBiMjFkNWVjYWQwOTI1MmQ5OTQwNDMwNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAK
QEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFyY2hVc2luZ0RP
TVRyZWVUcmF2ZXJzYWwoTm9kZSogcGFyZW50Tm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2hlc0VsZW1lbnQoKnRvRWxlbWVudChub2RlKSkpCisgICAgICAgICAgICBpZiAobWF0
Y2hlc0VsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpKSkKICAgICAgICAgICAgICAgICBt
X3Jlc3VsdHMuYWRkKG5vZGUpOwogCiAgICAgICAgICAgICAvLyBTZWFyY2ggaW5zaWRlIGZyYW1l
IGVsZW1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IGUyNTdmMWE2YTczMWQ2MTJjNDFhZmRhNzIxODA4MWY5ZjY2M2VhNTAuLjZlNjVh
ODEwYTk4ZGFkYzE2OGZkZTRhYmViNjI5ZjQ1ODYxMzE1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTY3NiwxOSArNjc2LDE5IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNp
ZGUoRnJhbWUqIGNvbnRhaW5pbmdGCiAKIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewotICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSB8fCAhbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJ
bmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJ0YWdOYW1l
IiwgaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxv
d2VyKCkpOwotICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVtZW50LT5n
ZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oKm5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1M
RG9jdW1lbnQoKTsKKyAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJ0YWdOYW1lIiwgaXNYSFRN
TCA/IGVsZW1lbnQubm9kZU5hbWUoKSA6IGVsZW1lbnQubm9kZU5hbWUoKS5sb3dlcigpKTsKKyAg
ICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJpZFZhbHVlIiwgZWxlbWVudC5nZXRJZEF0dHJpYnV0
ZSgpKTsKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpIHsKKyAg
ICBpZiAoZWxlbWVudC5oYXNDbGFzcygpICYmIGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKSB7
CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY2xhc3NOYW1lczsKLSAgICAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpl
bGVtZW50KS5jbGFzc05hbWVzKCk7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXNTdHJpbmcgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KS5jbGFzc05h
bWVzKCk7CiAgICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcu
c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyAr
K2kpIHsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NO
YW1lc1N0cmluZ1tpXTsKQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKICAgICAg
ICAgZWxlbWVudEluZm8tPnNldFN0cmluZygiY2xhc3NOYW1lIiwgY2xhc3NOYW1lcy50b1N0cmlu
ZygpKTsKICAgICB9CiAKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVy
KCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUo
KTsKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3
KCk7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdW
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCA3MjFhYmUzMmRkOTQ1ZjQzYWZmOWQzYWQzY2QzZjcyZjIzYWU3NzIwLi5hOTI2
NTcxYTUxMmM3MzE4ZGNmMTc5MGRkYmQ0YzBlY2M3M2E4NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xMzg4LDEzICsxMzg4
LDEzIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIG93
bmVyTm9kZSA9IG1fcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwotICAgIGlmICghb3duZXJO
b2RlIHx8ICFvd25lck5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCAhaXM8RWxlbWVudD4ob3duZXJOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEVs
ZW1lbnQqIG93bmVyRWxlbWVudCA9IHRvRWxlbWVudChvd25lck5vZGUpOworICAgIEVsZW1lbnQm
IG93bmVyRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvd25lck5vZGUpOwogCiAgICAgaWYg
KCFpczxIVE1MU3R5bGVFbGVtZW50Pihvd25lckVsZW1lbnQpICYmICFpczxTVkdTdHlsZUVsZW1l
bnQ+KG93bmVyRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqcmVzdWx0ID0g
b3duZXJFbGVtZW50LT50ZXh0Q29udGVudCgpOworICAgICpyZXN1bHQgPSBvd25lckVsZW1lbnQu
dGV4dENvbnRlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA2MTZkMTMxMzVlYjNkZmJjZWRiZTc4YTM5YzNiZjQ1ZTNi
YzE3NWNiLi40YTc0MzBiMDVkYzJiYWU0ZjU4MGVjNmU1NjBjMTRhNjdjNjM4NmY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjg5LDEzICsyODksMTMgQEAgc3Rh
dGljIEVsZW1lbnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZW50KiBkb2N1bWVudFVuZGVyTW91
c2UsIGNvbnN0IEludFBvaW50JgogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKICAg
ICBkb2N1bWVudFVuZGVyTW91c2UtPnJlbmRlclZpZXcoKS0+aGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogCi0gICAgTm9kZSogbiA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwotICAgIGlmIChuKQotICAgICAgICBuID0gbi0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9y
Tm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgd2hpbGUg
KG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpOworICAgIGlmIChub2RlKQorICAgICAgICBub2RlID0gbm9kZS0+ZGVwcmVjYXRlZFNo
YWRvd0FuY2VzdG9yTm9kZSgpOwogCi0gICAgcmV0dXJuIHRvRWxlbWVudChuKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRy
eURvY3VtZW50RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBh
Y3Rpb25NYXNrLCBEcmFnT3BlcmF0aW9uJiBkcmFnT3BlcmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMyNmIxZGI2M2U3MzI1ZTYxYTRhOTAwODMyYzc1
YjYwYWMuLjMzYTlhNTM4OWJjYzlmNDM4MTc1NjdmMzM3YWI4YWQ2ODBhMzJkMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTIxODYsNyArMjE4Niw3IEBAIHN0YXRpYyBi
b29sIGhhc0Ryb3Bab25lVHlwZShEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlciwgY29uc3QgU3Ry
aW5nJiBrZXl3b3JkKQogCiBzdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9kZSogdGFyZ2V0LCBE
YXRhVHJhbnNmZXIqIGRhdGFUcmFuc2ZlcikKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFy
Z2V0LT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQodGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50
RWxlbWVudCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pih0YXJnZXQpID8g
ZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50RWxlbWVudCgpOwogICAg
IGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAg
ICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICBTdHJpbmcgZHJvcFpvbmVTdHIg
PSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHdlYmtpdGRyb3B6b25lQXR0cik7CkBAIC0yMjMz
LDEwICsyMjMzLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBEYXRhVHJhbnNmCiAgICAgUmVmUHRyPEVsZW1l
bnQ+IG5ld1RhcmdldDsKICAgICBpZiAoTm9kZSogdGFyZ2V0Tm9kZSA9IG1vdXNlRXZlbnQudGFy
Z2V0Tm9kZSgpKSB7CiAgICAgICAgIC8vIERyYWcgZXZlbnRzIHNob3VsZCBuZXZlciBnbyB0byBu
b24tZWxlbWVudCBub2RlcyAoZm9sbG93aW5nIElFLCBhbmQgcHJvcGVyIG1vdXNlb3Zlci9vdXQg
ZGlzcGF0Y2gpCi0gICAgICAgIGlmICghdGFyZ2V0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KHRhcmdldE5vZGUpKQogICAgICAgICAgICAgbmV3VGFyZ2V0
ID0gdGFyZ2V0Tm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBuZXdUYXJnZXQgPSB0b0VsZW1lbnQodGFyZ2V0Tm9kZSk7CisgICAgICAg
ICAgICBuZXdUYXJnZXQgPSBkb3duY2FzdDxFbGVtZW50Pih0YXJnZXROb2RlKTsKICAgICB9CiAK
ICAgICBtX2F1dG9zY3JvbGxDb250cm9sbGVyLT51cGRhdGVEcmFnQW5kRHJvcChuZXdUYXJnZXQu
Z2V0KCksIGV2ZW50LnBvc2l0aW9uKCksIGV2ZW50LnRpbWVzdGFtcCgpKTsKQEAgLTIzOTQsMTAg
KzIzOTQsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2Rl
KE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAgICAgICAgdGFyZ2V0RWxlbWVu
dCA9IG1fY2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50LmdldCgpOwogICAgIGVsc2UgaWYgKHRh
cmdldE5vZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgbm9uLWVsZW1l
bnQsIGRpc3BhdGNoIG9uIHRoZSBwYXJlbnQuIDxyZGFyOi8vcHJvYmxlbS80MTk2NjQ2PgotICAg
ICAgICBpZiAoIXRhcmdldE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxF
bGVtZW50Pih0YXJnZXROb2RlKSkKICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRO
b2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRhcmdldEVsZW1lbnQgPSB0b0VsZW1lbnQodGFyZ2V0Tm9kZSk7CisgICAgICAgICAgICB0
YXJnZXRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAg
ICAgbV9lbGVtZW50VW5kZXJNb3VzZSA9IHRhcmdldEVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggYzE0ZDA5N2RlNTg2NTFjMzRkNDEzNDk5NjIwYjBi
MWMyMzg0YjUzYi4uMTNlNTFjMmM3YjMzMjQwNjVlOTMxMjg4ZDEwMjFhMDEwN2ZkN2EyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMTAzLDggKzEwMyw4IEBA
IEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRp
b25TY29wZU9mKE5vZGUqIG5vZGUpCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRp
b25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2Rl
KQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQodG9FbGVtZW50KG5vZGUpLT5zaGFk
b3dSb290KCkpOwotICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25TY29wZSh0b0VsZW1lbnQobm9k
ZSktPnNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5z
aGFkb3dSb290KCkpOworICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25TY29wZShkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuc2hhZG93Um9vdCgpKTsKIH0KIAogRm9jdXNOYXZpZ2F0aW9uU2NvcGUg
Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlvblNjb3BlT3duZWRCeUlGcmFtZShI
VE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lKQpAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChFbGVtZW50JiBlbGVtZW50LCBL
ZXlib2FyZEV2ZW50JiBldmUKIAogc3RhdGljIGlubGluZSBib29sIGlzRm9jdXNhYmxlU2hhZG93
SG9zdChOb2RlJiBub2RlLCBLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICByZXR1cm4gbm9k
ZS5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLmlzS2V5Ym9hcmRGb2N1c2FibGUo
JmV2ZW50KSAmJiB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpICYmICFoYXNDdXN0b21Gb2N1
c0xvZ2ljKHRvRWxlbWVudChub2RlKSk7CisgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzS2V5Ym9hcmRGb2N1c2FibGUoJmV2ZW50KSAmJiBk
b3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkgJiYgIWhhc0N1c3RvbUZvY3VzTG9n
aWMoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhZGp1
c3RlZFRhYkluZGV4KE5vZGUmIG5vZGUsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIGlm
ICghbm9kZS5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCh0b0Vs
ZW1lbnQobm9kZSksIGV2ZW50KSA/IDAgOiB0b0VsZW1lbnQobm9kZSkudGFiSW5kZXgoKTsKKyAg
ICByZXR1cm4gaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
LCBldmVudCkgPyAwIDogZG93bmNhc3Q8RWxlbWVudD4obm9kZSkudGFiSW5kZXgoKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNob3VsZFZpc2l0KEVsZW1lbnQmIGVsZW1lbnQsIEtleWJvYXJk
RXZlbnQmIGV2ZW50KQpAQCAtMzUwLDcgKzM1MCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjph
ZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXli
CiAKIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZUVsZW1lbnRBY3Jvc3NG
b2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNOYXZpZ2F0aW9uU2NvcGUg
c2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBB
U1NFUlQoIWN1cnJlbnROb2RlIHx8ICFjdXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFp
c05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoKnRvRWxlbWVudChjdXJyZW50Tm9kZSksICpldmVudCkp
OworICAgIEFTU0VSVCghY3VycmVudE5vZGUgfHwgIWlzPEVsZW1lbnQ+KGN1cnJlbnROb2RlKSB8
fCAhaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KCpkb3duY2FzdDxFbGVtZW50PihjdXJyZW50Tm9k
ZSksICpldmVudCkpOwogICAgIEVsZW1lbnQqIGZvdW5kOwogICAgIGlmIChjdXJyZW50Tm9kZSAm
JiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkICYmIGlzRm9jdXNhYmxlU2hhZG93
SG9zdCgqY3VycmVudE5vZGUsICpldmVudCkpIHsKICAgICAgICAgRWxlbWVudCogZm91bmRJbklu
bmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVFbGVtZW50UmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93
SG9zdChjdXJyZW50Tm9kZSksIDAsIGV2ZW50KTsKQEAgLTQxMCw5ICs0MTAsOSBAQCBFbGVtZW50
KiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRFbGVtZW50V2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3Rh
cnQsIGludCB0YWJJbmRleAogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQKICAg
ICB1c2luZyBuYW1lc3BhY2UgTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDsKICAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZv
cndhcmQgPyBuZXh0SW5TY29wZShub2RlKSA6IHByZXZpb3VzSW5TY29wZShub2RlKSkgewotICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsICpldmVu
dCkgJiYgYWRqdXN0ZWRUYWJJbmRleChlbGVtZW50LCAqZXZlbnQpID09IHRhYkluZGV4KQogICAg
ICAgICAgICAgcmV0dXJuICZlbGVtZW50OwogICAgIH0KQEAgLTQyNSw5ICs0MjUsOSBAQCBzdGF0
aWMgRWxlbWVudCogbmV4dEVsZW1lbnRXaXRoR3JlYXRlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBp
bnQgdGFiSW5kZXgsIEtleWJvYQogICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWF4KCkgKyAxOwogICAgIEVsZW1lbnQqIHdpbm5lciA9IG51bGxw
dHI7CiAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBOb2RlUmVuZGVy
aW5nVHJhdmVyc2FsOjpuZXh0SW5TY29wZShub2RlKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpub2Rl
KTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
ICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsIGV2ZW50KSAmJiBlbGVtZW50LnRhYklu
ZGV4KCkgPiB0YWJJbmRleCAmJiBlbGVtZW50LnRhYkluZGV4KCkgPCB3aW5uaW5nVGFiSW5kZXgp
IHsKICAgICAgICAgICAgIHdpbm5lciA9ICZlbGVtZW50OwogICAgICAgICAgICAgd2lubmluZ1Rh
YkluZGV4ID0gZWxlbWVudC50YWJJbmRleCgpOwpAQCAtNDQzLDkgKzQ0Myw5IEBAIHN0YXRpYyBF
bGVtZW50KiBwcmV2aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChOb2RlKiBzdGFydCwgaW50
IHRhYkluZGV4LCBLZXliCiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IDA7CiAgICAgRWxlbWVu
dCogd2lubmVyID0gbnVsbHB0cjsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsg
bm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnByZXZpb3VzSW5TY29wZShub2RlKSkgewot
ICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVt
ZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaW50IGN1cnJlbnRUYWJJbmRleCA9IGFkanVz
dGVkVGFiSW5kZXgoZWxlbWVudCwgZXZlbnQpOwogICAgICAgICBpZiAoKHNob3VsZFZpc2l0KGVs
ZW1lbnQsIGV2ZW50KSB8fCBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoZWxlbWVudCwgZXZlbnQp
KSAmJiBjdXJyZW50VGFiSW5kZXggPCB0YWJJbmRleCAmJiBjdXJyZW50VGFiSW5kZXggPiB3aW5u
aW5nVGFiSW5kZXgpIHsKICAgICAgICAgICAgIHdpbm5lciA9ICZlbGVtZW50OwpAQCAtNDY0LDkg
KzQ2NCw5IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZUVsZW1lbnQo
Rm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqCiAgICAgICAgIC8vIElmIGEgbm9kZSBp
cyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9jdXNh
YmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAgICAgIGlmICh0YWJJbmRl
eCA8IDApIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5leHRJblNjb3BlKHN0YXJ0
KTsgbm9kZTsgbm9kZSA9IG5leHRJblNjb3BlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
RWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgICAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KGVs
ZW1lbnQsICpldmVudCkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZlbGVtZW50
OwogICAgICAgICAgICAgfQpAQCAtNTE2LDkgKzUxNiw5IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJv
bGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEZvY3VzTmF2aWdhdGlvblNjb3BlIHNjb3Bl
LCBOCiAgICAgLy8gSG93ZXZlciwgaWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1h
bCB0YWJiaW5nIGN5Y2xlLCB0aGUgcHJldmlvdXMgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5l
ZCBieSB0cmVlIG9yZGVyCiAgICAgaWYgKHN0YXJ0aW5nVGFiSW5kZXggPCAwKSB7CiAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsgbm9kZTsgbm9kZSA9IHByZXZpb3VzSW5T
Y29wZShub2RlKSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7Cisg
ICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsICpldmVudCkgJiYgYWRqdXN0ZWRU
YWJJbmRleChlbGVtZW50LCAqZXZlbnQpID49IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuICZl
bGVtZW50OwogICAgICAgICB9CkBAIC04NjAsNyArODYwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xs
ZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIs
IGNvbnMKICAgICB9CiAKICAgICAvLyBXZSBmb3VuZCBhIG5ldyBmb2N1cyBub2RlLCBuYXZpZ2F0
ZSB0byBpdC4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGZvY3VzQ2FuZGlkYXRl
LmZvY3VzYWJsZU5vZGUpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihmb2N1c0NhbmRpZGF0ZS5mb2N1c2FibGVOb2RlKTsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAK
ICAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSwgZGlyZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKaW5kZXggZjYxMzRlZGRkNTI0ZjQyYzAwMGUwM2UzNGNiNWQyODYw
NTI4OTU1ZC4uNTRjYTk2Nzk4MGRiN2M1NjMxNGQ0ZGFiYzQxYmFmYmY5ZmIyNDk5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIGZv
ciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0g
bm9kZXMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7Ci0gICAg
ICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRWxlbWVudCYgZWxlbWVu
dCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5l
IHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNr
Z3JvdW5kIGltYWdlcykuCiAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhkb3duY2FzdDxTdHls
ZWRFbGVtZW50PihlbGVtZW50KS5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZWJiYWJkMTVjMzYyNmZmOThm
MjNjOWM1YmU5ZjI3N2ZkYmJmNmUzNy4uNzIxYmQ1OGIwZWQ2ODZlZjA0ZmYyNzI2MTExZDhhM2Qy
ODNmYjk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApA
QCAtMjIzLDEwICsyMjMsMTEgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJl
Y3Rpb24mIGRpcikgY29uc3QKICAgICAvLyBGaW5kIHRoZSB0aXRsZSBpbiB0aGUgbmVhcmVzdCBl
bmNsb3NpbmcgRE9NIG5vZGUuCiAgICAgLy8gRm9yIDxhcmVhPiB0YWdzIGluIGltYWdlIG1hcHMs
IHdhbGsgdGhlIHRyZWUgZm9yIHRoZSA8YXJlYT4sIG5vdCB0aGUgPGltZz4gdXNpbmcgaXQuCiAg
ICAgZm9yIChOb2RlKiB0aXRsZU5vZGUgPSBtX2lubmVyTm9kZS5nZXQoKTsgdGl0bGVOb2RlOyB0
aXRsZU5vZGUgPSB0aXRsZU5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAodGl0bGVO
b2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IHRvRWxl
bWVudCh0aXRsZU5vZGUpLT50aXRsZSgpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4odGl0bGVO
b2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgdGl0bGVFbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oKnRpdGxlTm9kZSk7CisgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSB0aXRsZUVsZW1l
bnQudGl0bGUoKTsKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSB0aXRsZU5vZGUtPnJlbmRlcmVyKCkpCisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSB0aXRsZUVsZW1lbnQucmVuZGVyZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgZGlyID0gcmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgICAgICAgICAgfQpAQCAtMjM4LDE3
ICsyMzksMTcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRp
cikgY29uc3QKIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChUZXh0
RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiB0cnVuY2F0ZWROb2RlID0g
bV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRlZE5vZGU7IHRydW5jYXRlZE5vZGUgPSB0cnVuY2F0
ZWROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCF0cnVuY2F0ZWROb2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4odHJ1bmNhdGVkTm9kZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRvRWxl
bWVudCh0cnVuY2F0ZWROb2RlKS0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byByZW5k
ZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0cnVuY2F0ZWROb2RlKS5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3cocmVuZGVy
ZXIpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSkg
ewogICAgICAgICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBibG9jay0+
Zmlyc3RSb290Qm94KCk7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGluZS0+aGFzRWxsaXBzaXNCb3goKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpciA9IGJsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQodHJ1bmNhdGVkTm9k
ZSktPmlubmVyVGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50PigqdHJ1bmNhdGVkTm9kZSkuaW5uZXJUZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBA
IC0zMjIsNyArMzIzLDcgQEAgVVJMIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlSW1hZ2VVUkwoKSBj
b25zdAogICAgICAgICB8fCBpczxIVE1MSW5wdXRFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpCiAgICAgICAgIHx8IGlzPEhUTUxPYmplY3RFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpCiAgICAgICAgIHx8IGlzPFNWR0ltYWdlRWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2Rl
KSkgewotICAgICAgICB1cmxTdHJpbmcgPSB0b0VsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2Rl
KS5pbWFnZVNvdXJjZVVSTCgpOworICAgICAgICB1cmxTdHJpbmcgPSBkb3duY2FzdDxFbGVtZW50
PigqbV9pbm5lck5vblNoYXJlZE5vZGUpLmltYWdlU291cmNlVVJMKCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybiBVUkwoKTsKIApAQCAtNjc0LDkgKzY3NSw5IEBAIEVsZW1lbnQqIEhpdFRl
c3RSZXN1bHQ6OmlubmVyRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IG1faW5u
ZXJOb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgcmV0dXJuIG5vZGUtPnBh
cmVudEVsZW1lbnQoKTsKIH0KIApAQCAtNjg0LDkgKzY4NSw5IEBAIEVsZW1lbnQqIEhpdFRlc3RS
ZXN1bHQ6OmlubmVyTm9uU2hhcmVkRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRv
RWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAg
cmV0dXJuIG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCmluZGV4IGU1YzZj
MDNlZTZhNzYyMjcwNGY2Mjg4Yzc0MTgwYTIzZWNiOGRiNjUuLjk0NzRlODg5NGM4Y2JhM2RhYjRj
YTRkNGVkMzRiZTY1Mjk1NzU0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKQEAgLTM0LDcgKzM0LDcgQEAgcHVi
bGljOgogICAgIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveChFbGVtZW50JiwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCgp
OwogCi0gICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2Rl
Rm9yTm9uQW5vbnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKaW5kZXggOTNmMDZiMmYyZDA1
MTViMjM1MjNmZmUyZWE5ZGRiNDdiMDM0NWJjZi4uYzk1NjZkZjdlOTE2NGU0MzJlYmJhODgwODk5
NjllYWQyNzM4ODk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRldGFpbHNNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzTWFya2VyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxEZXRhaWxzRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTE0Myw4ICsxNDQsOCBAQCBib29sIFJl
bmRlckRldGFpbHNNYXJrZXI6OmlzT3BlbigpIGNvbnN0CiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gcGFyZW50KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJl
bnQoKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoZGV0YWlsc1Rh
ZykpCi0gICAgICAgICAgICByZXR1cm4gIXRvRWxlbWVudChyZW5kZXJlci0+bm9kZSgpKS0+Z2V0
QXR0cmlidXRlKG9wZW5BdHRyKS5pc051bGwoKTsKKyAgICAgICAgaWYgKGlzPEhUTUxEZXRhaWxz
RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0
PEhUTUxEZXRhaWxzRWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpLmdldEF0dHJpYnV0ZShvcGVu
QXR0cikuaXNOdWxsKCk7CiAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJl
ci0+bm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDQyYjVkYzAyMDExZmRiNGYwNmFkMzhi
N2ZkZjBjNWY1YmE4NzQ3ZjYuLjA1Y2U3OTRkMTlhNGNmZTU5M2Y3NzM2Y2M4Y2UxMDgwODIzMGY0
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtNDgsOCAr
NDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbmltYXRhYmxlU3R5bGUoUGFzc1JlZjxSZW5k
ZXJTdHlsZT4pOwogCiAgICAgLy8gVGhpcyBpcyBudWxsIGZvciBhbm9ueW1vdXMgcmVuZGVyZXJz
LgotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQoUmVuZGVy
T2JqZWN0Ojpub2RlKCkpOyB9Ci0gICAgRWxlbWVudCogbm9uUHNldWRvRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRvRWxlbWVudChSZW5kZXJPYmplY3Q6Om5vblBzZXVkb05vZGUoKSk7IH0KKyAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVu
ZGVyT2JqZWN0Ojpub2RlKCkpOyB9CisgICAgRWxlbWVudCogbm9uUHNldWRvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9uUHNldWRvTm9k
ZSgpKTsgfQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29uc3Q7CiAKICAgICBS
ZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0K
QEAgLTMxNiw3ICszMTYsNyBAQCBpbmxpbmUgRWxlbWVudCogUmVuZGVyRWxlbWVudDo6Z2VuZXJh
dGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIGlmIChwYXJlbnQoKSAmJiBpc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQoKS0+Z2VuZXJhdGluZ0VsZW1l
bnQoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUo
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6Z2VuZXJhdGlu
Z05vZGUoKSk7CiB9CiAKIGlubGluZSBib29sIFJlbmRlck9iamVjdDo6aXNSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4
IDAyNDNiNjNmMTQ4YTMzZTBkNzgwYzNlZDk1ZWRlOGNiMTYxMmJjZDcuLjkxOTQ2MTA3NjI1NWQ3
NGU0ZGI5MTM0MmJiY2IzYTM5YjUwOGFlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyR3JpZChFbGVtZW50
JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlckdyaWQoKTsKIAot
ICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobm9kZUZvck5v
bkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VM
b2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNjRhNmY0Nzc3YjA2MTZkOTgxYjZiNWRj
YzA1ZmJiNTZiYzNhYWVmYi4uMjEzY2M5MGZjZWFiNjlhYmI5ZTNjNTVmN2U0NTA2MWRkMjA2MTk1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHN0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKCFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsKICAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhU
TUxQbHVnSW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IGQyZTM4YmRkMGFiYTNl
MzY3M2UxYTY2ZjMwYWY5YzFlZjg2NmVmYTIuLjc5NWRlM2FlMzA4MDFlZDZkNDIxOGY5YWQ1Zjkx
ODQ2MzA4OWJlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5o
CkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFJlbmRlckxpc3RNYXJrZXI7CiBjbGFzcyBSZW5kZXJM
aXN0SXRlbSBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJl
bmRlckxpc3RJdGVtKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7Ci0gICAgRWxlbWVu
dCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5vbnltb3Vz
KCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIGludCB2YWx1ZSgpIGNvbnN0
IHsgaWYgKCFtX2lzVmFsdWVVcFRvRGF0ZSkgdXBkYXRlVmFsdWVOb3coKTsgcmV0dXJuIG1fdmFs
dWU7IH0KICAgICB2b2lkIHVwZGF0ZVZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDZmZThhYjk1ZWZiMWZmNmVl
NWViYzM0YjA3OWYwMTYxMmI3NWYxOTcuLjgxZGM5ZmVmYjc5ZjZjZjY4MzA1Y2ZhOTY5NjM2ZWJi
YjJlNmU1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCkBAIC01NDUsMTMgKzU0NSwxMyBAQCBib29sIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3Qg
UmVuZAogICAgIGlmICghY2hpbGQubm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEFTU0VSVChjaGlsZC5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPEVs
ZW1lbnQ+KGNoaWxkLm5vZGUoKSkpOwogCiAgICAgTm9kZSogb3JpZ2luYWxQYXJlbnQgPSBOb2Rl
UmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQoY2hpbGQubm9kZSgpKTsKLSAgICBpZiAoIW9yaWdp
bmFsUGFyZW50IHx8ICFvcmlnaW5hbFBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8ICFvcmlnaW5h
bFBhcmVudC0+cmVuZGVyZXIoKSkKKyAgICBpZiAoIW9yaWdpbmFsUGFyZW50IHx8ICFpczxFbGVt
ZW50PihvcmlnaW5hbFBhcmVudCkgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiB0b0VsZW1lbnQob3JpZ2luYWxQYXJlbnQp
LT5yZW5kZXJlcigpLT5pc0NoaWxkQWxsb3dlZChjaGlsZCwgc3R5bGUpOworICAgIHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pigqb3JpZ2luYWxQYXJlbnQpLnJlbmRlcmVyKCktPmlzQ2hpbGRBbGxv
d2VkKGNoaWxkLCBzdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkaXNw
YXRjaFJlZ2lvbk92ZXJzZXRDaGFuZ2VFdmVudElmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNmRlMzVkMDQ0ZjI0N2M2NDEwODYxMmY0ZTk2
YjRhM2QwMmM0YjYyMi4uMjRlZjQ5Njg0NDI4YWMxYzI2Yjc2MWYwODg5N2I5ZmQ1ODI2NTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMzMsMTMg
KzEwMzMsMTMgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogICAgIGlmICh1cmxSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIG4gPSBub2RlKCk7Ci0gICAgaWYg
KCFuIHx8ICFuLT5pc0xpbmsoKSB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgIE5vZGUqIG5v
ZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0xpbmsoKSB8fCAh
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGhyZWYgPSB0b0VsZW1lbnQobiktPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBocmVmID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJp
YnV0ZShocmVmQXR0cik7CiAgICAgaWYgKGhyZWYuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBwYWludEluZm8uY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5kb2N1bWVudCgpLmNvbXBs
ZXRlVVJMKGhyZWYpLCBzbmFwcGVkSW50UmVjdCh1cmxSZWN0KSk7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldFVSTEZvclJlY3Qobm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChocmVmKSwg
c25hcHBlZEludFJlY3QodXJsUmVjdCkpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRP
dXRsaW5lKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3Qp
CkBAIC0yMTQxLDcgKzIxNDEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRl
KGJvb2wgZHJhZ09uKQogewogICAgIGJvb2wgdmFsdWVDaGFuZ2VkID0gKGRyYWdPbiAhPSBpc0Ry
YWdnaW5nKCkpOwogICAgIHNldElzRHJhZ2dpbmcoZHJhZ09uKTsKLSAgICBpZiAodmFsdWVDaGFu
Z2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8IChub2RlKCktPmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSgpKS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RHJh
ZygpKSkpCisgICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0
ZWRCeURyYWcoKSB8fCAoaXM8RWxlbWVudD4obm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSgpKS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENo
aWxkU2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3Vy
ci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CkBAIC0yMjI1LDcgKzIyMjUsNyBAQCBSZW5kZXJT
dHlsZSogUmVuZGVyT2JqZWN0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8s
IFJlbmRlclN0eWxlKiBwYQogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyT2JqZWN0Ojpn
ZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNldWRvU3R5
bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBvd25TdHls
ZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQgJiYgIW93blN0eWxlICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIXBhcmVudFN0eWxlKSB7CiAgICAgICAg
IEFTU0VSVCghb3duU3R5bGUpOwpAQCAtMjIzMywyMCArMjIzMywyMCBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNl
dWRvU3R5bGVSZQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzICJmaW5kIG5lYXJlc3QgZWxl
bWVudCBwYXJlbnQiIHNob3VsZCBiZSBhIGhlbHBlciBmdW5jdGlvbi4KLSAgICBOb2RlKiBuID0g
bm9kZSgpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIG4g
PSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm4gMDsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG4pOworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5u
b2RlKCk7CisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKIAogICAgIGlmIChwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gRklSU1RfTElORV9J
TkhFUklURUQpIHsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBkb2N1bWVu
dCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50
U3R5bGUsIERpc2FsbG93U3R5bGVTaGFyaW5nKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiByZXN1bHQgPSBkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoJmVsZW1lbnQsIHBhcmVudFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZyk7CiAgICAgICAg
IHJlc3VsdC0+c2V0U3R5bGVUeXBlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLnBzZXVkb1N0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9T
dHlsZVJlcXVlc3QsIHBhcmVudFN0eWxlKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVT
dHlsZVJlc29sdmVyKCkucHNldWRvU3R5bGVGb3JFbGVtZW50KCZlbGVtZW50LCBwc2V1ZG9TdHls
ZVJlcXVlc3QsIHBhcmVudFN0eWxlKTsKIH0KIAogc3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xv
cihSZW5kZXJTdHlsZSogc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUnVieS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaApp
bmRleCBkOGNjN2Q0NTNhZjdiMzY5MTlkN2I5ZWU1ZWFjZjFkOTE5YTk1ZWZlLi44Nzk1ZGUwMzlh
M2VkZGUzNTUxMGU4ZDllMTUzNDM0OGRjMjA1ZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSdWJ5LmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIFJlbmRlclJ1YnlBc0Js
b2NrKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVy
UnVieUFzQmxvY2soKTsKIAotICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
b0VsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkp
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgKaW5kZXggMTYzYjIwNDcxZjI4MmYz
YmI3MTI5YTFkMzFkMDYyYTFkOGE0ODA4YS4uNTY3ZjAxZThlM2E3NTM0ODFjZjEzNzYxYTljNjU1
NDNlODkxNGQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIFJlbmRlclJ1YnlUZXh0KEVsZW1lbnQmLCBQ
YXNzUmVmPFJlbmRlclN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVyUnVieVRleHQoKTsKIAot
ICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobm9kZUZvck5v
bkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2FwdGlvbi5oCmluZGV4IDY0NDE2MDkwOWRhZWQ5N2UxNWVlOTM2YjE5NTE5YjJkMDY3
YTIzMTUuLjE0YmE5ZDJkMzhjMmFkM2Y5MTViYjEzZjUzZTQ3MWJkMDQzMzA0MTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmgKQEAgLTMxLDcgKzMx
LDcgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlQ2FwdGlvbihFbGVtZW50JiwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlclRhYmxlQ2FwdGlvbigpOwogCi0gICAg
RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCmlu
ZGV4IDI3MGE4YTRjZTM5ZGMwYmNhMjRkNjg4MjBmNDY3YzY5ZjZlMTU0MTEuLjlkZDkzNTY0ZjZh
ODBmMGU2ODFiNzhiYTM3ODI0ZjQxYjg2YWNmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNvbC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFJlbmRlclRhYmxlQ2Vs
bDsKIGNsYXNzIFJlbmRlclRhYmxlQ29sIGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJs
aWM6CiAgICAgUmVuZGVyVGFibGVDb2woRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsK
LSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JO
b25Bbm9ueW1vdXMoKSk7IH0KKyAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCiAgICAgdm9pZCBj
bGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggYmE2NzVmMDRlZTQ1NGY4ZWNkOTA0YmM0YmFm
YzI2OTc0YWYyMjRhNi4uOTc0N2I0YTIxNmM4NWIyMjcwODhkY2Q5M2FiODdiNTdmOGNhOGMzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC04MDIsNjcgKzgw
Miw2NyBAQCBib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKSBjb25zdAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0
ZXJtaW5hdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXIubm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhdG9FbGVtZW50KG5vZGUpLT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1
c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRm9j
dXNlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhaXM8
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEVsZW1lbnQqIGZv
Y3VzRGVsZWdhdGUgPSB0b0VsZW1lbnQobm9kZSktPmZvY3VzRGVsZWdhdGUoKTsKKyAgICBFbGVt
ZW50KiBmb2N1c0RlbGVnYXRlID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzRGVsZWdh
dGUoKTsKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBmb2N1c0RlbGVnYXRlLT5kb2N1bWVudCgp
OwogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgcmV0dXJuIGZvY3Vz
RGVsZWdhdGUgPT0gZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKSAmJiBmcmFtZSAmJiBmcmFtZS0+
c2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6
OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1l
Ojppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBp
ZiAoIW8ubm9kZSgpIHx8ICFvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghcmVu
ZGVyZXIubm9kZSgpIHx8ICFpczxFbGVtZW50PihyZW5kZXJlci5ub2RlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwor
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PigqcmVuZGVyZXIubm9kZSgpKS5hY3RpdmUoKTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBh
cnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8
ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50LT5hY3RpdmUoKSB8
fCAhZWxlbWVudC0+aXNTcGluQnV0dG9uRWxlbWVudCgpKQorICAgIEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgaWYgKCFlbGVtZW50LmFjdGl2ZSgpIHx8
ICFlbGVtZW50LmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KGVsZW1lbnQpLT51cERv
d25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpVcDsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3BpbkJ1dHRvbkVsZW1lbnQmPihlbGVtZW50KS51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0
b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2wo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25s
eUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2Rl
KiBub2RlID0gby5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICF0b0VsZW1lbnQoKm5vZGUpLm1hdGNoZXNSZWFk
V3JpdGVQc2V1ZG9DbGFzcygpOworICAgIHJldHVybiAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
Lm1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpp
c0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8
ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdG9F
bGVtZW50KG5vZGUpLT5pc1NwaW5CdXR0b25FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0b0Vs
ZW1lbnQobm9kZSktPmhvdmVyZWQoKTsKKyAgICBpZiAoIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc1NwaW5CdXR0b25FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuaG92ZXJlZCgpOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1cm4gZWxlbWVudC0+
aG92ZXJlZCgpICYmIGVsZW1lbnQtPnVwRG93blN0YXRlKCkgIT0gU3BpbkJ1dHRvbkVsZW1lbnQ6
OkluZGV0ZXJtaW5hdGU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFy
dEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBj
b25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhdG9FbGVtZW50KG5vZGUpLT5pc1NwaW5CdXR0b25FbGVt
ZW50KCkpCisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKKyAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTcGlu
QnV0dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3BpbkJ1dHRvbkVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KG5vZGUpOwog
ICAgIHJldHVybiBlbGVtZW50LT51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpV
cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4IGNi
ZDkyYWI5ODk5ZjM2MzU4NWQyZDExMWI5NGE2YTY0NTVhNWJjNmUuLjQ4Mzg4ZWJjMzBkMDVlZDc5
NjExZWFlMDk5OTZhN2FiOTA4ZmRhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lR3RrLmNwcApAQCAtMzE2LDE1ICszMTYsMTUgQEAgc3RhdGljIGJvb2wgbm9kZUhh
c1BzZXVkbyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBwc2V1ZG8pCiAKIHN0YXRpYyBib29sIG5v
ZGVIYXNDbGFzcyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
Ci0gICAgaWYgKCFlbGVtZW50LT5oYXNDbGFzcygpKQorICAgIGlmICghZWxlbWVudC5oYXNDbGFz
cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZWxlbWVudC0+Y2xhc3NO
YW1lcygpLmNvbnRhaW5zKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NOYW1l
cygpLmNvbnRhaW5zKGNsYXNzTmFtZSk7CiB9CiAKIFJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVt
ZUd0aygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXgg
MzZlMDc3MTYyZjY1NWRmYzA0MWRlYjY5ODgyZGI0NWUwMDBkNzk2MS4uOTIwMDI2Y2Q4YzZmODk4
MGY1Njg5NTk2ODExMTY0ODY4NTc2OGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQpAQCAtNzI5LDcgKzcyOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykK
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNv
bnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICBib29sIG9sZFByZXNzZWQgPSBbY2VsbCBpc0hp
Z2hsaWdodGVkXTsKLSAgICBib29sIHByZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOworICAgIGJvb2wg
cHJlc3NlZCA9IG8ubm9kZSgpICYmIGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxF
bGVtZW50Pigqby5ub2RlKCkpLmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNz
ZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQpAQCAtMTUzMSw3
ICsxNTMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xp
ZGVyVGh1bWJDZWxsLCBvKTsKLSAgICAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLm5v
ZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChvLm5vZGUoKSkt
PmZvY3VzRGVsZWdhdGUoKSA6IDA7CisgICAgICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAo
by5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG8u
bm9kZSgpKS0+Zm9jdXNEZWxlZ2F0ZSgpIDogbnVsbHB0cjsKICAgICBpZiAoZm9jdXNEZWxlZ2F0
ZSkKICAgICAgICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgKmZvY3VzRGVs
ZWdhdGUtPnJlbmRlcmVyKCkpOwogCkBAIC0xNjczLDcgKzE2NzMsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUAogewogICAgIEVsZW1lbnQqIGlucHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3Qo
KTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9IHRvRWxlbWVudChvLm5vZGUoKSk7
CisgICAgICAgIGlucHV0ID0gZG93bmNhc3Q8RWxlbWVudD4oby5ub2RlKCkpOwogCiAgICAgaWYg
KCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDFlN2Q3
NTJlMmU0MjM2OTk5ODk4OTEzNjZiNTBjMWEyNzI3ODAwOWYuLmQ0NWJjNWJkNGYwODIyOTdmN2U3
N2E3N2RiYzQ1MzFmNzZlOWVlODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1Rl
eHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG8sCiAgICAgfQogICAgIAogICAgIGlmIChiZWhhdmlvciAmIFJlbmRlckFzVGV4dFNob3dJREFu
ZENsYXNzKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgby5u
b2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChvLm5vZGUoKSkgOiAwKSB7CisgICAg
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2Rl
KCkpID8gZG93bmNhc3Q8RWxlbWVudD4oby5ub2RlKCkpIDogbnVsbHB0cikgewogICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1cIiIg
KyBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpICsgIlwiIjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IGIyZDk1YTllZjFjYmEwNDk4NjFjNzcwZGNm
Y2VhODZiMDAzMGJlODAuLmQzOTJkODg3MGZlMDdhY2E4MmNhNzBiNTUwZGFiYWRkMTk1NzM4ZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI3Niw4
ICsyNzYsOCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgp
KQogICAgICAgICByZXR1cm4gcmVuZGVyZXItPmlzRmxvYXRpbmcoKSB8fCByZW5kZXJlci0+aXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCk7CiAgICAgLy8gQXZvaWQgY3JlYXRpbmcgY29udGFpbmVycyBm
b3IgdGV4dCB3aXRoaW4gdGV4dCBjb250cm9scywgYnV0dG9ucywgb3IgPHNlbGVjdD4gYnV0dG9u
cy4KLSAgICBOb2RlKiBwYXJlbnROb2RlID0gcmVuZGVyZXItPnBhcmVudCgpID8gcmVuZGVyZXIt
PnBhcmVudCgpLT5nZW5lcmF0aW5nTm9kZSgpIDogMDsKLSAgICBpZiAocGFyZW50Tm9kZSAmJiBw
YXJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKHRv
RWxlbWVudChwYXJlbnROb2RlKS0+dGFnUU5hbWUoKSkpCisgICAgTm9kZSogcGFyZW50Tm9kZSA9
IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUo
KSA6IG51bGxwdHI7CisgICAgaWYgKHBhcmVudE5vZGUgJiYgaXM8RWxlbWVudD4ocGFyZW50Tm9k
ZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKGRvd25jYXN0PEVsZW1lbnQ+KCpwYXJlbnRO
b2RlKS50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zODgsOCArMzg4LDggQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJDb250
YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24KICAgICBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyOwogICAgIHdoaWxlIChyZW5kZXJl
cikgewogICAgICAgICBjb25zdCBOb2RlKiByZW5kZXJlck5vZGUgPSByZW5kZXJlci0+bm9kZSgp
OwotICAgICAgICBpZiAocmVuZGVyZXJOb2RlICYmIHJlbmRlcmVyTm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGFncy5jb250YWlucyh0b0VsZW1lbnQocmVuZGVyZXJO
b2RlKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChyZW5kZXJlck5vZGUgJiYgaXM8RWxlbWVu
dD4ocmVuZGVyZXJOb2RlKSkgeworICAgICAgICAgICAgaWYgKHRhZ3MuY29udGFpbnMoZG93bmNh
c3Q8RWxlbWVudD4oKnJlbmRlcmVyTm9kZSkudGFnUU5hbWUoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmVuZGVyZXIgPSBuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMocmVuZGVyZXIsIGNvbnRhaW5lcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCmluZGV4IDBhZjkxNjAxYTNhMWMxN2UwZDI3NjViYjY4NWYzMWNiNzQ1MjlmMTQuLjI0
YzE5MGQyOTgxODg3ZWI1M2VkYWVkNzJhZTczMTRmZmUzYmExMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCkBAIC01
NSw3ICs1NSw3IEBAIFJlbmRlck1hdGhNTEJsb2NrOjpSZW5kZXJNYXRoTUxCbG9jayhEb2N1bWVu
dCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0CiAKIGJvb2wgUmVuZGVyTWF0aE1M
QmxvY2s6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYgY2hpbGQsIGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hpbGQubm9kZSgpICYmIGlzRWxlbWVu
dCgqY2hpbGQubm9kZSgpKTsKKyAgICByZXR1cm4gY2hpbGQubm9kZSgpICYmIGlzPEVsZW1lbnQ+
KCpjaGlsZC5ub2RlKCkpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IFJlbmRl
ck1hdGhNTEJsb2NrOjpjcmVhdGVBbm9ueW1vdXNNYXRoTUxCbG9jaygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCmluZGV4IDhhODZhOTU4Y2Q4MzA2NDAwZTJkMWE4
M2ExOGRjMTJhMTk0NmI4N2QuLjIyZThlMWFkNmNiMjhmNzZkMmQxNWZjNDZkNTEzYTdjMDRhNTc1
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCkBAIC00ODIs
OCArNDgyLDggQEAgc3RhdGljIHZvaWQgYXR0YWNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSYgY3Vy
cmVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlLAogICAgICAgICAgICAgYXR0YWNoVGV4
dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KCpjaGlsZCksIHJlbmRlclRyZWVQb3NpdGlvbik7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjaGls
ZCksIGluaGVyaXRlZFN0eWxlLCByZW5kZXJUcmVlUG9zaXRpb24sIG51bGxwdHIpOworICAgICAg
ICBpZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICAgICAgYXR0YWNoUmVuZGVyVHJlZShk
b3duY2FzdDxFbGVtZW50PigqY2hpbGQpLCBpbmhlcml0ZWRTdHlsZSwgcmVuZGVyVHJlZVBvc2l0
aW9uLCBudWxscHRyKTsKICAgICB9CiB9CiAKQEAgLTUwMSw4ICs1MDEsOCBAQCBzdGF0aWMgdm9p
ZCBhdHRhY2hEaXN0cmlidXRlZENoaWxkcmVuKEluc2VydGlvblBvaW50JiBpbnNlcnRpb25Qb2lu
dCwgUmVuZGVyU3R5bAogICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRl
eHQ+KCpjdXJyZW50KSwgcmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gdG9FbGVtZW50KCpjdXJyZW50KTsK
KyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBFbGVtZW50
JiBjdXJyZW50RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KTsKICAgICAgICAg
ICAgIGlmIChjdXJyZW50RWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGRldGFj
aFJlbmRlclRyZWUoY3VycmVudEVsZW1lbnQpOwogICAgICAgICAgICAgYXR0YWNoUmVuZGVyVHJl
ZShjdXJyZW50RWxlbWVudCwgaW5oZXJpdGVkU3R5bGUsIHJlbmRlclRyZWVQb3NpdGlvbiwgbnVs
bHB0cik7CkBAIC02NTUsOCArNjU1LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoRGlzdHJpYnV0ZWRD
aGlsZHJlbihJbnNlcnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQpCiAgICAgICAgICAgICBkZXRh
Y2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8VGV4dD4oKmN1cnJlbnQpKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgICAgICBkZXRhY2hSZW5kZXJUcmVlKCp0b0VsZW1lbnQoY3VycmVudCkpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oY3VycmVudCkpCisgICAgICAgICAgICBkZXRhY2hSZW5kZXJU
cmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KSk7CiAgICAgfQogfQogCkBAIC02NzAsOCAr
NjcwLDggQEAgc3RhdGljIHZvaWQgZGV0YWNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSYgY3VycmVu
dCwgRGV0YWNoVHlwZSBkZXRhY2hUeXBlKQogICAgICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRS
ZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgZGV0YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwgZGV0YWNoVHlwZSk7CisgICAg
ICAgIGlmIChpczxFbGVtZW50PihjaGlsZCkpCisgICAgICAgICAgICBkZXRhY2hSZW5kZXJUcmVl
KGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCksIGRldGFjaFR5cGUpOwogICAgIH0KICAgICBjdXJy
ZW50LmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CkBAIC04MTksOCArODE5LDggQEAg
c3RhdGljIHZvaWQgcmVzb2x2ZVNoYWRvd1RyZWUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRWxl
bWVudCYgaG9zdCwgU3R5bGU6OkNoYW4KICAgICAgICAgICAgIHJlc29sdmVUZXh0Tm9kZShkb3du
Y2FzdDxUZXh0PigqY2hpbGQpLCByZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCi0g
ICAgICAgICAgICByZXNvbHZlVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwgaG9zdC5yZW5kZXJlcigp
LT5zdHlsZSgpLCByZW5kZXJUcmVlUG9zaXRpb24sIGNoYW5nZSk7CisgICAgICAgIGlmIChpczxF
bGVtZW50PihjaGlsZCkpCisgICAgICAgICAgICByZXNvbHZlVHJlZShkb3duY2FzdDxFbGVtZW50
PigqY2hpbGQpLCBob3N0LnJlbmRlcmVyKCktPnN0eWxlKCksIHJlbmRlclRyZWVQb3NpdGlvbiwg
Y2hhbmdlKTsKICAgICB9CiAKICAgICBzaGFkb3dSb290LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygp
OwpAQCAtOTQzLDE5ICs5NDMsMTkgQEAgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50JiBjdXJyZW50
LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUsIFJlbmRlclRyZWVQb3NpdGkKICAgICAgICAg
ICAgICAgICByZXNvbHZlVGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKmNoaWxkKSwgY2hpbGRSZW5k
ZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAg
aWYgKCFpczxFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvRWxlbWVudChjaGlsZCk7CisgICAg
ICAgICAgICBFbGVtZW50JiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY2hpbGQp
OwogICAgICAgICAgICAgaWYgKGVsZW1lbnROZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNp
YmxpbmdFbGVtZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRFbGVtZW50LT5z
dHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgICAgICAgICBj
aGlsZEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAgICAgICBlbGVt
ZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlID0gY2hp
bGRFbGVtZW50LT5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGRFbGVtZW50LT5zdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVD
aGFuZ2UpCi0gICAgICAgICAgICAgICAgZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0FmZmVjdHNO
ZXh0U2libGluZ0VsZW1lbnRTdHlsZSA9IGNoaWxkRWxlbWVudC0+YWZmZWN0c05leHRTaWJsaW5n
RWxlbWVudFN0eWxlKCk7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hp
bGRFbGVtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBjaGlsZEVsZW1lbnQtPm5lZWRz
U3R5bGVSZWNhbGMoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZEVsZW1lbnQuc3R5bGVJ
c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRF
bGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50TmVl
ZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlID0gY2hpbGRFbGVt
ZW50LmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChjaGlsZEVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQor
ICAgICAgICAgICAgICAgIGVsZW1lbnROZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNpYmxp
bmdFbGVtZW50U3R5bGUgPSBjaGlsZEVsZW1lbnQuYWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0
eWxlKCk7CisgICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hpbGRFbGVtZW50
LmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGNoaWxkRWxlbWVudC5uZWVkc1N0eWxlUmVjYWxj
KCkpIHsKICAgICAgICAgICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwotICAgICAgICAgICAg
ICAgIHJlc29sdmVUcmVlKCpjaGlsZEVsZW1lbnQsIHJlbmRlcmVyLT5zdHlsZSgpLCBjaGlsZFJl
bmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlVHJlZShj
aGlsZEVsZW1lbnQsIHJlbmRlcmVyLT5zdHlsZSgpLCBjaGlsZFJlbmRlclRyZWVQb3NpdGlvbiwg
Y2hhbmdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKaW5kZXggODQ5ZGY4OWRlZTFiNGE0YmM1ODhjYTMwYmQ0ODdiMjNiMWM3MDM2
Mi4uZGUzMzI3OGIzMmE2ZGRiMzc1MzNjM2EyODYyODdhODg2MmFkODM0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNzYwLDkgKzc2MCwxMCBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAgICAg
ICAgIGV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKGNoaWxkLmdldCgpKTsKIH0KIAotdm9p
ZCBTVkdVc2VFbGVtZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBl
bGVtZW50KQordm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93
VHJlZShOb2RlKiBub2RlKQogewotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVz
OjpzeW1ib2xUYWcpKSB7CisgICAgaWYgKGlzPFNWR1N5bWJvbEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxTVkdTeW1ib2xFbGVtZW50Pihub2Rl
KTsKICAgICAgICAgLy8gU3BlYzogVGhlIHJlZmVyZW5jZWQgJ3N5bWJvbCcgYW5kIGl0cyBjb250
ZW50cyBhcmUgZGVlcC1jbG9uZWQgaW50byB0aGUgZ2VuZXJhdGVkIHRyZWUsCiAgICAgICAgIC8v
IHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSAnc3ltYm9sJyBpcyByZXBsYWNlZCBieSBhbiAn
c3ZnJy4gVGhpcyBnZW5lcmF0ZWQgJ3N2Zycgd2lsbAogICAgICAgICAvLyBhbHdheXMgaGF2ZSBl
eHBsaWNpdCB2YWx1ZXMgZm9yIGF0dHJpYnV0ZXMgd2lkdGggYW5kIGhlaWdodC4gSWYgYXR0cmli
dXRlcyB3aWR0aCBhbmQvb3IKQEAgLTc3Miw3ICs3NzMsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAgICAgICAg
IFJlZlB0cjxTVkdTVkdFbGVtZW50PiBzdmdFbGVtZW50ID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
KFNWR05hbWVzOjpzdmdUYWcsICpyZWZlcmVuY2VkRG9jdW1lbnQoKSk7CiAKICAgICAgICAgLy8g
VHJhbnNmZXIgYWxsIGRhdGEgKGF0dHJpYnV0ZXMsIGV0Yy4pIGZyb20gPHN5bWJvbD4gdG8gdGhl
IG5ldyA8c3ZnPiBlbGVtZW50LgotICAgICAgICBzdmdFbGVtZW50LT5jbG9uZURhdGFGcm9tRWxl
bWVudCgqdG9FbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgc3ZnRWxlbWVudC0+Y2xvbmVEYXRh
RnJvbUVsZW1lbnQoKmVsZW1lbnQpOwogCiAgICAgICAgIC8vIE9ubHkgY2xvbmUgc3ltYm9sIGNo
aWxkcmVuLCBhbmQgYWRkIHRoZW0gdG8gdGhlIG5ldyA8c3ZnPiBlbGVtZW50CiAgICAgICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CkBAIC03ODgsNyArNzg5LDcgQEAgdm9pZCBTVkdVc2VFbGVt
ZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KQogICAg
ICAgICBpZiAoc3VidHJlZUNvbnRhaW5zRGlzYWxsb3dlZEVsZW1lbnQoKnN2Z0VsZW1lbnQpKQog
ICAgICAgICAgICAgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUoKnN2Z0VsZW1l
bnQpOwogCi0gICAgICAgIFJlZlB0cjxOb2RlPiByZXBsYWNpbmdFbGVtZW50KHN2Z0VsZW1lbnQu
Z2V0KCkpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcmVwbGFjaW5nRWxlbWVudChzdmdFbGVt
ZW50LmdldCgpKTsKIAogICAgICAgICAvLyBSZXBsYWNlIDxzeW1ib2w+IHdpdGggPHN2Zz4uCiAg
ICAgICAgIGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKHN2Z0VsZW1lbnQucmVs
ZWFzZSgpLCBlbGVtZW50KTsKQEAgLTgwMCw3ICs4MDEsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVsZW1lbnQpCiAgICAgICAg
ICAgICBleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShzaWJsaW5nLmdldCgpKTsKICAg
ICB9CiAKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShj
aGlsZC5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAKaW5kZXggMTA0OWU2YjQxOTZmZTI4MGRmNzRkZGMwNDVhNWE0OTU5MDI2
NjViYy4uZDU0NWU5ZGRlYTEyNWJhMzdkYzhhY2QwZDVlODM4OTYxY2RmOGI3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAgLTE1Nyw3
ICsxNTcsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAK
ICAgICBpZiAoIWluRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBSZXNldCB0aGUgdGFyZ2V0IGVs
ZW1lbnQgaWYgd2UgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIHNldFRh
cmdldEVsZW1lbnQoMCk7CisgICAgICAgIHNldFRhcmdldEVsZW1lbnQobnVsbHB0cik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIFNWR1NNSUxFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogICAgIEVsZW1lbnQqIHRhcmdldDsKICAgICBpZiAo
aHJlZi5pc0VtcHR5KCkpCi0gICAgICAgIHRhcmdldCA9IHBhcmVudE5vZGUoKSAmJiBwYXJlbnRO
b2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChwYXJlbnROb2RlKCkpIDogbnVsbHB0
cjsKKyAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIGlzPEVsZW1lbnQ+KHBhcmVudE5v
ZGUoKSkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKCkpIDogbnVsbHB0cjsKICAgICBl
bHNlCiAgICAgICAgIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21J
UklTdHJpbmcoaHJlZiwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBTVkdFbGVtZW50KiBzdmdUYXJn
ZXQgPSB0YXJnZXQgJiYgaXM8U1ZHRWxlbWVudD4odGFyZ2V0KSA/IGRvd25jYXN0PFNWR0VsZW1l
bnQ+KHRhcmdldCkgOiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAK
aW5kZXggMWUzNmU5YmRmYzhhODYyYzljZDRlMzJlYWZmYTEyZTgzYmYyNWJhNi4uMWZmODM4NDA0
MGI1NGY5ZTJkODAzMDdjYjNkN2M3YzEzNGQ3MDQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhG
dW5jdGlvbnMuY3BwCkBAIC01ODAsMTMgKzU4MCwxMyBAQCBWYWx1ZSBGdW5MYW5nOjpldmFsdWF0
ZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGxhbmcgPSBhcmd1bWVudCgwKS5ldmFsdWF0ZSgpLnRv
U3RyaW5nKCk7CiAKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGxhbmd1YWdlQXR0cmlidXRlID0gMDsK
KyAgICBjb25zdCBBdHRyaWJ1dGUqIGxhbmd1YWdlQXR0cmlidXRlID0gbnVsbHB0cjsKICAgICBO
b2RlKiBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdldCgpOwogICAgIHdoaWxlIChu
b2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudC0+aGFzQXR0cmlidXRlcygpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlQXR0cmlidXRl
ID0gZWxlbWVudC0+ZmluZEF0dHJpYnV0ZUJ5TmFtZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5o
YXNBdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBlbGVt
ZW50LmZpbmRBdHRyaWJ1dGVCeU5hbWUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoTm9kZVNldC5jcHAKaW5kZXggMGZkNDEwYzMzMzJjNjQyYjE2M2ZmMGUyYzc3
MDdmOTExZjM0ZjFjMy4uYjg2MTY4MTI2ODBhZmI5MmUxMmZjMzNjYTBkODk2MGJiMDllZjlkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAKQEAgLTIwNywxOSArMjA3LDE5IEBAIHZv
aWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgpIGNvbnN0CiAgICAgVmVjdG9yPFJlZlB0cjxOb2Rl
Pj4gc29ydGVkTm9kZXM7CiAgICAgc29ydGVkTm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
b2RlQ291bnQpOwogCi0gICAgZm9yIChOb2RlKiBuID0gZmluZFJvb3ROb2RlKG1fbm9kZXMuZmly
c3QoKS5nZXQoKSk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7Ci0gICAgICAgIGlm
IChub2Rlcy5jb250YWlucyhuKSkKLSAgICAgICAgICAgIHNvcnRlZE5vZGVzLmFwcGVuZChuKTsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaW5kUm9vdE5vZGUobV9ub2Rlcy5maXJzdCgpLmdldCgp
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKKyAgICAgICAgaWYg
KG5vZGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKG5v
ZGUpOwogCi0gICAgICAgIGlmICghY29udGFpbnNBdHRyaWJ1dGVOb2RlcyB8fCAhbi0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWNvbnRhaW5zQXR0cmlidXRlTm9kZXMgfHwgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IHRvRWxlbWVudChuKTsKLSAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1
dGVzKCkpCisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSk7CisgICAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxl
bWVudC0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBh
dHRyID0gZWxlbWVudC0+YXR0cklmRXhpc3RzKGF0dHJpYnV0ZS5uYW1lKCkpOworICAgICAgICBm
b3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0
b3IoKSkgeworICAgICAgICAgICAgUmVmUHRyPEF0dHI+IGF0dHIgPSBlbGVtZW50LmF0dHJJZkV4
aXN0cyhhdHRyaWJ1dGUubmFtZSgpKTsKICAgICAgICAgICAgIGlmIChhdHRyICYmIG5vZGVzLmNv
bnRhaW5zKGF0dHIuZ2V0KCkpKQogICAgICAgICAgICAgICAgIHNvcnRlZE5vZGVzLmFwcGVuZChh
dHRyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3Rl
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAppbmRleCA0OTE2YzczNzAx
MjYzNzZhODE3MzZmOTIyYTYwYzUyNzA3Njk1MjA4Li5jNGNmZDVhNmJkOTQ3ZDgwZGQyNGZjMjRj
ZjhlYzQ5MGVmNDAyM2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcApAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjAxLDIxICsyMDIs
MjEgQEAgaW5saW5lIGJvb2wgbm9kZU1hdGNoZXNCYXNpY1Rlc3QoTm9kZSYgbm9kZSwgU3RlcDo6
QXhpcyBheGlzLCBjb25zdCBTdGVwOjpOb2RlVGUKIAogICAgICAgICAgICAgLy8gRm9yIG90aGVy
IGF4ZXMsIHRoZSBwcmluY2lwYWwgbm9kZSB0eXBlIGlzIGVsZW1lbnQuCiAgICAgICAgICAgICBB
U1NFUlQocHJpbWFyeU5vZGVUeXBlKGF4aXMpID09IE5vZGU6OkVMRU1FTlRfTk9ERSk7Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIGlmIChuYW1lID09IHN0YXJBdG9tKQogICAgICAgICAgICAgICAgIHJldHVybiBuYW1lc3Bh
Y2VVUkkuaXNFbXB0eSgpIHx8IG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpOwog
Ci0gICAgICAgICAgICBpZiAobm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KG5vZGUuZG9jdW1lbnQoKSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFBhdGhzIHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2ggSFRNTCBlbGVtZW50
cyBpbiBIVE1MIGRvY3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBYSFRNTCBuYW1lc3Bh
Y2UuIE5hbWVzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHkuCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShkb3duY2FzdDxIVE1MRWxlbWVudD4obm9k
ZSkubG9jYWxOYW1lKCksIG5hbWUpICYmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNw
YWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAvLyBBbiBleHByZXNzaW9uIHdpdGhvdXQgYW55IHByZWZpeCBzaG91bGRuJ3Qg
bWF0Y2ggbm8tbmFtZXNwYWNlIG5vZGVzIChiZWNhdXNlIEhUTUw1IHNheXMgc28pLgotICAgICAg
ICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSkuaGFzTG9jYWxOYW1lKG5hbWUpICYmIG5h
bWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpICYmICFuYW1lc3BhY2VVUkkuaXNOdWxs
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmhhc0xv
Y2FsTmFtZShuYW1lKSAmJiBuYW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKSAmJiAh
bmFtZXNwYWNlVVJJLmlzTnVsbCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRvRWxlbWVudChub2RlKS5oYXNMb2NhbE5hbWUobmFtZSkgJiYgbmFtZXNwYWNlVVJJID09IG5v
ZGUubmFtZXNwYWNlVVJJKCk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSkuaGFzTG9jYWxOYW1lKG5hbWUpICYmIG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFj
ZVVSSSgpOwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MzQzLDEwICszNDQsMTAgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlJiBjb250ZXh0LCBO
b2RlU2V0JiBub2RlcykgY29uc3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEF0dHJpYnV0ZUF4aXM6IHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGNvbnRleHQpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgRWxlbWVudCYgY29udGV4dEVsZW1l
bnQgPSB0b0VsZW1lbnQoY29udGV4dCk7CisgICAgICAgICAgICBFbGVtZW50JiBjb250ZXh0RWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNvbnRleHQpOwogCiAgICAgICAgICAgICAvLyBBdm9p
ZCBsYXppbHkgY3JlYXRpbmcgYXR0cmlidXRlIG5vZGVzIGZvciBhdHRyaWJ1dGVzIHRoYXQgd2Ug
ZG8gbm90IG5lZWQgYW55d2F5LgogICAgICAgICAgICAgaWYgKG1fbm9kZVRlc3QubV9raW5kID09
IE5vZGVUZXN0OjpOYW1lVGVzdCAmJiBtX25vZGVUZXN0Lm1fZGF0YSAhPSBzdGFyQXRvbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwCmluZGV4IDhhZTUxMWRhOGUzNGM2NTY0NGYwNjIxYjk4N2FlMDFmYTk2MWE0N2Qu
Ljk2ZGFjZjdjN2UxZGE1NGVhZGIzZjllZTBmMjJkOTMyOTM5NWJlM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAK
QEAgLTYyMSwxMCArNjIxLDEwIEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNl
cihEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAgICAgd2hpbGUg
KHBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgZWxlbVN0YWNrLmFwcGVuZChwYXJlbnRFbGVtZW50
KTsKIAotICAgICAgICBDb250YWluZXJOb2RlKiBuID0gcGFyZW50RWxlbWVudC0+cGFyZW50Tm9k
ZSgpOwotICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgQ29u
dGFpbmVyTm9kZSogbm9kZSA9IHBhcmVudEVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAg
aWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBwYXJlbnRFbGVtZW50ID0gdG9FbGVtZW50KG4pOworICAgICAgICBwYXJlbnRFbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgfQogCiAgICAgaWYgKGVsZW1TdGFjay5p
c0VtcHR5KCkpCkBAIC04ODEsMzQgKzg4MSwzNCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpl
bmRFbGVtZW50TnMoKQogCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiBuID0gbV9jdXJyZW50Tm9kZTsKLSAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
KyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSA9IG1fY3VycmVudE5vZGU7CisgICAgbm9k
ZS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKICAgICAvLyBPbmNlIHdlIHJlYWNoIHRoZSBk
ZXB0aCBhZ2FpbiB3aGVyZSBlbnRpdHkgZXhwYW5zaW9uIHN0YXJ0ZWQsIHN0b3AgZXhlY3V0aW5n
IHRoZSB3b3JrLWFyb3VuZC4KICAgICBpZiAoaGFja0Fyb3VuZExpYlhNTEVudGl0eVBhcnNpbmdC
dWcoKSAmJiBjb250ZXh0KCktPmRlcHRoIDw9IGRlcHRoVHJpZ2dlcmluZ0VudGl0eUV4cGFuc2lv
bigpKQogICAgICAgICBzZXREZXB0aFRyaWdnZXJpbmdFbnRpdHlFeHBhbnNpb24oLTEpOwogCi0g
ICAgaWYgKCFzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKHBhcnNlckNvbnRlbnRQb2xpY3koKSkg
JiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUodG9FbGVt
ZW50KG4uZ2V0KCkpKSkgeworICAgIGlmICghc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChwYXJz
ZXJDb250ZW50UG9saWN5KCkpICYmIGlzPEVsZW1lbnQ+KCpub2RlKSAmJiB0b1NjcmlwdEVsZW1l
bnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKSkgewogICAgICAgICBw
b3BDdXJyZW50Tm9kZSgpOwotICAgICAgICBuLT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgIG5vZGUtPnJlbW92ZShJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpIHx8ICFtX3ZpZXcpIHsKKyAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhbV92aWV3KSB7CiAgICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gdG9FbGVtZW50KG4uZ2V0KCkpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSk7CiAKICAgICAvLyBUaGUgZWxlbWVudCdzIHBhcmVudCBtYXkgaGF2ZSBh
bHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIGRvY3VtZW50LgogICAgIC8vIFBhcnNpbmcgY29udGlu
dWVzIGluIHRoaXMgY2FzZSwgYnV0IHNjcmlwdHMgYXJlbid0IGV4ZWN1dGVkLgotICAgIGlmICgh
ZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7CisgICAgaWYgKCFlbGVtZW50LmluRG9jdW1lbnQoKSkg
ewogICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2li
bGUoZWxlbWVudCk7CisgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudElmUG9zc2libGUoJmVsZW1lbnQpOwogICAgIGlmICghc2NyaXB0RWxlbWVudCkgewog
ICAgICAgICBwb3BDdXJyZW50Tm9kZSgpOwogICAgICAgICByZXR1cm47CkBAIC05MjYsMTQgKzky
NiwxNCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAg
ICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVs
ZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgZG9jdW1lbnQoKS0+dXJsKCksIG1fc2NyaXB0U3RhcnRQ
b3NpdGlvbikpOwogICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJF
eGVjdXRlZCgpKSB7CiAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQgPSBzY3JpcHRFbGVtZW50
LT5jYWNoZWRTY3JpcHQoKTsKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7
CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAmZWxlbWVudDsKICAgICAgICAgICAgIG1f
cGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogCiAgICAgICAgICAgICAvLyBtX3BlbmRp
bmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIGFkZENs
aWVudCgpIGV4ZWN1dGVkIGl0LgogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKICAg
ICAgICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSAwOworICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gbnVs
bHB0cjsKIAogICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIGRldGFjaGVkIHRoZSBwYXJz
ZXIKICAgICAgICAgaWYgKGlzRGV0YWNoZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlJlbmRlckxheWVyLm1tCmluZGV4IDJmNDU3OGQ4NDI4MzhmOWE4YjkzODUzM2U5MmMxN2Zi
MzAzOWJkNDMuLjg0ZmIzNzYwMGIzM2FkNzZhZjcxNjdjOTNiNGFjMmI1ZDg5ZWJhODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbQpAQCAtNTIsNyArNTIs
NyBAQCArIChOU1N0cmluZyAqKW5hbWVGb3JMYXllcjooUmVuZGVyTGF5ZXIqKWxheWVyCiAgICAg
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwogICAgIE5T
U3RyaW5nICpuYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnJlbmRlcmVyLnJl
bmRlck5hbWUoKV07CiAKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLm5vZGUo
KSAmJiByZW5kZXJlci5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChyZW5kZXJl
ci5ub2RlKCkpIDogMCkgeworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIubm9k
ZSgpICYmIGlzPEVsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkgPyBkb3duY2FzdDxFbGVtZW50Pihy
ZW5kZXJlci5ub2RlKCkpIDogbnVsbHB0cikgewogICAgICAgICBuYW1lID0gW25hbWUgc3RyaW5n
QnlBcHBlbmRpbmdGb3JtYXQ6QCIgJUAiLCAoTlNTdHJpbmcgKillbGVtZW50LT50YWdOYW1lKCld
OwogICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKICAgICAgICAgICAgIG5hbWUgPSBbbmFt
ZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiBpZD1cIiVAXCIiLCAoTlNTdHJpbmcgKillbGVt
ZW50LT5nZXRJZEF0dHJpYnV0ZSgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RP
TUV2ZW50c0NsYXNzZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5j
cHAKaW5kZXggYjFiNmZlNjkwOTE2ZTI0NjA0ZGFjNWVjODRiNjgwM2MzOGJkNmRkYy4uNTExYmQ4
ZThjMmE5ZDMxZTQ5MjZiNDBjNTFmZWY3ZGI5YmQ3NjVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRE9N
RXZlbnRzQ2xhc3Nlcy5jcHAKQEAgLTU1MCw3ICs1NTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTU1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KAogICAgIHJldHVybiBFX05PVElNUEw7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NTW91c2VFdmVudDo6dG9FbGVtZW50
KCAKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NTW91c2VFdmVudDo6dG9FbGVtZW50KAog
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTU5vZGUqKiAvKnJlc3VsdCovKQogewogICAgIHJl
dHVybiBFX05PVElNUEw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHND
bGFzc2VzLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmgKaW5kZXggYjg4
MTYwNDIzYTEzNTk1YzY2Zjk4YjhlMDk1NTU2NWZjN2UzZjE5NS4uNzFjNTc2ZTZiYzUxYzBjODRj
ZjJkOGZhYjY0NzBjZWNlMzczMTRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRE9N
RXZlbnRzQ2xhc3Nlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMu
aApAQCAtNjEzLDcgKzYxMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZnJvbUVsZW1lbnQoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElE
T01Ob2RlKiogcmVzdWx0KTsKICAgICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgdG9FbGVtZW50KCAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
dG9FbGVtZW50KAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01Ob2RlKiogcmVzdWx0
KTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKaW5kZXgg
NmNlZGFkYTlmY2Q1NzkxMjBmYjMxZWY2NGIwMjMwNDRhOTQ4ZTM2OS4uMTk2MDNjNWMwMTNhMzk3
ZmE4MjkyMGZkNGQzOWYzNzQzN2Q2NTE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJl
bmRlck9iamVjdC5jcHAKQEAgLTY2LDE3ICs2NiwxNyBAQCBXZWJSZW5kZXJPYmplY3Q6OldlYlJl
bmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIHNob3VsZEluY2x1ZGVEZXNj
ZQogICAgIG1fbmFtZSA9IHJlbmRlcmVyLT5yZW5kZXJOYW1lKCk7CiAKICAgICBpZiAoTm9kZSog
bm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsK
LSAgICAgICAgICAgIG1fZWxlbWVudFRhZ05hbWUgPSBlbGVtZW50LT50YWdOYW1lKCk7Ci0gICAg
ICAgICAgICBtX2VsZW1lbnRJRCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgICAgIG1fZWxlbWVudFRhZ05hbWUg
PSBlbGVtZW50LnRhZ05hbWUoKTsKKyAgICAgICAgICAgIG1fZWxlbWVudElEID0gZWxlbWVudC5n
ZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+
aXNTdHlsZWRFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzQ2xhc3MoKSkgeworICAgICAgICAgICAg
aWYgKGVsZW1lbnQuaXNTdHlsZWRFbGVtZW50KCkgJiYgZWxlbWVudC5oYXNDbGFzcygpKSB7CiAg
ICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGNsYXNzTmFtZXM7Ci0g
ICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGVsZW1lbnQt
PmNsYXNzTmFtZXMoKS5zaXplKCkpOworICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShlbGVtZW50LmNsYXNzTmFtZXMoKS5zaXplKCkpOwogCi0gICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBlbGVtZW50LT5jbGFzc05hbWVzKCku
c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzLmFw
cGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXSkpOworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZWxlbWVudC5jbGFzc05hbWVz
KCkuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVz
LmFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGVsZW1lbnQuY2xhc3NOYW1lcygpW2ldKSk7CiAK
ICAgICAgICAgICAgICAgICBtX2VsZW1lbnRDbGFzc05hbWVzID0gQVBJOjpBcnJheTo6Y3JlYXRl
KFdURjo6bW92ZShjbGFzc05hbWVzKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NRWxlbWVudC5tbQppbmRleCA0ZTliMmZmYzY4NjBjMzNjYjJkMjVjMWNjNGFjNDhlMjhkNjY4
ZTZiLi5jZjcxYjFhMjFhZjA0MzE0MzUxOGVmOTcwNjJhNGFjOWI0NGZmYzE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01F
bGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS0RPTUVsZW1lbnQubW0KQEAgLTM1LDI0ICszNSwyNCBAQCBAaW1wbGVtZW50YXRp
b24gV0tET01FbGVtZW50CiAKIC0gKEJPT0wpaGFzQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJp
YnV0ZQogewotICAgIHJldHVybiBXZWJDb3JlOjp0b0VsZW1lbnQoX2ltcGwuZ2V0KCkpLT5oYXNB
dHRyaWJ1dGUoYXR0cmlidXRlKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZG93bmNhc3Q8V2ViQ29y
ZTo6RWxlbWVudD4oKl9pbXBsKS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAogLSAoTlNT
dHJpbmcgKilnZXRBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlCiB7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnRvRWxlbWVudChfaW1wbC5nZXQoKSktPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUp
OworICAgIHJldHVybiBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3JlOjpFbGVtZW50PigqX2ltcGwp
LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiAtICh2b2lkKXNldEF0dHJpYnV0ZTooTlNT
dHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlCiB7CiAgICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyBhYm91dCB0aGUgZXhjZXB0aW9uLgogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWM7Ci0gICAgV2ViQ29yZTo6dG9FbGVtZW50KF9pbXBsLmdldCgpKS0+c2V0QXR0cmlidXRl
KG5hbWUsIHZhbHVlLCBlYyk7CisgICAgV2ViQ29yZTo6ZG93bmNhc3Q8V2ViQ29yZTo6RWxlbWVu
dD4oKl9pbXBsKS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsKIH0KIAogLSAoTlNTdHJp
bmcgKil0YWdOYW1lCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnRvRWxlbWVudChfaW1wbC5nZXQo
KSktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZG93bmNhc3Q8V2ViQ29yZTo6RWxl
bWVudD4oKl9pbXBsKS50YWdOYW1lKCk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhh
bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDMyZTE4N2JjYzliZTFhNjY5M2Q3MDNj
OGVmZTgwZjUzNmIxNjkwZjQuLjE2YTAyNjM5NmJjM2M3NTJhYWU0ZTRiNGQ1MGM1YmI1MzVmZThm
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcApA
QCAtMTE4LDEwICsxMTgsMTAgQEAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6ZG9jdW1lbnQoKQogCiBJbnRSZWN0IEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZTo6ZWxlbWVudEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX25v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KCptX25vZGUpKQogICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0
KCkpLT5ib3VuZHNJblJvb3RWaWV3U3BhY2UoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4oKm1fbm9kZSkuYm91bmRzSW5Sb290Vmlld1NwYWNlKCk7CiB9CiAgICAgCiBJbnRSZWN0IElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6cmVuZGVyUmVjdChib29sKiBpc1JlcGxhY2VkKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGRm
YmI3OTJmNWYyNDAzZTBmMDFkZjE5NDJiNzAzMDNkODBkZWJhYmIuLmY0NDQ3MzRmODNjMTcyYTM4
ZmMyYjUxNDBjZTM4ZTA2NGVjNmViNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
SGl0VGVzdFJlc3VsdC5jcHAKQEAgLTExNCwxMCArMTE0LDEwIEBAIEJ1bmRsZUhpdFRlc3RSZXN1
bHRNZWRpYVR5cGUgSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjptZWRpYVR5cGUoKSBjb25z
dAogICAgIHJldHVybiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlTm9uZTsKICNlbHNlCiAg
ICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5v
bmU7CiAgICAgCi0gICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmlzTWVkaWFFbGVtZW50KCkpCisg
ICAgaWYgKCFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNNZWRpYUVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVOb25lOwogICAgIAogICAgIHJl
dHVybiBtX2hpdFRlc3RSZXN1bHQubWVkaWFJc1ZpZGVvKCkgPyBCdW5kbGVIaXRUZXN0UmVzdWx0
TWVkaWFUeXBlVmlkZW8gOiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlQXVkaW87ICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDY2MzExNjEzY2NiZjk3NjY0YWI4ZTBjZTcwMGIzNzQ5NWM3NTMwYjcuLjdkMjlj
MDM2ZDcwZDdiMDEyMjY5ZjdlNmY5MzNkOGFjYmE1YzgxZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUxNSw4ICs1
MTUsOCBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRUYXBIaWdobGlnaHRGb3JOb2RlSWZOZWNlc3Nhcnko
dWludDY0X3QgcmVxdWVzdElELCBOb2RlKiBub2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKGlzRWxlbWVudCgqbm9kZSkpCi0gICAgICAgIHByZWZldGNoRE5T
KHRvRWxlbWVudCgqbm9kZSkuYWJzb2x1dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICBpZiAoaXM8
RWxlbWVudD4oKm5vZGUpKQorICAgICAgICBwcmVmZXRjaEROUyhkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkuYWJzb2x1dGVMaW5rVVJMKCkuaG9zdCgpKTsKIAogICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOwogICAgIGlmIChSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KSkgewpAQCAtNjA0LDggKzYwNCw4IEBAIHZvaWQgV2ViUGFnZTo6aW5zcGVjdG9yTm9kZVNlYXJj
aEVuZGVkQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIAogdm9pZCBXZWJQ
YWdlOjpibHVyQXNzaXN0ZWROb2RlKCkKIHsKLSAgICBpZiAobV9hc3Npc3RlZE5vZGUgJiYgbV9h
c3Npc3RlZE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgdG9FbGVtZW50KG1fYXNzaXN0
ZWROb2RlLmdldCgpKS0+Ymx1cigpOworICAgIGlmIChtX2Fzc2lzdGVkTm9kZSAmJiBpczxFbGVt
ZW50PigqbV9hc3Npc3RlZE5vZGUpKQorICAgICAgICBkb3duY2FzdDxFbGVtZW50PigqbV9hc3Np
c3RlZE5vZGUpLmJsdXIoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRBc3Npc3RlZE5vZGVWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTg4OCw3ICsxODg4LDcgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW50ZXJhY3Rp
b25JbmZvcm1hdGkKICAgICBpZiAoaGl0Tm9kZSkgewogICAgICAgICBpbmZvLmNsaWNrYWJsZUVs
ZW1lbnROYW1lID0gaGl0Tm9kZS0+bm9kZU5hbWUoKTsKIAotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gaGl0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KGhpdE5vZGUpIDogMDsK
KyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KGhpdE5vZGUpID8gZG93bmNh
c3Q8RWxlbWVudD4oaGl0Tm9kZSkgOiBudWxscHRyOwogICAgICAgICBpZiAoZWxlbWVudCkgewog
ICAgICAgICAgICAgRWxlbWVudCogbGlua0VsZW1lbnQgPSBudWxscHRyOwogICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJ
bWFnZSgpKSB7CkBAIC0yMDA2LDcgKzIwMDYsNyBAQCBzdGF0aWMgaW5saW5lIEVsZW1lbnQqIG5l
eHRGb2N1c2FibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgUGFnZSogcGFnZSwgYm9vbCBpcwog
ewogICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXkgPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUo
KTsKIAotICAgIEVsZW1lbnQqIG5leHRFbGVtZW50ID0gdG9FbGVtZW50KHN0YXJ0Tm9kZSk7Cisg
ICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOwog
ICAgIGRvIHsKICAgICAgICAgbmV4dEVsZW1lbnQgPSBpc0ZvcndhcmQgPyBwYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5uZXh0Rm9jdXNhYmxlRWxlbWVudChGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9j
dXNOYXZpZ2F0aW9uU2NvcGVPZigmbmV4dEVsZW1lbnQtPmRvY3VtZW50KCkpLCBuZXh0RWxlbWVu
dCwga2V5LmdldCgpKQogICAgICAgICAgICAgOiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5wcmV2
aW91c0ZvY3VzYWJsZUVsZW1lbnQoRm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlv
blNjb3BlT2YoJm5leHRFbGVtZW50LT5kb2N1bWVudCgpKSwgbmV4dEVsZW1lbnQsIGtleS5nZXQo
KSk7CkBAIC0yMTYzLDcgKzIxNjMsNyBAQCB2b2lkIFdlYlBhZ2U6OmVsZW1lbnREaWRGb2N1cyhX
ZWJDb3JlOjpOb2RlKiBub2RlKQogICAgICAgICAvLyBhIHByb2dyYW1tYXRpYyBmb2N1cyBoYXBw
ZW5pbmcgd2hpbGUgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgc2hvd24uIE9uY2Ugd2UgaGF2ZSBh
IHdheSB0bwogICAgICAgICAvLyBrbm93IHRoZSBrZXlib2FyZCBzdGF0ZSBpbiB0aGUgV2ViIFBy
b2Nlc3MsIHdlIHNob3VsZCByZWZpbmUgdGhlIGNvbmRpdGlvbi4KICAgICAgICAgaWYgKG1fdXNl
cklzSW50ZXJhY3RpbmcpCi0gICAgICAgICAgICBtX2Zvcm1DbGllbnQtPndpbGxCZWdpbklucHV0
U2Vzc2lvbih0aGlzLCB0b0VsZW1lbnQobm9kZSksIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpu
b2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpLCB1c2VyRGF0YSk7CisgICAgICAgICAgICBtX2Zvcm1D
bGllbnQtPndpbGxCZWdpbklucHV0U2Vzc2lvbih0aGlzLCBkb3duY2FzdDxFbGVtZW50Pihub2Rl
KSwgV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKm5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSksIHVz
ZXJEYXRhKTsKIAogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0QXNz
aXN0aW5nTm9kZShpbmZvcm1hdGlvbiwgbV91c2VySXNJbnRlcmFjdGluZywgbV9oYXNQZW5kaW5n
Qmx1ck5vdGlmaWNhdGlvbiwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRh
dGEuZ2V0KCkpKSk7CiAgICAgICAgIG1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb24gPSBmYWxz
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238905</attachid>
            <date>2014-09-29 20:22:28 -0700</date>
            <delta_ts>2014-09-30 12:59:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137241-20140929202229.patch</filename>
            <type>text/plain</type>
            <size>213677</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFiZDhkN2UxMGU4OTFh
NWVkY2UwZDcyNDJmODRkMjU4NDE5MGJiOC4uMGIzNGY0YzhmNWQwZDdlOTA3ZjQ2OTMzNzg4NDll
MzM0ZTI1MzJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NCBAQAorMjAxNC0wOS0yOSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3du
Y2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQgaW5zdGVh
ZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzUm9sZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJlZ2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlTWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51
TGlzdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcmVzc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6bmF0aXZlQWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExl
dmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpjbGFzc0xpc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmhlbHBUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhhbmRsZUFjdGl2ZURl
c2NlbmRhbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRlck9iamVjdElzT2JzZXJ2YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbmhlcml0
c1ByZXNlbnRhdGlvbmFsUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRBY2Nlc3NpYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdSb2xlRm9yTVNBQSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0b25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbjo6cHJlc3MpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp3cmFw
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNSZWFjaGFibGVGcm9tRE9NKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnN0eWxlZE5vZGUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lSZW5kZXJU
cmVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6bm90aWZ5Q2hp
bGRSZW1vdmVkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXI6Om5vdGlmeURlc2Nl
bmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVS
ZW1vdmFsTm90aWZpZXI6Om5vdGlmeURlc2NlbmRhbnRSZW1vdmVkRnJvbURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZVJlbW92YWxOb3RpZmllcjo6bm90aWZ5RGVzY2VuZGFu
dFJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjphc3NlcnRDb25uZWN0ZWRTdWJy
YW1lQ291bnRJc0NvbnNpc3RlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludCk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFu
Z3VhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0Vs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFzQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBh
cmVudEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50VHJhdmVyc2FsLmg6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lw
cGluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVk
b0F3YXJlUHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKiBkb20vTGl2ZU5vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlzdDo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkdW1wU3RhdGlzdGljcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3JtYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cHNldWRvQXdhcmVGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXB1dGVkU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmlzRXF1YWxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRGVm
YXVsdE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VQ
cmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6YW5jZXN0b3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZEF0dHJpYnV0ZURlc2MpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2hvd05vZGVQYXRoRm9yVGhpcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3Np
bmdMaW5rRXZlbnRQYXJlbnRPclNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aGFuZGxl
TG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6d2lsbFJlc3BvbmRUb01vdXNl
TW92ZUV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cyk6CisgICAgICAgICogZG9tL05vZGVSZW5kZXJpbmdUcmF2ZXJzYWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6bm9kZUNhbkJlRGlzdHJp
YnV0ZWQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6ZWxlbWVudCk6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9TaGFk
b3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzaGFkb3dSb290KToKKyAgICAgICAg
KiBkb20vU3RhdGljTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxp
c3Q6Om5hbWVkSXRlbSk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3Vz
SWZJZGVudGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdl
RW5kV2l0aE5leHRJZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6CisgICAgICAgICogZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVt
b3ZhYmxlQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNs
b25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9Q
cmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQpOgorICAgICAg
ICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmluZ05vZGVSZW1vdmVz
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FyZXRCYXNlOjpwYWludENhcmV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKToKKyAgICAgICAg
KiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXApOgorICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbmRUYWcpOgorICAgICAgICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpoYXZlU2FtZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
aGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZSk6
CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNo
ZXM6OnByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hl
czo6Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjph
Z2dyZWdhdGVkQXR0cmlidXRlc0ZvckFuY2VzdG9ycyk6CisgICAgICAgIChIVE1MQ29udmVydGVy
OjphZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMpOgorICAgICAg
ICAoSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRp
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5n
VGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0FuY2hvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6YXJlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmRl
cHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
bmRlcmVyRm9yQ2FyZXRQYWludGluZyk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXBJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVGcmFnbWVudEZyb21UZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxEZXRhaWxz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWxzU3VtbWFyeUVsZW1lbnQ6OmZh
bGxiYWNrU3VtbWFyeSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppc0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6aXNIVE1MTWVkaWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVEb2NOYW1l
ZEl0ZW0pOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNvdXJjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxTdW1tYXJ5
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NsaWNrYWJsZUNvbnRyb2wpOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjphdHRhY2hMYXRlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpodG1sRWxl
bWVudCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6ZWxlbWVudCk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
SW5zZXJ0aW9uUG9pbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudEVsZW1lbnRGb3JEaXN0
cmlidXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93Um9vdE9mUGFyZW50Rm9yRGlzdHJp
YnV0aW9uKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6bWFya0Z1dHVyZUFuZFBhc3ROb2Rlcyk6
CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01QYXRjaFN1cHBvcnQ6OmlubmVyUGF0Y2hOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVp
bGRBcnJheUZvclJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OnJlc2V0UHNldWRvU3RhdGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmls
aXR5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlk
SW52YWxpZGF0ZVN0eWxlQXR0cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVG
aW5kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTm9kZUZpbmRlcjo6c2VhcmNo
VXNpbmdET01UcmVlVHJhdmVyc2FsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckVsZW1lbnRJbmZvKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dCk6CisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50
VW5kZXJNb3VzZSk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZERyb3Bab25lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRh
dGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdh
dGlvblNjb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2Fi
bGVTaGFkb3dIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlRWxlbWVudEFjcm9z
c0ZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRWxl
bWVudFdpdGhFeGFjdFRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRFbGVtZW50V2l0
aEdyZWF0ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0VsZW1lbnRXaXRo
TG93ZXJUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6Om5leHRG
b2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6cHJl
dmlvdXNGb2N1c2FibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemVGcmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Ojppbm5lckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6aW5uZXJOb25TaGFyZWRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRldGFp
bHNNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGV0YWlsc01hcmtlcjo6aXNP
cGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bGVtZW50Ojpub25Qc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OmdlbmVyYXRpbmdFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UnVieS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6aXNGb2N1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc1ByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0
dG9uUGFydFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9u
bHlDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0hvdmVyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpub2RlSGFzQ2xhc3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2VkU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6Y29udGFpbmVyQ29udGFpbnNPbmVPZlRhZ3MpOgorICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MQmxvY2s6OmlzQ2hpbGRBbGxvd2VkKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjphdHRhY2hDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YXR0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoRGlzdHJpYnV0ZWRDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6ZGV0YWNoQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OnJlc29sdmVTaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNv
bHZlVHJlZSk6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUpOgor
ICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiB4
bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6
OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBh
dGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpub2RlTWF0Y2hlc0Jhc2ljVGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOgorICAgICAg
ICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKwogMjAxNC0wOS0yOSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlzPD4o
KSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZkOGVi
ZTNmODk4N2Y2M2YxMWE2ODA2MWFhYTIyMjE1OGMxNjQ4Li4wNzk3YjNkN2ZjNWQ5YzY0ZDZlNGQ4
MTI2ZWI0NWQwZjNhNWE2MWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2Ug
aXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBF
bGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAgICAgICAgdG9FbGVtZW50KCku
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tOgorICAgICAgICAoK1tXZWJS
ZW5kZXJMYXllciBuYW1lRm9yTGF5ZXI6XSk6CisKIDIwMTQtMDktMjggIEd5dXlvdW5nIEtpbSAg
PGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIENvbG9ySW5wdXRUeXBl
IGNsYXNzIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGY2NzEyZmU5NmY0
Yjk5YTc4NGE5ODAzYmEwZTFiMjA4M2ViNGY3NzcuLjI2OTBkYzE0OTU0NjRlYjM0NjAzNzdkZDQx
ODEyNjYwZDllOTQxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0w
OS0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBpczw+
KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzI0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIEVsZW1l
bnQgaW5zdGVhZCBvZiBpc0VsZW1lbnROb2RlKCkgLworICAgICAgICB0b0VsZW1lbnQoKS4KKwor
ICAgICAgICAqIERPTUV2ZW50c0NsYXNzZXMuY3BwOgorICAgICAgICAoRE9NTW91c2VFdmVudDo6
dG9FbGVtZW50KToKKyAgICAgICAgKiBET01FdmVudHNDbGFzc2VzLmg6CisKIDIwMTQtMDktMjkg
IENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8
PigpIC8gZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNz
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCA2NWI1NjkzNmE5MWQ4NDkzNWYzNTYzYWVkNzRlZTc1ZWQ5MDg2YjNl
Li43NDg1MjM4Njk2NmRiM2FlNWQ3Y2JiMWNkZjliZTUxZGNhNmE5ZWVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTQtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFbGVtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFbGVtZW50IGluc3RlYWQgb2YgaXNFbGVtZW50Tm9kZSgpIC8KKyAg
ICAgICAgdG9FbGVtZW50KCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5kZXJPYmplY3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQu
bW06CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBoYXNBdHRyaWJ1dGU6XSk6CisgICAgICAgICgt
W1dLRE9NRWxlbWVudCBnZXRBdHRyaWJ1dGU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCBz
ZXRBdHRyaWJ1dGU6dmFsdWU6XSk6CisgICAgICAgICgtW1dLRE9NRWxlbWVudCB0YWdOYW1lXSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjplbGVtZW50Qm91bmRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlSGl0VGVzdFJlc3VsdDo6bWVkaWFUeXBlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNlbmRU
YXBIaWdobGlnaHRGb3JOb2RlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpibHVyQXNzaXN0ZWROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UG9zaXRp
b25JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6Om5leHRGb2N1c2FibGVFbGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKwogMjAxNC0wOS0y
OSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGlz
PD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDY3NDc1YzI3YmZjMDE1Nzg1YjlhMGMx
MWMwNTFmYWUzM2ZjOGFmOGUuLjZkMmYzMmNiODEwZjQ0N2Y2Y2FjNDk1MTFmYzJmNzE4MDBiMTVh
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cApAQCAtMjUzLDEwICsyNTMsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNo
ZTo6Z2V0KE5vZGUqIG5vZGUpCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFrZSBhIGNvbnN0IGNo
YXIqLCBidXQgb25lIGNhbGxlciBwYXNzZXMgbnVsbEF0b20uCiBib29sIG5vZGVIYXNSb2xlKE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiByb2xlVmFsdWUgPSB0b0VsZW1lbnQo
bm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0dHIpOworICAgIGF1dG8mIHJvbGVWYWx1ZSA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKICAg
ICBpZiAocm9sZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHJvbGVWYWx1ZS5pc0VtcHR5KCk7
CiAgICAgaWYgKHJvbGVWYWx1ZS5pc0VtcHR5KCkpCkBAIC0yOTQsNyArMjk0LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gY3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTVkdSb290Ojpj
cmVhdGUocmVuZGVyZXIpOwogICAgIAogICAgIC8vIFNlYXJjaCBmaWVsZCBidXR0b25zCi0gICAg
aWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKKyAgICBpZiAobm9kZSAmJiBpczxFbGVt
ZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbjo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAKICAgICBpZiAocmVuZGVyZXIt
PmlzQm94TW9kZWxPYmplY3QoKSkgewpAQCAtNjUzLDEwICs2NTMsMTAgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKE5vZGUqIG5vZGUpCiAgICAgCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUxpdmVSZWdpb25DcmVhdGVkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAg
IFN0cmluZyBsaXZlUmVnaW9uU3RhdHVzID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlh
X2xpdmVBdHRyKTsKICAgICBpZiAobGl2ZVJlZ2lvblN0YXR1cy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhUm9sZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1
dGUocm9sZUF0dHIpOwpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFu
ZGxlTWVudUl0ZW1TZWxlY3RlZChOb2RlKiBub2RlKQogICAgIGlmICghbm9kZUhhc1JvbGUobm9k
ZSwgIm1lbnVpdGVtIikgJiYgIW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbXJhZGlvIikgJiYg
IW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbWNoZWNrYm94IikpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBpZiAoIXRvRWxlbWVudChub2RlKS0+Zm9jdXNlZCgpICYmICFlcXVhbElnbm9y
aW5nQ2FzZSh0b0VsZW1lbnQobm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0
dHIpLCAidHJ1ZSIpKQorICAgIGlmICghZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzZWQo
KSAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRB
dHRyaWJ1dGUoYXJpYV9zZWxlY3RlZEF0dHIpLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgcG9zdE5vdGlmaWNhdGlvbihnZXRPckNyZWF0ZShub2RlKSwgJmRvY3VtZW50KCks
IEFYTWVudUxpc3RJdGVtU2VsZWN0ZWQpOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgdm9pZCBBWE9i
amVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0
YSYgdGV4dE1hcmtlckQKIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRh
YmxlRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGNvbnN0IEVsZW1lbnQqIHJlc3Vs
dCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBjb25zdCBFbGVtZW50KiBlbGVt
ZW50ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFy
ZW50RWxlbWVudCgpOworICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pihu
b2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpOwog
CiAgICAgZm9yICg7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKG5vZGVJc1RleHRDb250cm9sKGVsZW1lbnQpKQpAQCAtMTA3Myw4ICsx
MDczLDggQEAgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKiBub2RlKQogICAgIC8vIFRvIGRl
dGVybWluZSBpZiBhIG5vZGUgaXMgQVJJQSB2aXNpYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBw
YXJlbnQgaGllcmFyY2h5IHRvIHNlZSBpZiBhbnlvbmUgc3BlY2lmaWVzCiAgICAgLy8gYXJpYS1o
aWRkZW4gZXhwbGljaXRseS4KICAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVzdE5v
ZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAodGVz
dE5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhcmlhSGlkZGVuVmFsdWUgPSB0b0VsZW1lbnQodGVzdE5vZGUpLT5mYXN0R2V0QXR0cmlidXRl
KGFyaWFfaGlkZGVuQXR0cik7CisgICAgICAgIGlmIChpczxFbGVtZW50Pih0ZXN0Tm9kZSkpIHsK
KyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUhpZGRlblZhbHVlID0gZG93bmNh
c3Q8RWxlbWVudD4oKnRlc3ROb2RlKS5mYXN0R2V0QXR0cmlidXRlKGFyaWFfaGlkZGVuQXR0cik7
CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJpYUhpZGRlblZhbHVlLCAiZmFs
c2UiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhcmlhSGlkZGVuVmFsdWUsICJ0cnVlIikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKaW5kZXgg
MDRjNzk4N2Y1ZTg5MmE1ZTlhYmQ4YTBkNWFlOTg4MWM4YzZhNWY5My4uNmUyY2U1NGMyZmUxYTdh
MmM5NjcwOTU4ODAzNjg1MDVjYzdiNmQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcApAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNv
bnN0CiAgICAgaWYgKCFub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biAhdG9FbGVtZW50KG5vZGUoKSktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOworICAgIHJldHVy
biAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUoKSkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24oaW50
IG9wdGlvbkluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAwMjYyZmZkOGE4Mjg0ZGI3NzZmMzli
OWIzNzM0MDY3Mzc1Yjc1ZTk5Li5iZGJlMzQ0ZTAxZTdjMTQzZjg5YzYxMGYxOTFhNzY4YWI5MjFh
ZjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKQEAgLTMyNCw3ICszMjUsNyBAQCBBY2Nlc3NpYmls
aXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJv
bGUoKQogICAgICAgICByZXR1cm4gUGFyYWdyYXBoUm9sZTsKICAgICBpZiAoaXM8SFRNTExhYmVs
RWxlbWVudD4obm9kZSgpKSkKICAgICAgICAgcmV0dXJuIExhYmVsUm9sZTsKLSAgICBpZiAobm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUoKSktPmlzRm9jdXNhYmxlKCkp
CisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUoKSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUo
KSkuaXNGb2N1c2FibGUoKSkKICAgICAgICAgcmV0dXJuIEdyb3VwUm9sZTsKICAgICAKICAgICBy
ZXR1cm4gVW5rbm93blJvbGU7CkBAIC00NDEsOSArNDQyLDkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FudmFzSGFzRmFsbGJhY2tDb250ZW50KCkgY29uc3QK
IHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQorICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTENhbnZh
c0VsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCYgY2Fu
dmFzRWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgSFRNTENhbnZhc0VsZW1lbnQmIGNh
bnZhc0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKm5vZGUpOwogICAgIC8v
IElmIGl0IGhhcyBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgZWxlbWVudHMsIHdlJ2xsIGFzc3VtZSBp
dCBtaWdodCBiZSBmYWxsYmFjawogICAgIC8vIGNvbnRlbnQuIElmIGl0IGhhcyBubyBjaGlsZHJl
biBvciBpdHMgb25seSBjaGlsZHJlbiBhcmUgbm90IGVsZW1lbnRzCiAgICAgLy8gKGUuZy4ganVz
dCB0ZXh0IG5vZGVzKSwgaXQgZG9lc24ndCBoYXZlIGZhbGxiYWNrIGNvbnRlbnQuCkBAIC02NDIs
MTAgKzY0MywxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBp
ZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIHJldHVybiAhdG9FbGVtZW50KG5vZGUpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKKyAg
ICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2wo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbmRldGVybWluYXRlKCkg
Y29uc3QKQEAgLTY3Nyw5ICs2NzgsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c1ByZXNzZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSktPmFjdGl2ZSgp
OworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYWN0aXZlKCk7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CkBAIC03MTksNyAr
NzIwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIb3ZlcmVkKCkgY29uc3QK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBub2Rl
LT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5ob3ZlcmVkKCk7CisgICAgcmV0
dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5ob3ZlcmVk
KCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3QKQEAgLTk2NSw3ICs5NjYsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YW5jaG9yRWxlbWVudCgpIGNvbnN0CiAgICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRo
YXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hvciBpcyBhbiBIVE1MQW5jaG9yRWxlbWVudAog
ICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5vZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNh
Y2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKS0+aXNBbmNob3IoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtOTk0LDcg
Kzk5NSw3IEBAIHN0YXRpYyBFbGVtZW50KiBuYXRpdmVBY3Rpb25FbGVtZW50KE5vZGUqIHN0YXJ0
KQogICAgIAogICAgIGZvciAoTm9kZSogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoaXNOb2RlQWN0
aW9uRWxlbWVudChjaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KGNoaWxkKTsK
KyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihjaGlsZCk7CiAKICAgICAgICAg
aWYgKEVsZW1lbnQqIHN1YkNoaWxkID0gbmF0aXZlQWN0aW9uRWxlbWVudChjaGlsZCkpCiAgICAg
ICAgICAgICByZXR1cm4gc3ViQ2hpbGQ7CkBAIC0xMDA5LDEwICsxMDEwLDEwIEBAIEVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY3Rpb25FbGVtZW50KCkgY29uc3QKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoaXNOb2RlQWN0aW9uRWxlbWVudChub2RlKSkKLSAg
ICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUpOwogICAgIAogICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJ
bnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2Rl
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogCiAgICAgc3dpdGNo
IChyb2xlVmFsdWUoKSkgewogICAgIGNhc2UgQnV0dG9uUm9sZToKQEAgLTEwMjYsNyArMTAyNyw3
IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY3Rpb25FbGVtZW50KCkgY29u
c3QKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF1dGhvciBpcyBoaWRpbmcgdGhlIHJlYWwgY29u
dHJvbCBlbGVtZW50IGluc2lkZSB0aGUgQVJJQSBlbGVtZW50LgogICAgICAgICBpZiAoRWxlbWVu
dCogbmF0aXZlRWxlbWVudCA9IG5hdGl2ZUFjdGlvbkVsZW1lbnQobm9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbmF0aXZlRWxlbWVudDsKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNDUsNyArMTA0Niw3IEBAIEVsZW1lbnQqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRvbkxpc3RlbmVyKE1vdXNlQnV0dG9uTGlzdGVu
ZXJSZXN1bHRGCiAKICAgICAvLyBjaGVjayBpZiBvdXIgcGFyZW50IGlzIGEgbW91c2UgYnV0dG9u
IGxpc3RlbmVyCiAgICAgLy8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2VhcmNoIGxpa2Ug
YW5jaG9yRWxlbWVudCBkb2VzCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVh
Z2Uobm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogbm9kZS0+cGFyZW50
RWxlbWVudCgpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdlKGlz
PEVsZW1lbnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRF
bGVtZW50KCkpKSB7CiAgICAgICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvZHkgYW5kIHRo
aXMgaXMgbm90IGEgY29udHJvbCBlbGVtZW50LCBkbyBub3QgZXhwb3NlIHByZXNzIGFjdGlvbiBm
b3IgdGhpcyBlbGVtZW50IHVubGVzcyBmaWx0ZXIgaXMgSW5jbHVkZUJvZHlFbGVtZW50LgogICAg
ICAgICAvLyBJdCBjYW4gY2F1c2UgZmFsc2UgcG9zaXRpdmVzLCB3aGVyZSBldmVyeSBwaWVjZSBv
ZiB0ZXh0IGlzIGxhYmVsZWQgYXMgYWNjZXB0aW5nIHByZXNzIGFjdGlvbnMuCiAgICAgICAgIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgJiYgaXNTdGF0aWNUZXh0KCkgJiYgZmlsdGVy
ID09IEV4Y2x1ZGVCb2R5RWxlbWVudCkKQEAgLTEyNTMsOCArMTI1NCw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiYgdGV4dE9yCiAgICAgCiAgICAgYm9vbCBpc0lucHV0VGFnID0gaXM8SFRNTElucHV0RWxl
bWVudD4obm9kZSk7CiAgICAgaWYgKGlzSW5wdXRUYWcgfHwgQWNjZXNzaWJpbGl0eU9iamVjdDo6
aXNBUklBSW5wdXQoYXJpYVJvbGVBdHRyaWJ1dGUoKSkgfHwgaXNDb250cm9sKCkpIHsKLSAgICAg
ICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQodG9FbGVtZW50KG5v
ZGUpKTsKLSAgICAgICAgaWYgKGxhYmVsKSB7CisgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50
KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpIHsKICAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShsYWJlbCk7CiAgICAgICAgICAgICBTdHJpbmcgaW5uZXJUZXh0ID0g
bGFiZWwtPmlubmVyVGV4dCgpOwogICAgICAgICAgICAgLy8gT25seSB1c2UgdGhlIDxsYWJlbD4g
dGV4dCBpZiB0aGVyZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCkBAIC0xNTMyLDIxICsxNTMyLDIyIEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVscFRleHQoKSBjb25zdAogICAgICAg
ICByZXR1cm4gZGVzY3JpYmVkQnk7CiAgICAgCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gYWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgZm9yIChOb2RlKiBjdXJyID0gbm9kZTsgY3Vy
cjsgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoY3Vyci0+aXNIVE1M
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSB0
b0VsZW1lbnQoY3VyciktPmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CisgICAgZm9yIChOb2Rl
KiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PihhbmNlc3RvcikpIHsKKyAgICAg
ICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCphbmNl
c3Rvcik7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkgPSBlbGVtZW50
LmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiAgICAgICAgICAgICBpZiAoIXN1bW1hcnkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdW1tYXJ5OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIHNob3VsZCBiZSB1c2VkIGFzIGhlbHAg
dGV4dCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBiZWluZyB1c2VkIGFzIGRlc2NyaXB0aXZlIHRleHQu
Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gdG9FbGVtZW50KGN1cnIp
LT5nZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGl0bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICAgICAg
aWYgKCF0aXRsZS5pc0VtcHR5KCkgJiYgZGVzY3JpcHRpb24gIT0gdGl0bGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRpdGxlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBPbmx5
IHRha2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBv
ciBhbiB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAogICAgICAgICAvLyBhZGRlZCB0byB0aG9z
ZSBraW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdhcyBtZWFudCBmb3IgYSBjaGls
ZCBlbGVtZW50LgotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iaiA9IGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY3Vycik7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGF4T2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShhbmNlc3Rvcik7CiAgICAgICAg
IGlmIChheE9iaikgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGF4T2Jq
LT5yb2xlVmFsdWUoKTsKICAgICAgICAgICAgIGlmIChyb2xlICE9IEdyb3VwUm9sZSAmJiByb2xl
ICE9IFVua25vd25Sb2xlKQpAQCAtMTU2MCwxMCArMTU2MSwxMCBAQCBTdHJpbmcgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXJpYUxldmVsID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xldmVs
QXR0cik7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMZXZlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJp
YnV0ZShhcmlhX2xldmVsQXR0cik7CiAgICAgaWYgKCFhcmlhTGV2ZWwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gYXJpYUxldmVsLnRvSW50KCk7CiAgICAgCkBAIC0xNzA1LDcgKzE3MDYsNyBA
QCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKCkgY29uc3QKICAgICB9CiAK
ICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChh
cmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBpc0NvbnRyb2woKSkgewotICAgICAgICBIVE1MTGFiZWxF
bGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpOworICAgICAg
ICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVt
ZW50Pihub2RlKSk7CiAgICAgICAgIC8vIFVzZSB0aGUgbGFiZWwgdGV4dCBhcyB0aGUgdGl0bGUg
aWYgMSkgdGhlIHRpdGxlIGVsZW1lbnQgaXMgTk9UIGFuIGV4cG9zZWQgZWxlbWVudCBhbmQgMikg
dGhlcmUncyBubyBBUklBIG92ZXJyaWRlLgogICAgICAgICBpZiAobGFiZWwgJiYgIWV4cG9zZXNU
aXRsZVVJRWxlbWVudCgpICYmICFhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkubGVuZ3Ro
KCkpCiAgICAgICAgICAgICByZXR1cm4gbGFiZWwtPmlubmVyVGV4dCgpOwpAQCAtMTc3MSw3ICsx
NzcyLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KCkgY29uc3QKICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLT5pbm5lclRleHQoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSgpIGNvbnN0CkBAIC0xODQzLDE1ICsxODQ0LDE1
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQm
IGcsIGludCYgYikgY29uc3QKIHN0YXRpYyBTdHJpbmcgYWNjZXNzaWJsZU5hbWVGb3JOb2RlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KG5vZGUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVsID0gZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgRWxlbWVudCYgZWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFy
aWFMYWJlbCA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAg
aWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAg
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShhbHRBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IGVsZW1lbnQuZmFzdEdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBhbHQ7CiAKQEAgLTE4NzIsMTIgKzE4NzMsMTIgQEAgc3RhdGljIFN0cmluZyBhY2Nlc3Np
YmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKGF4T2JqZWN0LT5hY2Nlc3Np
YmxlTmFtZURlcml2ZXNGcm9tQ29udGVudCgpKQogICAgICAgICAgICAgdGV4dCA9IGF4T2JqZWN0
LT50ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZShBY2Nl
c3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGU6OlRleHRVbmRlckVsZW1lbnRNb2RlSW5jbHVk
ZU5hbWVGcm9tQ29udGVudHNDaGlsZHJlbiwgdHJ1ZSkpOwogICAgIH0gZWxzZQotICAgICAgICB0
ZXh0ID0gZWxlbWVudC0+aW5uZXJUZXh0KCk7CisgICAgICAgIHRleHQgPSBlbGVtZW50LmlubmVy
VGV4dCgpOwogCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRleHQ7
CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKICAgICAKQEAgLTE5NDMsMTUgKzE5NDQsMTUgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25z
dAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsK
KyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogCi0gICAg
aWYgKGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChlbGVtZW50Lmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZWxlbWVudC0+c3VwcG9ydHNGb2N1cygpOworICAgIHJldHVybiBlbGVtZW50LnN1cHBvcnRz
Rm9jdXMoKTsKIH0KIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDJjZjQwYzNi
ZWQxMWU1MTQ2MWM4ZGM4ZWEwNjQwYzA2NDViYWUxYTMuLjkxNGRiZGRhNzI5OWE2NTc5NjBiMzYx
NWQwZTBiNmZlYjI5ZWJjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtODUxLDggKzg1MSw4IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6cHJlc3MoKQogICAgICAgICBkb2N1bWVudC0+cmVuZGVyVmlldygp
LT5oaXRUZXN0KHJlcXVlc3QsIGhpdFRlc3RSZXN1bHQpOwogICAgICAgICBpZiAoaGl0VGVzdFJl
c3VsdC5pbm5lck5vZGUoKSkgewogICAgICAgICAgICAgTm9kZSogaW5uZXJOb2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vZGUoKS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAg
ICAgICAgICAgaWYgKGlubmVyTm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
IGhpdFRlc3RFbGVtZW50ID0gdG9FbGVtZW50KGlubmVyTm9kZSk7CisgICAgICAgICAgICBpZiAo
aXM8RWxlbWVudD4oaW5uZXJOb2RlKSkKKyAgICAgICAgICAgICAgICBoaXRUZXN0RWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KGlubmVyTm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0xNzU5LDIwICsxNzU5LDE5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbnZhbGlk
U3RhdHVzKCkgY29uc3QKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzVGFnTmFtZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSB0aGlz
LT5ub2RlKCk7Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudCgqbm9kZSkuaGFzVGFnTmFtZSh0YWdOYW1lKTsKKyAgICByZXR1cm4gbm9kZSAmJiBp
czxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaGFzVGFnTmFtZSh0
YWdOYW1lKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICBOb2RlKiBlbGVt
ZW50Tm9kZSA9IG5vZGUoKTsKLSAgICBpZiAoIWVsZW1lbnROb2RlKQorICAgIE5vZGUqIG5vZGUg
PSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCFlbGVtZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gdG9FbGVtZW50KGVsZW1lbnROb2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+
ZmFzdEhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuZmFzdEhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogICAgIAogY29uc3QgQXRv
bWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdApAQCAtMTk2Nyw4ICsxOTY2LDggQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAogRWxlbWVudCogQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
IHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIApAQCAtMjExNSwxMCArMjExNCwxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6aWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0CiB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmNsYXNzTGlzdChWZWN0b3I8U3RyaW5nPiYgY2xhc3NMaXN0KSBjb25zdAogewogICAg
IE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgaWYgKCFub2RlIHx8ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIERP
TVRva2VuTGlzdCYgbGlzdCA9IGVsZW1lbnQtPmNsYXNzTGlzdCgpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGxpc3QubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aDsgaysrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggODU2MDVlOTM3NGQwODZiZjc0ZTYyNzUy
NjFhZDFhZjA5ZjlkOWM0Zi4uOTcwZWIyZTBmZGRmMzZiYjBiN2M2YTE4ZmMyZjA1NDgxYzAyMGUx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC01ODYsNyArNTg2LDcgQEAgRWxlbWVudCogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaG9yRWxlbWVudCgpIGNvbnN0CiAgICAgTm9kZSog
bm9kZSA9IGN1cnJSZW5kZXJlci0+bm9kZSgpOwogICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXM8SFRNTEFuY2hvckVsZW1lbnQ+KG5v
ZGUpIHx8IChub2RlLT5yZW5kZXJlcigpICYmIGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5k
ZXJlcigpKS0+aXNBbmNob3IoKSkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUp
OworICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYwNiwyMSArNjA2LDIyIEBAIFN0cmluZyBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBk
ZXNjcmliZWRCeTsKICAgICAKICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24oKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG1fcmVuZGVyZXI7
IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+bm9kZSgp
ICYmIGN1cnItPm5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHN1bW1hcnkgPSB0b0VsZW1lbnQoY3Vyci0+bm9kZSgpKS0+Z2V0QXR0cmli
dXRlKHN1bW1hcnlBdHRyKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBtX3Jl
bmRlcmVyOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKKyAgICAg
ICAgaWYgKGFuY2VzdG9yLT5ub2RlKCkgJiYgaXM8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yLT5ub2Rl
KCkpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxF
bGVtZW50PigqYW5jZXN0b3ItPm5vZGUoKSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHN1bW1hcnkgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiAgICAgICAg
ICAgICBpZiAoIXN1bW1hcnkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdW1t
YXJ5OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIHNo
b3VsZCBiZSB1c2VkIGFzIGhlbHAgdGV4dCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBiZWluZyB1c2Vk
IGFzIGRlc2NyaXB0aXZlIHRleHQuCi0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRp
dGxlID0gdG9FbGVtZW50KGN1cnItPm5vZGUoKSktPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwor
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKHRpdGxlQXR0cik7CiAgICAgICAgICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSAmJiBkZXNj
cmlwdGlvbiAhPSB0aXRsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGU7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIE9ubHkgdGFrZSBoZWxwIHRleHQgZnJvbSBhbiBhbmNl
c3RvciBlbGVtZW50IGlmIGl0cyBhIGdyb3VwIG9yIGFuIHVua25vd24gcm9sZS4gSWYgaGVscCB3
YXMgCiAgICAgICAgIC8vIGFkZGVkIHRvIHRob3NlIGtpbmRzIG9mIGVsZW1lbnRzLCBpdCBpcyBs
aWtlbHkgaXQgd2FzIG1lYW50IGZvciBhIGNoaWxkIGVsZW1lbnQuCi0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGF4T2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjdXJyKTsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmogPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKGFuY2VzdG9yKTsKICAgICAgICAgaWYgKGF4T2JqKSB7CiAgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXhPYmotPnJvbGVWYWx1ZSgpOwogICAgICAgICAgICAg
aWYgKHJvbGUgIT0gR3JvdXBSb2xlICYmIHJvbGUgIT0gVW5rbm93blJvbGUpCkBAIC04NDUsNyAr
ODQ2LDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGVja2JveE9y
UmFkaW9SZWN0KCkgY29uc3QKICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAgICAgCi0gICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZv
ckVsZW1lbnQodG9FbGVtZW50KG1fcmVuZGVyZXItPm5vZGUoKSkpOworICAgIEhUTUxMYWJlbEVs
ZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG1fcmVuZGVy
ZXItPm5vZGUoKSkpOwogICAgIGlmICghbGFiZWwgfHwgIWxhYmVsLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7CiAgICAgCkBAIC0xMTA1LDkgKzExMDYsOSBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZVVJ
RWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKHRvUmVuZGVyRmllbGRzZXQobV9yZW5kZXJlciktPmZpbmRMZWdlbmQoUmVuZGVyRmllbGRz
ZXQ6OkluY2x1ZGVGbG9hdGluZ09yT3V0T2ZGbG93KSk7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVu
dCh0b0VsZW1lbnQobm9kZSkpOworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxG
b3JFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKICAgICBpZiAobGFiZWwgJiYgbGFi
ZWwtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGxhYmVsKTsKIApAQCAtMTQ2Niw5ICsxNDY3LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NLZXkoKSBjb25zdAogICAgIE5vZGUqIG5v
ZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
bnVsbEF0b207Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIG51bGxBdG9tOwotICAgIHJldHVybiB0b0Vs
ZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKIH0KIAog
VmlzaWJsZVNlbGVjdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb24oKSBj
b25zdApAQCAtMTU0MiwxMSArMTU0MywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSwgKHZhbHVlKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOyAgICAgICAgCisgICAg
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCAodmFs
dWUpID8gInRydWUiIDogImZhbHNlIik7CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKSBjb25zdApAQCAtMTY0Niw3ICsxNjQ2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRGb2N1c2VkKGJvb2wgb24pCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwogCi0g
ICAgaWYgKCFvbiB8fCAhbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYg
KCFvbiB8fCAhbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgZG9jdW1lbnQt
PnNldEZvY3VzZWRFbGVtZW50KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTY1Nyw3ICsxNjU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1
c2VkKGJvb2wgb24pCiAgICAgaWYgKGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpID09IG5vZGUp
CiAgICAgICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkRWxlbWVudChudWxscHRyKTsKIAotICAgIHRv
RWxlbWVudChub2RlKS0+Zm9jdXMoKTsKKyAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZm9j
dXMoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFJv
d3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWxlY3RlZFJvd3MpCkBAIC0xNjc4LDkg
KzE2NzgsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkUm93
cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNlbAogICAgIAogdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBp
ZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5kZXJlci0+bm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVy
LT5ub2RlKCkgfHwgIWlzPEVsZW1lbnQ+KG1fcmVuZGVyZXItPm5vZGUoKSkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCptX3JlbmRlcmVyLT5ub2Rl
KCkpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqbV9yZW5kZXJl
ci0+bm9kZSgpKTsKIAogICAgIGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yMzQzLDcgKzIzNDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZWQoKQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkKIHsKLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAg
RWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRlcmVyKCktPm5vZGUoKSk7
CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFyZW5kZXJlcigp
LT5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpIHx8IHJlbmRlcmVyKCkt
PmRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSAhPSBlbGVtZW50KQpAQCAtMjM4MSw5ICsyMzgx
LDggQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29y
cmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9
IGxhYmVsRm9yRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpOwotICAgICAgICBpZiAobGFiZWwpCisg
ICAgaWYgKG5vZGUgJiYgaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIGlmIChIVE1M
TGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxIVE1MRWxlbWVu
dD4obm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUobGFiZWwpOwogICAgIH0KIApAQCAtMjQwNSw3ICsyNDA0LDcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJPYmplY3RJc09ic2VydmFibGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBUZXh0Ym94ZXMgc2hvdWxk
IHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMuCi0gICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUsICJ0ZXh0
Ym94IikgfHwgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBjb250ZW50RWRpdGFibGVBdHRyaWJ1
dGVJc0VuYWJsZWQodG9FbGVtZW50KG5vZGUpKSkpCisgICAgaWYgKG5vZGVIYXNSb2xlKG5vZGUs
ICJ0ZXh0Ym94IikgfHwgKGlzPEVsZW1lbnQ+KG5vZGUpICYmIGNvbnRlbnRFZGl0YWJsZUF0dHJp
YnV0ZUlzRW5hYmxlZChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjk1LDEzICsyNjk0LDEzIEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUo
KSBjb25zdAogICAgICAgICBpZiAoIXBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIGVsZW1l
bnROb2RlID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHBhcmVudCktPm5vZGUoKTsKLSAg
ICAgICAgaWYgKCFlbGVtZW50Tm9kZSB8fCAhZWxlbWVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgTm9kZSogbm9kZSA9IHRvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChwYXJlbnQp
LT5ub2RlKCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIG5hdGl2ZSB0YWcgb2Yg
dGhlIHBhcmVudCBlbGVtZW50IG1hdGNoZXMgYW4gYWNjZXB0YWJsZSBuYW1lLCB0aGVuIHJldHVy
bgogICAgICAgICAvLyBiYXNlZCBvbiBpdHMgcHJlc2VudGF0aW9uYWwgc3RhdHVzLgotICAgICAg
ICBpZiAocG9zc2libGVQYXJlbnRUYWdOYW1lcy0+Y29udGFpbnModG9FbGVtZW50KGVsZW1lbnRO
b2RlKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChwb3NzaWJsZVBhcmVudFRhZ05hbWVzLT5j
b250YWlucyhkb3duY2FzdDxFbGVtZW50Pihub2RlKS0+dGFnUU5hbWUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gcGFyZW50LT5yb2xlVmFsdWUoKSA9PSBQcmVzZW50YXRpb25hbFJvbGU7CiAgICAg
fQogICAgIApAQCAtMzI0NCwxNSArMzI0MywxNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICBp
ZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIGRvbU5vZGUgPSBu
dWxscHRyOworICAgIE5vZGUqIG5vZGUgPSBudWxscHRyOwogICAgIC8vIEZvciB3ZWIgYXJlYXMs
IHNldCB0aGUgYXJpYS1sYWJlbCBvbiB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChpc1dlYkFy
ZWEoKSkKLSAgICAgICAgZG9tTm9kZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCkuZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgICAgIG5vZGUgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmRvY3VtZW50
RWxlbWVudCgpOwogICAgIGVsc2UKLSAgICAgICAgZG9tTm9kZSA9IG1fcmVuZGVyZXItPm5vZGUo
KTsKKyAgICAgICAgbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKIAotICAgIGlmIChkb21Ob2Rl
ICYmIGRvbU5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgdG9FbGVtZW50KGRvbU5vZGUp
LT5zZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIsIG5hbWUpOworICAgIGlmIChub2RlICYmIGlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuc2V0QXR0
cmlidXRlKGFyaWFfbGFiZWxBdHRyLCBuYW1lKTsKIH0KICAgICAKIHN0YXRpYyBib29sIGlzTGlu
a2FibGUoY29uc3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAtMzM3Miwx
NCArMzM3MSwxNCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nUm9s
ZUZvck1TQUEoKSBjb25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBOb2RlKiBu
b2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7Ci0gICAgaWYgKCFzaG91bGRSZXR1cm5UYWdOYW1lQXNSb2xlRm9yTVNBQSgqZWxlbWVudCkp
CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICBp
ZiAoIXNob3VsZFJldHVyblRhZ05hbWVBc1JvbGVGb3JNU0FBKGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gZWxlbWVudC0+dGFnTmFtZSgpOworICAgIHJl
dHVybiBlbGVtZW50LnRhZ05hbWUoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnBvc2l0aW9uYWxEZXNjcmlwdGlvbkZvck1TQUEoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmllbGRCdXR0
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNlYXJj
aEZpZWxkQnV0dG9ucy5jcHAKaW5kZXggZmEzZGNjZGYwNjUyZGI3MTRjMGI1ZTQ0Zjg3MGRjZDM4
ZWUwMGU3MC4uMmM1YzI0NjVhZGVlNTE2MTgxNDY1NzE1MzJhYWNiNDIxMGZjOWZhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2VhcmNoRmll
bGRCdXR0b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlTZWFyY2hGaWVsZEJ1dHRvbnMuY3BwCkBAIC01OCwxMyArNTgsMTMgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5U2VhcmNoRmllbGRDYW5jZWxCdXR0b246OmFjY2Vzc2liaWxpdHlUZXh0KFZlY3Rv
cjxBY2Nlc3NpYmlsaXQKIGJvb2wgQWNjZXNzaWJpbGl0eVNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
OjpwcmVzcygpCiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW5vZGUgfHwgIWlzPEVsZW1l
bnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwogICAgIC8vIFRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgb24gU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50IHJlcXVpcmVzIGhvdmVyLgotICAgIGVsZW1lbnQt
PnNldEhvdmVyZWQodHJ1ZSk7Ci0gICAgZWxlbWVudC0+YWNjZXNzS2V5QWN0aW9uKHRydWUpOwor
ICAgIGVsZW1lbnQuc2V0SG92ZXJlZCh0cnVlKTsKKyAgICBlbGVtZW50LmFjY2Vzc0tleUFjdGlv
bih0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwCmluZGV4IDA1NzQyN2VkOTc2MjEyNGQyY2Q2NjdlZDk4N2ZlZTRhYjFhOTUxYTcuLmUxZDJh
ODIzMTYxNmNkOGQ1ZDVmZTBkNGQ5YTA0NmJlNmNkNTM5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAKQEAgLTUwNiw4ICs1MDYsOCBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3
ZWJraXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyhBdGtPYmplY3QqIG9iamVjdCkKICAgICAvLyBj
YW5ub3QgYmUgZG9uZSBmcm9tIHRoZSBVSVByb2Nlc3MuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMg
aGF2ZSBubyBuZWVkCiAgICAgLy8gZm9yIHRoaXMgaW5mb3JtYXRpb24uCiAgICAgTm9kZSogbm9k
ZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0VsZW1lbnRO
b2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIGlkID0gdG9FbGVtZW50KG5vZGUpLT5nZXRJZEF0dHJp
YnV0ZSgpLnN0cmluZygpOworICAgIGlmIChub2RlICYmIGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIFN0cmluZyBpZCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5nZXRJZEF0dHJpYnV0
ZSgpLnN0cmluZygpOwogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGF0
dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgImh0bWwtaWQi
LCBpZC51dGY4KCkuZGF0YSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRlLmNwcAppbmRleCBlNmM5NTA0YzcyMTNjMzBm
YTFlYWU5MTUzMzBlMmY1N2JmODBlY2I4Li4wOGM1ZjAyNzY0NjYyNWFlNTNmNWJmODVmYWI5Yjdi
ZTRhNTRmOGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTVByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NUHJpdmF0ZS5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgV2ViS2l0RE9NTm9kZSogd3Jh
cChOb2RlKiBub2RlKQogICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgogICAgICAgICBpZiAo
aXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9E
RSh3cmFwKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSkpOwotICAgICAgICByZXR1cm4gV0VC
S0lUX0RPTV9OT0RFKHdyYXBFbGVtZW50KHRvRWxlbWVudChub2RlKSkpOworICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9OT0RFKHdyYXBFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSk7
CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAgcmV0dXJuIFdFQktJVF9E
T01fTk9ERSh3cmFwQXR0cihzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSkpKTsKICAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCmluZGV4IGNmODA2MDlkYTBiZGY2MmY5ZGY4NmE5MmI0ZWFhZTFiMmIwOGI3OTQuLmQ2YzNj
OWRlNmFmNzgzZDhkZGRiOTdlZjdmNDkwOTdlNGVlMWMwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcApAQCAtOTcsOCArOTcsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNPYnNlcnZhYmxlKEpTTm9kZSoganNOb2RlLCBOb2RlKiBub2RlKQogc3RhdGlj
IGlubGluZSBib29sIGlzUmVhY2hhYmxlRnJvbURPTShKU05vZGUqIGpzTm9kZSwgTm9kZSogbm9k
ZSwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgYXV0
byYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgIGlmIChpczxFbGVtZW50Pihu
b2RlKSkgeworICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKTsKIAogICAgICAgICAgICAgLy8gSWYgYSB3cmFwcGVyIGlzIHRoZSBsYXN0IHJlZmVyZW5j
ZSB0byBhbiBpbWFnZSBlbGVtZW50CiAgICAgICAgICAgICAvLyB0aGF0IGlzIGxvYWRpbmcgYnV0
IG5vdCBpbiB0aGUgZG9jdW1lbnQsIHRoZSB3cmFwcGVyIGlzIG9ic2VydmFibGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXgg
ODJiNjViYTQ5M2UxMTVjY2M4YzhkMjk3ZGNjMDU1Yzk2ODMzODRhMi4uMDc5MDE2NzM4ODU2Zjkx
MGU4N2VmMDdjN2U1MzVlZGQ0YjFmMzcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTE2MjksMTUgKzE2MjksMTUgQEAg
Tm9kZSogQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6c3R5bGVkTm9kZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghbV9ub2RlLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50PigqbV9ub2RlKSkKICAgICAgICAg
cmV0dXJuIG1fbm9kZS5nZXQoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG1f
bm9kZS5nZXQoKSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpt
X25vZGUpOwogICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQ7Ci0gICAgaWYgKG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllciA9PSBCRUZPUkUgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50
LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpKQorICAgIGlmIChtX3BzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIgPT0gQkVGT1JFICYmIChwc2V1ZG9FbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkpKQogICAgICAgICByZXR1cm4gcHNldWRvRWxlbWVudDsKLSAgICBpZiAobV9wc2V1ZG9F
bGVtZW50U3BlY2lmaWVyID09IEFGVEVSICYmIChwc2V1ZG9FbGVtZW50ID0gZWxlbWVudC0+YWZ0
ZXJQc2V1ZG9FbGVtZW50KCkpKQorICAgIGlmIChtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIgPT0g
QUZURVIgJiYgKHBzZXVkb0VsZW1lbnQgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKSkK
ICAgICAgICAgcmV0dXJuIHBzZXVkb0VsZW1lbnQ7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
cmV0dXJuICZlbGVtZW50OwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBFVXBkYXRlTGF5b3V0IHVwZGF0ZUxheW91dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAppbmRleCBkYjRhNGIxYjc4NjQwYzBlNzQyMDlhNTUyNmZhN2Q2YTE3ZWYz
NmIwLi4wNzhhNWNhMmUyYzRjZWQ1OWE2ZDMyZGE4MGIzMjA0ZDM2ZDNhODhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00NjcsNyArNDY3LDcgQEAgTm9kZSogU3R5bGVS
ZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNp
dGVkTm9kZUNvdW4KICAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CiAgICAgICAgICAgICAr
K3N1YmNvdW50OwogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09
IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKQotICAgICAgICAgICAgICAg
ICYmIGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXBhcmVudEVsZW1lbnRQcmV2ZW50
c1NoYXJpbmcodG9FbGVtZW50KGN1cnJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICAmJiBpczxF
bGVtZW50PihjdXJyZW50Tm9kZSkgJiYgIXBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoZG93
bmNhc3Q8RWxlbWVudD4oY3VycmVudE5vZGUpKQogICAgICAgICAgICAgICAgICkgewogICAgICAg
ICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgogICAgICAgICAg
ICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggNjUzZjY5NzFiN2EyZTg2
NTNjMTAyOTk4NjdhMWUwZTg4NWNkODM0Yi4uZGNiMTk5MWI3YjFkNDdkZjdhMDNhMmFmYTE5Nzdl
MmY0NDE2MDBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMTAwLDgg
KzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95UmVuZGVyVHJlZUlmTmVlZGVkKE5v
ZGUmIGNoaWxkKQogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBuYW1lZCBmbG93IHRlc3Qu
CiAgICAgaWYgKCFjaGlsZC5yZW5kZXJlcigpICYmICFjaGlsZC5pc05hbWVkRmxvd0NvbnRlbnRO
b2RlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2hpbGQuaXNFbGVtZW50Tm9kZSgpKQot
ICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZSh0b0VsZW1lbnQoY2hpbGQpKTsKKyAgICBp
ZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICBTdHlsZTo6ZGV0YWNoUmVuZGVyVHJlZShk
b3duY2FzdDxFbGVtZW50PihjaGlsZCkpOwogICAgIGVsc2UgaWYgKGlzPFRleHQ+KGNoaWxkKSkK
ICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRSZW5kZXJlcihkb3duY2FzdDxUZXh0PihjaGlsZCkp
OwogfQpAQCAtMzQ3LDkgKzM0Nyw5IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6bm90aWZ5Q2hpbGRJ
bnNlcnRlZChOb2RlJiBjaGlsZCwgQ2hpbGRDaGFuZ2VTb3VyY2Ugc291cmNlKQogdm9pZCBDb250
YWluZXJOb2RlOjpub3RpZnlDaGlsZFJlbW92ZWQoTm9kZSYgY2hpbGQsIE5vZGUqIHByZXZpb3Vz
U2libGluZywgTm9kZSogbmV4dFNpYmxpbmcsIENoaWxkQ2hhbmdlU291cmNlIHNvdXJjZSkKIHsK
ICAgICBDaGlsZENoYW5nZSBjaGFuZ2U7Ci0gICAgY2hhbmdlLnR5cGUgPSBjaGlsZC5pc0VsZW1l
bnROb2RlKCkgPyBFbGVtZW50UmVtb3ZlZCA6IGNoaWxkLmlzVGV4dE5vZGUoKSA/IFRleHRSZW1v
dmVkIDogTm9uQ29udGVudHNDaGlsZENoYW5nZWQ7Ci0gICAgY2hhbmdlLnByZXZpb3VzU2libGlu
Z0VsZW1lbnQgPSAoIXByZXZpb3VzU2libGluZyB8fCBwcmV2aW91c1NpYmxpbmctPmlzRWxlbWVu
dE5vZGUoKSkgPyB0b0VsZW1lbnQocHJldmlvdXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpOwotICAgIGNoYW5nZS5uZXh0U2libGlu
Z0VsZW1lbnQgPSAoIW5leHRTaWJsaW5nIHx8IG5leHRTaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkp
ID8gdG9FbGVtZW50KG5leHRTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KG5leHRTaWJsaW5nKTsKKyAgICBjaGFuZ2UudHlwZSA9IGlzPEVsZW1lbnQ+KGNoaWxkKSA/IEVs
ZW1lbnRSZW1vdmVkIDogaXM8VGV4dD4oY2hpbGQpID8gVGV4dFJlbW92ZWQgOiBOb25Db250ZW50
c0NoaWxkQ2hhbmdlZDsKKyAgICBjaGFuZ2UucHJldmlvdXNTaWJsaW5nRWxlbWVudCA9ICghcHJl
dmlvdXNTaWJsaW5nIHx8IGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZykpID8gZG93bmNhc3Q8
RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nKSA6IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2li
bGluZyhwcmV2aW91c1NpYmxpbmcpOworICAgIGNoYW5nZS5uZXh0U2libGluZ0VsZW1lbnQgPSAo
IW5leHRTaWJsaW5nIHx8IGlzPEVsZW1lbnQ+KG5leHRTaWJsaW5nKSkgPyBkb3duY2FzdDxFbGVt
ZW50PihuZXh0U2libGluZykgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhuZXh0U2li
bGluZyk7CiAgICAgY2hhbmdlLnNvdXJjZSA9IHNvdXJjZTsKIAogICAgIGNoaWxkcmVuQ2hhbmdl
ZChjaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGht
cy5jcHAKaW5kZXggMjE3OTE4ZTZiOTMyZDNmYmNjOGMwODRkOGI3YTJlMDNjNTIwNDY4OS4uYWY1
ZDQxMDk0ZmI2MWNmNTY3ZDRhOTc3MjkyMmFjYjJkNDYzNzY0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCkBAIC00MCwxMCArNDAsMTAgQEAg
dm9pZCBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudEluc2VydGVk
SW50b0RvY3VtZW50KENvbnRhaW5lck4KICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudCgqY2hpbGQpOwogICAgIH0KIAotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2Rl
KCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gdG9FbGVtZW50KG5vZGUpLnNoYWRvd1Jvb3Qo
KSkgeworICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUpLnNoYWRvd1Jvb3QoKSkgewogICAgICAgICBpZiAobm9kZS5pbkRvY3VtZW50KCkgJiYg
cm9vdC0+aG9zdEVsZW1lbnQoKSA9PSAmbm9kZSkKICAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudCgqcm9vdCk7CiAgICAgfQpAQCAtNzEsMTMgKzcxLDEzIEBAIHZvaWQg
Q2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyOjpub3RpZnlEZXNjZW5kYW50UmVtb3ZlZEZyb21Eb2N1
bWVudChDb250YWluZXJOb2RlCiAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1
bWVudCgqY2hpbGQuZ2V0KCkpOwogICAgIH0KIAotICAgIGlmICghbm9kZS5pc0VsZW1lbnROb2Rl
KCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG5vZGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSA9PSAmbm9kZSkKICAgICAgICAgbm9kZS5k
b2N1bWVudCgpLnNldENTU1RhcmdldCgwKTsKIAotICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4g
cm9vdCA9IHRvRWxlbWVudChub2RlKS5zaGFkb3dSb290KCkpIHsKKyAgICBpZiAoUmVmUHRyPFNo
YWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpIHsK
ICAgICAgICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSAmJiByb290LT5ob3N0RWxlbWVudCgpID09
ICZub2RlKQogICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoKnJvb3Qu
Z2V0KCkpOwogICAgIH0KQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIENoaWxkTm9kZVJlbW92YWxO
b3RpZmllcjo6bm90aWZ5RGVzY2VuZGFudFJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBu
bwogICAgICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSgqdG9Db250YWluZXJOb2Rl
KGNoaWxkKSk7CiAgICAgfQogCi0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkKKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUmVmUHRy
PFNoYWRvd1Jvb3Q+IHJvb3QgPSB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpKQorICAgIGlm
IChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRv
d1Jvb3QoKSkKICAgICAgICAgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZSgqcm9vdC5nZXQoKSk7
CiB9CiAKQEAgLTEwMiwxMSArMTAyLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBhc3NlcnRDb25uZWN0
ZWRTdWJyYW1lQ291bnRJc0NvbnNpc3RlbnQoQ29udGFpbmVyTm9kZSYgbm9kZSkKIHsKICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CiAKLSAgICBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVy
RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Pihub2RlKS5j
b250ZW50RnJhbWUoKSkKICAgICAgICAgICAgICsrY291bnQ7CiAKLSAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHJvb3QgPSB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpKQorICAgICAgICBpZiAo
U2hhZG93Um9vdCogcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkK
ICAgICAgICAgICAgIGNvdW50ICs9IGFzc2VydENvbm5lY3RlZFN1YnJhbWVDb3VudElzQ29uc2lz
dGVudCgqcm9vdCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA4ZTgzZTkx
MjAxNGNjYjg2YjZkODEwOGEyZGYzMjk0ODEwN2ViNGUyLi4zZThhY2JjNjY5OThiZWNiNzE1MTg5
MWIxNDA1YWM5ZWRlM2U1ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTk0MSw3ICs5
NDEsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGltcG9y
dGVkTm9kZSwgYm9vbCBkZWVwLCBFeGNlcHRpb25DbwogICAgIGNhc2UgQ09NTUVOVF9OT0RFOgog
ICAgICAgICByZXR1cm4gY3JlYXRlQ29tbWVudChpbXBvcnRlZE5vZGUtPm5vZGVWYWx1ZSgpKTsK
ICAgICBjYXNlIEVMRU1FTlRfTk9ERTogewotICAgICAgICBFbGVtZW50JiBvbGRFbGVtZW50ID0g
dG9FbGVtZW50KCppbXBvcnRlZE5vZGUpOworICAgICAgICBFbGVtZW50JiBvbGRFbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKmltcG9ydGVkTm9kZSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGNoZWNrIG1pZ2h0IGJlIHVubmVjZXNzYXJ5LiBJcyBpdCBwb3NzaWJsZSB0aGF0
CiAgICAgICAgIC8vIG9sZEVsZW1lbnQgaGFzIG1pc21hdGNoZWQgcHJlZml4L25hbWVzcGFjZT8K
ICAgICAgICAgaWYgKCFoYXNWYWxpZE5hbWVzcGFjZUZvckVsZW1lbnRzKG9sZEVsZW1lbnQudGFn
UU5hbWUoKSkpIHsKQEAgLTE0MTQsMTMgKzE0MTQsMTMgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmVs
ZW1lbnRGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudFBvaW50KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIE5vZGUqIG5vZGUgPSBub2RlRnJvbVBvaW50KGNsaWVudFBv
aW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIHdo
aWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKIAogICAgIGlmIChub2RlKQogICAgICAgICBub2RlID0gYW5jZXN0b3JJblRo
aXNTY29wZShub2RlKTsKIAotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVu
dDo6Y2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKaW5kZXggNzhiMDg0N2Uy
MWI4NTQxMThmNGM2YWM5ZWNhMGZjNDJjZTg0YjA0ZS4uY2RhNmMwN2NiYTRjNDBlM2RhNDYwMTI0
MzA3NmIwZjc2NGYyZTQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxS
ZWZQdHI8U3R5bGVTCiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmIChp
czxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkg
fHwgaXM8U1ZHU3R5bGVFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQmIGVs
ZW1lbnQgPSB0b0VsZW1lbnQoKm5vZGUpOworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0aXRs
ZSA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICAgICAgYm9v
bCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtF
bGVtZW50PihlbGVtZW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDIxYWQ1NjZhYTE5
NDFkM2M3OWE2ZTAzMThhODI4YjRiNTJkZmFjMjcuLmU5Y2JlMDc4MjBiMzU0ZmFmOTRmNDI3MDQ3
MTFlYTUwZDQ1MDBhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIxOTUsOCArMjE5NSw4
IEBAIEF0b21pY1N0cmluZyBFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKSBjb25z
dAogICAgIC8vIFRoZSBsYW5ndWFnZSBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQsIHNvIHdlIGl0ZXJh
dGUgb3ZlciB0aGUgcGFyZW50cyB0byBmaW5kIHRoZSBmaXJzdCBsYW5ndWFnZS4KICAgICBjb25z
dCBOb2RlKiBjdXJyZW50Tm9kZSA9IHRoaXM7CiAgICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1
cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudERhdGEqIGVsZW1l
bnREYXRhID0gdG9FbGVtZW50KCpjdXJyZW50Tm9kZSkuZWxlbWVudERhdGEoKSkgeworICAgICAg
ICBpZiAoaXM8RWxlbWVudD4oY3VycmVudE5vZGUpKSB7CisgICAgICAgICAgICBpZiAoY29uc3Qg
RWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZG93bmNhc3Q8RWxlbWVudD4oKmN1cnJlbnROb2Rl
KS5lbGVtZW50RGF0YSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gZWxlbWVudERhdGEtPmZpbmRMYW5ndWFnZUF0dHJpYnV0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgKaW5kZXggNTIzOTM1NTQ0YWU2NGRlZTQxNTA4NjFiOWZiY2M4NjZiOTEx
NTkzOC4uMTg3ZTlkMzI3MGNiMTY2MDIwY2E5NjI0NTcwNGQzZjE1NjIzNTE0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCkBAIC02NjYsMjkgKzY2NiwyNCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFbGVt
ZW50RGF0YT4gbV9lbGVtZW50RGF0YTsKIH07CiAKLWlubGluZSBib29sIGlzRWxlbWVudChjb25z
dCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQotCi1OT0RFX1RZ
UEVfQ0FTVFMoRWxlbWVudCkKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBOb2RlVHlwZUNhc3RUcmFp
dHM8Y29uc3QgRWxlbWVudCwgY29uc3QgTm9kZT4gewotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQotfTsKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oRWxlbWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0Vs
ZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogaW5saW5lIGJvb2wgTm9kZTo6aGFzQXR0
cmlidXRlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1l
bnQodGhpcyktPmhhc0F0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gaXM8RWxlbWVudD4oKnRoaXMp
ICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5oYXNBdHRyaWJ1dGVzKCk7CiB9CiAKIGlubGlu
ZSBOYW1lZE5vZGVNYXAqIE5vZGU6OmF0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIHJldHVybiBp
c0VsZW1lbnROb2RlKCkgPyAmdG9FbGVtZW50KHRoaXMpLT5hdHRyaWJ1dGVzKCkgOiBudWxscHRy
OworICAgIHJldHVybiBpczxFbGVtZW50PigqdGhpcykgPyAmZG93bmNhc3Q8RWxlbWVudD4oKnRo
aXMpLmF0dHJpYnV0ZXMoKSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSBFbGVtZW50KiBOb2RlOjpw
YXJlbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJl
bnROb2RlKCk7Ci0gICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/
IHRvRWxlbWVudChwYXJlbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gcGFyZW50ICYmIGlzPEVs
ZW1lbnQ+KHBhcmVudCkgPyBkb3duY2FzdDxFbGVtZW50PihwYXJlbnQpIDogbnVsbHB0cjsKIH0K
IAogaW5saW5lIGJvb2wgRWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRU
cmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50VHJhdmVyc2FsLmgKaW5kZXgg
MWJiZTU4OWFmMjk0MDljNTg3OWE5OThkNTU0NmQ5MzJjYTM0MmI5YS4uMDJmZmQzMzQ2YjdiOTg3
OTQ4MGQ0Y2M3YjI5MjkzODZjZmY1MDRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFRyYXZl
cnNhbC5oCkBAIC05NSw5ICs5NSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlwZT4K
IGlubGluZSBFbGVtZW50KiBUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZShDdXJyZW50
VHlwZSogY3VycmVudCkKIHsKICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChj
dXJyZW50KTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
IHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOwotICAgIHJldHVybiB0b0VsZW1l
bnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiB0ZW1w
bGF0ZSA8PgpAQCAtMTA1LDkgKzEwNSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDdXJyZW50VHlw
ZT4KIGlubGluZSBFbGVtZW50KiBUcmF2ZXJzYWw8RWxlbWVudD46Om5leHRUZW1wbGF0ZShDdXJy
ZW50VHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKIHsKICAgICBOb2RlKiBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBzdGF5V2l0aGluKTsKLSAgICB3aGls
ZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIHdoaWxlIChub2RlICYmICFp
czxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOwotICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCiAvLyBHZW5lcmlj
IHZlcnNpb25zLgpAQCAtMjU4LDMzICsyNTgsMzMgQEAgaW5saW5lIEVsZW1lbnRUeXBlKiBUcmF2
ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUK
IGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVk
byhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQogewogICAgIE5v
ZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhjdXJyZW50
LCBzdGF5V2l0aGluKTsKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKG5vZGUsIHN0YXlXaXRoaW4p
OwotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpOwogfQogCiBpbmxpbmUgRWxlbWVudCogRWxlbWVudFRyYXZlcnNhbDo6bmV4dElu
Y2x1ZGluZ1BzZXVkbyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KQogewogICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0SW5jbHVkaW5nUHNldWRv
KGN1cnJlbnQsIHN0YXlXaXRoaW4pOwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhub2RlLCBzdGF5V2l0
aGluKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKIH0KIAogaW5saW5lIEVsZW1lbnQqIEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pCiB7CiAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKGN1cnJlbnQsIHN0YXlXaXRoaW4p
OwotICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUg
KG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dEluY2x1ZGluZ1BzZXVkb1NraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiB9CiAKIGlubGluZSBFbGVtZW50KiBFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9B
d2FyZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQogewogICAgIE5vZGUqIG5v
ZGUgPSBjdXJyZW50LT5wc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChu
b2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICBub2RlID0gbm9kZS0+cHNldWRvQXdhcmVQcmV2aW91c1Np
YmxpbmcoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0xpdmVOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmNwcApp
bmRleCA0ZjhhNDVjNmE5MzkxOTczYWEzOTNkOTNhNTQxZDdmMzA0ZTY1ZmNlLi5lZTIwZTExZGRh
NDRhNDNhMjY2Yzk0ZTc2MmE4NWI2NjFjMThkMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTGl2ZU5vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVM
aXN0LmNwcApAQCAtNjgsMTEgKzY4LDExIEBAIE5vZGUqIExpdmVOb2RlTGlzdDo6bmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRoaXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElk
QXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JTdHlsZVJlc29sdXRpb24uCi0gICAgICAgIGlmIChl
bGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gZWxl
bWVudElkKQorICAgICAgICBpZiAoZWxlbWVudC5oYXNJRCgpICYmIGVsZW1lbnQuaWRGb3JTdHls
ZVJlc29sdXRpb24oKSA9PSBlbGVtZW50SWQpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBlYTkyZGE4MGEyMDhjMGJjYTMwMTRiMjM1YzMwYTA4
NzViNzhiYWVhLi4yMjg5MmJlNzg5OTc0ZDYyYzk3ODljMmFkNzViZWU0OGRhYTNlNjAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC0xMzcsOSArMTM3LDkgQEAgdm9pZCBOb2RlOjpkdW1wU3RhdGlzdGlj
cygpCiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgICAgICsr
bm9kZXNXaXRoUmFyZURhdGE7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAg
ICArK2VsZW1lbnRzV2l0aFJhcmVEYXRhOwotICAgICAgICAgICAgICAgIGlmICh0b0VsZW1lbnQo
bm9kZSktPmhhc05hbWVkTm9kZU1hcCgpKQorICAgICAgICAgICAgICAgIGlmIChkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuaGFzTmFtZWROb2RlTWFwKCkpCiAgICAgICAgICAgICAgICAgICAgICsr
ZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
NDksMTIgKzE0OSwxMiBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAg
ICAgICArK2VsZW1lbnROb2RlczsKIAogICAgICAgICAgICAgICAgIC8vIFRhZyBzdGF0cwotICAg
ICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHNpemVfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBwZXJU
YWdDb3VudC5hZGQoZWxlbWVudC0+dGFnTmFtZSgpLCAxKTsKKyAgICAgICAgICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOworICAgICAgICAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gcGVyVGFnQ291bnQu
YWRkKGVsZW1lbnQudGFnTmFtZSgpLCAxKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7
CiAKLSAgICAgICAgICAgICAgICBpZiAoRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZWxlbWVu
dC0+ZWxlbWVudERhdGEoKSkgeworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxl
bWVudERhdGEgPSBlbGVtZW50LmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudERhdGEtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzICs9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgKytlbGVtZW50
c1dpdGhBdHRyaWJ1dGVTdG9yYWdlOwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgTm9kZTo6bm9y
bWFsaXplKCkKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBOb2RlVHlwZSB0eXBlID0gbm9k
ZS0+bm9kZVR5cGUoKTsKICAgICAgICAgaWYgKHR5cGUgPT0gRUxFTUVOVF9OT0RFKQotICAgICAg
ICAgICAgdG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5ub3JtYWxpemVBdHRyaWJ1dGVzKCk7CisgICAg
ICAgICAgICBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkubm9ybWFsaXplQXR0cmlidXRlcygpOwog
CiAgICAgICAgIGlmIChub2RlID09IHRoaXMpCiAgICAgICAgICAgICBicmVhazsKQEAgLTg5Niwx
NCArODk2LDE0IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTmV4dFNpYmxpbmcoKSBjb25zdAog
CiBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hpbGQoKSBjb25zdAogewotICAgIGlmIChp
c0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgY29uc3QgRWxlbWVudCogY3VycmVudEVsZW1lbnQg
PSB0b0VsZW1lbnQodGhpcyk7Ci0gICAgICAgIE5vZGUqIGZpcnN0ID0gY3VycmVudEVsZW1lbnQt
PmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpKSB7Cisg
ICAgICAgIGNvbnN0IEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
KnRoaXMpOworICAgICAgICBOb2RlKiBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LmJlZm9yZVBzZXVk
b0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGZpcnN0KQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0
OwotICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgICAg
IGZpcnN0ID0gY3VycmVudEVsZW1lbnQuZmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoIWZpcnN0
KQotICAgICAgICAgICAgZmlyc3QgPSBjdXJyZW50RWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50
KCk7CisgICAgICAgICAgICBmaXJzdCA9IGN1cnJlbnRFbGVtZW50LmFmdGVyUHNldWRvRWxlbWVu
dCgpOwogICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgfQogICAgIHJldHVybiBmaXJzdENoaWxk
KCk7CkBAIC05MTEsMTQgKzkxMSwxNCBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUZpcnN0Q2hp
bGQoKSBjb25zdAogCiBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RDaGlsZCgpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBjb25zdCBFbGVtZW50KiBjdXJy
ZW50RWxlbWVudCA9IHRvRWxlbWVudCh0aGlzKTsKLSAgICAgICAgTm9kZSogbGFzdCA9IGN1cnJl
bnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICBpZiAoaXM8RWxlbWVudD4oKnRo
aXMpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKnRoaXMpOworICAgICAgICBOb2RlKiBsYXN0ID0gY3VycmVudEVsZW1lbnQuYWZ0
ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgICAgIGlmIChsYXN0KQogICAgICAgICAgICAgcmV0dXJu
IGxhc3Q7Ci0gICAgICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC0+bGFzdENoaWxkKCk7CisgICAg
ICAgIGxhc3QgPSBjdXJyZW50RWxlbWVudC5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKCFsYXN0
KQotICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnRFbGVtZW50LT5iZWZvcmVQc2V1ZG9FbGVtZW50
KCk7CisgICAgICAgICAgICBsYXN0ID0gY3VycmVudEVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVu
dCgpOwogICAgICAgICByZXR1cm4gbGFzdDsKICAgICB9CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgp
OwpAQCAtOTI3LDggKzkyNyw4IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTGFzdENoaWxkKCkg
Y29uc3QKIFJlbmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIpCiB7CiAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+Y29t
cHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5j
b21wdXRlZFN0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KQEAgLTEwMDcsMTAgKzEwMDcsMTAgQEAgRWxlbWVudCogTm9kZTo6cGFyZW50
T3JTaGFkb3dIb3N0RWxlbWVudCgpIGNvbnN0CiAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KHBhcmVu
dCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTaGFkb3dSb290PihwYXJlbnQpLT5ob3N0RWxl
bWVudCgpOwogCi0gICAgaWYgKCFwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlz
PEVsZW1lbnQ+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IHRvRWxlbWVudChwYXJlbnQpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihwYXJlbnQp
OwogfQogCiBOb2RlKiBOb2RlOjppbnNlcnRpb25QYXJlbnRGb3JCaW5kaW5nKCkgY29uc3QKQEAg
LTEwNTUsMTEgKzEwNTUsMTEgQEAgRWxlbWVudCogTm9kZTo6cm9vdEVkaXRhYmxlRWxlbWVudChF
ZGl0YWJsZVR5cGUgZWRpdGFibGVUeXBlKSBjb25zdAogCiBFbGVtZW50KiBOb2RlOjpyb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QKIHsKLSAgICBFbGVtZW50KiByZXN1bHQgPSAwOwotICAgIGZv
ciAoTm9kZSogbiA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBuICYmIG4tPmhhc0VkaXRhYmxl
U3R5bGUoKTsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICAgICAgcmVzdWx0ID0gdG9FbGVtZW50KG4pOwotICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShib2R5VGFnKSkKKyAgICBFbGVtZW50KiByZXN1bHQgPSBudWxscHRyOwor
ICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpOyBub2RlICYmIG5v
ZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgICAgICByZXN1bHQgPSBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKTsKKyAgICAgICAgaWYgKGlzPEhUTUxCb2R5RWxlbWVudD4obm9kZSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMDIs
NyArMTEwMiw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAg
ICAgaWYgKG5vZGVWYWx1ZSgpICE9IG90aGVyLT5ub2RlVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGlmIChpc0VsZW1lbnROb2RlKCkgJiYgIXRvRWxlbWVudCh0aGlz
KS0+aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXModG9FbGVtZW50KG90aGVyKSkpCisgICAgaWYgKGlz
PEVsZW1lbnQ+KCp0aGlzKSAmJiAhZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmhhc0VxdWl2YWxl
bnRBdHRyaWJ1dGVzKGRvd25jYXN0PEVsZW1lbnQ+KG90aGVyKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKQEAgLTExNDQsMTMg
KzExNDQsMTMgQEAgYm9vbCBOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUklNYXliZUVtcHR5KSBjb25zdAogCiAgICAgc3dpdGNoIChub2RlVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgRUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBjb25zdCBF
bGVtZW50KiBlbGVtID0gdG9FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgY29uc3QgRWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGVsZW0tPnByZWZpeCgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CisgICAgICAgICAgICBp
ZiAoZWxlbWVudC5wcmVmaXgoKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CiAKLSAgICAgICAgICAgIGlmIChl
bGVtLT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlIDogZWxlbS0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubG9jYWxOYW1lKCkgPT0geG1s
bnNBdG9tKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS52YWx1ZSgp
ID09IG5hbWVzcGFjZVVSSTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjg0LDEwICsxMjg0LDEw
IEBAIFN0cmluZyBOb2RlOjpsb29rdXBOYW1lc3BhY2VQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5n
ICZfbmFtZXNwYWNlVVJJLCBjb25zdCBFbGVtCiAgICAgaWYgKG9yaWdpbmFsRWxlbWVudC0+bG9v
a3VwTmFtZXNwYWNlVVJJKHByZWZpeCgpKSA9PSBfbmFtZXNwYWNlVVJJKQogICAgICAgICByZXR1
cm4gcHJlZml4KCk7CiAgICAgCi0gICAgQVNTRVJUKGlzRWxlbWVudE5vZGUoKSk7Ci0gICAgY29u
c3QgRWxlbWVudCogdGhpc0VsZW1lbnQgPSB0b0VsZW1lbnQodGhpcyk7Ci0gICAgaWYgKHRoaXNF
bGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUm
IGF0dHJpYnV0ZSA6IHRoaXNFbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgIEFT
U0VSVChpczxFbGVtZW50PigqdGhpcykpOworICAgIGNvbnN0IEVsZW1lbnQmIHRoaXNFbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpOworICAgIGlmICh0aGlzRWxlbWVudC5oYXNBdHRy
aWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IHRo
aXNFbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlLnByZWZpeCgpID09IHhtbG5zQXRvbSAmJiBhdHRyaWJ1dGUudmFsdWUoKSA9PSBfbmFtZXNw
YWNlVVJJCiAgICAgICAgICAgICAgICAgJiYgb3JpZ2luYWxFbGVtZW50LT5sb29rdXBOYW1lc3Bh
Y2VVUkkoYXR0cmlidXRlLmxvY2FsTmFtZSgpKSA9PSBfbmFtZXNwYWNlVVJJKQogICAgICAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUubG9jYWxOYW1lKCk7CkBAIC0xMzgzLDExICsxMzgzLDEx
IEBAIHZvaWQgTm9kZTo6c2V0VGV4dENvbnRlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykKIEVsZW1lbnQqIE5vZGU6OmFuY2VzdG9yRWxlbWVudCgpIGNvbnN0CiB7CiAg
ICAgLy8gSW4gdGhlb3J5LCB0aGVyZSBjYW4gYmUgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGJldHdl
ZW4gZWxlbWVudHMsIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgotICAgIGZv
ciAoQ29udGFpbmVyTm9kZSogbiA9IHBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRvRWxlbWVudChuKTsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50
Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50PihhbmNlc3RvcikpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8RWxlbWVudD4oYW5jZXN0b3IpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogYm9vbCBOb2RlOjpvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdApA
QCAtMTUyOSwxMCArMTUyOSwxMCBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShj
b25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVE
ZXNjKGNvbnN0IE5vZGUqIG5vZGUsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQogewotICAgIGlmICgh
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyID0gdG9FbGVtZW50KG5vZGUpLT5nZXRBdHRy
aWJ1dGUobmFtZSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0gZG93bmNhc3Q8RWxl
bWVudD4oKm5vZGUpLmdldEF0dHJpYnV0ZShuYW1lKTsKICAgICBpZiAoYXR0ci5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTU4NCw4ICsxNTg0LDggQEAgdm9pZCBOb2RlOjpzaG93
Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6IHsKICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLyVzIiwgbm9kZS0+bm9kZU5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVu
dChub2RlKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRhdHRyID0gZWxlbWVu
dC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkYXR0ciA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgIGJvb2wg
aGFzSWRBdHRyID0gIWlkYXR0ci5pc051bGwoKSAmJiAhaWRhdHRyLmlzRW1wdHkoKTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5wcmV2aW91c1NpYmxpbmcoKSB8fCBub2RlLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKQEAgLTE3MjQsMTAgKzE3MjQsMTAg
QEAgRWxlbWVudCogTm9kZTo6ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkKICAgICAg
ICAgLy8gU28gd2UgZG9uJ3QgbGV0IGltYWdlcyBiZSB0aGUgZW5jbG9zaW5nIGxpbmsgZWxlbWVu
dCwgZXZlbiB0aG91Z2ggaXNMaW5rIHNvbWV0aW1lcyByZXR1cm5zCiAgICAgICAgIC8vIHRydWUg
Zm9yIHRoZW0uCiAgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSAmJiAhaXM8SFRNTEltYWdlRWxl
bWVudD4obm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KIAotICAgIHJldHVy
biAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBOb2Rl
OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lk
IE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIWhhc0V2ZW50
VGFyZ2V0RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudCgqdGhpcykuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNN
b3VzZUV2ZW50KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxFbGVt
ZW50PigqdGhpcykuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNNb3VzZUV2ZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOwpA
QCAtMjE2NCw5ICsyMTY0LDkgQEAgYm9vbCBOb2RlOjp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZl
bnRzKCkKIHsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoZSBpT1MgY29kZSBwYXRoIGRpZmZlcmVu
dCBmcm9tIHRoZSBub24taU9TIGNvZGUgcGF0aD8KICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGlm
ICghaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4oKnRoaXMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvRWxlbWVudCh0aGlzKS0+aXNEaXNhYmxlZEZvcm1D
b250cm9sKCkpCisgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIGhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgfHwgaGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7CkBAIC0yMTc4LDkgKzIxNzgsOSBAQCBib29s
IE5vZGU6OndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50KSB8fCBoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tF
dmVudCk7CiAjZWxzZQotICAgIGlmICghaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxl
bWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvRWxlbWVudCh0
aGlzKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+
KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0
YWJsZSkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgfHwg
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB8fCBoYXNFdmVu
dExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgaGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAKaW5kZXggMjhkMTQzMTllMjhmNDJlY2Vl
ZDU1NTg5MTdkMmE3Y2Q1NGEyNzNkNi4uODJlYzdkYjYyZWFjOTQ0MjJjNWE5OTc4NjA5MjM2NGNl
MmQ4NDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdUcmF2
ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nVHJhdmVyc2Fs
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhbkJlRGlzdHJp
YnV0ZWQoY29uc3QgTm9kZSogbm9kZSkKICAgICBpZiAocGFyZW50LT5pc1NoYWRvd1Jvb3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudChwYXJlbnQpLT5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+
KHBhcmVudCkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnBhcmVudCkuc2hhZG93Um9vdCgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAppbmRleCAzOWE0Nzg0ZmJlM2I5Zjg1ZDI4YzFiMmQ2OGRkMWEyYWUxNDY2N2ExLi5k
YzgyMTkwYzViZTBmZmEzMTZlMDRiN2NlNzIyMzQ2ZjhhODZmNTgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAKQEAgLTI5MCwxMCArMjkwLDEwIEBAIFBvc2l0aW9uOjpBbmNob3JUeXBlIFBvc2l0
aW9uOjphbmNob3JUeXBlRm9yTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKE5vZGUqIGFuY2hvck5vCiAv
LyBGSVhNRTogVGhpcyBtZXRob2QgaXMgY29uZnVzaW5nIChkb2VzIGl0IHJldHVybiBhbmNob3JO
b2RlKCkgb3IgY29udGFpbmVyTm9kZSgpPykgYW5kIHNob3VsZCBiZSByZW5hbWVkIG9yIHJlbW92
ZWQKIEVsZW1lbnQqIFBvc2l0aW9uOjplbGVtZW50KCkgY29uc3QKIHsKLSAgICBOb2RlKiBuID0g
YW5jaG9yTm9kZSgpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChuKTsKKyAgICBO
b2RlKiBub2RlID0gYW5jaG9yTm9kZSgpOworICAgIHdoaWxlIChub2RlICYmICFpczxFbGVtZW50
Pihub2RlKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91
cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXgg
ODhiOWI2MTA4ODI4MGM3OTMxMGYxODBiNDk1YmVkZmMxYWQ5Zjk0NS4uOWViMGRjMDdkMjQ5NzEz
NjMzOTgyYTgxNDQ2MmI1YzQ4N2Y0YWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0yMjI0LDgg
KzIyMjQsOCBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzKSBjb25zdAogICAgICAgICBzZWxlY3RlZEVsZW1lbnRzU2V0LnJlbW92ZShw
YXJlbnQpOwogCiAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3Rv
cE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2Rl
KSAmJiAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2Jq
ZWN0ID0gdG9FbGVtZW50KG5vZGUpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7CisgICAgICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5v
ZGUpICYmICFzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5vZGUoKSkp
IHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxP
YmplY3QgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkucmVuZGVyQm94TW9kZWxPYmplY3QoKSkg
ewogICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKICAgICAg
ICAgICAgICAgICByZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVh
ZHMpOwogICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQoKS5hZGp1c3RGbG9hdFF1YWRzRm9y
U2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2FsZShlbGVtZW50UXVhZHMsIHJlbmRlckJv
eE1vZGVsT2JqZWN0LT5zdHlsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDcwZDEy
Zjg5OThiY2RjNWFlODZhOTM2NjgwZDA3YjcyNmY1MGJjZjIuLmJmZTViNmY4NDdiNWQzMTlmNjk0
MjEwODNhM2ZhZjY4NjA5MTc0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtMTAxLDkg
KzEwMSw5IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogaW5saW5lIFNoYWRvd1Jv
b3QqIE5vZGU6OnNoYWRvd1Jvb3QoKSBjb25zdAogewotICAgIGlmICghaXNFbGVtZW50Tm9kZSgp
KQorICAgIGlmICghaXM8RWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gdG9FbGVtZW50KHRoaXMpLT5zaGFkb3dSb290KCk7CisgICAgcmV0dXJuIGRv
d25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5zaGFkb3dSb290KCk7CiB9CiAKIGlubGluZSBDb250YWlu
ZXJOb2RlKiBOb2RlOjpwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3RhdGljTm9kZUxpc3QuY3BwCmluZGV4IDdlMWY0YzJiNTcxMDNjODc4OTY4N2U0YTE0ZGQ2
NDEzMmYwNDlkYzguLjk0OTY3YjdiZWZkYzE4ZTE4MjA0YjI1Mzc5ZmRhNGY5NTY5YWFmNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcApAQCAtNDcsNyArNDcsNyBAQCBOb2Rl
KiBTdGF0aWNOb2RlTGlzdDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElk
KSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IG1fbm9kZXMuc2l6
ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGNvbnN0X2Nhc3Q8
Tm9kZSY+KG1fbm9kZXNbaV0uZ2V0KCkpOwotICAgICAgICBpZiAobm9kZS5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KG5vZGUpLmdldElkQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuZ2V0
SWRBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCiAgICAgICAgICAgICByZXR1cm4gJm5vZGU7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZUFkb3B0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0
ZXIuY3BwCmluZGV4IDY0MTBmMmMwYTZlZjg2YjI4ZDdiZmNhNjg5YTcxMjBjYmFjZmIyZWQuLjA0
NWU4OGU0MzE5N2I4M2RhZmI4ZWMzZDlkMjUzMTJiNWZkNDdhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlQWRvcHRlci5jcHAKQEAgLTYwLDExICs2MCwxMSBAQCB2b2lkIFRyZWVTY29w
ZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wZShOb2RlKiByb290KSBjb25zdAogICAgICAgICAg
ICAgICAgIHJhcmVEYXRhLT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG5v
ZGUtPmhhc1N5bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8QXR0cj4+JiBhdHRycyA9IHRvRWxlbWVudChub2RlKS0+YXR0ck5vZGVMaXN0
KCk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEF0dHI+PiYgYXR0cnMgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0ck5vZGVMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbW92
ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ldLmdldCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBmMjE4NTJmNmUwNGQ4MzZl
NWQ1YjgzMTIzNzhiOTBiMzgyZmY0MmQ2Li44NmQ0YTU0N2ZmMjA2MDliZDY0ZjFkZTNkOTFhZDAw
MGQ1MWMxOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcApAQCAtNDIwLDEwICs0MjAsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogCiBzdGF0aWMgQ29u
dGFpbmVyTm9kZSogZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7
Ci0gICAgd2hpbGUgKG5vZGUgJiYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIWlzU3R5bGVT
cGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZSh0b0VsZW1lbnQobm9kZSkpKSkKKyAgICB3
aGlsZSAobm9kZSAmJiAoIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFpc1N0eWxlU3Bhbk9yU3Bhbldp
dGhPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpKSkKICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAKLSAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PnBhcmVudE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5wYXJlbnROb2RlKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRB
cHBsZVN0eWxlU3BhbnMoQ29udGFpbmVyTm9kZSogZHVtbXlTcGFuQW5jZXN0b3IpCkBAIC00ODYs
NyArNDg2LDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9y
c1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGIKICAgICAvLyBTcGxpdCBldmVyeSBh
bmNlc3RvciB0aHJvdWdoIGhpZ2hlc3QgYW5jZXN0b3Igd2l0aCBlbWJlZGRpbmcuCiAgICAgUmVm
UHRyPE5vZGU+IGN1cnJlbnROb2RlID0gbm9kZTsKICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsK
LSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCA9IHRvRWxlbWVudChjdXJyZW50Tm9kZS0+
cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoYmVmb3Jl
ID8gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpIDogY3VycmVudE5vZGUtPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgICAgICBzcGxpdEVsZW1lbnQocGFyZW50LCBiZWZvcmUgPyBjdXJyZW50
Tm9kZSA6IGN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKTsKICAgICAgICAgaWYgKHBhcmVudCA9
PSBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkpCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0
aW5nU3R5bGUqIHN0eWxlLCBOb2RlKgogICAgICAgICBnZXRDaGlsZE5vZGVzKCpjdXJyZW50Lmdl
dCgpLCBjdXJyZW50Q2hpbGRyZW4pOwogCiAgICAgICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBz
dHlsZWRFbGVtZW50OwotICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oKmN1cnJlbnQpICYm
IGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKHRvRWxlbWVudChjdXJyZW50LmdldCgpKSkp
IHsKKyAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KCpjdXJyZW50KSAmJiBpc1N0eWxlZElu
bGluZUVsZW1lbnRUb1JlbW92ZShkb3duY2FzdDxFbGVtZW50PihjdXJyZW50LmdldCgpKSkpIHsK
ICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihjdXJy
ZW50LmdldCgpKTsKICAgICAgICAgICAgIGVsZW1lbnRzVG9QdXNoRG93bi5hcHBlbmQoKnN0eWxl
ZEVsZW1lbnQpOwogICAgICAgICB9CkBAIC0xMjg2LDggKzEyODYsOCBAQCBib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LAogICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9IHN0YXJ0Tm9kZS0+cHJldmlv
dXNTaWJsaW5nKCk7CiAKICAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIGFyZUlkZW50aWNhbEVs
ZW1lbnRzKHN0YXJ0Tm9kZSwgcHJldmlvdXNTaWJsaW5nKSkgewotICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSB0b0VsZW1lbnQocHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChzdGFydE5vZGUpOworICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcpOworICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKICAg
ICAgICAgTm9kZSogc3RhcnRDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
QVNTRVJUKHN0YXJ0Q2hpbGQpOwogICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZp
b3VzRWxlbWVudCwgZWxlbWVudCk7CkBAIC0xMzE5LDggKzEzMTksOCBAQCBib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdAogCiAgICAgTm9kZSogbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGlu
ZygpOwogICAgIGlmIChuZXh0U2libGluZyAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbmROb2Rl
LCBuZXh0U2libGluZykpIHsKLSAgICAgICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSB0b0VsZW1l
bnQobmV4dFNpYmxpbmcpOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGVu
ZE5vZGUpOworICAgICAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG5leHRTaWJsaW5nKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KGVuZE5vZGUpOwogICAgICAgICBOb2RlKiBuZXh0Q2hpbGQgPSBuZXh0RWxlbWVudC0+Zmly
c3RDaGlsZCgpOwogCiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgbmV4
dEVsZW1lbnQpOwpAQCAtMTM1OSwxNSArMTM1OSwxNSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3Rh
cgogCiAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmco
KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgaWYgKG5leHRTaWJsaW5nICYmIG5leHRTaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkgJiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKQotICAgICAgICAmJiBhcmVJ
ZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0b0VsZW1lbnQobmV4dFNpYmxpbmcuZ2V0
KCkpKSkKLSAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCB0b0Vs
ZW1lbnQobmV4dFNpYmxpbmcuZ2V0KCkpKTsKKyAgICBpZiAobmV4dFNpYmxpbmcgJiYgaXM8RWxl
bWVudD4oKm5leHRTaWJsaW5nKSAmJiBuZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpCisg
ICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIGRvd25jYXN0PEVs
ZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSkpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVu
dHMoZWxlbWVudC5nZXQoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsK
IAotICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkgJiYgcHJldmlvdXNTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKKyAgICBpZiAo
cHJldmlvdXNTaWJsaW5nICYmIGlzPEVsZW1lbnQ+KCpwcmV2aW91c1NpYmxpbmcpICYmIHByZXZp
b3VzU2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIE5vZGUqIG1lcmdlZEVs
ZW1lbnQgPSBwcmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChtZXJn
ZWRFbGVtZW50LT5pc0VsZW1lbnROb2RlKCkgJiYgbWVyZ2VkRWxlbWVudC0+aGFzRWRpdGFibGVT
dHlsZSgpCi0gICAgICAgICAgICAmJiBhcmVJZGVudGljYWxFbGVtZW50cyh0b0VsZW1lbnQocHJl
dmlvdXNTaWJsaW5nLmdldCgpKSwgdG9FbGVtZW50KG1lcmdlZEVsZW1lbnQpKSkKLSAgICAgICAg
ICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHModG9FbGVtZW50KHByZXZpb3VzU2libGluZy5nZXQo
KSksIHRvRWxlbWVudChtZXJnZWRFbGVtZW50KSk7CisgICAgICAgIGlmIChpczxFbGVtZW50Piht
ZXJnZWRFbGVtZW50KSAmJiBtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkKKyAgICAg
ICAgICAgICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1lbnQ+KHByZXZpb3Vz
U2libGluZy5nZXQoKSksIGRvd25jYXN0PEVsZW1lbnQ+KG1lcmdlZEVsZW1lbnQpKSkKKyAgICAg
ICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZG93bmNhc3Q8RWxlbWVudD4ocHJldmlvdXNT
aWJsaW5nLmdldCgpKSwgZG93bmNhc3Q8RWxlbWVudD4obWVyZ2VkRWxlbWVudCkpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCB1cGRhdGVTdGFydEVuZCBp
ZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKaW5kZXggZjYxNzExYWE5ZjAwN2Q1
NmUwZGNjY2ExMmQzZWZmZDU4MmZhYzE4ZC4uNTUyMzNjNWJjOTk4NDQzOGFhM2ZiNWY5ZWE5M2Ri
YWVhOWFhOWMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKICAgICAK
ICAgICAvLyBJbnNlcnQgYSBjbG9uZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIgdGhlIGJy
ZWFrLgotICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gdG9FbGVtZW50KHRv
cEJsb2NrcXVvdGUpLT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKKyAgICBSZWZQdHI8
RWxlbWVudD4gY2xvbmVkQmxvY2txdW90ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0b3BCbG9ja3F1
b3RlKS5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKICAgICBpbnNlcnROb2RlQWZ0ZXIo
Y2xvbmVkQmxvY2txdW90ZS5nZXQoKSwgYnJlYWtOb2RlLmdldCgpKTsKICAgICAKICAgICAvLyBD
bG9uZSBzdGFydE5vZGUncyBhbmNlc3RvcnMgaW50byB0aGUgY2xvbmVkIGJsb2NrcXVvdGUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4
IDVkZDRjMzBhNjQ3ZWNjOTM5ZjhlZmEwNjdkNGM3ZDhlYmJjZTFlNTYuLmE2ZTU1NDE2NjhjNDdl
NTY4OGEzZWJiOTU2NjMyYjU0ODA0N2VlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0zOSw3ICszOSw5IEBACiAjaW5jbHVkZSAi
RWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIgpAQCAtMzIyLDE0ICszMjQsMTQgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKCkKIAogYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6aXNSZW1vdmFibGVCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewotICAgIGlmICgh
bm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpKQorICAgIGlmICghaXM8SFRNTERpdkVsZW1lbnQ+KG5v
ZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmZpcnN0
Q2hpbGQoKSAhPSBwYXJlbnROb2RlLT5sYXN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICBpZiAo
IWRvd25jYXN0PEhUTUxEaXZFbGVtZW50Pigqbm9kZSkuaGFzQXR0cmlidXRlcygpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNjksNyArMTA3MSw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGFuY2VzdG9y
cy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7CiAgICAgICAgICAgICBOb2RlKiBpdGVtID0gYW5jZXN0
b3JzW2kgLSAxXS5nZXQoKTsKICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IGl0ZW0t
PmNsb25lTm9kZShpc1JlbmRlcmVkVGFibGUoaXRlbSkpOwotICAgICAgICAgICAgYXBwZW5kTm9k
ZShjaGlsZCwgdG9FbGVtZW50KGxhc3ROb2RlLmdldCgpKSk7CisgICAgICAgICAgICBhcHBlbmRO
b2RlKGNoaWxkLCBkb3duY2FzdDxFbGVtZW50PihsYXN0Tm9kZS5nZXQoKSkpOwogICAgICAgICAg
ICAgbGFzdE5vZGUgPSBjaGlsZC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzQ3
LDEzICsxMzQ5LDEzIEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKCkKIAogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdCbG9jayA9IDA7CiAgICAgaWYg
KENvbnRhaW5lck5vZGUqIGJsb2NrRW5jbG9zaW5nTGlzdCA9IGxpc3ROb2RlLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKGJsb2NrRW5jbG9zaW5nTGlzdC0+aGFzVGFnTmFtZShsaVRhZykp
IHsgLy8gbGlzdE5vZGUgaXMgaW5zaWRlIGFub3RoZXIgbGlzdCBpdGVtCisgICAgICAgIGlmIChp
czxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xpc3QpKSB7IC8vIGxpc3ROb2RlIGlzIGlu
c2lkZSBhbm90aGVyIGxpc3QgaXRlbQogICAgICAgICAgICAgaWYgKHZpc2libGVQb3NpdGlvbkFm
dGVyTm9kZShibG9ja0VuY2xvc2luZ0xpc3QpID09IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShs
aXN0Tm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBsaXN0Tm9kZSBhcHBlYXJz
IGF0IHRoZSBlbmQgb2YgdGhlIG91dGVyIGxpc3QgaXRlbSwgdGhlbiBtb3ZlIGxpc3ROb2RlIG91
dHNpZGUgb2YgdGhpcyBsaXN0IGl0ZW0KICAgICAgICAgICAgICAgICAvLyBlLmcuIDx1bD48bGk+
aGVsbG8gPHVsPjxsaT48YnI+PC9saT48L3VsPiA8L2xpPjwvdWw+IHNob3VsZCBiZWNvbWUgPHVs
PjxsaT5oZWxsbzwvbGk+IDx1bD48bGk+PGJyPjwvbGk+PC91bD4gPC91bD4gYWZ0ZXIgdGhpcyBz
ZWN0aW9uCiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgZG9lcyBOT1QgYXBwZWFyIGF0
IHRoZSBlbmQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IGFzIGEgcmVndWxhciBwYXJhZ3Jh
cGguCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPiA8dWw+PGxpPjxicj48L2xpPjwv
dWw+IGhlbGxvPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+IDxkaXY+PGJyPjwvZGl2
PiBoZWxsbzwvbGk+PC91bD4gYXQgdGhlIGVuZAotICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVu
dCh0b0VsZW1lbnQoYmxvY2tFbmNsb3NpbmdMaXN0KSwgbGlzdE5vZGUpOworICAgICAgICAgICAg
ICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xp
c3QpLCBsaXN0Tm9kZSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgICAgICAgICBuZXdCbG9jayA9
IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIH0KQEAgLTEz
NjksNyArMTM3MSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKCkKICAgICBpZiAoaXNMaXN0SXRlbShuZXh0TGlzdE5vZGUuZ2V0KCkpIHx8IGlz
TGlzdEVsZW1lbnQobmV4dExpc3ROb2RlLmdldCgpKSkgewogICAgICAgICAvLyBJZiBlbXB0eUxp
c3RJdGVtIGZvbGxvd3MgYW5vdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHNwbGl0IHRo
ZSBsaXN0IG5vZGUuCiAgICAgICAgIGlmIChpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0
KCkpIHx8IGlzTGlzdEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkpCi0gICAgICAgICAg
ICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KGxpc3ROb2RlLmdldCgpKSwgZW1wdHlMaXN0SXRlbSk7
CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdE5vZGUuZ2V0
KCkpLCBlbXB0eUxpc3RJdGVtKTsKIAogICAgICAgICAvLyBJZiBlbXB0eUxpc3RJdGVtIGlzIGZv
bGxvd2VkIGJ5IG90aGVyIGxpc3QgaXRlbSBvciBuZXN0ZWQgbGlzdCwgdGhlbiBpbnNlcnQgbmV3
QmxvY2sgYmVmb3JlIHRoZSBsaXN0IG5vZGUuCiAgICAgICAgIC8vIEJlY2F1c2Ugd2UgaGF2ZSBz
cGxpdHRlZCB0aGUgZWxlbWVudCwgZW1wdHlMaXN0SXRlbSBpcyB0aGUgZmlyc3QgZWxlbWVudCBp
biB0aGUgbGlzdCBub2RlLgpAQCAtMTUyMiwxMyArMTUyNCwxMyBAQCBQYXNzUmVmUHRyPE5vZGU+
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5vZGUq
IGVuZCwgYgogCiAgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGUgPSBlbmQ7CiAgICAgZm9yIChub2Rl
ID0gc3RhcnQ7IG5vZGUgJiYgbm9kZS0+cGFyZW50Tm9kZSgpICE9IGVuZE5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2RlKCktPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlLT5wYXJlbnROb2Rl
KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vIERvIG5vdCBzcGxpdCBhIG5vZGUg
d2hlbiBkb2luZyBzbyBpbnRyb2R1Y2VzIGFuIGVtcHR5IG5vZGUuCiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkluUGFyZW50ID0gZmlyc3RQb3NpdGlvbkluTm9kZShub2RlLT5wYXJl
bnROb2RlKCkpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Jbk5vZGUgPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChwb3NpdGlv
bkluUGFyZW50ICE9IHBvc2l0aW9uSW5Ob2RlKQotICAgICAgICAgICAgc3BsaXRFbGVtZW50KHRv
RWxlbWVudChub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHNwbGl0RWxl
bWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKICAgICB9
CiAKICAgICByZXR1cm4gbm9kZS5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBiZTM3NmZmOTNmOTE5MzMxZjcw
NTZjNTE4YThiNzRkOWYxMjAzNzRkLi5hYmM1MzM2ZjAxNTUyNTAyZDRjNjVjZjU0NjdiNGUwYjIz
MDNlODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAt
NDM0LDcgKzQzNiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmdF
bGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByCiAgICAgUmVmUHRyPE5vZGU+
IG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCkpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKChub2RlLT5oYXNU
YWdOYW1lKHN0eWxlVGFnKSAmJiAhKHRvRWxlbWVudChub2RlLmdldCgpKS0+aGFzQXR0cmlidXRl
KHNjb3BlZEF0dHIpKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShsaW5rVGFnKSkgeworICAgICAgICBp
ZiAoKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxl
bWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZShzY29wZWRBdHRyKSkgfHwgaXM8SFRNTExpbmtFbGVt
ZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggOTBkYTAxOTAyMDUyYzA2ZTc0ZjIxNThjZDgxMGI0YzY3NjY5NTkz
Ny4uYWM0NThhYzAwYWE1OTc3YzYzYTRjY2E1NTBjNWQ2Njc3MTNkYjE5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMjM3OCw3ICsyMzc4LDcgQEAgYm9vbCBFZGl0b3I6OmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBFbGVtZW50KiBmb2N1c2VkRWxlbWVu
dCA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChub2RlKSA6IG5vZGUtPnBhcmVu
dEVsZW1lbnQoKTsKKyAgICBjb25zdCBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCA9IGlzPEVsZW1l
bnQ+KG5vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkgOiBub2RlLT5wYXJlbnRFbGVtZW50
KCk7CiAgICAgaWYgKCFmb2N1c2VkRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiBmb2N1c2VkRWxlbWVudC0+aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpAQCAtMzEw
MCw3ICszMTAwLDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVu
dCgpIGNvbnN0CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZG9jdW1lbnQoKS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiYm9keSIpOwogICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgYXBwbHlF
ZGl0aW5nU3R5bGVUb0VsZW1lbnQodG9FbGVtZW50KGxpc3QtPml0ZW0oaSkpKTsKKyAgICAgICAg
YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdC0+aXRlbShp
KSkpOwogfQogCiB2b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAppbmRleCA0NjkwZjIxNzUzNTczMGIyNDg3OTVhOThhODU2NjM2Zjk2MzA3YzZm
Li4zMTc0NWY5MzViZmJiNzkwZjlkMWI2ZjRkMmVkODE0NWQzNmNjNzNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC00Myw3ICs0Myw3IEBA
IHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSogc3RhcnROb2Rl
KTsKIHN0YXRpYyBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpOwogc3RhdGljIGlubGluZSBib29sIGlzRWxlbWVudEZvckZvcm1hdEJsb2Nr
KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBpc0Vs
ZW1lbnRGb3JGb3JtYXRCbG9jayh0b0VsZW1lbnQobm9kZSktPnRhZ1FOYW1lKCkpOworICAgIHJl
dHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkudGFnUU5hbWUoKSk7CiB9CiAKIEZvcm1hdEJsb2NrQ29tbWFuZDo6
Rm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKQEAgLTEwMCwyMCArMTAwLDIwIEBAIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5k
Ojpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQs
CiBFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1h
bmQoUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFu
Z2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKElHTk9SRV9FWENFUFRJT04pOwogICAgIHdoaWxl
IChjb21tb25BbmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29tbW9uQW5jZXN0
b3IpKQogICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJlbnROb2Rl
KCk7CiAKICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50ID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBpZiAo
IXJvb3RFZGl0YWJsZUVsZW1lbnQgfHwgY29tbW9uQW5jZXN0b3ItPmNvbnRhaW5zKHJvb3RFZGl0
YWJsZUVsZW1lbnQpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gY29tbW9uQW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVu
dChjb21tb25BbmNlc3RvcikgOiAwOworICAgIHJldHVybiBjb21tb25BbmNlc3Rvci0+aXNFbGVt
ZW50Tm9kZSgpID8gZG93bmNhc3Q8RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpIDogbnVsbHB0cjsK
IH0KIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBj
MTdmNmI5MTZmNjgwOTlmMDg1Mzk2ZThmN2MxOThjNzgzYzQ3Mjg3Li4zMDNkNjZhMDNmNWU5NmVm
NzVmY2E1YjkwYTFjZmUxNmIxNzViNDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcApAQCAtMzk4LDEwICszOTgsMTAgQEAgc3RhdGljIGJvb2wgcmVtb3ZpbmdO
b2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
ICAgICBpZiAocG9zaXRpb24uYW5jaG9yTm9kZSgpID09IG5vZGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4obm9kZSk7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmNvbnRhaW5zSW5jbHVkaW5nU2hhZG93
RE9NKHBvc2l0aW9uLmFuY2hvck5vZGUoKSk7CiB9CiAKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIHZv
aWQgQ2FyZXRCYXNlOjpwYWludENhcmV0KE5vZGUqIG5vZGUsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5b3V0UG9pCiAKICAgICBDb2xvciBjYXJldENvbG9yID0gQ29sb3I6OmJs
YWNrOwogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7Ci0g
ICAgRWxlbWVudCogZWxlbWVudCA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChu
b2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8
RWxlbWVudD4obm9kZSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVs
ZW1lbnQoKTsKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogCiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIo
KSkgewpAQCAtMTUyMCwxMyArMTUyMCwxMyBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChO
b2RlKiBub2RlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaQogI2Vu
ZGlmCiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiByLCBib29sIHNlbGVjdGVkKSBjb25zdAordm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBib29sIHNlbGVjdGVkKSBjb25zdAogewotICAg
IGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gdG9FbGVtZW50KHItPm5vZGUoKSk7CisgICAgaWYgKGlzPEVsZW1lbnQ+KHJlbmRlcmVy
LT5ub2RlKCkpKSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
PihyZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBz
ZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgfSBlbHNlIGlmIChyLT5pc1RleHQoKSkgewotICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocik7CisgICAgfSBlbHNlIGlm
IChyZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsKICAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXItPnRl
eHRMZW5ndGgoKSB8fCAhdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKSkgewogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcyN0ZXh0IChlbXB0eSlcbiIsIHNlbGVjdGVkID8gIj09PiAi
IDogIiAgICAiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MzcsOSArMTUzNyw5IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByLCBib29sIHNl
bGVjdGVkKSBjb25zdAogICAgICAgICBpbnQgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9k
ZSgpKQorICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3Rh
cnQoKS5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpKQor
ICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQo
KS5jb250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24u
ZW5kKCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogCiAgICAgICAgICAgICBpbnQg
cG9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAppbmRleCAzYTFjMWU2MDlhOGQ0ZjQ0YmVkMWJmYjYzYTk5ODNjYjQ1NGZhZWE5Li5hN2M3Yzcx
YWIzZWIzYjVkNTU3ZTYwNmM4NDY3Y2NkOTljMjBiNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgICAgICAgICAg
ICAgIGlmIChzcGxpdFBvaW50UGFyZW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFzcGxpdFBvaW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcp
CiAgICAgICAgICAgICAgICAgICAgICYmIHNwbGl0UG9pbnRQYXJlbnQtPnBhcmVudE5vZGUoKS0+
aGFzRWRpdGFibGVTdHlsZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBs
YWNlIHRvIGdvIQotICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KHNw
bGl0UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRF
bGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KHNwbGl0UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJlIHdlIHN0YXJ0IG91dGRlbnRpbmcu
CiAgICAgICAgIE5vZGUqIGhpZ2hlc3RJbmxpbmVOb2RlID0gaGlnaGVzdEVuY2xvc2luZ05vZGVP
ZlR5cGUodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSwgaXNJbmxpbmUs
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5LCBlbmNsb3NpbmdCbG9ja0Zsb3cpOwotICAgICAg
ICBzcGxpdEVsZW1lbnQodG9FbGVtZW50KGVuY2xvc2luZ05vZGUpLCAoaGlnaGVzdElubGluZU5v
ZGUpID8gaGlnaGVzdElubGluZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNh
c3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSksIGhpZ2hlc3RJbmxpbmVOb2RlID8gaGlnaGVzdElu
bGluZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIH0KICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBjcmVh
dGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFjZWhv
bGRlciwgc3BsaXRCbG9ja3F1b3RlTm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCAyYmZj
MTA3NDY1OGZjMjRiZWVmNmYxMjEwN2UyNzAyMjMxOTZlYWNjLi5lOWZlNWFkNGRlMzYwNzhlY2M5
YjFiMTJhOTA2Y2NmZjQ5ZjE0YjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTIyNyw3ICsy
MjcsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAgICAgLy8gaW50byBhbiB1bnF1b3RlZCBhcmVhLiBXZSB0aGVuIGRvbid0IHdhbnQg
dGhlIG5ld2xpbmUgd2l0aGluIHRoZSBibG9ja3F1b3RlIG9yIGVsc2UgaXQgd2lsbCBhbHNvIGJl
IHF1b3RlZC4KICAgICAgICAgICAgIGlmIChtX3Bhc3RlQmxvY2txdXRvZUludG9VbnF1b3RlZEFy
ZWEpIHsKICAgICAgICAgICAgICAgICBpZiAoTm9kZSogaGlnaGVzdEJsb2NrcXVvdGUgPSBoaWdo
ZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjYW5vbmljYWxQb3MsICZpc01haWxCbG9ja3F1b3RlKSkK
LSAgICAgICAgICAgICAgICAgICAgc3RhcnRCbG9jayA9IHRvRWxlbWVudChoaWdoZXN0QmxvY2tx
dW90ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2sgPSBkb3duY2FzdDxFbGVtZW50
PihoaWdoZXN0QmxvY2txdW90ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE1v
c3Qgb2YgdGhlIHRpbWUgd2Ugd2FudCB0byBzdGF5IGF0IHRoZSBuZXN0aW5nIGxldmVsIG9mIHRo
ZSBzdGFydEJsb2NrIChlLmcuLCB3aGVuIG5lc3Rpbmcgd2l0aGluIGxpc3RzKS4gIEhvd2V2ZXIs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IDcz
ZTE5YmFmZDdkNTI3MmE2YjAzN2ZiMGZhOGY2NWQ2N2ZjYWFlN2QuLjFkN2VmYTMzYzBhZDBiNDdi
YjU3Mjk2YmMwZDEyODU5Zjk2NWFkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuY3BwCkBAIC0xMzksOSArMTM5LDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2Rl
KiBub2QKICAgICBpZiAoJnRhcmdldE5vZGUgPT0gbm9kZVRvU2tpcCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHRhZ05hbWVzVG9Ta2lwICYmIHRhcmdldE5vZGUuaXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgaWYgKHRhZ05hbWVzVG9Ta2lwICYmIGlzPEVsZW1lbnQ+KHRhcmdldE5vZGUpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6ICp0YWdOYW1lc1RvU2tpcCkgewotICAgICAgICAg
ICAgaWYgKHRvRWxlbWVudCh0YXJnZXROb2RlKS5oYXNUYWdOYW1lKG5hbWUpKQorICAgICAgICAg
ICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldE5vZGUpLmhhc1RhZ05hbWUobmFtZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtNTcwLDcgKzU3MCw3
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kCiAgICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJbnN0
cnVjdGlvbihyZXN1bHQsIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkudGFy
Z2V0KCksIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkuZGF0YSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgIGFwcGVu
ZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQobm9kZSksIG5hbWVzcGFjZXMpOworICAgICAgICBh
cHBlbmRFbGVtZW50KHJlc3VsdCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIG5hbWVzcGFjZXMp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKICAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgZG93bmNhc3Q8Q0RBVEFTZWN0aW9uPihu
b2RlKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5o
CmluZGV4IGZjZjA1ZWJhYjg4MjAwY2RlMDViNTQ5MzhlNzk0MzcxMWQ2NmQ5ODIuLjhiMzBkNDZi
ODNhZTdiYmU4MTU1NDliOTFiNGQwYWE0ZWRiM2M0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTc2LDggKzc2LDggQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICBhcHBlbmRFbmRUYWcodG9FbGVtZW50KG5vZGUpKTsKKyAgICAgICAg
aWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICAgICAgYXBwZW5kRW5kVGFnKGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IEVsZW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcAppbmRleCBlNWY4ODRhZjJiZDIyY2VkMDA2OWUwZmZjMWYz
NGZkNzZkYjVjYzIyLi5kZmNlNTUzZDUzMGFlODEyN2QyZDdlM2JmMjVhOGUyZWNjMTlkMzk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIE5vZGUqIHByZXZpb3VzSXRlbSA9IHN0YXJ0TGlzdENo
aWxkLT5yZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKS0+bm9kZSgpOwogICAgIGlmIChpc0xp
c3RFbGVtZW50KHByZXZpb3VzSXRlbSkpIHsKICAgICAgICAgLy8gbW92ZSBub2RlcyB1cCBpbnRv
IHByZWNlZGluZyBsaXN0Ci0gICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlUmFuZ2Uoc3RhcnRMaXN0
Q2hpbGQsIGVuZExpc3RDaGlsZCwgdG9FbGVtZW50KHByZXZpb3VzSXRlbSkpOworICAgICAgICBh
cHBlbmRTaWJsaW5nTm9kZVJhbmdlKHN0YXJ0TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQsIGRvd25j
YXN0PEVsZW1lbnQ+KHByZXZpb3VzSXRlbSkpOwogICAgICAgICBtX2xpc3RFbGVtZW50ID0gcHJl
dmlvdXNJdGVtOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIHN1Ymxpc3QgZm9y
IHRoZSBwcmVjZWRpbmcgZWxlbWVudCBhbmQgbW92ZSBub2RlcyB0aGVyZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4ZTg4
ZDUwMmEwMWMxMGZmNjZmNmZkNjBjZjQ3MjZiM2Y2MDMwODc5Li4xNTVlMTdhZjc1OWI0MDEwYTk2
ZjQ0ZTgwYzdhODkzMDQzMWY2NjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmdlRW5kKGJvb2wgc2VsZWN0aW9uRW5kV2Fz
RW5kT2ZQYXJhZ3JhcGgpCiAKIHN0YXRpYyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2Rl
KGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFt
ZShibG9ja3F1b3RlVGFnKSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5v
ZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247Cisg
ICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSAmJiBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBwbGVQYXN0
ZUFzUXVvdGF0aW9uOwogfQogCiBzdGF0aWMgYm9vbCBpc0hlYWRlckVsZW1lbnQoY29uc3QgTm9k
ZSogYSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgYm9vbCBpc0hlYWRlckVsZW1lbnQoY29u
c3QgTm9kZSogYSkKIAogc3RhdGljIGJvb2wgaGF2ZVNhbWVUYWdOYW1lKE5vZGUqIGEsIE5vZGUq
IGIpCiB7Ci0gICAgcmV0dXJuIGEgJiYgYiAmJiBhLT5pc0VsZW1lbnROb2RlKCkgJiYgYi0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChhKS0+dGFnTmFtZSgpID09IHRvRWxlbWVudChiKS0+
dGFnTmFtZSgpOworICAgIHJldHVybiBhICYmIGIgJiYgaXM8RWxlbWVudD4oYSkgJiYgaXM8RWxl
bWVudD4oYikgJiYgZG93bmNhc3Q8RWxlbWVudD4oKmEpLnRhZ05hbWUoKSA9PSBkb3duY2FzdDxF
bGVtZW50PigqYikudGFnTmFtZSgpOwogfQogCiBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpzaG91bGRNZXJnZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHNvdXJjZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBkZXN0aW5hdGlvbikKQEAgLTc1NSw3ICs3NTUsNyBAQCBzdGF0aWMgYm9vbCBo
YW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBjb25zdAogCiAgICAgLy8gRklYTUU6IFRoaXMgc3RyaW5nIGNvbXBhcmlzb24gaXMgYSBu
YWl2ZSB3YXkgb2YgY29tcGFyaW5nIHR3byBzdHlsZXMuCiAgICAgLy8gV2Ugc2hvdWxkIGJlIHRh
a2luZyB0aGUgZGlmZiBhbmQgY2hlY2sgdGhhdCB0aGUgZGlmZiBpcyBlbXB0eS4KLSAgICBpZiAo
c3R5bGVUZXh0ICE9IHRvRWxlbWVudCh3cmFwcGluZ1N0eWxlU3BhbiktPmdldEF0dHJpYnV0ZShz
dHlsZUF0dHIpKQorICAgIGlmIChzdHlsZVRleHQgIT0gZG93bmNhc3Q8RWxlbWVudD4oKndyYXBw
aW5nU3R5bGVTcGFuKS5nZXRBdHRyaWJ1dGUoc3R5bGVBdHRyKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGlu
Z1N0eWxlU3Bhbik7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgbWVyZ2VFbmRJZk5lZWRlZCgpOwogCiAgICAgaWYg
KE5vZGUqIG1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShwb3NpdGlvbkF0U3Rh
cnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCksIGlzTWFpbFBhc3RlQXNRdW90
YXRpb25Ob2RlKSkKLSAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSh0b0VsZW1lbnQobWFpbEJs
b2NrcXVvdGUpLCBjbGFzc0F0dHIpOworICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGRvd25j
YXN0PEVsZW1lbnQ+KG1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRyKTsKIAogICAgIGlmIChzaG91
bGRQZXJmb3JtU21hcnRSZXBsYWNlKCkpCiAgICAgICAgIGFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFj
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4IDcwNzc2ZmM2
NTU0ZjU1ZGE1MDk1NThjZmJmOGIwZGYyNGQwM2I4ZmIuLmU5NWQ4NTQ2ZWMxZTA0MzUwODJiZjA4
OTA4NmQyYzZiMzc4YTNmNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5j
cHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoUmFu
Z2UqIHJhbmdlKSBjb25zdAogICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5maXJzdE5vZGUoKSB8
fCAhcmFuZ2UtPmZpcnN0Tm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIGlm
IChub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhdG9FbGVtZW50KG5vZGUpLT5pc1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKG5vZGUgJiYgaXM8RWxlbWVudD4obm9kZSkg
JiYgIWRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuY3BwCmluZGV4IDcwZDViNTc0NTM0MzEyZDY3Zjc2NjQwNGEwYWVkZWRmMTBl
NzRiMGQuLjhmN2JkZjU4NDI4ZjJjNTVmNjc5OGMwNzY0NWE0ODdmNTg5YWIxZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghcGFyZW50
UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRlcmVyLT5pc0lubGluZSgpKSB7CiAgICAgICAgIHdyYXBD
b250ZW50c0luRHVtbXlTcGFuKHBhcmVudCk7CiAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBw
YXJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKCFmaXJzdENoaWxkIHx8ICFmaXJzdENo
aWxkLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghZmlyc3RDaGlsZCB8fCAhaXM8RWxl
bWVudD4oZmlyc3RDaGlsZCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhcmVudCA9
IHRvRWxlbWVudChmaXJzdENoaWxkKTsKKyAgICAgICAgcGFyZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oZmlyc3RDaGlsZCk7CiAgICAgfQogCiAgICAgc3BsaXRFbGVtZW50KHBhcmVudCwgbV90ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAyNTdmNGI0Mzll
NzU0ZDVjZmIyMzA1MzIwN2Q1OTJmMWM4MTg2MzY1Li5hNWQyODZjNWI0YThiYmNkYjU5NmYwODcx
MTZkODA5OWFlNmJjNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CkBAIC0yNTUsOCArMjU1LDggQEAgYm9vbCBpc1JlbmRlcmVyUmVwbGFjZWRFbGVtZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKHJlbmRlcmVyLT5pc0ltYWdlKCkgfHwgcmVuZGVy
ZXItPmlzV2lkZ2V0KCkgfHwgcmVuZGVyZXItPmlzTWVkaWEoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqcmVu
ZGVyZXItPm5vZGUoKSk7CisgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgaXM8RWxlbWVudD4o
cmVuZGVyZXItPm5vZGUoKSkpIHsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxMZWdlbmRFbGVtZW50PihlbGVtZW50KSB8
fCBpczxIVE1MTWV0ZXJFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MUHJvZ3Jlc3NFbGVtZW50
PihlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKSwgImltZyIpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IGQ0
OGRhMGU2NDlkZTk5NmU3OGMwM2JkMzc1OGZlNmI2ZmU4M2YwOTUuLmE3ZTBiNDc4NjcyOWRiYjZl
MjA5Y2ViZWFmMDJjNDYzODYxYTU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgIkZyYW1lTG9h
ZGVyLmgiCiAjaW1wb3J0ICJIVE1MRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEZyYW1lRWxlbWVu
dEJhc2UuaCIKKyNpbXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxNZXRhRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE5h
bWVzLmgiCkBAIC03MzgsMTQgKzczOSwxNCBAQCBzdGF0aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFs
dWUoQ1NTVmFsdWUmIHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIAogU3RyaW5nIEhUTUxDb252ZXJ0
ZXJDYWNoZXM6OnByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJZCkKIHsKLSAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS5w
YXJlbnROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZUZvck5vZGUoKnBh
cmVudCwgcHJvcGVydHlJZCk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAg
ICBib29sIGluaGVyaXQgPSBmYWxzZTsKLSAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50
KG5vZGUpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsK
ICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZv
ckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdDsK
ICAgICAgICAgaWYgKHN0cmluZ0Zyb21DU1NWYWx1ZSgqdmFsdWUsIHJlc3VsdCkpCkBAIC04ODMs
MTMgKzg4NCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdQogCiBib29sIEhUTUxDb252ZXJ0
ZXJDYWNoZXM6OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlkLCBmbG9hdCYgcmVzdWx0KQogewotICAgIGlmICghbm9kZS5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgIGlmIChD
b250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKCpwYXJlbnQsIHByb3BlcnR5SWQsIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5
bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKICAgICAgICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1
ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTEwNTIsMTMgKzEwNTMsMTMgQEAgc3RhdGljIENvbG9yIG5vcm1hbGl6ZWRD
b2xvcihDb2xvciBjb2xvciwgYm9vbCBpZ25vcmVCbGFjaykKIAogQ29sb3IgSFRNTENvbnZlcnRl
ckNhY2hlczo6Y29sb3JQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQpCiB7Ci0gICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSkgeworICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5v
ZGUucGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlWYWx1ZUZv
ck5vZGUoKnBhcmVudCwgcHJvcGVydHlJZCk7CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAg
IH0KIAotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgRWxlbWVu
dCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBw
cm9wZXJ0eUlkKSkgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0
b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQogICAgICAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuZ2V0
UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CkBAIC0xMzU2
LDExICsxMzU3LDExIEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YXR0cmlidXRlc0Zv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6
YWdncmVnYXRlZEF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMoQ2hhcmFjdGVyRGF0YSYgbm9kZSkKIHsK
ICAgICBOb2RlKiBhbmNlc3RvciA9IG5vZGUucGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChhbmNl
c3RvciAmJiAhYW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSkKKyAgICB3aGlsZSAoYW5jZXN0b3Ig
JiYgIWlzPEVsZW1lbnQ+KGFuY2VzdG9yKSkKICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
cGFyZW50Tm9kZSgpOwogICAgIGlmICghYW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBhZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3Rv
cnMoKnRvRWxlbWVudChhbmNlc3RvcikpOworICAgIHJldHVybiBhZ2dyZWdhdGVkQXR0cmlidXRl
c0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoZG93bmNhc3Q8RWxlbWVudD4oKmFuY2VzdG9yKSk7
CiB9CiAKIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdncmVnYXRlZEF0dHJpYnV0ZXNG
b3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xMzczLDcgKzEz
NzQsNyBAQCBOU0RpY3Rpb25hcnkqIEhUTUxDb252ZXJ0ZXI6OmFnZ3JlZ2F0ZWRBdHRyaWJ1dGVz
Rm9yRWxlbWVudEFuZEl0c0FuY2VzdG9ycyhFbGVtZQogICAgIEFTU0VSVChhdHRyaWJ1dGVzRm9y
Q3VycmVudEVsZW1lbnQpOwogCiAgICAgTm9kZSogYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5v
ZGUoKTsKLSAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFpczxFbGVtZW50PihhbmNlc3RvcikpCiAgICAgICAg
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKIAogICAgIGlmICghYW5jZXN0b3Ip
IHsKQEAgLTEzODEsNyArMTM4Miw3IEBAIE5TRGljdGlvbmFyeSogSFRNTENvbnZlcnRlcjo6YWdn
cmVnYXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50QW5kSXRzQW5jZXN0b3JzKEVsZW1lCiAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVzRm9yQ3VycmVudEVsZW1lbnQ7CiAgICAgfQogCi0gICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBhZG9wdE5T
KFthZ2dyZWdhdGVkQXR0cmlidXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoKnRvRWxlbWVu
dChhbmNlc3RvcikpIG11dGFibGVDb3B5XSk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IGF0dHJpYnV0ZXNGb3JBbmNlc3RvcnMgPSBhZG9wdE5TKFthZ2dyZWdhdGVkQXR0cmli
dXRlc0ZvckVsZW1lbnRBbmRJdHNBbmNlc3RvcnMoZG93bmNhc3Q8RWxlbWVudD4oKmFuY2VzdG9y
KSkgbXV0YWJsZUNvcHldKTsKICAgICBbYXR0cmlidXRlc0ZvckFuY2VzdG9ycyBhZGRFbnRyaWVz
RnJvbURpY3Rpb25hcnk6YXR0cmlidXRlc0ZvckN1cnJlbnRFbGVtZW50XTsKICAgICBtX2FnZ3Jl
Z2F0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudHMuc2V0KCZlbGVtZW50LCBhdHRyaWJ1dGVzRm9yQW5j
ZXN0b3JzKTsKIApAQCAtMjM5NCw4ICsyMzk1LDggQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfdHJh
dmVyc2VOb2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGRlcHRoLCBib29sIGVtYmVkZGVkKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKICAgICAgICAgaWYgKF9lbnRlckVsZW1lbnQoZWxlbWVudCwg
ZW1iZWRkZWQpKSB7CiAgICAgICAgICAgICBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXggPSBbX2F0dHJT
dHIgbGVuZ3RoXTsKICAgICAgICAgICAgIGlmIChfcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZGVw
dGgpKSB7CkBAIC0yNTcwLDggKzI1NzEsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgCiAgICAgICAg
IGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVu
ZE9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXIt
PnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChub2RlICYm
IG5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBw
ZXIqIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JFbGVtZW50KHRvRWxlbWVudChub2RlKSk7
CisgICAgICAgICAgICBpZiAobm9kZSAmJiBpczxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkgewor
ICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyID0gZmlsZVdyYXBwZXJG
b3JFbGVtZW50KGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KG5vZGUpKTsKICAgICAgICAgICAg
ICAgICBOU1RleHRBdHRhY2htZW50KiBhdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFs
bG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsKICAgICAgICAgICAgICAgICBb
c3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1
dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF1dOwogICAgICAgICAgICAgICAgIFth
dHRhY2htZW50IHJlbGVhc2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApp
bmRleCBkMTBiMTFiMjNmMzYzY2E5NjE4YzBlNWUyZDdmZGVhM2NlM2EzMTM1Li5lYmY1YjVjYjFl
ODIwZWM3MzRjODhhY2U4YWQ3YzdhMWVmOTJiZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIEVsZW1lbnQqIHVuc3BsaXR0YWJsZUVs
ZW1lbnRGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKIHsKICAgICAvLyBTaW5jZSBlbmNs
b3NpbmdOb2RlT2ZUeXBlIHdvbid0IHNlYXJjaCBiZXlvbmQgdGhlIGhpZ2hlc3Qgcm9vdCBlZGl0
YWJsZSBub2RlLAogICAgIC8vIHRoaXMgY29kZSB3b3JrcyBldmVuIGlmIHRoZSBjbG9zZXN0IHRh
YmxlIGNlbGwgd2FzIG91dHNpZGUgb2YgdGhlIHJvb3QgZWRpdGFibGUgbm9kZS4KLSAgICBFbGVt
ZW50KiBlbmNsb3NpbmdDZWxsID0gdG9FbGVtZW50KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlz
VGFibGVDZWxsKSk7CisgICAgRWxlbWVudCogZW5jbG9zaW5nQ2VsbCA9IGRvd25jYXN0PEVsZW1l
bnQ+KGVuY2xvc2luZ05vZGVPZlR5cGUocCwgJmlzVGFibGVDZWxsKSk7CiAgICAgaWYgKGVuY2xv
c2luZ0NlbGwpCiAgICAgICAgIHJldHVybiBlbmNsb3NpbmdDZWxsOwogCkBAIC0zMTYsNyArMzE2
LDcgQEAgYm9vbCBpc0lubGluZShjb25zdCBOb2RlKiBub2RlKQogRWxlbWVudCogZW5jbG9zaW5n
QmxvY2soTm9kZSogbm9kZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpCiB7CiAg
ICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKG5vZGUpLCBpc0Jsb2NrLCBydWxlKTsKLSAgICByZXR1cm4gZW5jbG9z
aW5nTm9kZSAmJiBlbmNsb3NpbmdOb2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQoZW5j
bG9zaW5nTm9kZSkgOiAwOworICAgIHJldHVybiBlbmNsb3NpbmdOb2RlICYmIGlzPEVsZW1lbnQ+
KGVuY2xvc2luZ05vZGUpID8gZG93bmNhc3Q8RWxlbWVudD4oZW5jbG9zaW5nTm9kZSkgOiBudWxs
cHRyOwogfQogCiBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNTUwLDEwICs1NTAsMTAgQEAgRWxlbWVudCogZW5jbG9z
aW5nRWxlbWVudFdpdGhUYWcoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBRdWFsaWZp
ZWROYW1lJgogICAgIGZvciAoTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3QgJiYg
IW5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihu
b2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAodG9FbGVtZW50KCpub2Rl
KS5oYXNUYWdOYW1lKHRhZ05hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2Rl
KTsKKyAgICAgICAgaWYgKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5oYXNUYWdOYW1lKHRhZ05h
bWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgICAg
ICBpZiAobm9kZSA9PSByb290KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpA
QCAtNjI5LDcgKzYyOSw3IEBAIE5vZGUqIGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcoTm9k
ZSogbm9kZSkKIAogTm9kZSogZW5jbG9zaW5nVGFibGVDZWxsKGNvbnN0IFBvc2l0aW9uJiBwKQog
ewotICAgIHJldHVybiB0b0VsZW1lbnQoZW5jbG9zaW5nTm9kZU9mVHlwZShwLCBpc1RhYmxlQ2Vs
bCkpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlT2ZUeXBlKHAs
IGlzVGFibGVDZWxsKSk7CiB9CiAKIEVsZW1lbnQqIGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoY29u
c3QgUG9zaXRpb24mIHApCkBAIC02MzgsOCArNjM4LDggQEAgRWxlbWVudCogZW5jbG9zaW5nQW5j
aG9yRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiBub2RlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSAmJiBub2RlLT5pc0xpbmsoKSkKKyAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkBAIC0xMTg0LDExICsxMTg0LDExIEBAIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5s
aW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSogbm9kZSkKIAogYm9vbCBhcmVJZGVudGljYWxF
bGVtZW50cyhjb25zdCBOb2RlKiBmaXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQogewotICAgIGlm
ICghZmlyc3QtPmlzRWxlbWVudE5vZGUoKSB8fCAhc2Vjb25kLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgaWYgKCFpczxFbGVtZW50PihmaXJzdCkgfHwgIWlzPEVsZW1lbnQ+KHNlY29uZCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IHRv
RWxlbWVudChmaXJzdCk7Ci0gICAgY29uc3QgRWxlbWVudCogc2Vjb25kRWxlbWVudCA9IHRvRWxl
bWVudChzZWNvbmQpOworICAgIGNvbnN0IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGZpcnN0KTsKKyAgICBjb25zdCBFbGVtZW50KiBzZWNvbmRFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKICAgICBpZiAoIWZpcnN0RWxlbWVudC0+aGFzVGFnTmFt
ZShzZWNvbmRFbGVtZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xMTk3LDIxICsxMTk3LDE3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9k
ZSogZmlyc3QsIGNvbnN0IE5vZGUqIHNlY29uZCkKIAogYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxC
bG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgRWxlbWVudCogZWxl
bWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShs
aXN0aW5nVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKQotICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHByZVRhZykKLSAgICAgICAgfHwgaXM8SFRNTFRhYmxl
RWxlbWVudD4oZWxlbWVudCkKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykK
LSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh4bXBUYWcpCi0gICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoaDFUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaDJU
YWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoaDNUYWcpCi0gICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaDRUYWcpCi0gICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
aDVUYWcpOworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGxpc3RpbmdUYWcpCisgICAgICAg
IHx8IG5vZGUtPmhhc1RhZ05hbWUob2xUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUo
cHJlVGFnKQorICAgICAgICB8fCBpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKQorICAgICAgICB8
fCBub2RlLT5oYXNUYWdOYW1lKHVsVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHht
cFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoMVRhZykKKyAgICAgICAgfHwgbm9k
ZS0+aGFzVGFnTmFtZShoMlRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoM1RhZykK
KyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShoNFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFz
VGFnTmFtZShoNVRhZyk7CiB9CiAKIFBvc2l0aW9uIGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JT
dHlsZUNvbXB1dGF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTEy
NTEsMTQgKzEyNDcsMTQgQEAgYm9vbCBpc0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgTm9kZSogbm9k
ZSkKIEVsZW1lbnQqIGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0
dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpOwogICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAg
aWYgKGlzQmxvY2tGbG93RWxlbWVudChub2RlKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgaWYgKGlzQmxv
Y2tGbG93RWxlbWVudChub2RlKSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KG5vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNhcmV0UmVu
ZGVyc0luc2lkZU5vZGUoTm9kZSogbm9kZSkKQEAgLTEyNjksMTEgKzEyNjUsMTEgQEAgc3RhdGlj
IGlubGluZSBib29sIGNhcmV0UmVuZGVyc0luc2lkZU5vZGUoTm9kZSogbm9kZSkKIFJlbmRlck9i
amVjdCogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAv
LyBJZiBjYXJldE5vZGUgaXMgYSBibG9jayBhbmQgY2FyZXQgaXMgaW5zaWRlIGl0LCB0aGVuIGNh
cmV0IHNob3VsZCBiZSBwYWludGVkIGJ5IHRoYXQgYmxvY2suCiAgICAgYm9vbCBwYWludGVkQnlC
bG9jayA9IHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpICYmIGNhcmV0UmVuZGVyc0luc2lk
ZU5vZGUobm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZDkxMDAyZDI5OGQ2
MTdmMmZmNWVkOTU0ZjA1MjhiMWMyNGNjNGZmMS4uMWI5MGJlMjU3MDBiMjcxNzU5OTg3OTYxNDZi
ZjA5NThjNGQwYmE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTgxLDEwICsx
ODEsMTAgQEAgaW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUEKIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OndyYXBXaXRoTm9kZShOb2RlJiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7CiAgICAg
U3RyaW5nQnVpbGRlciBtYXJrdXA7Ci0gICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQotICAg
ICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzICYmIGlzQmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgYXBwZW5kRWxlbWVudChtYXJrdXAsIGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2so
Jm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXBwZW5k
U3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKKyAgICAgICAgYXBwZW5kU3RhcnRNYXJrdXAo
bWFya3VwLCBub2RlLCBudWxscHRyKTsKICAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFw
cGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5vZGUpOwogICAgIGlm
IChtX25vZGVzKQpAQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3Vw
SW50ZXJuYWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0CiAg
ICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAg
ICBhdXRvKiBib2R5ID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9k
ZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwotICAgIE5vZGUqIGZ1bGx5U2VsZWN0ZWRSb290
ID0gMDsKKyAgICBFbGVtZW50KiBmdWxseVNlbGVjdGVkUm9vdCA9IG51bGxwdHI7CiAgICAgLy8g
RklYTUU6IERvIHRoaXMgZm9yIGFsbCBmdWxseSBzZWxlY3RlZCBibG9ja3MsIG5vdCBqdXN0IHRo
ZSBib2R5LgogICAgIGlmIChib2R5ICYmIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5O
b2RlKGJvZHkpKSA9PSBWaXNpYmxlUG9zaXRpb24ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKQogICAg
ICAgICAmJiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKGJvZHkpKSA9PSBWaXNp
YmxlUG9zaXRpb24ocmFuZ2UuZW5kUG9zaXRpb24oKSkpCkBAIC02MDgsOCArNjA4LDggQEAgc3Rh
dGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRlcm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFJhbmdlJiByYW5nZSwgY29uc3QKICAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgYmFja2dy
b3VuZCBhdHRyaWJ1dGUgb3ZlciwgYnV0IG5vdCBhcyBhbiBhdHRyaWJ1dGUgYmVjYXVzZSBhIGJh
Y2tncm91bmQgYXR0cmlidXRlIG9uIGEgZGl2CiAgICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0
byBoYXZlIG5vIGVmZmVjdC4KICAgICAgICAgICAgICAgICBpZiAoKCFmdWxseVNlbGVjdGVkUm9v
dFN0eWxlIHx8ICFmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpIHx8ICFmdWxseVNlbGVj
dGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFj
a2dyb3VuZEltYWdlKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgdG9FbGVtZW50KGZ1bGx5U2Vs
ZWN0ZWRSb290KS0+aGFzQXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSkKLSAgICAgICAgICAgICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsICJ1cmwoJyIgKyB0b0VsZW1lbnQoZnVsbHlTZWxlY3RlZFJv
b3QpLT5nZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpICsgIicpIik7CisgICAgICAgICAgICAg
ICAgICAgICYmIGZ1bGx5U2VsZWN0ZWRSb290LT5oYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIp
KQorICAgICAgICAgICAgICAgICAgICBmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgInVybCgnIiArIGZ1bGx5U2Vs
ZWN0ZWRSb290LT5nZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpICsgIicpIik7CiAKICAgICAg
ICAgICAgICAgICBpZiAoZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYXZvaWQgYW4gYXNz
ZXJ0aW9uIGVycm9yIGluIGFkZFN0eWxlTWFya3VwKCkuCkBAIC04MDQsNyArODA0LDcgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBj
b250ZXh0LCBjb25zdCBTdHJpbmcKIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFw
aHMuIEV4dHJhIGxpbmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgogICAgIE5v
ZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2RlKCkpOwotICAg
IEVsZW1lbnQqIGJsb2NrID0gdG9FbGVtZW50KGJsb2NrTm9kZSk7CisgICAgRWxlbWVudCogYmxv
Y2sgPSBkb3duY2FzdDxFbGVtZW50PihibG9ja05vZGUpOwogICAgIGJvb2wgdXNlQ2xvbmVzT2ZF
bmNsb3NpbmdCbG9jayA9IGJsb2NrTm9kZQogICAgICAgICAmJiBibG9ja05vZGUtPmlzRWxlbWVu
dE5vZGUoKQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoYm9keVRhZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcAppbmRleCAyM2QyMTkzOTgwYmNlNmQ1
OTViMzRiYTlmNjYwNDQ5NTE2Nzc2NTM4Li4yNmZhMTRhZDY3NTM0MDQ5ODM1ZGU2OTM0ZTcxZjBj
OWEzNGJiNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3Bw
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBmYWxsYmFja1N1bW1hcnko
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPmhh
c1RhZ05hbWUoc3VtbWFyeVRhZykpOwotICAgICAgICByZXR1cm4gdG9FbGVtZW50KGZpcnN0Q2hp
bGQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihmaXJzdENoaWxkKCkpOwog
ICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYmNk
MjY3ZGNhNjZlMTFiNmI0ODIyMDI2NDM1Njc4MjZhM2I1ZDE3MS4uOWFjNDEzZjAxMDc1ZDM2OGVk
NGRlNThkZTI2N2JkYmIzMzA1Y2MxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
QEAgLTY0Miw4ICs2NDIsOCBAQCBFbGVtZW50KiBIVE1MRWxlbWVudDo6aW5zZXJ0QWRqYWNlbnRF
bGVtZW50KGNvbnN0IFN0cmluZyYgd2hlcmUsIEVsZW1lbnQqIG5ld0NoaQogICAgIH0KIAogICAg
IE5vZGUqIHJldHVyblZhbHVlID0gaW5zZXJ0QWRqYWNlbnQod2hlcmUsIG5ld0NoaWxkLCBlYyk7
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXJldHVyblZhbHVlIHx8IHJl
dHVyblZhbHVlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIHJldHVybiB0b0VsZW1lbnQocmV0dXJu
VmFsdWUpOyAKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighcmV0dXJuVmFs
dWUgfHwgaXM8RWxlbWVudD4ocmV0dXJuVmFsdWUpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxl
bWVudD4ocmV0dXJuVmFsdWUpOyAKIH0KIAogLy8gU3RlcCAzIG9mIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2FwaXMtaW4taHRtbC1k
b2N1bWVudHMuaHRtbCNpbnNlcnRhZGphY2VudGh0bWwoKQpAQCAtNjUxLDEyICs2NTEsMTIgQEAg
c3RhdGljIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50Rm9ySW5zZXJ0aW9uKGNvbnN0IFN0cmluZyYg
d2hlcmUsIEVsZW1lbnQqIGVsZW1lbnQKIHsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uod2hl
cmUsICJiZWZvcmVCZWdpbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHdoZXJlLCAiYWZ0ZXJFbmQi
KSkgewogICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChwYXJlbnQgJiYgIWlzPEVsZW1lbnQ+KHBhcmVudCkpIHsKICAgICAgICAgICAg
IGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXBhcmVudCB8fCBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgICAgIHJldHVybiB0
b0VsZW1lbnQocGFyZW50KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXBhcmVudCB8fCBpczxFbGVtZW50PihwYXJlbnQpKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KHBhcmVudCk7CiAgICAgfQogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh3
aGVyZSwgImFmdGVyQmVnaW4iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh3aGVyZSwgImJlZm9yZUVu
ZCIpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKQEAgLTkzNCwxNCArOTM0LDE0IEBAIFRleHRE
aXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rp
b25hbGl0eVRleHROb2RlKSBjCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgLy8gU2tpcCBi
ZGksIHNjcmlwdCwgc3R5bGUgYW5kIHRleHQgZm9ybSBjb250cm9scy4KICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5vZGUtPm5vZGVOYW1lKCksICJiZGkiKSB8fCBub2RlLT5oYXNUYWdO
YW1lKHNjcmlwdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykgCi0gICAgICAgICAg
ICB8fCAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNUZXh0Rm9y
bUNvbnRyb2woKSkpIHsKKyAgICAgICAgICAgIHx8IChpczxFbGVtZW50Pihub2RlKSAmJiBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSkuaXNUZXh0Rm9ybUNvbnRyb2woKSkpIHsKICAgICAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU2tpcCBlbGVt
ZW50cyB3aXRoIHZhbGlkIGRpciBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGRpckF0dHJpYnV0ZVZhbHVlID0g
dG9FbGVtZW50KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGRpckF0dHIpOworICAgICAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJBdHRyaWJ1
dGVWYWx1ZSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGRpckF0
dHIpOwogICAgICAgICAgICAgaWYgKGlzTFRST3JSVExJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRl
VmFsdWUpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAiYXV0byIpKSB7
CiAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKG5vZGUsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCBkOTIwODNhMDY3NmE1YThl
ZTk1ZDc2ZjAxN2Q0NTJkNTA4ZDRlNDBjLi5jMjI0ZTZlZGJkN2RlOTgzNzRmM2M3ZGJkOWExZjcw
MTAwMGRjNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaApAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oSFRNTEZvcm1Db250cm9sRWxlbWVudCkKICAgICBzdGF0aWMgYm9vbCBpc0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVu
dC5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0
dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzRm9ybUNv
bnRyb2xFbGVtZW50KCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQoY29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50JiBlbGVtZW50KSB7IHJldHVybiBlbGVtZW50
LmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBkMzdhMTQxMGZjZDk2
YzA3N2ZhMzQ2OTBhMGE1MjA4YzBmZDVlZmI4Li4yN2ZjZGQyZTc0YzhlNjBkMmVkMzBiM2YyZDZj
MzQ4MzNmMTVhODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
OTExLDcgKzkxMSw3IEBAIHN0cnVjdCBWYWx1ZVRvU3RyaW5nPFRleHRUcmFja0N1ZSo+IHsKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihIVE1MTWVkaWFFbGVtZW50KQogICAgIHN0YXRp
YyBib29sIGlzSFRNTE1lZGlhRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJldHVy
biBlbGVtZW50LmlzTWVkaWFFbGVtZW50KCk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0hUTUxNZWRp
YUVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkg
JiYgaXNIVE1MTWVkaWFFbGVtZW50KHRvRWxlbWVudChub2RlKSk7IH0KKyAgICBzdGF0aWMgYm9v
bCBpc0hUTUxNZWRpYUVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gaXM8RWxlbWVu
dD4obm9kZSkgJiYgaXNIVE1MTWVkaWFFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsg
fQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA4ZGE5NDNmMTQxOGY1MjFh
ZDRlZWM5NGM1MWU0MzNmM2RiYTkyY2U3Li4xNDkzOGZhZDBjNGM3NjZlZGJmNzViZjgzMjA3YTkx
N2RhMjRiMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApA
QCAtNDIzLDEwICs0MjMsMTAgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFt
ZWRJdGVtKCkKICAgICBib29sIGlzTmFtZWRJdGVtID0gdHJ1ZTsKICAgICBOb2RlKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQgJiYgaXNOYW1lZEl0ZW0pIHsKLSAgICAg
ICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0b0VsZW1lbnQoY2hpbGQpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4oY2hpbGQp
KSB7CisgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNo
aWxkKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2Ugb2YgaXNSZWNvZ25pemVkVGFnTmFtZSBp
cyBhbG1vc3QgY2VydGFpbmx5IHdyb25nIGhlcmUuCi0gICAgICAgICAgICBpZiAoaXNSZWNvZ25p
emVkVGFnTmFtZShlbGVtZW50LT50YWdRTmFtZSgpKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShw
YXJhbVRhZykpCisgICAgICAgICAgICBpZiAoaXNSZWNvZ25pemVkVGFnTmFtZShlbGVtZW50LnRh
Z1FOYW1lKCkpICYmICFlbGVtZW50Lmhhc1RhZ05hbWUocGFyYW1UYWcpKQogICAgICAgICAgICAg
ICAgIGlzTmFtZWRJdGVtID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oY2hp
bGQpKSB7CiAgICAgICAgICAgICBpZiAoIWRvd25jYXN0PFRleHQ+KCpjaGlsZCkuY29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAppbmRleCA0Zjc1OTE2MzI0ZDlhNTI4MGVlMzE1NmQyMWZlMTg3ODg4MTEyMGM3Li43NzEzNTg5
Y2Y4MGUwZTMyOGU3NGEzNDBjMThkZTEwMmU3MjlkZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcApAQCAtMzM4LDEwICszMzgsMTAgQEAgU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50Ojpjb2xsZWN0T3B0aW9uSW5uZXJUZXh0KCkgY29uc3QKIHsKICAgICBTdHJp
bmdCdWlsZGVyIHRleHQ7CiAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2Rl
OyApIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgaWYgKGlzPFRl
eHQ+KG5vZGUpKQogICAgICAgICAgICAgdGV4dC5hcHBlbmQobm9kZS0+bm9kZVZhbHVlKCkpOwog
ICAgICAgICAvLyBUZXh0IG5vZGVzIGluc2lkZSBzY3JpcHQgZWxlbWVudHMgYXJlIG5vdCBwYXJ0
IG9mIHRoZSBvcHRpb24gdGV4dC4KLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHRvRWxlbWVudChub2RlKSkpCisgICAgICAgIGlm
IChpczxFbGVtZW50Pihub2RlKSAmJiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpKSkKICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmluZGV4IDhkYWYzNDBkZDA5MDRmZWNlZTlkMDI0ZTFj
OTM4ZTQ5YzQ1YTI3YjcuLjljZTllNWNhMDQ4MDMzZmNkMmQ1YTQ1OWEwZjU2MWM5YzAwMzA0MTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC02Myw4ICs2
Myw4IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNvdXJjZUVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlCiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByZW1vdmFsUm9vdCkKIHsKICAgICBFbGVtZW50KiBw
YXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFwYXJlbnQgJiYgcmVtb3ZhbFJvb3Qu
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBwYXJlbnQgPSAmdG9FbGVtZW50KHJlbW92YWxSb290
KTsKKyAgICBpZiAoIXBhcmVudCAmJiBpczxFbGVtZW50PihyZW1vdmFsUm9vdCkpCisgICAgICAg
IHBhcmVudCA9ICZkb3duY2FzdDxFbGVtZW50PihyZW1vdmFsUm9vdCk7CiAgICAgaWYgKHBhcmVu
dCAmJiBpczxIVE1MTWVkaWFFbGVtZW50PihwYXJlbnQpKQogICAgICAgICBkb3duY2FzdDxIVE1M
TWVkaWFFbGVtZW50PigqcGFyZW50KS5zb3VyY2VXYXNSZW1vdmVkKHRoaXMpOwogICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyZW1vdmFsUm9vdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggNDRiNGRmZDQ5OTdiYjI2ZGY3YmUyNTQ5NDdhN2Ix
NTY1ZjY5NzlhMy4uZWM2YzNhMjBmZjk5YmEyYzk0MTQ5MzNlYmQ2YThhOTA4YzNhNjg0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTAyLDEyICsx
MDIsMTIgQEAgYm9vbCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmlzTWFpblN1bW1hcnkoKSBjb25zdAog
CiBzdGF0aWMgYm9vbCBpc0NsaWNrYWJsZUNvbnRyb2woTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2Rl
KTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwogICAg
IGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgRWxlbWVudCogaG9zdCA9IGVsZW1lbnQtPnNoYWRvd0hvc3QoKTsKKyAgICBF
bGVtZW50KiBob3N0ID0gZWxlbWVudC5zaGFkb3dIb3N0KCk7CiAgICAgcmV0dXJuIGhvc3QgJiYg
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oaG9zdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAzMzM3ZmQ5Mzc0M2Nj
OTVmNWFhOWMzNWEyMWZkYWY1MjZlNTY1Yjc2Li45ZGM3ZDkyNmJiMWNiNmMzMzExY2FjZWMxNjJi
ZDQ5NDczYmI1ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5oCkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCkKICAgICBzdGF0
aWMgYm9vbCBpc0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpIHsgcmV0dXJuIGVsZW1lbnQuaXNUZXh0Rm9ybUNvbnRyb2woKTsgfQotICAgIHN0YXRpYyBi
b29sIGlzSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1
cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCh0
b0VsZW1lbnQobm9kZSkpOyB9CisgICAgc3RhdGljIGJvb2wgaXNIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBpczxFbGVtZW50Pihub2RlKSAmJiBp
c0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsgfQog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCogZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnN0IFBvc2l0aW9uJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXgg
YTlmMGY4ZDM3MTYyNjA5YTVjMTAyYmFhNTc3OGNiMjY1MjRiNDI3Yy4uZDc0YzE0NTQ5NzBlNTM2
ZjcwNzI2YjFiZjVlOTUzZTk0OGM3MGE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRh
c2spCiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKENvbnRhaW5lck5v
ZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCwgYm9vbCBzZWxmQ2xvc2luZykK
IHsKLSAgICBBU1NFUlQoc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQ
b2xpY3kpIHx8ICFwcnBDaGlsZC5nZXQoKS0+aXNFbGVtZW50Tm9kZSgpIHx8ICF0b1NjcmlwdEVs
ZW1lbnRJZlBvc3NpYmxlKHRvRWxlbWVudChwcnBDaGlsZC5nZXQoKSkpKTsKKyAgICBBU1NFUlQo
c2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICFpczxF
bGVtZW50PihwcnBDaGlsZC5nZXQoKSkgfHwgIXRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93
bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpKSk7CiAgICAgQVNTRVJUKHBsdWdpbkNvbnRl
bnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhcHJwQ2hpbGQtPmlzUGx1Z2lu
RWxlbWVudCgpKTsKIAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhUTUxDb25z
dHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKaW5kZXggY2Q2YTIwMTBmZDE3ZTY0MDVkOGIzYjBkNDI1
NzM4MGIwOTk0OWNiNi4uOTE5YWMwZTNhMjUyNThlYzlkZDA1OTk2MTA1NjUxZjM4OTlhZGRhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAK
QEAgLTU0MSw3ICs1NDEsNyBAQCBib29sIEhUTUxFbGVtZW50U3RhY2s6Omhhc1RlbXBsYXRlSW5I
VE1MU2NvcGUoKSBjb25zdAogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQo
KSBjb25zdAogewogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICByZXR1cm4gdG9FbGVtZW50
KG1fcm9vdE5vZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PihtX3Jvb3ROb2RlKTsK
IH0KIAogRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aGVhZEVsZW1lbnQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCmluZGV4IDk1M2E2Nzk2MDll
M2MzNzVhN2NlYjk4ZGNjZGIzM2QzNmZkN2NjYjkuLjM3MDEzNTRmYzgxY2Q1MDAxNjFmNmVmOGVm
NDRhMGRhOTBjNTExOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTdGFja0l0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJ
dGVtLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxTdGFja0l0ZW0obm9kZSwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOwogICAgIH0KIAot
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobV9ub2RlLmdl
dCgpKTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxF
bGVtZW50PihtX25vZGUuZ2V0KCkpOyB9CiAgICAgQ29udGFpbmVyTm9kZSogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogCiAgICAgYm9vbCBpc0RvY3VtZW50RnJhZ21lbnRO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RvY3VtZW50RnJhZ21lbnROb2RlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAppbmRleCA2ZThiN2NjMWM1YWRl
ZjNkMmZkYzk4ODJiZmUyNDNlNjdjYTFhOTI1Li45ZjA0MjY0ZTE0YjQ3MTI2NWE0MjgwYjcwZDJk
ZWU3MWI3NjQyMDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNl
cnRpb25Qb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBv
aW50LmgKQEAgLTEwMCwxMSArMTAwLDExIEBAIGlubGluZSBOb2RlKiBwYXJlbnROb2RlRm9yRGlz
dHJpYnV0aW9uKGNvbnN0IE5vZGUqIG5vZGUpCiBpbmxpbmUgRWxlbWVudCogcGFyZW50RWxlbWVu
dEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmIChOb2RlKiBwYXJl
bnQgPSBwYXJlbnROb2RlRm9yRGlzdHJpYnV0aW9uKG5vZGUpKSB7Ci0gICAgICAgIGlmIChwYXJl
bnQtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50
KTsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KHBhcmVudCkpCisgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogaW5saW5lIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVu
dEZvckRpc3RyaWJ1dGlvbihjb25zdCBOb2RlKiBub2RlKQpAQCAtMTEzLDcgKzExMyw3IEBAIGlu
bGluZSBTaGFkb3dSb290KiBzaGFkb3dSb290T2ZQYXJlbnRGb3JEaXN0cmlidXRpb24oY29uc3Qg
Tm9kZSogbm9kZSkKICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudEZvckRp
c3RyaWJ1dGlvbihub2RlKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+c2hhZG93Um9vdCgpOwog
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEluc2VydGlvblBvaW50
KiBmaW5kSW5zZXJ0aW9uUG9pbnRPZihjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggZDQyZDVhNDc5
NThjN2FmYmI0ZTlmZTJjMGM0NjU5ZjA0ZmEzMDMzYy4uZDVhNDU2YmE5ODMyY2Y5YWQ5OWRlMzlj
MGMwYWQ0NzBiNDgwMjc5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgTWVkaWFD
b250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVuCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIE5vZGUqIHRhcmdldCA9
IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Ci0gICAgICAgIGlmICghdGFyZ2V0IHx8ICF0YXJn
ZXQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCF0YXJnZXQgfHwgIWlzPEVsZW1lbnQ+
KHRhcmdldCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gV2hlbiB3ZSBjcmVh
dGVkIHRoZSBlbGVtZW50cyBpbiB0aGUgdHJhY2sgbGlzdCwgd2UgZ2F2ZSB0aGVtIGEgY3VzdG9t
CkBAIC02OTgsNyArNjk4LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNr
TGlzdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW4KICAgICAgICAgLy8g
dGVsbCB0aGUgSFRNTE1lZGlhRWxlbWVudCB0byBlbmFibGUgdGhhdCB0cmFjay4KIAogICAgICAg
ICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2s7Ci0gICAgICAgIE1lbnVJdGVtVG9UcmFja01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRvVHJhY2tNYXAuZmluZCh0b0VsZW1lbnQodGFyZ2V0
KSk7CisgICAgICAgIE1lbnVJdGVtVG9UcmFja01hcDo6aXRlcmF0b3IgaXRlciA9IG1fbWVudVRv
VHJhY2tNYXAuZmluZChkb3duY2FzdDxFbGVtZW50Pih0YXJnZXQpKTsKICAgICAgICAgaWYgKGl0
ZXIgIT0gbV9tZW51VG9UcmFja01hcC5lbmQoKSkKICAgICAgICAgICAgIHRleHRUcmFjayA9IGl0
ZXItPnZhbHVlOwogICAgICAgICBtX21lbnVUb1RyYWNrTWFwLmNsZWFyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggNTljZjZlOTUzNWU0MTgzYWUzZGE0MDY3YzM3N2M5
ODY5MTZjNjNiZi4uM2RiMGJmYzhjNzdlNmJlNzNmZTc1NDBkMDNiZDVhYmY4YTZjN2ZiMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcApAQCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQg
VlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKENvbnRhaW5lck5vZGUqIHJvb3QsIGNvbnN0
IE1lZGlhVGltZSYgcHJldmlvCiAgICAgICAgICAgICBkb3duY2FzdDxXZWJWVFRFbGVtZW50Pigq
Y2hpbGQpLnNldElzUGFzdE5vZGUoaXNQYXN0Tm9kZSk7CiAgICAgICAgICAgICAvLyBNYWtlIGFu
IGVsZW1lbmV0IGlkIG1hdGNoIGEgY3VlIGlkIGZvciBzdHlsZSBtYXRjaGluZyBwdXJwb3Nlcy4K
ICAgICAgICAgICAgIGlmICghaWQoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9FbGVt
ZW50KGNoaWxkKS0+c2V0SWRBdHRyaWJ1dGUoaWQoKSk7CisgICAgICAgICAgICAgICAgZG93bmNh
c3Q8V2ViVlRURWxlbWVudD4oKmNoaWxkKS5zZXRJZEF0dHJpYnV0ZShpZCgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAKaW5kZXggNjcyZTViZTZkZGRjYjllYTE2OTZhMTU5ODBkZmRmZGZhOGE4MDExZi4uMDNkM2Mw
NmJiNWIwYTE0YmIyZmQ3NmUwM2E4NzlmZWNhNTE0Y2UyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKQEAgLTE4MSw4ICsxODEsOCBAQCBib29sIERP
TVBhdGNoU3VwcG9ydDo6aW5uZXJQYXRjaE5vZGUoRGlnZXN0KiBvbGREaWdlc3QsIERpZ2VzdCog
bmV3RGlnZXN0LCBFeGNlcAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFBhdGNoIGF0
dHJpYnV0ZXMKLSAgICBFbGVtZW50KiBvbGRFbGVtZW50ID0gdG9FbGVtZW50KG9sZE5vZGUpOwot
ICAgIEVsZW1lbnQqIG5ld0VsZW1lbnQgPSB0b0VsZW1lbnQobmV3Tm9kZSk7CisgICAgRWxlbWVu
dCogb2xkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG9sZE5vZGUpOworICAgIEVsZW1lbnQq
IG5ld0VsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihuZXdOb2RlKTsKICAgICBpZiAob2xkRGln
ZXN0LT5tX2F0dHJzU0hBMSAhPSBuZXdEaWdlc3QtPm1fYXR0cnNTSEExKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBDcmVhdGUgYSBmdW5jdGlvbiBpbiBFbGVtZW50IGZvciByZW1vdmluZyBhbGwgcHJv
cGVydGllcy4gVGFrZSBpbiBhY2NvdW50IHdoZXRoZXIgZGlkL3dpbGxNb2RpZnlBdHRyaWJ1dGUg
YXJlIGltcG9ydGFudC4KICAgICAgICAgaWYgKG9sZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXNXaXRo
b3V0VXBkYXRlKCkpIHsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RE9NUGF0
Y2hTdXBwb3J0OjpEaWdlc3Q+IERPTVBhdGNoU3VwcG9ydDo6Y3JlYXRlRGlnZXN0KE5vZGUqIG5v
ZAogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGRpZ2VzdC0+bV9jaGlsZHJlbi5hcHBlbmQoV1RGOjptb3ZlKGNoaWxkSW5mbykpOwogICAgICAg
ICB9Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIAogICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSkgewogICAgICAgICAgICAg
U0hBMSBhdHRyc1NIQTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAppbmRleCA2OTFmYjA0Y2ZkZmE0NGFhNTVkN2FlNWExYTA3MDk2M2VhM2NhNWY2
Li5lYzNhMTBlZDRjNjVjYzcwOTc1Y2RkMTA2OWEyNTZjNTNjY2U1OGU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTg5NiwxMSArODk2
LDExIEBAIEVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8g
bm9kZSB3aXRoIGdpdmVuIGlkIGZvdW5kIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm90IGFuIGVsZW1lbnQgbm9kZSI7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gdG9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAogaW50IEluc3Bl
Y3RvckNTU0FnZW50Ojpkb2N1bWVudE5vZGVXaXRoUmVxdWVzdGVkRmxvd3NJZChEb2N1bWVudCog
ZG9jdW1lbnQpCkBAIC0xMTA4LDcgKzExMDgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uPj4gSW5zcGVjdAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpb25MaXN0LT5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0
IHJlZ2lvbk92ZXJzZXQ7CiAKLSAgICAgICAgc3dpdGNoICh0b0VsZW1lbnQocmVnaW9uTGlzdC0+
aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93bmNh
c3Q8RWxlbWVudD4ocmVnaW9uTGlzdC0+aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7
CiAgICAgICAgIGNhc2UgUmVnaW9uRml0OgogICAgICAgICAgICAgcmVnaW9uT3ZlcnNldCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0OjpGaXQ7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyMDEsNyArMTIwMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnJlc2V0UHNldWRvU3RhdGVzKCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50Kj4gZG9jdW1l
bnRzVG9DaGFuZ2U7CiAgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOjppdGVyYXRv
ciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBlbmQgPSBtX25vZGVJ
ZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChtX2RvbUFnZW50LT5ub2RlRm9ySWQoaXQt
PmtleSkpKQorICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KG1fZG9tQWdlbnQtPm5vZGVGb3JJZChpdC0+a2V5KSkpCiAgICAgICAgICAgICBkb2N1bWVudHNU
b0NoYW5nZS5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggY2YyZjc0NTM5NmMy
YThmYWRjZjljNzQ0ZjNkYjlhMzU1MWNmYzliMC4uMGY4MjMyNjc2Zjg3NTBlZTMxZTg5OGE1NTU3
MGUwNGFhYTUzZjMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCkBAIC0zNDMsOCArMzQzLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICAgICAgICAgIHVu
YmluZChjb250ZW50RG9jdW1lbnQsIG5vZGVzTWFwKTsKICAgICB9CiAKLSAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gdG9FbGVt
ZW50KG5vZGUpLT5zaGFkb3dSb290KCkpCisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLnNo
YWRvd1Jvb3QoKSkKICAgICAgICAgICAgIHVuYmluZChyb290LCBub2Rlc01hcCk7CiAgICAgfQog
CkBAIC0zOTEsMTEgKzM5MSwxMSBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgTm9kZSog
bm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkg
eworICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0g
Ik5vZGUgaXMgbm90IGFuIEVsZW1lbnQiOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5v
ZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpAQCAtNjc1LDcgKzY3NSw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSB0b0VsZW1lbnQoY2hpbGQpOworICAgIEVsZW1lbnQq
IGNoaWxkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKTsKICAgICBpZiAoIWNoaWxk
RWxlbWVudC0+aGFzQXR0cmlidXRlcygpICYmIG5hbWUpIHsKICAgICAgICAgbV9kb21FZGl0b3It
PnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCAqbmFtZSwgZXJyb3JTdHJpbmcpOwogICAgICAgICBy
ZXR1cm47CkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9k
ZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdAogICAgICpu
ZXdJZCA9IDA7CiAKICAgICBOb2RlKiBvbGROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAg
aWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFvbGRO
b2RlIHx8ICFpczxFbGVtZW50PihvbGROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5v
ZGUncyBhdHRyaWJ1dGVzLgotICAgIG5ld0VsZW0tPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50
KCp0b0VsZW1lbnQob2xkTm9kZSkpOworICAgIG5ld0VsZW0tPmNsb25lQXR0cmlidXRlc0Zyb21F
bGVtZW50KCpkb3duY2FzdDxFbGVtZW50PihvbGROb2RlKSk7CiAKICAgICAvLyBDb3B5IG92ZXIg
dGhlIG9yaWdpbmFsIG5vZGUncyBjaGlsZHJlbi4KICAgICBOb2RlKiBjaGlsZDsKQEAgLTEyNzcs
MTEgKzEyNzcsMTEgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUKICAgICAgICAgICAgIHZhbHVl
LT5zZXRDaGlsZHJlbihjaGlsZHJlbi5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGlmIChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVu
dChub2RlKTsKLSAgICAgICAgdmFsdWUtPnNldEF0dHJpYnV0ZXMoYnVpbGRBcnJheUZvckVsZW1l
bnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKLSAgICAgICAgaWYgKGlzPEhUTUxGcmFtZU93bmVyRWxl
bWVudD4obm9kZSkpIHsKLSAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVP
d25lciA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oKm5vZGUpOworICAgIGlmIChp
czxFbGVtZW50Pihub2RlKSkgeworICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOworICAgICAgICB2YWx1ZS0+c2V0QXR0cmlidXRlcyhidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoJmVsZW1lbnQpKTsKKyAgICAgICAgaWYgKGlzPEhUTUxGcmFt
ZU93bmVyRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCYgZnJhbWVPd25lciA9IGRvd25jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudD4oZWxlbWVu
dCk7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZU93bmVyLmNvbnRlbnRGcmFtZSgp
OwogICAgICAgICAgICAgaWYgKGZyYW1lKQogICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRGcmFt
ZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSk7CkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZQogICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRDb250ZW50
RG9jdW1lbnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvY3VtZW50LCAwLCBub2Rlc01hcCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT5zaGFkb3dS
b290KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LnNoYWRvd1Jv
b3QoKSkgewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IHNoYWRvd1Jvb3RzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUocm9v
dCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290cyhzaGFk
b3dSb290cyk7CkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZQog
CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgICAgIGlmIChpczxIVE1MVGVtcGxh
dGVFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRUZW1wbGF0ZUNvbnRl
bnQoYnVpbGRPYmplY3RGb3JOb2RlKGRvd25jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCplbGVt
ZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0VGVt
cGxhdGVDb250ZW50KGJ1aWxkT2JqZWN0Rm9yTm9kZShkb3duY2FzdDxIVE1MVGVtcGxhdGVFbGVt
ZW50PihlbGVtZW50KS5jb250ZW50KCksIDAsIG5vZGVzTWFwKSk7CiAjZW5kaWYKIAogICAgIH0g
ZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KG5vZGUpKSB7CkBAIC0xNTMwLDggKzE1MzAsOCBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+
IEluc3BlY3RvckRPTUFnZW50OgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAg
ICAgICAgICAgICAgIHN1cHBvcnRzRm9jdXNlZCA9IHRvRWxlbWVudChub2RlKS0+aXNGb2N1c2Fi
bGUoKTsKKyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgeworICAgICAgICAgICAg
ICAgIHN1cHBvcnRzRm9jdXNlZCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pc0ZvY3VzYWJs
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICAg
ICAgICAgIGZvY3VzZWQgPSBheE9iamVjdC0+aXNGb2N1c2VkKCk7CiAgICAgICAgICAgICB9CkBA
IC0xODkyLDcgKzE4OTIsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRl
U3R5bGVBdHRyKE5vZGUqIG5vZGUpCiAKICAgICBpZiAoIW1fcmV2YWxpZGF0ZVN0eWxlQXR0clRh
c2spCiAgICAgICAgIG1fcmV2YWxpZGF0ZVN0eWxlQXR0clRhc2sgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJldmFsaWRhdGVTdHlsZUF0dHJpYnV0ZVRhc2s+KHRoaXMpOwotICAgIG1fcmV2YWxpZGF0ZVN0
eWxlQXR0clRhc2stPnNjaGVkdWxlRm9yKHRvRWxlbWVudChub2RlKSk7CisgICAgbV9yZXZhbGlk
YXRlU3R5bGVBdHRyVGFzay0+c2NoZWR1bGVGb3IoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwog
fQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQdXNoU2hhZG93Um9vdChFbGVtZW50KiBo
b3N0LCBTaGFkb3dSb290KiByb290KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck5vZGVGaW5kZXIuY3BwCmluZGV4IDQ5NGRhZTIwZDZhYTljODc3N2FiYWExMWZjYjU2
NzAxNGI3ODliNzAuLmRkMTVhOGQ5NDg3ZWIwNjBiMjFkNWVjYWQwOTI1MmQ5OTQwNDMwNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAK
QEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBJbnNwZWN0b3JOb2RlRmluZGVyOjpzZWFyY2hVc2luZ0RP
TVRyZWVUcmF2ZXJzYWwoTm9kZSogcGFyZW50Tm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2hlc0VsZW1lbnQoKnRvRWxlbWVudChub2RlKSkpCisgICAgICAgICAgICBpZiAobWF0
Y2hlc0VsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpKSkKICAgICAgICAgICAgICAgICBt
X3Jlc3VsdHMuYWRkKG5vZGUpOwogCiAgICAgICAgICAgICAvLyBTZWFyY2ggaW5zaWRlIGZyYW1l
IGVsZW1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IGUyNTdmMWE2YTczMWQ2MTJjNDFhZmRhNzIxODA4MWY5ZjY2M2VhNTAuLjZlNjVh
ODEwYTk4ZGFkYzE2OGZkZTRhYmViNjI5ZjQ1ODYxMzE1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTY3NiwxOSArNjc2LDE5IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTaGFwZU91dHNp
ZGUoRnJhbWUqIGNvbnRhaW5pbmdGCiAKIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JFbGVtZW50SW5mbyhOb2RlKiBub2RlKQogewotICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgaWYg
KCFpczxFbGVtZW50Pihub2RlKSB8fCAhbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJ
bmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJ0YWdOYW1l
IiwgaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxv
d2VyKCkpOwotICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVtZW50LT5n
ZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oKm5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc1hIVE1M
RG9jdW1lbnQoKTsKKyAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJ0YWdOYW1lIiwgaXNYSFRN
TCA/IGVsZW1lbnQubm9kZU5hbWUoKSA6IGVsZW1lbnQubm9kZU5hbWUoKS5sb3dlcigpKTsKKyAg
ICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJpZFZhbHVlIiwgZWxlbWVudC5nZXRJZEF0dHJpYnV0
ZSgpKTsKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpIHsKKyAg
ICBpZiAoZWxlbWVudC5oYXNDbGFzcygpICYmIGlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKSB7
CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY2xhc3NOYW1lczsKLSAgICAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpl
bGVtZW50KS5jbGFzc05hbWVzKCk7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXNTdHJpbmcgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KS5jbGFzc05h
bWVzKCk7CiAgICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcu
c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyAr
K2kpIHsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NO
YW1lc1N0cmluZ1tpXTsKQEAgLTcwMSw3ICs3MDEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKICAgICAg
ICAgZWxlbWVudEluZm8tPnNldFN0cmluZygiY2xhc3NOYW1lIiwgY2xhc3NOYW1lcy50b1N0cmlu
ZygpKTsKICAgICB9CiAKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVy
KCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUo
KTsKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3
KCk7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdW
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCA3MjFhYmUzMmRkOTQ1ZjQzYWZmOWQzYWQzY2QzZjcyZjIzYWU3NzIwLi5hOTI2
NTcxYTUxMmM3MzE4ZGNmMTc5MGRkYmQ0YzBlY2M3M2E4NDgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xMzg4LDEzICsxMzg4
LDEzIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5saW5lU3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIG93
bmVyTm9kZSA9IG1fcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwotICAgIGlmICghb3duZXJO
b2RlIHx8ICFvd25lck5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCAhaXM8RWxlbWVudD4ob3duZXJOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEVs
ZW1lbnQqIG93bmVyRWxlbWVudCA9IHRvRWxlbWVudChvd25lck5vZGUpOworICAgIEVsZW1lbnQm
IG93bmVyRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvd25lck5vZGUpOwogCiAgICAgaWYg
KCFpczxIVE1MU3R5bGVFbGVtZW50Pihvd25lckVsZW1lbnQpICYmICFpczxTVkdTdHlsZUVsZW1l
bnQ+KG93bmVyRWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqcmVzdWx0ID0g
b3duZXJFbGVtZW50LT50ZXh0Q29udGVudCgpOworICAgICpyZXN1bHQgPSBvd25lckVsZW1lbnQu
dGV4dENvbnRlbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA2MTZkMTMxMzVlYjNkZmJjZWRiZTc4YTM5YzNiZjQ1ZTNi
YzE3NWNiLi40YTc0MzBiMDVkYzJiYWU0ZjU4MGVjNmU1NjBjMTRhNjdjNjM4NmY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMjg5LDEzICsyODksMTMgQEAgc3Rh
dGljIEVsZW1lbnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZW50KiBkb2N1bWVudFVuZGVyTW91
c2UsIGNvbnN0IEludFBvaW50JgogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKICAg
ICBkb2N1bWVudFVuZGVyTW91c2UtPnJlbmRlclZpZXcoKS0+aGl0VGVzdChIaXRUZXN0UmVxdWVz
dCgpLCByZXN1bHQpOwogCi0gICAgTm9kZSogbiA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICB3
aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwotICAgIGlmIChuKQotICAgICAgICBuID0gbi0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9y
Tm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgd2hpbGUg
KG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50
Tm9kZSgpOworICAgIGlmIChub2RlKQorICAgICAgICBub2RlID0gbm9kZS0+ZGVwcmVjYXRlZFNo
YWRvd0FuY2VzdG9yTm9kZSgpOwogCi0gICAgcmV0dXJuIHRvRWxlbWVudChuKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRy
eURvY3VtZW50RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBh
Y3Rpb25NYXNrLCBEcmFnT3BlcmF0aW9uJiBkcmFnT3BlcmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMyNmIxZGI2M2U3MzI1ZTYxYTRhOTAwODMyYzc1
YjYwYWMuLjMzYTlhNTM4OWJjYzlmNDM4MTc1NjdmMzM3YWI4YWQ2ODBhMzJkMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTIxODYsNyArMjE4Niw3IEBAIHN0YXRpYyBi
b29sIGhhc0Ryb3Bab25lVHlwZShEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlciwgY29uc3QgU3Ry
aW5nJiBrZXl3b3JkKQogCiBzdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9kZSogdGFyZ2V0LCBE
YXRhVHJhbnNmZXIqIGRhdGFUcmFuc2ZlcikKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdGFy
Z2V0LT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQodGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50
RWxlbWVudCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50Pih0YXJnZXQpID8g
ZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50RWxlbWVudCgpOwogICAg
IGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAg
ICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICBTdHJpbmcgZHJvcFpvbmVTdHIg
PSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHdlYmtpdGRyb3B6b25lQXR0cik7CkBAIC0yMjMz
LDEwICsyMjMzLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBEYXRhVHJhbnNmCiAgICAgUmVmUHRyPEVsZW1l
bnQ+IG5ld1RhcmdldDsKICAgICBpZiAoTm9kZSogdGFyZ2V0Tm9kZSA9IG1vdXNlRXZlbnQudGFy
Z2V0Tm9kZSgpKSB7CiAgICAgICAgIC8vIERyYWcgZXZlbnRzIHNob3VsZCBuZXZlciBnbyB0byBu
b24tZWxlbWVudCBub2RlcyAoZm9sbG93aW5nIElFLCBhbmQgcHJvcGVyIG1vdXNlb3Zlci9vdXQg
ZGlzcGF0Y2gpCi0gICAgICAgIGlmICghdGFyZ2V0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KHRhcmdldE5vZGUpKQogICAgICAgICAgICAgbmV3VGFyZ2V0
ID0gdGFyZ2V0Tm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBuZXdUYXJnZXQgPSB0b0VsZW1lbnQodGFyZ2V0Tm9kZSk7CisgICAgICAg
ICAgICBuZXdUYXJnZXQgPSBkb3duY2FzdDxFbGVtZW50Pih0YXJnZXROb2RlKTsKICAgICB9CiAK
ICAgICBtX2F1dG9zY3JvbGxDb250cm9sbGVyLT51cGRhdGVEcmFnQW5kRHJvcChuZXdUYXJnZXQu
Z2V0KCksIGV2ZW50LnBvc2l0aW9uKCksIGV2ZW50LnRpbWVzdGFtcCgpKTsKQEAgLTIzOTQsMTAg
KzIzOTQsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2Rl
KE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAgICAgICAgdGFyZ2V0RWxlbWVu
dCA9IG1fY2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50LmdldCgpOwogICAgIGVsc2UgaWYgKHRh
cmdldE5vZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIGEgbm9uLWVsZW1l
bnQsIGRpc3BhdGNoIG9uIHRoZSBwYXJlbnQuIDxyZGFyOi8vcHJvYmxlbS80MTk2NjQ2PgotICAg
ICAgICBpZiAoIXRhcmdldE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxF
bGVtZW50Pih0YXJnZXROb2RlKSkKICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRO
b2RlLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRhcmdldEVsZW1lbnQgPSB0b0VsZW1lbnQodGFyZ2V0Tm9kZSk7CisgICAgICAgICAgICB0
YXJnZXRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4odGFyZ2V0Tm9kZSk7CiAgICAgfQogCiAg
ICAgbV9lbGVtZW50VW5kZXJNb3VzZSA9IHRhcmdldEVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggYzE0ZDA5N2RlNTg2NTFjMzRkNDEzNDk5NjIwYjBi
MWMyMzg0YjUzYi4uMTNlNTFjMmM3YjMzMjQwNjVlOTMxMjg4ZDEwMjFhMDEwN2ZkN2EyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMTAzLDggKzEwMyw4IEBA
IEZvY3VzTmF2aWdhdGlvblNjb3BlIEZvY3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRp
b25TY29wZU9mKE5vZGUqIG5vZGUpCiBGb2N1c05hdmlnYXRpb25TY29wZSBGb2N1c05hdmlnYXRp
b25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2Rl
KQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQodG9FbGVtZW50KG5vZGUpLT5zaGFk
b3dSb290KCkpOwotICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25TY29wZSh0b0VsZW1lbnQobm9k
ZSktPnNoYWRvd1Jvb3QoKSk7CisgICAgQVNTRVJUKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5z
aGFkb3dSb290KCkpOworICAgIHJldHVybiBGb2N1c05hdmlnYXRpb25TY29wZShkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSkuc2hhZG93Um9vdCgpKTsKIH0KIAogRm9jdXNOYXZpZ2F0aW9uU2NvcGUg
Rm9jdXNOYXZpZ2F0aW9uU2NvcGU6OmZvY3VzTmF2aWdhdGlvblNjb3BlT3duZWRCeUlGcmFtZShI
VE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lKQpAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChFbGVtZW50JiBlbGVtZW50LCBL
ZXlib2FyZEV2ZW50JiBldmUKIAogc3RhdGljIGlubGluZSBib29sIGlzRm9jdXNhYmxlU2hhZG93
SG9zdChOb2RlJiBub2RlLCBLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICByZXR1cm4gbm9k
ZS5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLmlzS2V5Ym9hcmRGb2N1c2FibGUo
JmV2ZW50KSAmJiB0b0VsZW1lbnQobm9kZSkuc2hhZG93Um9vdCgpICYmICFoYXNDdXN0b21Gb2N1
c0xvZ2ljKHRvRWxlbWVudChub2RlKSk7CisgICAgcmV0dXJuIGlzPEVsZW1lbnQ+KG5vZGUpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzS2V5Ym9hcmRGb2N1c2FibGUoJmV2ZW50KSAmJiBk
b3duY2FzdDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkgJiYgIWhhc0N1c3RvbUZvY3VzTG9n
aWMoZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhZGp1
c3RlZFRhYkluZGV4KE5vZGUmIG5vZGUsIEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIGlm
ICghbm9kZS5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCh0b0Vs
ZW1lbnQobm9kZSksIGV2ZW50KSA/IDAgOiB0b0VsZW1lbnQobm9kZSkudGFiSW5kZXgoKTsKKyAg
ICByZXR1cm4gaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUp
LCBldmVudCkgPyAwIDogZG93bmNhc3Q8RWxlbWVudD4obm9kZSkudGFiSW5kZXgoKTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIHNob3VsZFZpc2l0KEVsZW1lbnQmIGVsZW1lbnQsIEtleWJvYXJk
RXZlbnQmIGV2ZW50KQpAQCAtMzUwLDcgKzM1MCw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjph
ZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXli
CiAKIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZUVsZW1lbnRBY3Jvc3NG
b2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNOYXZpZ2F0aW9uU2NvcGUg
c2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBB
U1NFUlQoIWN1cnJlbnROb2RlIHx8ICFjdXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFp
c05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoKnRvRWxlbWVudChjdXJyZW50Tm9kZSksICpldmVudCkp
OworICAgIEFTU0VSVCghY3VycmVudE5vZGUgfHwgIWlzPEVsZW1lbnQ+KGN1cnJlbnROb2RlKSB8
fCAhaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KCpkb3duY2FzdDxFbGVtZW50PihjdXJyZW50Tm9k
ZSksICpldmVudCkpOwogICAgIEVsZW1lbnQqIGZvdW5kOwogICAgIGlmIChjdXJyZW50Tm9kZSAm
JiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkICYmIGlzRm9jdXNhYmxlU2hhZG93
SG9zdCgqY3VycmVudE5vZGUsICpldmVudCkpIHsKICAgICAgICAgRWxlbWVudCogZm91bmRJbklu
bmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVFbGVtZW50UmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPd25lZEJ5U2hhZG93
SG9zdChjdXJyZW50Tm9kZSksIDAsIGV2ZW50KTsKQEAgLTQxMCw5ICs0MTAsOSBAQCBFbGVtZW50
KiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRFbGVtZW50V2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3Rh
cnQsIGludCB0YWJJbmRleAogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQKICAg
ICB1c2luZyBuYW1lc3BhY2UgTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDsKICAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZv
cndhcmQgPyBuZXh0SW5TY29wZShub2RlKSA6IHByZXZpb3VzSW5TY29wZShub2RlKSkgewotICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVtZW50
ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsICpldmVu
dCkgJiYgYWRqdXN0ZWRUYWJJbmRleChlbGVtZW50LCAqZXZlbnQpID09IHRhYkluZGV4KQogICAg
ICAgICAgICAgcmV0dXJuICZlbGVtZW50OwogICAgIH0KQEAgLTQyNSw5ICs0MjUsOSBAQCBzdGF0
aWMgRWxlbWVudCogbmV4dEVsZW1lbnRXaXRoR3JlYXRlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBp
bnQgdGFiSW5kZXgsIEtleWJvYQogICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWF4KCkgKyAxOwogICAgIEVsZW1lbnQqIHdpbm5lciA9IG51bGxw
dHI7CiAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBOb2RlUmVuZGVy
aW5nVHJhdmVyc2FsOjpuZXh0SW5TY29wZShub2RlKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpub2Rl
KTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsK
ICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsIGV2ZW50KSAmJiBlbGVtZW50LnRhYklu
ZGV4KCkgPiB0YWJJbmRleCAmJiBlbGVtZW50LnRhYkluZGV4KCkgPCB3aW5uaW5nVGFiSW5kZXgp
IHsKICAgICAgICAgICAgIHdpbm5lciA9ICZlbGVtZW50OwogICAgICAgICAgICAgd2lubmluZ1Rh
YkluZGV4ID0gZWxlbWVudC50YWJJbmRleCgpOwpAQCAtNDQzLDkgKzQ0Myw5IEBAIHN0YXRpYyBF
bGVtZW50KiBwcmV2aW91c0VsZW1lbnRXaXRoTG93ZXJUYWJJbmRleChOb2RlKiBzdGFydCwgaW50
IHRhYkluZGV4LCBLZXliCiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IDA7CiAgICAgRWxlbWVu
dCogd2lubmVyID0gbnVsbHB0cjsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsg
bm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnByZXZpb3VzSW5TY29wZShub2RlKSkgewot
ICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFpczxFbGVt
ZW50Pihub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50JiBlbGVt
ZW50ID0gdG9FbGVtZW50KCpub2RlKTsKKyAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgaW50IGN1cnJlbnRUYWJJbmRleCA9IGFkanVz
dGVkVGFiSW5kZXgoZWxlbWVudCwgZXZlbnQpOwogICAgICAgICBpZiAoKHNob3VsZFZpc2l0KGVs
ZW1lbnQsIGV2ZW50KSB8fCBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoZWxlbWVudCwgZXZlbnQp
KSAmJiBjdXJyZW50VGFiSW5kZXggPCB0YWJJbmRleCAmJiBjdXJyZW50VGFiSW5kZXggPiB3aW5u
aW5nVGFiSW5kZXgpIHsKICAgICAgICAgICAgIHdpbm5lciA9ICZlbGVtZW50OwpAQCAtNDY0LDkg
KzQ2NCw5IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZUVsZW1lbnQo
Rm9jdXNOYXZpZ2F0aW9uU2NvcGUgc2NvcGUsIE5vZGUqCiAgICAgICAgIC8vIElmIGEgbm9kZSBp
cyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9jdXNh
YmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAgICAgIGlmICh0YWJJbmRl
eCA8IDApIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG5leHRJblNjb3BlKHN0YXJ0
KTsgbm9kZTsgbm9kZSA9IG5leHRJblNjb3BlKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
RWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgICAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkVmlzaXQoZWxlbWVudCwgKmV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KGVs
ZW1lbnQsICpldmVudCkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZlbGVtZW50
OwogICAgICAgICAgICAgfQpAQCAtNTE2LDkgKzUxNiw5IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJv
bGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEZvY3VzTmF2aWdhdGlvblNjb3BlIHNjb3Bl
LCBOCiAgICAgLy8gSG93ZXZlciwgaWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1h
bCB0YWJiaW5nIGN5Y2xlLCB0aGUgcHJldmlvdXMgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5l
ZCBieSB0cmVlIG9yZGVyCiAgICAgaWYgKHN0YXJ0aW5nVGFiSW5kZXggPCAwKSB7CiAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsgbm9kZTsgbm9kZSA9IHByZXZpb3VzSW5T
Y29wZShub2RlKSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IHRvRWxlbWVudCgqbm9kZSk7Cisg
ICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
ICAgICAgICAgICAgaWYgKHNob3VsZFZpc2l0KGVsZW1lbnQsICpldmVudCkgJiYgYWRqdXN0ZWRU
YWJJbmRleChlbGVtZW50LCAqZXZlbnQpID49IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuICZl
bGVtZW50OwogICAgICAgICB9CkBAIC04NjAsNyArODYwLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xs
ZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIs
IGNvbnMKICAgICB9CiAKICAgICAvLyBXZSBmb3VuZCBhIG5ldyBmb2N1cyBub2RlLCBuYXZpZ2F0
ZSB0byBpdC4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGZvY3VzQ2FuZGlkYXRl
LmZvY3VzYWJsZU5vZGUpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihmb2N1c0NhbmRpZGF0ZS5mb2N1c2FibGVOb2RlKTsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAK
ICAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSwgZGlyZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKaW5kZXggZjYxMzRlZGRkNTI0ZjQyYzAwMGUwM2UzNGNiNWQyODYw
NTI4OTU1ZC4uNTRjYTk2Nzk4MGRiN2M1NjMxNGQ0ZGFiYzQxYmFmYmY5ZmIyNDk5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIGZv
ciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0g
bm9kZXMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7Ci0gICAg
ICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+
KG5vZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRWxlbWVudCYgZWxlbWVu
dCA9IHRvRWxlbWVudCgqbm9kZSk7CisgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5l
IHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNr
Z3JvdW5kIGltYWdlcykuCiAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyhkb3duY2FzdDxTdHls
ZWRFbGVtZW50PihlbGVtZW50KS5pbmxpbmVTdHlsZSgpLCBkb2N1bWVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZWJiYWJkMTVjMzYyNmZmOThm
MjNjOWM1YmU5ZjI3N2ZkYmJmNmUzNy4uNzIxYmQ1OGIwZWQ2ODZlZjA0ZmYyNzI2MTExZDhhM2Qy
ODNmYjk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApA
QCAtMjIzLDEwICsyMjMsMTEgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJl
Y3Rpb24mIGRpcikgY29uc3QKICAgICAvLyBGaW5kIHRoZSB0aXRsZSBpbiB0aGUgbmVhcmVzdCBl
bmNsb3NpbmcgRE9NIG5vZGUuCiAgICAgLy8gRm9yIDxhcmVhPiB0YWdzIGluIGltYWdlIG1hcHMs
IHdhbGsgdGhlIHRyZWUgZm9yIHRoZSA8YXJlYT4sIG5vdCB0aGUgPGltZz4gdXNpbmcgaXQuCiAg
ICAgZm9yIChOb2RlKiB0aXRsZU5vZGUgPSBtX2lubmVyTm9kZS5nZXQoKTsgdGl0bGVOb2RlOyB0
aXRsZU5vZGUgPSB0aXRsZU5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAodGl0bGVO
b2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IHRvRWxl
bWVudCh0aXRsZU5vZGUpLT50aXRsZSgpOworICAgICAgICBpZiAoaXM8RWxlbWVudD4odGl0bGVO
b2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgdGl0bGVFbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oKnRpdGxlTm9kZSk7CisgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSB0aXRsZUVsZW1l
bnQudGl0bGUoKTsKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSB0aXRsZU5vZGUtPnJlbmRlcmVyKCkpCisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSB0aXRsZUVsZW1lbnQucmVuZGVyZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgZGlyID0gcmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgICAgICAgICAgfQpAQCAtMjM4LDE3
ICsyMzksMTcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRp
cikgY29uc3QKIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChUZXh0
RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiB0cnVuY2F0ZWROb2RlID0g
bV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRlZE5vZGU7IHRydW5jYXRlZE5vZGUgPSB0cnVuY2F0
ZWROb2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCF0cnVuY2F0ZWROb2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgIGlmICghaXM8RWxlbWVudD4odHJ1bmNhdGVkTm9kZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRvRWxl
bWVudCh0cnVuY2F0ZWROb2RlKS0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byByZW5k
ZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KCp0cnVuY2F0ZWROb2RlKS5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3cocmVuZGVy
ZXIpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSkg
ewogICAgICAgICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBibG9jay0+
Zmlyc3RSb290Qm94KCk7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGluZS0+aGFzRWxsaXBzaXNCb3goKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpciA9IGJsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQodHJ1bmNhdGVkTm9k
ZSktPmlubmVyVGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxFbGVtZW50PigqdHJ1bmNhdGVkTm9kZSkuaW5uZXJUZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBA
IC0zMjIsNyArMzIzLDcgQEAgVVJMIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlSW1hZ2VVUkwoKSBj
b25zdAogICAgICAgICB8fCBpczxIVE1MSW5wdXRFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpCiAgICAgICAgIHx8IGlzPEhUTUxPYmplY3RFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpCiAgICAgICAgIHx8IGlzPFNWR0ltYWdlRWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2Rl
KSkgewotICAgICAgICB1cmxTdHJpbmcgPSB0b0VsZW1lbnQoKm1faW5uZXJOb25TaGFyZWROb2Rl
KS5pbWFnZVNvdXJjZVVSTCgpOworICAgICAgICB1cmxTdHJpbmcgPSBkb3duY2FzdDxFbGVtZW50
PigqbV9pbm5lck5vblNoYXJlZE5vZGUpLmltYWdlU291cmNlVVJMKCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybiBVUkwoKTsKIApAQCAtNjc0LDkgKzY3NSw5IEBAIEVsZW1lbnQqIEhpdFRl
c3RSZXN1bHQ6OmlubmVyRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IG1faW5u
ZXJOb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgcmV0dXJuIG5vZGUtPnBh
cmVudEVsZW1lbnQoKTsKIH0KIApAQCAtNjg0LDkgKzY4NSw5IEBAIEVsZW1lbnQqIEhpdFRlc3RS
ZXN1bHQ6OmlubmVyTm9uU2hhcmVkRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9
IG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRv
RWxlbWVudChub2RlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGlzPEVsZW1l
bnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAg
cmV0dXJuIG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oCmluZGV4IGU1YzZj
MDNlZTZhNzYyMjcwNGY2Mjg4Yzc0MTgwYTIzZWNiOGRiNjUuLjk0NzRlODg5NGM4Y2JhM2RhYjRj
YTRkNGVkMzRiZTY1Mjk1NzU0Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgKQEAgLTM0LDcgKzM0LDcgQEAgcHVi
bGljOgogICAgIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveChFbGVtZW50JiwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCgp
OwogCi0gICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2Rl
Rm9yTm9uQW5vbnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKaW5kZXggOTNmMDZiMmYyZDA1
MTViMjM1MjNmZmUyZWE5ZGRiNDdiMDM0NWJjZi4uYzk1NjZkZjdlOTE2NGU0MzJlYmJhODgwODk5
NjllYWQyNzM4ODk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRldGFpbHNNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzTWFya2VyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxEZXRhaWxzRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTE0Myw4ICsxNDQsOCBAQCBib29sIFJl
bmRlckRldGFpbHNNYXJrZXI6OmlzT3BlbigpIGNvbnN0CiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gcGFyZW50KCk7IHJlbmRlcmVyOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJl
bnQoKSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoZGV0YWlsc1Rh
ZykpCi0gICAgICAgICAgICByZXR1cm4gIXRvRWxlbWVudChyZW5kZXJlci0+bm9kZSgpKS0+Z2V0
QXR0cmlidXRlKG9wZW5BdHRyKS5pc051bGwoKTsKKyAgICAgICAgaWYgKGlzPEhUTUxEZXRhaWxz
RWxlbWVudD4ocmVuZGVyZXItPm5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0
PEhUTUxEZXRhaWxzRWxlbWVudD4oKnJlbmRlcmVyLT5ub2RlKCkpLmdldEF0dHJpYnV0ZShvcGVu
QXR0cikuaXNOdWxsKCk7CiAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJl
ci0+bm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDQyYjVkYzAyMDExZmRiNGYwNmFkMzhi
N2ZkZjBjNWY1YmE4NzQ3ZjYuLjA1Y2U3OTRkMTlhNGNmZTU5M2Y3NzM2Y2M4Y2UxMDgwODIzMGY0
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtNDgsOCAr
NDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbmltYXRhYmxlU3R5bGUoUGFzc1JlZjxSZW5k
ZXJTdHlsZT4pOwogCiAgICAgLy8gVGhpcyBpcyBudWxsIGZvciBhbm9ueW1vdXMgcmVuZGVyZXJz
LgotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQoUmVuZGVy
T2JqZWN0Ojpub2RlKCkpOyB9Ci0gICAgRWxlbWVudCogbm9uUHNldWRvRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRvRWxlbWVudChSZW5kZXJPYmplY3Q6Om5vblBzZXVkb05vZGUoKSk7IH0KKyAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVu
ZGVyT2JqZWN0Ojpub2RlKCkpOyB9CisgICAgRWxlbWVudCogbm9uUHNldWRvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9uUHNldWRvTm9k
ZSgpKTsgfQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29uc3Q7CiAKICAgICBS
ZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0K
QEAgLTMxNiw3ICszMTYsNyBAQCBpbmxpbmUgRWxlbWVudCogUmVuZGVyRWxlbWVudDo6Z2VuZXJh
dGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIGlmIChwYXJlbnQoKSAmJiBpc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQoKS0+Z2VuZXJhdGluZ0VsZW1l
bnQoKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUo
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6Z2VuZXJhdGlu
Z05vZGUoKSk7CiB9CiAKIGlubGluZSBib29sIFJlbmRlck9iamVjdDo6aXNSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4
IDAyNDNiNjNmMTQ4YTMzZTBkNzgwYzNlZDk1ZWRlOGNiMTYxMmJjZDcuLjkxOTQ2MTA3NjI1NWQ3
NGU0ZGI5MTM0MmJiY2IzYTM5YjUwOGFlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyR3JpZChFbGVtZW50
JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlckdyaWQoKTsKIAot
ICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobm9kZUZvck5v
bkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VM
b2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNjRhNmY0Nzc3YjA2MTZkOTgxYjZiNWRj
YzA1ZmJiNTZiYzNhYWVmYi4uMjEzY2M5MGZjZWFiNjlhYmI5ZTNjNTVmN2U0NTA2MWRkMjA2MTk1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHN0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgaWYgKCFyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVj
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50PihyZW5kZXJlci0+bm9kZSgpKTsKICAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhU
TUxQbHVnSW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5oCmluZGV4IGQyZTM4YmRkMGFiYTNl
MzY3M2UxYTY2ZjMwYWY5YzFlZjg2NmVmYTIuLjc5NWRlM2FlMzA4MDFlZDZkNDIxOGY5YWQ1Zjkx
ODQ2MzA4OWJlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5o
CkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFJlbmRlckxpc3RNYXJrZXI7CiBjbGFzcyBSZW5kZXJM
aXN0SXRlbSBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJl
bmRlckxpc3RJdGVtKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7Ci0gICAgRWxlbWVu
dCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5vbnltb3Vz
KCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIGludCB2YWx1ZSgpIGNvbnN0
IHsgaWYgKCFtX2lzVmFsdWVVcFRvRGF0ZSkgdXBkYXRlVmFsdWVOb3coKTsgcmV0dXJuIG1fdmFs
dWU7IH0KICAgICB2b2lkIHVwZGF0ZVZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDZmZThhYjk1ZWZiMWZmNmVl
NWViYzM0YjA3OWYwMTYxMmI3NWYxOTcuLjgxZGM5ZmVmYjc5ZjZjZjY4MzA1Y2ZhOTY5NjM2ZWJi
YjJlNmU1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuY3BwCkBAIC01NDUsMTMgKzU0NSwxMyBAQCBib29sIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3Qg
UmVuZAogICAgIGlmICghY2hpbGQubm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEFTU0VSVChjaGlsZC5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7CisgICAgQVNTRVJUKGlzPEVs
ZW1lbnQ+KGNoaWxkLm5vZGUoKSkpOwogCiAgICAgTm9kZSogb3JpZ2luYWxQYXJlbnQgPSBOb2Rl
UmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQoY2hpbGQubm9kZSgpKTsKLSAgICBpZiAoIW9yaWdp
bmFsUGFyZW50IHx8ICFvcmlnaW5hbFBhcmVudC0+aXNFbGVtZW50Tm9kZSgpIHx8ICFvcmlnaW5h
bFBhcmVudC0+cmVuZGVyZXIoKSkKKyAgICBpZiAoIW9yaWdpbmFsUGFyZW50IHx8ICFpczxFbGVt
ZW50PihvcmlnaW5hbFBhcmVudCkgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiB0b0VsZW1lbnQob3JpZ2luYWxQYXJlbnQp
LT5yZW5kZXJlcigpLT5pc0NoaWxkQWxsb3dlZChjaGlsZCwgc3R5bGUpOworICAgIHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pigqb3JpZ2luYWxQYXJlbnQpLnJlbmRlcmVyKCktPmlzQ2hpbGRBbGxv
d2VkKGNoaWxkLCBzdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpkaXNw
YXRjaFJlZ2lvbk92ZXJzZXRDaGFuZ2VFdmVudElmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNmRlMzVkMDQ0ZjI0N2M2NDEwODYxMmY0ZTk2
YjRhM2QwMmM0YjYyMi4uMjRlZjQ5Njg0NDI4YWMxYzI2Yjc2MWYwODg5N2I5ZmQ1ODI2NTI5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMzMsMTMg
KzEwMzMsMTMgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogICAgIGlmICh1cmxSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIG4gPSBub2RlKCk7Ci0gICAgaWYg
KCFuIHx8ICFuLT5pc0xpbmsoKSB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgIE5vZGUqIG5v
ZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0xpbmsoKSB8fCAh
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGhyZWYgPSB0b0VsZW1lbnQobiktPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBocmVmID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmdldEF0dHJp
YnV0ZShocmVmQXR0cik7CiAgICAgaWYgKGhyZWYuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBwYWludEluZm8uY29udGV4dC0+c2V0VVJMRm9yUmVjdChuLT5kb2N1bWVudCgpLmNvbXBs
ZXRlVVJMKGhyZWYpLCBzbmFwcGVkSW50UmVjdCh1cmxSZWN0KSk7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldFVSTEZvclJlY3Qobm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChocmVmKSwg
c25hcHBlZEludFJlY3QodXJsUmVjdCkpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRP
dXRsaW5lKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3Qp
CkBAIC0yMTQxLDcgKzIxNDEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRl
KGJvb2wgZHJhZ09uKQogewogICAgIGJvb2wgdmFsdWVDaGFuZ2VkID0gKGRyYWdPbiAhPSBpc0Ry
YWdnaW5nKCkpOwogICAgIHNldElzRHJhZ2dpbmcoZHJhZ09uKTsKLSAgICBpZiAodmFsdWVDaGFu
Z2VkICYmIG5vZGUoKSAmJiAoc3R5bGUoKS5hZmZlY3RlZEJ5RHJhZygpIHx8IChub2RlKCktPmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSgpKS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RHJh
ZygpKSkpCisgICAgaWYgKHZhbHVlQ2hhbmdlZCAmJiBub2RlKCkgJiYgKHN0eWxlKCkuYWZmZWN0
ZWRCeURyYWcoKSB8fCAoaXM8RWxlbWVudD4obm9kZSgpKSAmJiBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSgpKS5jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKCkpKSkKICAgICAgICAgbm9kZSgpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENo
aWxkU2xvdygpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3Vy
ci0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CkBAIC0yMjI1LDcgKzIyMjUsNyBAQCBSZW5kZXJT
dHlsZSogUmVuZGVyT2JqZWN0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8s
IFJlbmRlclN0eWxlKiBwYQogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyT2JqZWN0Ojpn
ZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNldWRvU3R5
bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBvd25TdHls
ZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQgJiYgIW93blN0eWxlICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxl
KHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIXBhcmVudFN0eWxlKSB7CiAgICAgICAg
IEFTU0VSVCghb3duU3R5bGUpOwpAQCAtMjIzMywyMCArMjIzMywyMCBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNl
dWRvU3R5bGVSZQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzICJmaW5kIG5lYXJlc3QgZWxl
bWVudCBwYXJlbnQiIHNob3VsZCBiZSBhIGhlbHBlciBmdW5jdGlvbi4KLSAgICBOb2RlKiBuID0g
bm9kZSgpOwotICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIG4g
PSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFuKQotICAgICAgICByZXR1cm4gMDsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG4pOworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5u
b2RlKCk7CisgICAgd2hpbGUgKG5vZGUgJiYgIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKIAogICAgIGlmIChwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gRklSU1RfTElORV9J
TkhFUklURUQpIHsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBkb2N1bWVu
dCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50
U3R5bGUsIERpc2FsbG93U3R5bGVTaGFyaW5nKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiByZXN1bHQgPSBkb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoJmVsZW1lbnQsIHBhcmVudFN0eWxlLCBEaXNhbGxvd1N0eWxlU2hhcmluZyk7CiAgICAgICAg
IHJlc3VsdC0+c2V0U3R5bGVUeXBlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50KCkuZW5z
dXJlU3R5bGVSZXNvbHZlcigpLnBzZXVkb1N0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9T
dHlsZVJlcXVlc3QsIHBhcmVudFN0eWxlKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVT
dHlsZVJlc29sdmVyKCkucHNldWRvU3R5bGVGb3JFbGVtZW50KCZlbGVtZW50LCBwc2V1ZG9TdHls
ZVJlcXVlc3QsIHBhcmVudFN0eWxlKTsKIH0KIAogc3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xv
cihSZW5kZXJTdHlsZSogc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUnVieS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaApp
bmRleCBkOGNjN2Q0NTNhZjdiMzY5MTlkN2I5ZWU1ZWFjZjFkOTE5YTk1ZWZlLi44Nzk1ZGUwMzlh
M2VkZGUzNTUxMGU4ZDllMTUzNDM0OGRjMjA1ZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSdWJ5LmgKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIFJlbmRlclJ1YnlBc0Js
b2NrKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVy
UnVieUFzQmxvY2soKTsKIAotICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
b0VsZW1lbnQobm9kZUZvck5vbkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkp
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgKaW5kZXggMTYzYjIwNDcxZjI4MmYz
YmI3MTI5YTFkMzFkMDYyYTFkOGE0ODA4YS4uNTY3ZjAxZThlM2E3NTM0ODFjZjEzNzYxYTljNjU1
NDNlODkxNGQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnlUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlUZXh0LmgK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIFJlbmRlclJ1YnlUZXh0KEVsZW1lbnQmLCBQ
YXNzUmVmPFJlbmRlclN0eWxlPik7CiAgICAgdmlydHVhbCB+UmVuZGVyUnVieVRleHQoKTsKIAot
ICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQobm9kZUZvck5v
bkFub255bW91cygpKTsgfQorICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2FwdGlvbi5oCmluZGV4IDY0NDE2MDkwOWRhZWQ5N2UxNWVlOTM2YjE5NTE5YjJkMDY3
YTIzMTUuLjE0YmE5ZDJkMzhjMmFkM2Y5MTViYjEzZjUzZTQ3MWJkMDQzMzA0MTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmgKQEAgLTMxLDcgKzMx
LDcgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlQ2FwdGlvbihFbGVtZW50JiwgUGFzc1JlZjxS
ZW5kZXJTdHlsZT4pOwogICAgIHZpcnR1YWwgflJlbmRlclRhYmxlQ2FwdGlvbigpOwogCi0gICAg
RWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOyB9CisgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDb2wuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCmlu
ZGV4IDI3MGE4YTRjZTM5ZGMwYmNhMjRkNjg4MjBmNDY3YzY5ZjZlMTU0MTEuLjlkZDkzNTY0ZjZh
ODBmMGU2ODFiNzhiYTM3ODI0ZjQxYjg2YWNmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNvbC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFJlbmRlclRhYmxlQ2Vs
bDsKIGNsYXNzIFJlbmRlclRhYmxlQ29sIGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJs
aWM6CiAgICAgUmVuZGVyVGFibGVDb2woRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsK
LSAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JO
b25Bbm9ueW1vdXMoKSk7IH0KKyAgICBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQogCiAgICAgdm9pZCBj
bGVhclByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eUJpdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggYmE2NzVmMDRlZTQ1NGY4ZWNkOTA0YmM0YmFm
YzI2OTc0YWYyMjRhNi4uOTc0N2I0YTIxNmM4NWIyMjcwODhkY2Q5M2FiODdiNTdmOGNhOGMzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC04MDIsNjcgKzgw
Miw2NyBAQCBib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvKSBjb25zdAogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0
ZXJtaW5hdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNvbnN0IFJlbmRl
ck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRW5hYmxlZChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXIubm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhdG9FbGVtZW50KG5vZGUpLT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKTsKKyAgICByZXR1cm4gIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNGb2N1
c2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzRm9j
dXNlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICBOb2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhaXM8
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEVsZW1lbnQqIGZv
Y3VzRGVsZWdhdGUgPSB0b0VsZW1lbnQobm9kZSktPmZvY3VzRGVsZWdhdGUoKTsKKyAgICBFbGVt
ZW50KiBmb2N1c0RlbGVnYXRlID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmZvY3VzRGVsZWdh
dGUoKTsKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBmb2N1c0RlbGVnYXRlLT5kb2N1bWVudCgp
OwogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgcmV0dXJuIGZvY3Vz
RGVsZWdhdGUgPT0gZG9jdW1lbnQuZm9jdXNlZEVsZW1lbnQoKSAmJiBmcmFtZSAmJiBmcmFtZS0+
c2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6
OmlzUHJlc3NlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1l
Ojppc1ByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBp
ZiAoIW8ubm9kZSgpIHx8ICFvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghcmVu
ZGVyZXIubm9kZSgpIHx8ICFpczxFbGVtZW50PihyZW5kZXJlci5ub2RlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOwor
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PigqcmVuZGVyZXIubm9kZSgpKS5hY3RpdmUoKTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc1NwaW5VcEJ1dHRvblBh
cnRQcmVzc2VkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8
ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50LT5hY3RpdmUoKSB8
fCAhZWxlbWVudC0+aXNTcGluQnV0dG9uRWxlbWVudCgpKQorICAgIEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7CisgICAgaWYgKCFlbGVtZW50LmFjdGl2ZSgpIHx8
ICFlbGVtZW50LmlzU3BpbkJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KGVsZW1lbnQpLT51cERv
d25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpVcDsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3BpbkJ1dHRvbkVsZW1lbnQmPihlbGVtZW50KS51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0
b25FbGVtZW50OjpVcDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2wo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25s
eUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2Rl
KiBub2RlID0gby5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUgfHwgIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICF0b0VsZW1lbnQoKm5vZGUpLm1hdGNoZXNSZWFk
V3JpdGVQc2V1ZG9DbGFzcygpOworICAgIHJldHVybiAhZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUp
Lm1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpp
c0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNIb3ZlcmVkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8
ICFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdG9F
bGVtZW50KG5vZGUpLT5pc1NwaW5CdXR0b25FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0b0Vs
ZW1lbnQobm9kZSktPmhvdmVyZWQoKTsKKyAgICBpZiAoIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc1NwaW5CdXR0b25FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuaG92ZXJlZCgpOwogICAgIFNwaW5CdXR0b25FbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPihub2RlKTsKICAgICByZXR1cm4gZWxlbWVudC0+
aG92ZXJlZCgpICYmIGVsZW1lbnQtPnVwRG93blN0YXRlKCkgIT0gU3BpbkJ1dHRvbkVsZW1lbnQ6
OkluZGV0ZXJtaW5hdGU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFy
dEhvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBj
b25zdAogewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhdG9FbGVtZW50KG5vZGUpLT5pc1NwaW5CdXR0b25FbGVt
ZW50KCkpCisgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLm5vZGUoKTsKKyAgICBpZiAoIW5vZGUg
fHwgIWlzPEVsZW1lbnQ+KG5vZGUpIHx8ICFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNTcGlu
QnV0dG9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3BpbkJ1dHRvbkVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KG5vZGUpOwog
ICAgIHJldHVybiBlbGVtZW50LT51cERvd25TdGF0ZSgpID09IFNwaW5CdXR0b25FbGVtZW50OjpV
cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4IGNi
ZDkyYWI5ODk5ZjM2MzU4NWQyZDExMWI5NGE2YTY0NTVhNWJjNmUuLjQ4Mzg4ZWJjMzBkMDVlZDc5
NjExZWFlMDk5OTZhN2FiOTA4ZmRhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lR3RrLmNwcApAQCAtMzE2LDE1ICszMTYsMTUgQEAgc3RhdGljIGJvb2wgbm9kZUhh
c1BzZXVkbyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBwc2V1ZG8pCiAKIHN0YXRpYyBib29sIG5v
ZGVIYXNDbGFzcyhOb2RlKiBub2RlLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwog
Ci0gICAgaWYgKCFlbGVtZW50LT5oYXNDbGFzcygpKQorICAgIGlmICghZWxlbWVudC5oYXNDbGFz
cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZWxlbWVudC0+Y2xhc3NO
YW1lcygpLmNvbnRhaW5zKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NOYW1l
cygpLmNvbnRhaW5zKGNsYXNzTmFtZSk7CiB9CiAKIFJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVt
ZUd0aygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXgg
MzZlMDc3MTYyZjY1NWRmYzA0MWRlYjY5ODgyZGI0NWUwMDBkNzk2MS4uOTIwMDI2Y2Q4YzZmODk4
MGY1Njg5NTk2ODExMTY0ODY4NTc2OGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQpAQCAtNzI5LDcgKzcyOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCYgbykK
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNv
bnN0IFJlbmRlck9iamVjdCYgbykKIHsKICAgICBib29sIG9sZFByZXNzZWQgPSBbY2VsbCBpc0hp
Z2hsaWdodGVkXTsKLSAgICBib29sIHByZXNzZWQgPSBvLm5vZGUoKSAmJiBvLm5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChvLm5vZGUoKSktPmFjdGl2ZSgpOworICAgIGJvb2wg
cHJlc3NlZCA9IG8ubm9kZSgpICYmIGlzPEVsZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxF
bGVtZW50Pigqby5ub2RlKCkpLmFjdGl2ZSgpOwogICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNz
ZWQpCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQpAQCAtMTUzMSw3
ICsxNTMxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGEKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xp
ZGVyVGh1bWJDZWxsLCBvKTsKLSAgICAgICAgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSA9IChvLm5v
ZGUoKSAmJiBvLm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChvLm5vZGUoKSkt
PmZvY3VzRGVsZWdhdGUoKSA6IDA7CisgICAgICAgIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUgPSAo
by5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2RlKCkpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KG8u
bm9kZSgpKS0+Zm9jdXNEZWxlZ2F0ZSgpIDogbnVsbHB0cjsKICAgICBpZiAoZm9jdXNEZWxlZ2F0
ZSkKICAgICAgICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgKmZvY3VzRGVs
ZWdhdGUtPnJlbmRlcmVyKCkpOwogCkBAIC0xNjczLDcgKzE2NzMsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUAogewogICAgIEVsZW1lbnQqIGlucHV0ID0gby5ub2RlKCktPnNoYWRvd0hvc3Qo
KTsKICAgICBpZiAoIWlucHV0KQotICAgICAgICBpbnB1dCA9IHRvRWxlbWVudChvLm5vZGUoKSk7
CisgICAgICAgIGlucHV0ID0gZG93bmNhc3Q8RWxlbWVudD4oby5ub2RlKCkpOwogCiAgICAgaWYg
KCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDFlN2Q3
NTJlMmU0MjM2OTk5ODk4OTEzNjZiNTBjMWEyNzI3ODAwOWYuLmQ0NWJjNWJkNGYwODIyOTdmN2U3
N2E3N2RiYzQ1MzFmNzZlOWVlODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1Rl
eHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG8sCiAgICAgfQogICAgIAogICAgIGlmIChiZWhhdmlvciAmIFJlbmRlckFzVGV4dFNob3dJREFu
ZENsYXNzKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgby5u
b2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChvLm5vZGUoKSkgOiAwKSB7CisgICAg
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gby5ub2RlKCkgJiYgaXM8RWxlbWVudD4oby5ub2Rl
KCkpID8gZG93bmNhc3Q8RWxlbWVudD4oby5ub2RlKCkpIDogbnVsbHB0cikgewogICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1cIiIg
KyBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpICsgIlwiIjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IGIyZDk1YTllZjFjYmEwNDk4NjFjNzcwZGNm
Y2VhODZiMDAzMGJlODAuLmQzOTJkODg3MGZlMDdhY2E4MmNhNzBiNTUwZGFiYWRkMTk1NzM4ZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI3Niw4
ICsyNzYsOCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgp
KQogICAgICAgICByZXR1cm4gcmVuZGVyZXItPmlzRmxvYXRpbmcoKSB8fCByZW5kZXJlci0+aXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCk7CiAgICAgLy8gQXZvaWQgY3JlYXRpbmcgY29udGFpbmVycyBm
b3IgdGV4dCB3aXRoaW4gdGV4dCBjb250cm9scywgYnV0dG9ucywgb3IgPHNlbGVjdD4gYnV0dG9u
cy4KLSAgICBOb2RlKiBwYXJlbnROb2RlID0gcmVuZGVyZXItPnBhcmVudCgpID8gcmVuZGVyZXIt
PnBhcmVudCgpLT5nZW5lcmF0aW5nTm9kZSgpIDogMDsKLSAgICBpZiAocGFyZW50Tm9kZSAmJiBw
YXJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKHRv
RWxlbWVudChwYXJlbnROb2RlKS0+dGFnUU5hbWUoKSkpCisgICAgTm9kZSogcGFyZW50Tm9kZSA9
IHJlbmRlcmVyLT5wYXJlbnQoKSA/IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUo
KSA6IG51bGxwdHI7CisgICAgaWYgKHBhcmVudE5vZGUgJiYgaXM8RWxlbWVudD4ocGFyZW50Tm9k
ZSkgJiYgZm9ybUlucHV0VGFncygpLmNvbnRhaW5zKGRvd25jYXN0PEVsZW1lbnQ+KCpwYXJlbnRO
b2RlKS50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zODgsOCArMzg4LDggQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJDb250
YWluc09uZU9mVGFncyhjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24KICAgICBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGFpbmVyOwogICAgIHdoaWxlIChyZW5kZXJl
cikgewogICAgICAgICBjb25zdCBOb2RlKiByZW5kZXJlck5vZGUgPSByZW5kZXJlci0+bm9kZSgp
OwotICAgICAgICBpZiAocmVuZGVyZXJOb2RlICYmIHJlbmRlcmVyTm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGFncy5jb250YWlucyh0b0VsZW1lbnQocmVuZGVyZXJO
b2RlKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChyZW5kZXJlck5vZGUgJiYgaXM8RWxlbWVu
dD4ocmVuZGVyZXJOb2RlKSkgeworICAgICAgICAgICAgaWYgKHRhZ3MuY29udGFpbnMoZG93bmNh
c3Q8RWxlbWVudD4oKnJlbmRlcmVyTm9kZSkudGFnUU5hbWUoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmVuZGVyZXIgPSBuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMocmVuZGVyZXIsIGNvbnRhaW5lcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCmluZGV4IDBhZjkxNjAxYTNhMWMxN2UwZDI3NjViYjY4NWYzMWNiNzQ1MjlmMTQuLjI0
YzE5MGQyOTgxODg3ZWI1M2VkYWVkNzJhZTczMTRmZmUzYmExMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCkBAIC01
NSw3ICs1NSw3IEBAIFJlbmRlck1hdGhNTEJsb2NrOjpSZW5kZXJNYXRoTUxCbG9jayhEb2N1bWVu
dCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0CiAKIGJvb2wgUmVuZGVyTWF0aE1M
QmxvY2s6OmlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYgY2hpbGQsIGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hpbGQubm9kZSgpICYmIGlzRWxlbWVu
dCgqY2hpbGQubm9kZSgpKTsKKyAgICByZXR1cm4gY2hpbGQubm9kZSgpICYmIGlzPEVsZW1lbnQ+
KCpjaGlsZC5ub2RlKCkpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IFJlbmRl
ck1hdGhNTEJsb2NrOjpjcmVhdGVBbm9ueW1vdXNNYXRoTUxCbG9jaygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCmluZGV4IDhhODZhOTU4Y2Q4MzA2NDAwZTJkMWE4
M2ExOGRjMTJhMTk0NmI4N2QuLjIyZThlMWFkNmNiMjhmNzZkMmQxNWZjNDZkNTEzYTdjMDRhNTc1
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCkBAIC00ODIs
OCArNDgyLDggQEAgc3RhdGljIHZvaWQgYXR0YWNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSYgY3Vy
cmVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlLAogICAgICAgICAgICAgYXR0YWNoVGV4
dFJlbmRlcmVyKGRvd25jYXN0PFRleHQ+KCpjaGlsZCksIHJlbmRlclRyZWVQb3NpdGlvbik7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgIGF0dGFjaFJlbmRlclRyZWUoKnRvRWxlbWVudChjaGls
ZCksIGluaGVyaXRlZFN0eWxlLCByZW5kZXJUcmVlUG9zaXRpb24sIG51bGxwdHIpOworICAgICAg
ICBpZiAoaXM8RWxlbWVudD4oY2hpbGQpKQorICAgICAgICAgICAgYXR0YWNoUmVuZGVyVHJlZShk
b3duY2FzdDxFbGVtZW50PigqY2hpbGQpLCBpbmhlcml0ZWRTdHlsZSwgcmVuZGVyVHJlZVBvc2l0
aW9uLCBudWxscHRyKTsKICAgICB9CiB9CiAKQEAgLTUwMSw4ICs1MDEsOCBAQCBzdGF0aWMgdm9p
ZCBhdHRhY2hEaXN0cmlidXRlZENoaWxkcmVuKEluc2VydGlvblBvaW50JiBpbnNlcnRpb25Qb2lu
dCwgUmVuZGVyU3R5bAogICAgICAgICAgICAgYXR0YWNoVGV4dFJlbmRlcmVyKGRvd25jYXN0PFRl
eHQ+KCpjdXJyZW50KSwgcmVuZGVyVHJlZVBvc2l0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIEVsZW1lbnQmIGN1cnJlbnRFbGVtZW50ID0gdG9FbGVtZW50KCpjdXJyZW50KTsK
KyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KGN1cnJlbnQpKSB7CisgICAgICAgICAgICBFbGVtZW50
JiBjdXJyZW50RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KTsKICAgICAgICAg
ICAgIGlmIChjdXJyZW50RWxlbWVudC5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIGRldGFj
aFJlbmRlclRyZWUoY3VycmVudEVsZW1lbnQpOwogICAgICAgICAgICAgYXR0YWNoUmVuZGVyVHJl
ZShjdXJyZW50RWxlbWVudCwgaW5oZXJpdGVkU3R5bGUsIHJlbmRlclRyZWVQb3NpdGlvbiwgbnVs
bHB0cik7CkBAIC02NTUsOCArNjU1LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoRGlzdHJpYnV0ZWRD
aGlsZHJlbihJbnNlcnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQpCiAgICAgICAgICAgICBkZXRh
Y2hUZXh0UmVuZGVyZXIoZG93bmNhc3Q8VGV4dD4oKmN1cnJlbnQpKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgICAgICBkZXRhY2hSZW5kZXJUcmVlKCp0b0VsZW1lbnQoY3VycmVudCkpOworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oY3VycmVudCkpCisgICAgICAgICAgICBkZXRhY2hSZW5kZXJU
cmVlKGRvd25jYXN0PEVsZW1lbnQ+KCpjdXJyZW50KSk7CiAgICAgfQogfQogCkBAIC02NzAsOCAr
NjcwLDggQEAgc3RhdGljIHZvaWQgZGV0YWNoQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSYgY3VycmVu
dCwgRGV0YWNoVHlwZSBkZXRhY2hUeXBlKQogICAgICAgICAgICAgU3R5bGU6OmRldGFjaFRleHRS
ZW5kZXJlcihkb3duY2FzdDxUZXh0PigqY2hpbGQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAg
ICAgZGV0YWNoUmVuZGVyVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwgZGV0YWNoVHlwZSk7CisgICAg
ICAgIGlmIChpczxFbGVtZW50PihjaGlsZCkpCisgICAgICAgICAgICBkZXRhY2hSZW5kZXJUcmVl
KGRvd25jYXN0PEVsZW1lbnQ+KCpjaGlsZCksIGRldGFjaFR5cGUpOwogICAgIH0KICAgICBjdXJy
ZW50LmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CkBAIC04MTksOCArODE5LDggQEAg
c3RhdGljIHZvaWQgcmVzb2x2ZVNoYWRvd1RyZWUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRWxl
bWVudCYgaG9zdCwgU3R5bGU6OkNoYW4KICAgICAgICAgICAgIHJlc29sdmVUZXh0Tm9kZShkb3du
Y2FzdDxUZXh0PigqY2hpbGQpLCByZW5kZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0VsZW1lbnROb2RlKCkpCi0g
ICAgICAgICAgICByZXNvbHZlVHJlZSgqdG9FbGVtZW50KGNoaWxkKSwgaG9zdC5yZW5kZXJlcigp
LT5zdHlsZSgpLCByZW5kZXJUcmVlUG9zaXRpb24sIGNoYW5nZSk7CisgICAgICAgIGlmIChpczxF
bGVtZW50PihjaGlsZCkpCisgICAgICAgICAgICByZXNvbHZlVHJlZShkb3duY2FzdDxFbGVtZW50
PigqY2hpbGQpLCBob3N0LnJlbmRlcmVyKCktPnN0eWxlKCksIHJlbmRlclRyZWVQb3NpdGlvbiwg
Y2hhbmdlKTsKICAgICB9CiAKICAgICBzaGFkb3dSb290LmNsZWFyTmVlZHNTdHlsZVJlY2FsYygp
OwpAQCAtOTQzLDE5ICs5NDMsMTkgQEAgdm9pZCByZXNvbHZlVHJlZShFbGVtZW50JiBjdXJyZW50
LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUsIFJlbmRlclRyZWVQb3NpdGkKICAgICAgICAg
ICAgICAgICByZXNvbHZlVGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oKmNoaWxkKSwgY2hpbGRSZW5k
ZXJUcmVlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAg
aWYgKCFpczxFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvRWxlbWVudChjaGlsZCk7CisgICAg
ICAgICAgICBFbGVtZW50JiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqY2hpbGQp
OwogICAgICAgICAgICAgaWYgKGVsZW1lbnROZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNp
YmxpbmdFbGVtZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRFbGVtZW50LT5z
dHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgICAgICAgICBj
aGlsZEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAgICAgICBlbGVt
ZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlID0gY2hp
bGRFbGVtZW50LT5hZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2hpbGRFbGVtZW50LT5zdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVD
aGFuZ2UpCi0gICAgICAgICAgICAgICAgZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0FmZmVjdHNO
ZXh0U2libGluZ0VsZW1lbnRTdHlsZSA9IGNoaWxkRWxlbWVudC0+YWZmZWN0c05leHRTaWJsaW5n
RWxlbWVudFN0eWxlKCk7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hp
bGRFbGVtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBjaGlsZEVsZW1lbnQtPm5lZWRz
U3R5bGVSZWNhbGMoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZEVsZW1lbnQuc3R5bGVJ
c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRF
bGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50TmVl
ZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlID0gY2hpbGRFbGVt
ZW50LmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChjaGlsZEVsZW1lbnQuc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQor
ICAgICAgICAgICAgICAgIGVsZW1lbnROZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNpYmxp
bmdFbGVtZW50U3R5bGUgPSBjaGlsZEVsZW1lbnQuYWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0
eWxlKCk7CisgICAgICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hpbGRFbGVtZW50
LmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGNoaWxkRWxlbWVudC5uZWVkc1N0eWxlUmVjYWxj
KCkpIHsKICAgICAgICAgICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgpOwotICAgICAgICAgICAg
ICAgIHJlc29sdmVUcmVlKCpjaGlsZEVsZW1lbnQsIHJlbmRlcmVyLT5zdHlsZSgpLCBjaGlsZFJl
bmRlclRyZWVQb3NpdGlvbiwgY2hhbmdlKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlVHJlZShj
aGlsZEVsZW1lbnQsIHJlbmRlcmVyLT5zdHlsZSgpLCBjaGlsZFJlbmRlclRyZWVQb3NpdGlvbiwg
Y2hhbmdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKaW5kZXggODQ5ZGY4OWRlZTFiNGE0YmM1ODhjYTMwYmQ0ODdiMjNiMWM3MDM2
Mi4uNjY3Y2RmYzIxNDgxY2M1N2Y5NWQ3NTVmMDg5M2VjNjJkYTVjYjY1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNzYwLDkgKzc2MCw5IEBAIHZvaWQgU1ZHVXNlRWxl
bWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkKICAgICAg
ICAgZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoY2hpbGQuZ2V0KCkpOwogfQogCi12b2lk
IFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKE5vZGUqIGVs
ZW1lbnQpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dU
cmVlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnN5bWJvbFRhZykpIHsKKyAgICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4obm9kZSkpIHsKICAg
ICAgICAgLy8gU3BlYzogVGhlIHJlZmVyZW5jZWQgJ3N5bWJvbCcgYW5kIGl0cyBjb250ZW50cyBh
cmUgZGVlcC1jbG9uZWQgaW50byB0aGUgZ2VuZXJhdGVkIHRyZWUsCiAgICAgICAgIC8vIHdpdGgg
dGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSAnc3ltYm9sJyBpcyByZXBsYWNlZCBieSBhbiAnc3ZnJy4g
VGhpcyBnZW5lcmF0ZWQgJ3N2Zycgd2lsbAogICAgICAgICAvLyBhbHdheXMgaGF2ZSBleHBsaWNp
dCB2YWx1ZXMgZm9yIGF0dHJpYnV0ZXMgd2lkdGggYW5kIGhlaWdodC4gSWYgYXR0cmlidXRlcyB3
aWR0aCBhbmQvb3IKQEAgLTc3MiwxMCArNzcyLDEwIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhw
YW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCkKICAgICAgICAgUmVm
UHRyPFNWR1NWR0VsZW1lbnQ+IHN2Z0VsZW1lbnQgPSBTVkdTVkdFbGVtZW50OjpjcmVhdGUoU1ZH
TmFtZXM6OnN2Z1RhZywgKnJlZmVyZW5jZWREb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBUcmFu
c2ZlciBhbGwgZGF0YSAoYXR0cmlidXRlcywgZXRjLikgZnJvbSA8c3ltYm9sPiB0byB0aGUgbmV3
IDxzdmc+IGVsZW1lbnQuCi0gICAgICAgIHN2Z0VsZW1lbnQtPmNsb25lRGF0YUZyb21FbGVtZW50
KCp0b0VsZW1lbnQoZWxlbWVudCkpOworICAgICAgICBzdmdFbGVtZW50LT5jbG9uZURhdGFGcm9t
RWxlbWVudChkb3duY2FzdDxTVkdTeW1ib2xFbGVtZW50Pigqbm9kZSkpOwogCiAgICAgICAgIC8v
IE9ubHkgY2xvbmUgc3ltYm9sIGNoaWxkcmVuLCBhbmQgYWRkIHRoZW0gdG8gdGhlIG5ldyA8c3Zn
PiBlbGVtZW50Ci0gICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQgPSBjaGls
ZC0+Y2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgc3ZnRWxlbWVudC0+YXBwZW5kQ2hpbGQo
bmV3Q2hpbGQucmVsZWFzZSgpKTsKICAgICAgICAgfQpAQCAtNzg4LDE5ICs3ODgsMTkgQEAgdm9p
ZCBTVkdVc2VFbGVtZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBl
bGVtZW50KQogICAgICAgICBpZiAoc3VidHJlZUNvbnRhaW5zRGlzYWxsb3dlZEVsZW1lbnQoKnN2
Z0VsZW1lbnQpKQogICAgICAgICAgICAgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRy
ZWUoKnN2Z0VsZW1lbnQpOwogCi0gICAgICAgIFJlZlB0cjxOb2RlPiByZXBsYWNpbmdFbGVtZW50
KHN2Z0VsZW1lbnQuZ2V0KCkpOworICAgICAgICBSZWZQdHI8U1ZHU1ZHRWxlbWVudD4gcmVwbGFj
aW5nRWxlbWVudChzdmdFbGVtZW50LmdldCgpKTsKIAogICAgICAgICAvLyBSZXBsYWNlIDxzeW1i
b2w+IHdpdGggPHN2Zz4uCi0gICAgICAgIGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNo
aWxkKHN2Z0VsZW1lbnQucmVsZWFzZSgpLCBlbGVtZW50KTsKKyAgICAgICAgbm9kZS0+cGFyZW50
Tm9kZSgpLT5yZXBsYWNlQ2hpbGQoc3ZnRWxlbWVudC5yZWxlYXNlKCksIG5vZGUpOwogCiAgICAg
ICAgIC8vIEV4cGFuZCB0aGUgc2libGluZ3MgYmVjYXVzZSB0aGUgKmVsZW1lbnQqIGlzIHJlcGxh
Y2VkIGFuZCB3ZSB3aWxsCiAgICAgICAgIC8vIGxvc2UgdGhlIHNpYmxpbmcgY2hhaW4gd2hlbiB3
ZSBhcmUgYmFjayBmcm9tIHJlY3Vyc2lvbi4KLSAgICAgICAgZWxlbWVudCA9IHJlcGxhY2luZ0Vs
ZW1lbnQuZ2V0KCk7Ci0gICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBlbGVtZW50
LT5uZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmco
KSkKKyAgICAgICAgbm9kZSA9IHJlcGxhY2luZ0VsZW1lbnQuZ2V0KCk7CisgICAgICAgIGZvciAo
UmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGV4cGFuZFN5bWJvbEVs
ZW1lbnRzSW5TaGFkb3dUcmVlKHNpYmxpbmcuZ2V0KCkpOwogICAgIH0KIAotICAgIGZvciAoUmVm
UHRyPE5vZGU+IGNoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGlsZCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAg
ICAgIGV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKGNoaWxkLmdldCgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRl
eCAxMDQ5ZTZiNDE5NmZlMjgwZGY3NGRkYzA0NWE1YTQ5NTkwMjY2NWJjLi5kNTQ1ZTlkZGVhMTI1
YmEzN2RjOGFjZDBkNWU4Mzg5NjFjZGY4Yjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgU1ZH
U01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogICAgIGlmICghaW5Eb2N1bWVu
dCgpKSB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSB0YXJnZXQgZWxlbWVudCBpZiB3ZSBhcmUgbm8g
bG9uZ2VyIGluIHRoZSBkb2N1bWVudC4KLSAgICAgICAgc2V0VGFyZ2V0RWxlbWVudCgwKTsKKyAg
ICAgICAgc2V0VGFyZ2V0RWxlbWVudChudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKCkKICAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVm
QXR0cik7CiAgICAgRWxlbWVudCogdGFyZ2V0OwogICAgIGlmIChocmVmLmlzRW1wdHkoKSkKLSAg
ICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpID8gdG9FbGVtZW50KHBhcmVudE5vZGUoKSkgOiBudWxscHRyOworICAgICAgICB0YXJnZXQg
PSBwYXJlbnROb2RlKCkgJiYgaXM8RWxlbWVudD4ocGFyZW50Tm9kZSgpKSA/IGRvd25jYXN0PEVs
ZW1lbnQ+KHBhcmVudE5vZGUoKSkgOiBudWxscHRyOwogICAgIGVsc2UKICAgICAgICAgdGFyZ2V0
ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmLCBkb2N1
bWVudCgpLCAmaWQpOwogICAgIFNWR0VsZW1lbnQqIHN2Z1RhcmdldCA9IHRhcmdldCAmJiBpczxT
VkdFbGVtZW50Pih0YXJnZXQpID8gZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSA6IG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCAxZTM2ZTliZGZjOGE4
NjJjOWNkNGUzMmVhZmZhMTJlODNiZjI1YmE2Li4xZmY4Mzg0MDQwYjU0ZjllMmQ4MDMwN2NiM2Q3
YzdjMTM0ZDcwNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTU4
MCwxMyArNTgwLDEzIEBAIFZhbHVlIEZ1bkxhbmc6OmV2YWx1YXRlKCkgY29uc3QKIHsKICAgICBT
dHJpbmcgbGFuZyA9IGFyZ3VtZW50KDApLmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKIAotICAgIGNv
bnN0IEF0dHJpYnV0ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSAwOworICAgIGNvbnN0IEF0dHJpYnV0
ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBudWxscHRyOwogICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0
aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IHRvRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVz
KCkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBlbGVtZW50LT5maW5kQXR0
cmlidXRlQnlOYW1lKFhNTE5hbWVzOjpsYW5nQXR0cik7CisgICAgICAgIGlmIChpczxFbGVtZW50
Pihub2RlKSkgeworICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKKyAg
ICAgICAgICAgICAgICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGVsZW1lbnQuZmluZEF0dHJpYnV0ZUJ5
TmFtZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsYW5ndWFn
ZUF0dHJpYnV0ZSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoTm9kZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0
LmNwcAppbmRleCAwZmQ0MTBjMzMzMmM2NDJiMTYzZmYwZTJjNzcwN2Y5MTFmMzRmMWMzLi5iODYx
NjgxMjY4MGFmYjkyZTEyZmMzM2NhMGQ4OTYwYmIwOWVmOWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmNwcApAQCAtMjA3LDE5ICsyMDcsMTkgQEAgdm9pZCBOb2RlU2V0Ojp0cmF2ZXJz
YWxTb3J0KCkgY29uc3QKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBzb3J0ZWROb2RlczsKICAg
ICBzb3J0ZWROb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVDb3VudCk7CiAKLSAgICBm
b3IgKE5vZGUqIG4gPSBmaW5kUm9vdE5vZGUobV9ub2Rlcy5maXJzdCgpLmdldCgpKTsgbjsgbiA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKLSAgICAgICAgaWYgKG5vZGVzLmNvbnRhaW5zKG4p
KQotICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKG4pOworICAgIGZvciAoTm9kZSogbm9k
ZSA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgICAgICBpZiAobm9kZXMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICBzb3J0ZWROb2Rlcy5hcHBlbmQobm9kZSk7CiAKLSAgICAgICAgaWYg
KCFjb250YWluc0F0dHJpYnV0ZU5vZGVzIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IGlmICghY29udGFpbnNBdHRyaWJ1dGVOb2RlcyB8fCAhaXM8RWxlbWVudD4obm9kZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KG4pOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICAgICAgRWxl
bWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgaWYgKCFl
bGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgewotICAgICAgICAgICAgUmVmUHRyPEF0dHI+IGF0dHIgPSBlbGVtZW50LT5hdHRy
SWZFeGlzdHMoYXR0cmlidXRlLm5hbWUoKSk7CisgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgICAg
ICBSZWZQdHI8QXR0cj4gYXR0ciA9IGVsZW1lbnQuYXR0cklmRXhpc3RzKGF0dHJpYnV0ZS5uYW1l
KCkpOwogICAgICAgICAgICAgaWYgKGF0dHIgJiYgbm9kZXMuY29udGFpbnMoYXR0ci5nZXQoKSkp
CiAgICAgICAgICAgICAgICAgc29ydGVkTm9kZXMuYXBwZW5kKGF0dHIpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFN0ZXAuY3BwCmluZGV4IDQ5MTZjNzM3MDEyNjM3NmE4MTczNmY5MjJhNjBj
NTI3MDc2OTUyMDguLmM0Y2ZkNWE2YmQ5NDdkODBkZDI0ZmMyNGNmOGVjNDkwZWY0MDIzZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJB
dHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0yMDEsMjEgKzIwMiwyMSBAQCBpbmxpbmUgYm9vbCBu
b2RlTWF0Y2hlc0Jhc2ljVGVzdChOb2RlJiBub2RlLCBTdGVwOjpBeGlzIGF4aXMsIGNvbnN0IFN0
ZXA6Ok5vZGVUZQogCiAgICAgICAgICAgICAvLyBGb3Igb3RoZXIgYXhlcywgdGhlIHByaW5jaXBh
bCBub2RlIHR5cGUgaXMgZWxlbWVudC4KICAgICAgICAgICAgIEFTU0VSVChwcmltYXJ5Tm9kZVR5
cGUoYXhpcykgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKTsKLSAgICAgICAgICAgIGlmICghbm9kZS5p
c0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3Rh
ckF0b20pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgfHwg
bmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCk7CiAKLSAgICAgICAgICAgIGlmIChu
b2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzPEhU
TUxEb2N1bWVudD4obm9kZS5kb2N1bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChpczxI
VE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGF0aHMgd2l0aG91
dCBuYW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1MIGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRz
IGRlc3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1MIG5hbWVzcGFjZS4gTmFtZXMgYXJlIGNvbXBh
cmVkIGNhc2UtaW5zZW5zaXRpdmVseS4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKS5sb2NhbE5hbWUoKSwgbmFt
ZSkgJiYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBuYW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1l
c3BhY2VVUkkoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEFuIGV4
cHJlc3Npb24gd2l0aG91dCBhbnkgcHJlZml4IHNob3VsZG4ndCBtYXRjaCBuby1uYW1lc3BhY2Ug
bm9kZXMgKGJlY2F1c2UgSFRNTDUgc2F5cyBzbykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRv
RWxlbWVudChub2RlKS5oYXNMb2NhbE5hbWUobmFtZSkgJiYgbmFtZXNwYWNlVVJJID09IG5vZGUu
bmFtZXNwYWNlVVJJKCkgJiYgIW5hbWVzcGFjZVVSSS5pc051bGwoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZSkuaGFzTG9jYWxOYW1lKG5hbWUpICYmIG5h
bWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpICYmICFuYW1lc3BhY2VVUkkuaXNOdWxs
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLmhh
c0xvY2FsTmFtZShuYW1lKSAmJiBuYW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKTsK
KyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKS5oYXNMb2NhbE5hbWUo
bmFtZSkgJiYgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNDMsMTAgKzM0NCwxMCBAQCB2
b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUmIGNvbnRleHQsIE5vZGVTZXQmIG5vZGVzKSBjb25z
dAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXR0cmlidXRl
QXhpczogewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgICAgIGlmICghaXM8RWxlbWVudD4oY29udGV4dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgICAgICBFbGVtZW50JiBjb250ZXh0RWxlbWVudCA9IHRvRWxlbWVudChjb250
ZXh0KTsKKyAgICAgICAgICAgIEVsZW1lbnQmIGNvbnRleHRFbGVtZW50ID0gZG93bmNhc3Q8RWxl
bWVudD4oY29udGV4dCk7CiAKICAgICAgICAgICAgIC8vIEF2b2lkIGxhemlseSBjcmVhdGluZyBh
dHRyaWJ1dGUgbm9kZXMgZm9yIGF0dHJpYnV0ZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbnl3YXku
CiAgICAgICAgICAgICBpZiAobV9ub2RlVGVzdC5tX2tpbmQgPT0gTm9kZVRlc3Q6Ok5hbWVUZXN0
ICYmIG1fbm9kZVRlc3QubV9kYXRhICE9IHN0YXJBdG9tKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggOGFl
NTExZGE4ZTM0YzY1NjQ0ZjA2MjFiOTg3YWUwMWZhOTYxYTQ3ZC4uOTZkYWNmN2M3ZTFkYTU0ZWFk
YjNmOWVlMGYyMmQ5MzI5Mzk1YmUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNjIxLDEwICs2MjEsMTAg
QEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQm
IGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICB3aGlsZSAocGFyZW50RWxlbWVudCkgewog
ICAgICAgICBlbGVtU3RhY2suYXBwZW5kKHBhcmVudEVsZW1lbnQpOwogCi0gICAgICAgIENvbnRh
aW5lck5vZGUqIG4gPSBwYXJlbnRFbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICgh
biB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBDb250YWluZXJOb2RlKiBub2RlID0g
cGFyZW50RWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIW5vZGUgfHwgIWlzPEVs
ZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBhcmVudEVsZW1lbnQg
PSB0b0VsZW1lbnQobik7CisgICAgICAgIHBhcmVudEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
Pihub2RlKTsKICAgICB9CiAKICAgICBpZiAoZWxlbVN0YWNrLmlzRW1wdHkoKSkKQEAgLTg4MSwz
NCArODgxLDM0IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAKICAg
ICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG4gPSBtX2N1cnJlbnRO
b2RlOwotICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBub2RlID0gbV9jdXJyZW50Tm9kZTsKKyAgICBub2RlLT5maW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKTsKIAogICAgIC8vIE9uY2Ugd2UgcmVhY2ggdGhlIGRlcHRoIGFnYWluIHdoZXJlIGVu
dGl0eSBleHBhbnNpb24gc3RhcnRlZCwgc3RvcCBleGVjdXRpbmcgdGhlIHdvcmstYXJvdW5kLgog
ICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5UGFyc2luZ0J1ZygpICYmIGNvbnRleHQoKS0+
ZGVwdGggPD0gZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uKCkpCiAgICAgICAgIHNldERl
cHRoVHJpZ2dlcmluZ0VudGl0eUV4cGFuc2lvbigtMSk7CiAKLSAgICBpZiAoIXNjcmlwdGluZ0Nv
bnRlbnRJc0FsbG93ZWQocGFyc2VyQ29udGVudFBvbGljeSgpKSAmJiBuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSh0b0VsZW1lbnQobi5nZXQoKSkpKSB7Cisg
ICAgaWYgKCFzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKHBhcnNlckNvbnRlbnRQb2xpY3koKSkg
JiYgaXM8RWxlbWVudD4oKm5vZGUpICYmIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZG93bmNh
c3Q8RWxlbWVudD4obm9kZS5nZXQoKSkpKSB7CiAgICAgICAgIHBvcEN1cnJlbnROb2RlKCk7Ci0g
ICAgICAgIG4tPnJlbW92ZShJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgbm9kZS0+cmVtb3Zl
KElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFu
LT5pc0VsZW1lbnROb2RlKCkgfHwgIW1fdmlldykgeworICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpIHx8ICFtX3ZpZXcpIHsKICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobi5nZXQo
KSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKIAog
ICAgIC8vIFRoZSBlbGVtZW50J3MgcGFyZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVk
IGZyb20gZG9jdW1lbnQuCiAgICAgLy8gUGFyc2luZyBjb250aW51ZXMgaW4gdGhpcyBjYXNlLCBi
dXQgc2NyaXB0cyBhcmVuJ3QgZXhlY3V0ZWQuCi0gICAgaWYgKCFlbGVtZW50LT5pbkRvY3VtZW50
KCkpIHsKKyAgICBpZiAoIWVsZW1lbnQuaW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIHBvcEN1cnJl
bnROb2RlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTY3JpcHRFbGVtZW50KiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50KTsKKyAgICBT
Y3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgm
ZWxlbWVudCk7CiAgICAgaWYgKCFzY3JpcHRFbGVtZW50KSB7CiAgICAgICAgIHBvcEN1cnJlbnRO
b2RlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTkyNiwxNCArOTI2LDE0IEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5l
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVu
dCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAgICAgICAg
IGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpIHsKICAgICAg
ICAgICAgIG1fcGVuZGluZ1NjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpOwot
ICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgIG1fc2Ny
aXB0RWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRD
bGllbnQodGhpcyk7CiAKICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAg
aWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgYWRkQ2xpZW50KCkgZXhlY3V0ZWQgaXQu
CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQogICAgICAgICAgICAgICAgIHBhdXNl
UGFyc2luZygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9
IDA7CisgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBudWxscHRyOwogCiAgICAgICAgIC8v
IEphdmFTY3JpcHQgbWF5IGhhdmUgZGV0YWNoZWQgdGhlIHBhcnNlcgogICAgICAgICBpZiAoaXNE
ZXRhY2hlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJSZW5k
ZXJMYXllci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTGF5ZXIubW0K
aW5kZXggMmY0NTc4ZDg0MjgzOGY5YThiOTM4NTMzZTkyYzE3ZmIzMDM5YmQ0My4uODRmYjM3NjAw
YjMzYWQ3NmFmNzE2N2M5M2I0YWMyYjVkODllYmE4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJSZW5kZXJMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlJlbmRlckxheWVyLm1tCkBAIC01Miw3ICs1Miw3IEBAICsgKE5TU3RyaW5nICop
bmFtZUZvckxheWVyOihSZW5kZXJMYXllciopbGF5ZXIKICAgICBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CiAgICAgTlNTdHJpbmcgKm5hbWUgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cmVuZGVyZXIucmVuZGVyTmFtZSgpXTsKIAotICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIubm9kZSgpICYmIHJlbmRlcmVyLm5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KHJlbmRlcmVyLm5vZGUoKSkgOiAwKSB7Cisg
ICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5ub2RlKCkgJiYgaXM8RWxlbWVudD4o
cmVuZGVyZXIubm9kZSgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSkgOiBu
dWxscHRyKSB7CiAgICAgICAgIG5hbWUgPSBbbmFtZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpA
IiAlQCIsIChOU1N0cmluZyAqKWVsZW1lbnQtPnRhZ05hbWUoKV07CiAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNJRCgpKQogICAgICAgICAgICAgbmFtZSA9IFtuYW1lIHN0cmluZ0J5QXBwZW5kaW5n
Rm9ybWF0OkAiIGlkPVwiJUBcIiIsIChOU1N0cmluZyAqKWVsZW1lbnQtPmdldElkQXR0cmlidXRl
KCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmNwcAppbmRleCBiMWI2ZmU2OTA5
MTZlMjQ2MDRkYWM1ZWM4NGI2ODAzYzM4YmQ2ZGRjLi41MTFiZDhlOGMyYTlkMzFlNDkyNmI0MGM1
MWZlZjdkYjliZDc2NWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHND
bGFzc2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmNwcApA
QCAtNTUwLDcgKzU1MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NTW91c2VFdmVu
dDo6ZnJvbUVsZW1lbnQoCiAgICAgcmV0dXJuIEVfTk9USU1QTDsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01Nb3VzZUV2ZW50Ojp0b0VsZW1lbnQoIAorSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBET01Nb3VzZUV2ZW50Ojp0b0VsZW1lbnQoCiAgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBJRE9NTm9kZSoqIC8qcmVzdWx0Ki8pCiB7CiAgICAgcmV0dXJuIEVfTk9USU1QTDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuaCBiL1NvdXJjZS9X
ZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuaAppbmRleCBiODgxNjA0MjNhMTM1OTVjNjZmOThi
OGUwOTU1NTY1ZmM3ZTNmMTk1Li43MWM1NzZlNmJjNTFjMGM4NGNmMmQ4ZmFiNjQ3MGNlY2UzNzMx
NGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmgKKysr
IGIvU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5oCkBAIC02MTMsNyArNjEzLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBmcm9tRWxl
bWVudCggCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTU5vZGUqKiByZXN1bHQpOwog
ICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0b0VsZW1lbnQoIAor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0b0VsZW1lbnQoCiAgICAgICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gSURPTU5vZGUqKiByZXN1bHQpOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAppbmRleCA2Y2VkYWRhOWZjZDU3OTEyMGZi
MzFlZjY0YjAyMzA0NGE5NDhlMzY5Li4xOTYwM2M1YzAxM2EzOTdmYTgyOTIwZmQ0ZDM5ZjM3NDM3
ZDY1MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcApAQCAt
NjYsMTcgKzY2LDE3IEBAIFdlYlJlbmRlck9iamVjdDo6V2ViUmVuZGVyT2JqZWN0KFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGJvb2wgc2hvdWxkSW5jbHVkZURlc2NlCiAgICAgbV9uYW1lID0gcmVu
ZGVyZXItPnJlbmRlck5hbWUoKTsKIAogICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5v
ZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgbV9lbGVt
ZW50VGFnTmFtZSA9IGVsZW1lbnQtPnRhZ05hbWUoKTsKLSAgICAgICAgICAgIG1fZWxlbWVudElE
ID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5v
ZGUpKSB7CisgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUpOworICAgICAgICAgICAgbV9lbGVtZW50VGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZSgp
OworICAgICAgICAgICAgbV9lbGVtZW50SUQgPSBlbGVtZW50LmdldElkQXR0cmlidXRlKCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAm
JiBlbGVtZW50LT5oYXNDbGFzcygpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5pc1N0eWxl
ZEVsZW1lbnQoKSAmJiBlbGVtZW50Lmhhc0NsYXNzKCkpIHsKICAgICAgICAgICAgICAgICBWZWN0
b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gY2xhc3NOYW1lczsKLSAgICAgICAgICAgICAgICBjbGFz
c05hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGVs
ZW1lbnQuY2xhc3NOYW1lcygpLnNpemUoKSk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMuYXBwZW5kKEFQSTo6U3RyaW5nOjpj
cmVhdGUoZWxlbWVudC0+Y2xhc3NOYW1lcygpW2ldKSk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBlbGVtZW50LmNsYXNzTmFtZXMoKS5zaXplKCk7IGkgPCBzaXpl
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMuYXBwZW5kKEFQSTo6U3RyaW5n
OjpjcmVhdGUoZWxlbWVudC5jbGFzc05hbWVzKClbaV0pKTsKIAogICAgICAgICAgICAgICAgIG1f
ZWxlbWVudENsYXNzTmFtZXMgPSBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKGNsYXNzTmFt
ZXMpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01FbGVtZW50Lm1tCmluZGV4
IDRlOWIyZmZjNjg2MGMzM2NiMmQyNWMxY2M0YWM0OGUyOGQ2NjhlNmIuLmNmNzFiMWEyMWFmMDQz
MTQzNTE4ZWY5NzA2MmE0YWM5YjQ0ZmZjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUVsZW1lbnQubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NRWxlbWVu
dC5tbQpAQCAtMzUsMjQgKzM1LDI0IEBAIEBpbXBsZW1lbnRhdGlvbiBXS0RPTUVsZW1lbnQKIAog
LSAoQk9PTCloYXNBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlCiB7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnRvRWxlbWVudChfaW1wbC5nZXQoKSktPmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUp
OworICAgIHJldHVybiBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3JlOjpFbGVtZW50PigqX2ltcGwp
Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiAtIChOU1N0cmluZyAqKWdldEF0dHJpYnV0
ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50
KF9pbXBsLmdldCgpKS0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OmRvd25jYXN0PFdlYkNvcmU6OkVsZW1lbnQ+KCpfaW1wbCkuZ2V0QXR0cmlidXRlKGF0dHJp
YnV0ZSk7CiB9CiAKIC0gKHZvaWQpc2V0QXR0cmlidXRlOihOU1N0cmluZyAqKW5hbWUgdmFsdWU6
KE5TU3RyaW5nICopdmFsdWUKIHsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGFib3V0IHRo
ZSBleGNlcHRpb24uCiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBXZWJDb3Jl
Ojp0b0VsZW1lbnQoX2ltcGwuZ2V0KCkpLT5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsK
KyAgICBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3JlOjpFbGVtZW50PigqX2ltcGwpLnNldEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSwgZWMpOwogfQogCiAtIChOU1N0cmluZyAqKXRhZ05hbWUKIHsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50KF9pbXBsLmdldCgpKS0+dGFnTmFtZSgpOworICAg
IHJldHVybiBXZWJDb3JlOjpkb3duY2FzdDxXZWJDb3JlOjpFbGVtZW50PigqX2ltcGwpLnRhZ05h
bWUoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhh
bmRsZS5jcHAKaW5kZXggMzJlMTg3YmNjOWJlMWE2NjkzZDcwM2M4ZWZlODBmNTM2YjE2OTBmNC4u
MTZhMDI2Mzk2YmMzYzc1MmFhZTRlNGI0ZDUwYzViYjUzNWZlOGZhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0xMTgsMTAgKzExOCwxMCBA
QCBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjpkb2N1bWVudCgpCiAKIEludFJlY3QgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpl
bGVtZW50Qm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgIGlmICghaXM8RWxlbWVudD4oKm1fbm9kZSkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG1fbm9kZS5nZXQoKSktPmJvdW5kc0luUm9vdFZp
ZXdTcGFjZSgpOworICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50PigqbV9ub2RlKS5ib3VuZHNJ
blJvb3RWaWV3U3BhY2UoKTsKIH0KICAgICAKIEludFJlY3QgSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlOjpyZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZGZiYjc5MmY1ZjI0MDNlMGYwMWRm
MTk0MmI3MDMwM2Q4MGRlYmFiYi4uZjQ0NDczNGY4M2MxNzJhMzhmYzJiNTE0MGNlMzhlMDY0ZWM2
ZWI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApA
QCAtMTE0LDEwICsxMTQsMTAgQEAgQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZSBJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIEJ1bmRs
ZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVOb25lOwogI2Vsc2UKICAgICBXZWJDb3JlOjpOb2RlKiBu
b2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlTm9uZTsKICAgICAKLSAgICBpZiAo
IXRvRWxlbWVudChub2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKKyAgICBpZiAoIWRvd25jYXN0PEVs
ZW1lbnQ+KCpub2RlKS5pc01lZGlhRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQnVuZGxlSGl0
VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7CiAgICAgCiAgICAgcmV0dXJuIG1faGl0VGVzdFJlc3Vs
dC5tZWRpYUlzVmlkZW8oKSA/IEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVWaWRlbyA6IEJ1
bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGVBdWRpbzsgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNjYzMTE2MTNj
Y2JmOTc2NjRhYjhlMGNlNzAwYjM3NDk1Yzc1MzBiNy4uN2QyOWMwMzZkNzBkN2IwMTIyNjlmN2U2
ZjkzM2Q4YWNiYTVjODFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNTE1LDggKzUxNSw4IEBAIHZvaWQgV2ViUGFn
ZTo6c2VuZFRhcEhpZ2hsaWdodEZvck5vZGVJZk5lY2Vzc2FyeSh1aW50NjRfdCByZXF1ZXN0SUQs
IE5vZGUqIG5vZGUpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
aXNFbGVtZW50KCpub2RlKSkKLSAgICAgICAgcHJlZmV0Y2hETlModG9FbGVtZW50KCpub2RlKS5h
YnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkpOworICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpCisg
ICAgICAgIHByZWZldGNoRE5TKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5hYnNvbHV0ZUxpbmtV
UkwoKS5ob3N0KCkpOwogCiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiAgICAgaWYgKFJl
bmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKSB7CkBAIC02MDQsOCArNjA0
LDggQEAgdm9pZCBXZWJQYWdlOjppbnNwZWN0b3JOb2RlU2VhcmNoRW5kZWRBdFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogCiB2b2lkIFdlYlBhZ2U6OmJsdXJBc3Npc3RlZE5v
ZGUoKQogewotICAgIGlmIChtX2Fzc2lzdGVkTm9kZSAmJiBtX2Fzc2lzdGVkTm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQotICAgICAgICB0b0VsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCkpLT5ibHVy
KCk7CisgICAgaWYgKG1fYXNzaXN0ZWROb2RlICYmIGlzPEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9k
ZSkpCisgICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuYmx1cigpOwog
fQogCiB2b2lkIFdlYlBhZ2U6OnNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCkBAIC0xODg4LDcgKzE4ODgsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFBvc2l0aW9uSW5mb3Jt
YXRpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbnRlcmFjdGlvbkluZm9ybWF0aQogICAgIGlm
IChoaXROb2RlKSB7CiAgICAgICAgIGluZm8uY2xpY2thYmxlRWxlbWVudE5hbWUgPSBoaXROb2Rl
LT5ub2RlTmFtZSgpOwogCi0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBoaXROb2RlLT5pc0Vs
ZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQoaGl0Tm9kZSkgOiAwOworICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gaXM8RWxlbWVudD4oaGl0Tm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihoaXROb2Rl
KSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICBFbGVtZW50
KiBsaW5rRWxlbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVy
ZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5pc1JlbmRlckltYWdlKCkpIHsKQEAgLTIwMDYs
NyArMjAwNiw3IEBAIHN0YXRpYyBpbmxpbmUgRWxlbWVudCogbmV4dEZvY3VzYWJsZUVsZW1lbnQo
Tm9kZSogc3RhcnROb2RlLCBQYWdlKiBwYWdlLCBib29sIGlzCiB7CiAgICAgUmVmUHRyPEtleWJv
YXJkRXZlbnQ+IGtleSA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZSgpOwogCi0gICAgRWxlbWVudCog
bmV4dEVsZW1lbnQgPSB0b0VsZW1lbnQoc3RhcnROb2RlKTsKKyAgICBFbGVtZW50KiBuZXh0RWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CiAgICAgZG8gewogICAgICAgICBu
ZXh0RWxlbWVudCA9IGlzRm9yd2FyZCA/IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLm5leHRGb2N1
c2FibGVFbGVtZW50KEZvY3VzTmF2aWdhdGlvblNjb3BlOjpmb2N1c05hdmlnYXRpb25TY29wZU9m
KCZuZXh0RWxlbWVudC0+ZG9jdW1lbnQoKSksIG5leHRFbGVtZW50LCBrZXkuZ2V0KCkpCiAgICAg
ICAgICAgICA6IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnByZXZpb3VzRm9jdXNhYmxlRWxlbWVu
dChGb2N1c05hdmlnYXRpb25TY29wZTo6Zm9jdXNOYXZpZ2F0aW9uU2NvcGVPZigmbmV4dEVsZW1l
bnQtPmRvY3VtZW50KCkpLCBuZXh0RWxlbWVudCwga2V5LmdldCgpKTsKQEAgLTIxNjMsNyArMjE2
Myw3IEBAIHZvaWQgV2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUp
CiAgICAgICAgIC8vIGEgcHJvZ3JhbW1hdGljIGZvY3VzIGhhcHBlbmluZyB3aGlsZSB0aGUga2V5
Ym9hcmQgaXMgYWxyZWFkeSBzaG93bi4gT25jZSB3ZSBoYXZlIGEgd2F5IHRvCiAgICAgICAgIC8v
IGtub3cgdGhlIGtleWJvYXJkIHN0YXRlIGluIHRoZSBXZWIgUHJvY2Vzcywgd2Ugc2hvdWxkIHJl
ZmluZSB0aGUgY29uZGl0aW9uLgogICAgICAgICBpZiAobV91c2VySXNJbnRlcmFjdGluZykKLSAg
ICAgICAgICAgIG1fZm9ybUNsaWVudC0+d2lsbEJlZ2luSW5wdXRTZXNzaW9uKHRoaXMsIHRvRWxl
bWVudChub2RlKSwgV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKm5vZGUtPmRvY3VtZW50KCkuZnJh
bWUoKSksIHVzZXJEYXRhKTsKKyAgICAgICAgICAgIG1fZm9ybUNsaWVudC0+d2lsbEJlZ2luSW5w
dXRTZXNzaW9uKHRoaXMsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBXZWJGcmFtZTo6ZnJvbUNv
cmVGcmFtZSgqbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSwgdXNlckRhdGEpOwogCiAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3RhcnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0
aW9uLCBtX3VzZXJJc0ludGVyYWN0aW5nLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKICAgICAg
ICAgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiA9IGZhbHNlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>