<?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>23114</bug_id>
          
          <creation_ts>2009-01-04 21:17:30 -0800</creation_ts>
          <short_desc>JSValue* should be replaced with a class type.</short_desc>
          <delta_ts>2009-01-06 21:12:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104394</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-04 21:17:30 -0800</bug_when>
    <thetext>Presently the representation of JavaScript values varies depending on the platform, (e.g. on x86-64 we can represent 32-bit integers in JSValue*s, but on x86 we can only represent 31-bit integers).  Furthermore we cannot override casting operators to control conversions – which, for example, means that noValue() must be 0 (since the code relies on being able to ask &quot;if (someJSValue) {&quot; meaning &quot;if (someJSValue != noValue()) {&quot;, and also means we cannot control casting between pointer types, making it problematic to store pointers in anything but their canonical form.

Encapsulating JSValue*s in a smart pointer type will allow us greater flexibility in and control over the internal representation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104395</commentid>
    <comment_count>1</comment_count>
      <attachid>26422</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-04 21:18:19 -0800</bug_when>
    <thetext>Created attachment 26422
The patch

Testing on windows before setting review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104495</commentid>
    <comment_count>2</comment_count>
      <attachid>26443</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-05 14:58:58 -0800</bug_when>
    <thetext>Created attachment 26443
With added &apos;doze jsc build fix goodness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104512</commentid>
    <comment_count>3</comment_count>
      <attachid>26447</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-05 17:06:51 -0800</bug_when>
    <thetext>Created attachment 26447
revert emitLoad function name change &amp; fix typo in ChangeLog.

revert emitLoad name change &amp; fix type in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104590</commentid>
    <comment_count>4</comment_count>
      <attachid>26447</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-06 12:00:51 -0800</bug_when>
    <thetext>Comment on attachment 26447
revert emitLoad function name change &amp; fix typo in ChangeLog.

&gt; +        value now encapsulaed it will likely make sense to migrate the functionality
tyop

Looks good, am only rubber stamping the rename portion of it, r=me on the JSValuePtr (and EncodedAsPtr) conversion logic, assuming you&apos;ve tested jit + interpreter code paths, and perf is good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104669</commentid>
    <comment_count>5</comment_count>
      <attachid>26480</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-06 16:30:55 -0800</bug_when>
    <thetext>Created attachment 26480
patch relative to 603, to test on windows [tot was broken earlier.]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104683</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-01-06 21:12:34 -0800</bug_when>
    <thetext>Transmitting file data .........................................................................................................................................................................................................................................................................................................
Committed revision 39670.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26422</attachid>
            <date>2009-01-04 21:18:19 -0800</date>
            <delta_ts>2009-01-05 14:58:58 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.JSValuePtr.phase2612.txt</filename>
            <type>text/plain</type>
            <size>920106</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODgyIEBACisyMDA5LTAxLTA0ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSog
d2l0aCBhIG5ldyBzbWFydCBwb2ludGVyIHR5cGUsIEpTVmFsdWVQdHIuCisgICAgICAgIAorICAg
ICAgICBBIEphdmFTY3JpcHQgdmFsdWUgbWF5IGJlIGEgaGVhcCBvYmplY3Qgb3IgYm94ZWQgcHJp
bWl0aXZlLCByZXByZXNlbnRlZCBieSBhCisgICAgICAgIHBvaW50ZXIsIG9yIG1heSBiZSBhbiB1
bmJveGVkIGltbWVkaWF0ZSB2YWx1ZSwgc3VjaCBhcyBhbiBpbnRlZ2VyLiAgU2luY2UgYQorICAg
ICAgICB2YWx1ZSBtYXkgZHluYW1pY2FsbHkgbmVlZCB0byBjb250YWluIGVpdGhlciBhIHBvaW50
ZXIgdmFsdWUgb3IgYW4gaW1tZWRpYXRlLAorICAgICAgICB3ZSBlbmNvZGUgaW1tZWRpYXRlcyBh
cyBwb2ludGVyIHZhbHVlcyAoc2luY2UgYWxsIHZhbGlkIEpTQ2VsbCBwb2ludGVycyBhcmUKKyAg
ICAgICAgYWxsb2NhdGVkIGF0IGFsbGlnbmVkIGFkZGVzc2VzLCB1bmFsaWduZWQgYWRkcmVzc2Vz
IGFyZSBhdmFpbGFibGUgdG8gZW5jb2RlCisgICAgICAgIGltbWVkaWF0ZXMpLiAgQXMgc3VjaCBh
bGwgSmF2YVNjcmlwdCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIHVzaW5nIGEgSlNWYWx1ZSouCisK
KyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbmN1bWJlcmVkIGJ5IGEgbnVtYmVyIG9m
IGNvbnRzdHJhaW50cy4gIEl0IHRpZXMgdGhlCisgICAgICAgIEpTVmFsdWUgcmVwcmVzZW50YXRp
b24gdG8gdGhlIHNpemUgb2YgcG9pbnRlciBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoLCBmb3IKKyAg
ICAgICAgZXhhbXBsZSwgbWVhbnMgdGhhdCB3ZSBjdXJyZW50bHkgY2FuIHJlcHJlc2VudCBkaWZm
ZXJlbnQgcmFuZ2VzIG9mIGludGVnZXJzCisgICAgICAgIGFzIGltbWVkaWF0ZXMgb24geDg2IGFu
ZCB4ODYtNjQuICBJdCBhbHNvIHByZXZlbnRzIHVzIGZyb20gb3ZlcmxvYWRpbmcgdGhlCisgICAg
ICAgIHRvLWJvb2xlYW4gY29udmVyc2lvbiB1c2VkIHRvIHRlc3QgZm9yIG5vVmFsdWUoKSAtIGVm
ZmVjdGl2ZWx5IGZvcmNpbmcgdXMKKyAgICAgICAgdG8gcmVwcmVzZW50IG5vVmFsdWUoKSBhcyAw
LiAgVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBiZSBwcm9ibGVtYXRpYyB3ZXJlIHdlCisgICAgICAg
IHRvIHdpc2ggdG8gZW5jb2RlIGludGVnZXIgdmFsdWVzIGRpZmZlcmVudGx5IChlLmcuIHdlcmUg
d2UgdG8gdXNlIHRoZSB2OAorICAgICAgICBlbmNvZGluZywgd2hlcmUgcG9pbnRlcnMgYXJlIHRh
Z2dlZCB3aXRoIDEgYW5kIGludGVnZXJzIHdpdGggMCwgdGhlbiB0aGUKKyAgICAgICAgaW1tZWRp
YXRlIGludGVnZXIgMCB3b3VsZCBjb25mbGljdCB3aXRoIG5vVmFsdWUoKSkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXBsYWNlcyBhbGwgdXNhZ2Ugb2YgSlNWYWx1ZSogd2l0aCBhIG5ldyBjbGFz
cywgSlNWYWx1ZVB0ciwKKyAgICAgICAgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBwb2ludGVyLiAg
SlNWYWx1ZVB0ciBtYWludGFpbnMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzCisgICAgICAgIEpTVmFs
dWUqLCBvdmVybG9hZGluZyBvcGVyYXRvci0+IGFuZCBvcGVyYXRvciBib29sIHN1Y2ggdGhhdCBw
cmV2aW91cworICAgICAgICBvcGVyYXRpb25zIGluIHRoZSBjb2RlIG9uIHZhcmlhYmxlcyBvZiB0
eXBlIEpTVmFsdWUqIGFyZSBzdGlsbCBzdXBwb3J0ZWQuCisKKyAgICAgICAgSW4gb3JkZXIgdG8g
cHJvdmlkZSBhIFByb3RlY3RQdHI8PiB0eXBlIHdpdGggc3VwcG9ydCBmb3IgdGhlIG5ldyB2YWx1
ZQorICAgICAgICByZXByZXNlbnRhdGlvbiAod2l0aG91dCB1c2luZyB0aGUgaW50ZXJuYWwgSlNW
YWx1ZSB0eXBlIGRpcmVjdGx5KSwgYSBuZXcKKyAgICAgICAgUHJvdGVjdEpTVmFsdWVQdHIgdHlw
ZSBoYXMgYmVlbiBhZGRlZCwgZXF1aXZhbGVudCB0byB0aGUgcHJldmlvdXMgdHlwZQorICAgICAg
ICBQcm90ZWN0UHRyPEpTVmFsdWU+LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbGlrZWx5IHRo
ZSBmaXJzdCBpbiBhIHNlcXVlbmNlIG9mIHRocmVlIGNoYW5nZXMuICBXaXRoIHRoZQorICAgICAg
ICB2YWx1ZSBub3cgZW5jYXBzdWxhZWQgaXQgd2lsbCBsaWtlbHkgbWFrZSBzZW5zZSB0byBtaWdy
YXRlIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZyb20gSlNWYWx1ZSBpbnRvIEpTVmFsdWVQ
dHIsIHN1Y2ggdGhhdCB0aGUgaW50ZXJuYWwgcG9pbnRlciByZXByZXNlbnRhdGlvbgorICAgICAg
ICBuZWVkIG5vdCBiZSBleHBvc2VkLiAgVGhyb3VnaCBtaWdyYXRpbmcgdGhlIGZ1bmN0aW9uYWxp
dHkgdG8gdGhlIHdyYXBwZXIKKyAgICAgICAgY2xhc3MgdGhlIGV4aXN0aW5nIEpTVmFsdWUgc2hv
dWxkIGJlIHJlbmRlcmVkIHJlZHVuZGFudCwgYW5kIHRoZSBjbGFzcyBpcworICAgICAgICBsaWtl
bHkgdG8gYmUgcmVtb3ZlZCAodGhlIEpTVmFsdWVQdHIgbm93IHdyYXBwaW5nIGEgcG9pbnRlciB0
byBhIEpTQ2VsbCkuCisgICAgICAgIEF0IHRoaXMgc3RhZ2UgaXQgd2lsbCBsaWtlbHkgbWFrZSBz
ZW5zZSB0byByZW5hbWUgSlNWYWx1ZVB0ciB0byBKU1ZhbHVlLgorCisgICAgICAgICogQVBJL0FQ
SUNhc3QuaDoKKyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQ
SS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdCk6CisgICAgICAgICogQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6
OmFzQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6
Ojo6aGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjo6OmNhbGwpOgorICAgICAgICAoSlNDOjo6
OnN0YXRpY1ZhbHVlR2V0dGVyKToKKyAgICAgICAgKEpTQzo6OjpzdGF0aWNGdW5jdGlvbkdldHRl
cik6CisgICAgICAgIChKU0M6Ojo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0Nv
bnRleHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChK
U09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU09iamVjdFNldFByb3RvdHlwZSk6
CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJv
cGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAo
SlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNw
cDoKKyAgICAgICAgKEpTVmFsdWVHZXRUeXBlKToKKyAgICAgICAgKEpTVmFsdWVJc1VuZGVmaW5l
ZCk6CisgICAgICAgIChKU1ZhbHVlSXNOdWxsKToKKyAgICAgICAgKEpTVmFsdWVJc0Jvb2xlYW4p
OgorICAgICAgICAoSlNWYWx1ZUlzTnVtYmVyKToKKyAgICAgICAgKEpTVmFsdWVJc1N0cmluZyk6
CisgICAgICAgIChKU1ZhbHVlSXNPYmplY3QpOgorICAgICAgICAoSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyk6CisgICAgICAgIChKU1ZhbHVlSXNFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNTdHJp
Y3RFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNWYWx1ZVRvQm9vbGVhbik6CisgICAgICAgIChKU1ZhbHVlVG9OdW1iZXIpOgorICAg
ICAgICAoSlNWYWx1ZVRvU3RyaW5nQ29weSk6CisgICAgICAgIChKU1ZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAoSlNWYWx1ZVByb3RlY3QpOgorICAgICAgICAoSlNWYWx1ZVVucHJvdGVjdCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OnZhbHVlVG9Tb3VyY2VTdHJpbmcpOgorICAgICAgICAoSlND
Ojpjb25zdGFudE5hbWUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVuZXhwZWN0ZWRDb25zdGFudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUNhY2hl
OjpnZXQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWRKU1YpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFNjb3BlZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHV0U2NvcGVkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdF
cnJvcik6CisgICAgICAgIChKU0M6OmtleUZvckltbWVkaWF0ZVN3aXRjaCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpKU1ZhbHVlSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkpTVmFsdWVIYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpEZWJ1Z2dlckNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpl
eGNlcHRpb24pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6dGhpc1ZhbHVlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxs
RnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
ZXhjZXB0aW9uU2xvdCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFkRXhjZXB0aW9uKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmZh
c3RJc051bWJlcik6CisgICAgICAgIChKU0M6OmZhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
ZmFzdFRvVUludDMyKToKKyAgICAgICAgKEpTQzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNM
ZXNzRXEpOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6anNB
ZGQpOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6
OmpzSXNPYmplY3RUeXBlKToKKyAgICAgICAgKEpTQzo6anNJc0Z1bmN0aW9uVHlwZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnJlc29sdmVTa2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9i
YWwpOgorICAgICAgICAoSlNDOjppbmxpbmVSZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpyZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXNv
bHZlQmFzZUFuZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVC
YXNlQW5kRnVuYyk6CisgICAgICAgIChKU0M6OmlzTm90T2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2lu
ZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmNoZWNrVGltZW91dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjcmVh
dGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6OmNhY2hlUHJvdG90eXBlQ2hhaW4pOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6Y291bnRQcm90b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJl
dHJpZXZlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2Fs
bGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcik6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjp0cnlDVElDYWNoZVB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2NvbnZlcnRfdGhpcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYWRkKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfaW5jKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfc2Vjb25kKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfc2VsZl9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3RfZnVsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9hcnJheV9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
Y3RpX29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2Rl
bF9ieV9pZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9zdWIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl90cnVlKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfYmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2
ZV9za2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2Jh
bCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZGl2KToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y3RpX29wX2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hp
ZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9t
b2QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfcG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Vy
c2hpZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhvcik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYml0b3IpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpj
dGlfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5h
bWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2lzX3N0cmluZyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfb2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19mdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6Y3RpX29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfdG9fanNudW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2luKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfbmV3X2Vycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90
aHJvdyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpp
c0pTU3RyaW5nKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAo
SlNDOjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6OlJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXI6OmpzVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6
Z2V0SlNWYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9yc2hpZnQpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjp1bmxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1l
dGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50MzFCaXRJbW1lZGlhdGVJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVzaXplUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SklU
OjpwYXRjaEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6SklUOjpwYXRjaFB1dEJ5SWRSZXBs
YWNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
UHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25EZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToK
KyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAg
ICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAoZnVuY3Rpb25SZWFkbGluZSk6CisgICAgICAg
IChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChK
U0M6Ok51bGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcnJheU5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OlZvaWROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6CisgICAgICAgIChKU0M6OlJldHVy
bk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OnByb2Nlc3NDbGF1c2VMaXN0KToK
KyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zb2xlU3Rh
cnQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OmRpZEV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOgorICAgICAg
ICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9BcmdMaXN0LmNwcDoK
KyAgICAgICAgKEpTQzo6QXJnTGlzdDo6c2xvd0FwcGVuZCk6CisgICAgICAgICogcnVudGltZS9B
cmdMaXN0Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6QXJn
TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OmFzQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6cHV0UHJvcGVydHkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
Q29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVy
c2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29ydCk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZvckVhY2gpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OmFzQm9vbGVhbk9iamVjdCk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
Ojpwcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5o
OgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpDb21wbGV0aW9uKToKKyAgICAgICAgKEpTQzo6
Q29tcGxldGlvbjo6dmFsdWUpOgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpzZXRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkNvbXBsZXRpb246OmlzVmFsdWVDb21wbGV0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RGF0ZSk6CisgICAgICAg
IChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OmFzRGF0ZUluc3RhbmNlKToKKyAgICAgICAg
KiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToK
KyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENI
b3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jU2V0VGltZSk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToK
KyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1NldFVUQ01pbGxpc2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0
VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxs
WWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxF
cnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRF
eGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcik6CisgICAgICAgIChKU0M6
OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUZ1
bmN0aW9uRXJyb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNh
bGxGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
UHJvdG9GdW5jQXBwbHkpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0NhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OmFzR2V0dGVyU2V0dGVy
KToKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0ludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRp
b246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0FjdGl2YXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OnN0b3JhZ2VTaXplKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnB1dFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6Om1hcmspOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0M6OmFzQ2VsbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6Z2V0SlNOdW1i
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjphc0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnJlc2V0UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvOjpHbG9iYWxQcm9w
ZXJ0eUluZm8pOgorICAgICAgICAoSlNDOjphc0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVV
UklDb21wb25lbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1By
aW50KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAg
ICAgICogcnVudGltZS9KU0ltbWVkaWF0ZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRl
Ojp0b1RoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6dG9PYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTSW1tZWRpYXRlLmg6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpT
SW1tZWRpYXRlOjppc051bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1Bvc2l0
aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1VuZGVmaW5lZE9yTnVsbCk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omlz
RWl0aGVySW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQW55SW1tZWRp
YXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUpOgorICAg
ICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1l
ZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpy
aWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6
YWRkSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpzdWJJbW1l
ZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51
bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om1ha2VJbnQpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZUJvb2wp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVVuZGVmaW5lZCk6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjptYWtlTnVsbCk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpp
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp1aW50VmFsdWUpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6Ym9vbFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUpOgorICAgICAgICAo
SlNDOjpKU0ltbWVkaWF0ZTo6dW5kZWZpbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om51bGxJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKToKKyAgICAgICAgKEpT
Qzo6SlNJbW1lZGlhdGU6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRVSW50MzIpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZnJvbSk6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMik6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRVSW50MzIpOgorICAgICAgICAoSlNDOjpqc051bGwpOgorICAgICAgICAoSlNDOjpqc0Jvb2xl
YW4pOgorICAgICAgICAoSlNDOjpqc1VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwpOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojppc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvVUlu
dDMyKToKKyAgICAgICAgKEpTQzo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OnRvVUludDMyKToK
KyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU05v
dEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6Omdl
dFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OnB1dCk6Cisg
ICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTTm90QW5P
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU051bWJlckNlbGwu
Y3BwOgorICAgICAgICAoSlNDOjpKU051bWJlckNlbGw6OnRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNOdW1iZXJDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpK
U051bWJlckNlbGw6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXJDZWxsKToK
KyAgICAgICAgKEpTQzo6anNOYU4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTTnVtYmVyQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6YXNOdW1iZXJDZWxsKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXIpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0pTTnVtYmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om1hcmspOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6Y2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZh
dWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bG9va3VwU2V0dGVyKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RMb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb2NhdGlvbkZvck9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5saW5l
R2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEZvcldyaXRlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xv
dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvUHJpbWl0aXZlKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpT
UHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgICogcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6Om5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
U3RhdGljU2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVj
dDo6SlNTdGF0aWNTY29wZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc1N0cmluZyk6
CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
Om1ha2VJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjppbW1lZGlhdGVWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OkpTVmFsdWVQdHIpOgorICAgICAgICAoSlND
OjpKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6aGFz
VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZVB0cjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OmRlY29kZSk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpub1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yIT0pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2Jq
ZWN0OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjptYXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0pTV3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJP
YmplY3Q6OmludGVybmFsVmFsdWUpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNl
dEludGVybmFsVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAgICAgICAg
KEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3Vw
Lmg6CisgICAgICAgIChKU0M6Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNBVGFuMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHAp
OgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAg
IChKU0M6Om1hdGhQcm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUG93
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW4pOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU3FydCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNUYW4pOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpN
YXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6bnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZSk6CisgICAgICAgIChKU0M6Om51bWJlckNv
bnN0cnVjdG9yTmVnSW5maW5pdHkpOgorICAgICAgICAoSlNDOjpudW1iZXJDb25zdHJ1Y3RvclBv
c0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6bnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZSk6Cisg
ICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUpOgorICAgICAgICAoSlNDOjpj
YWxsTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1i
ZXJPYmplY3Q6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVyRnJv
bUltbWVkaWF0ZU51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om51bWJl
clByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAg
ICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChKU0M6Om51bWJlclBy
b3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1By
ZWNpc2lvbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgIChKU0M6OmNhbGxPYmplY3RDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNJc1By
b3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKToK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6b2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jTG9va3VwU2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jUHJvcGVy
dHlJc0VudW1lcmFibGUpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6ZXF1YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OnN0cmljdEVxdWFsKToKKyAgICAgICAgKEpTQzo6c3RyaWN0RXF1
YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OnRocm93T3V0T2ZNZW1vcnlFcnJvcik6CisgICAg
ICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmVxdWFsU2xvd0Nhc2VJ
bmxpbmUpOgorICAgICAgICAoSlNDOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6ZnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlTbG90OjpnZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6cHV0
VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldFZhbHVlU2xvdCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eVNsb3Q6OnNldEN1c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9t
SW5kZXgpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNsb3RCYXNlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTbG90OjpzZXRCYXNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90
OjopOgorICAgICAgICAqIHJ1bnRpbWUvUHJvdGVjdC5oOgorICAgICAgICAoSlNDOjpnY1Byb3Rl
Y3QpOgorICAgICAgICAoSlNDOjpnY1VucHJvdGVjdCk6CisgICAgICAgIChKU0M6OlByb3RlY3Rl
ZFB0cjo6UHJvdGVjdGVkUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkUHRyOjpvcGVyYXRv
ciBKU1ZhbHVlUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVj
dGVkSlNWYWx1ZVB0cik6CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6OmdldCk6
CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6Om9wZXJhdG9yIEpTVmFsdWVQdHIp
OgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKEpTQzo6OjpQcm90ZWN0ZWRQdHIpOgorICAgICAgICAoSlNDOjo6On5Qcm90ZWN0ZWRQdHIp
OgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNW
YWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRK
U1ZhbHVlUHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbik6CisgICAgICAgIChK
U0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMZWZ0Q29udGV4dCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cENvbnN0cnVjdG9yOjpnZXRSaWdodENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdFeHBD
b25zdHJ1Y3RvckRvbGxhcjEpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxh
cjIpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMpOgorICAgICAgICAo
SlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcjUpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYp
OgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcpOgorICAgICAgICAoSlND
OjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjgpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1
Y3RvckRvbGxhcjkpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAg
ICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVj
dG9yTGFzdFBhcmVuKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OnB1dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4
cENvbnN0cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11
bHRpbGluZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgIChKU0M6
OmNhbGxSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5oOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6YXNSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5
OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6cmVnRXhwT2JqZWN0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0SWdub3Jl
Q2FzZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdE11bHRpbGluZSk6CisgICAgICAgIChK
U0M6OnJlZ0V4cE9iamVjdFNvdXJjZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdExhc3RJ
bmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6
c2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojp0
ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAgICAgKEpTQzo6
Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
Ojphc1JlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUZXN0KToKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUp
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21DaGFy
Q29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzU3RyaW5nT2JqZWN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmg6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0lu
ZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQmlnKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JvbGQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdHJpa2Up
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250Y29sb3Ip
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xp
bmspOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZUNhY2hlZFBy
b3RvdHlwZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJv
dG90eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0b3Jl
ZFByb3RvdHlwZSk6CisKIDIwMDktMDEtMDQgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5j
b20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNDE3NzY+IE1lcmdlIG1fdHJhbnNpdGlv
bkNvdW50IGFuZCBtX29mZnNldCBpbiBTdHJ1Y3R1cmUuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDkgKzEwMCw5IEBAIF9fWk4zSlNDMTB0aHJv
d0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzkKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhl
Y1N0YXRlRU5TXzlFcnJvclR5cGVFUEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNT
dGF0ZUVOU185RXJyb3JUeXBlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzExSlNJbW1lZGlhdGUx
Mm5vbklubGluZU5hTkV2Ci1fX1pOM0pTQzExSlNJbW1lZGlhdGU4dG9PYmplY3RFUE5TXzdKU1Zh
bHVlRVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvU3RyaW5nRVBOU183
SlNWYWx1ZUUKLV9fWk4zSlNDMTFKU0ltbWVkaWF0ZTlwcm90b3R5cGVFUE5TXzdKU1ZhbHVlRVBO
U185RXhlY1N0YXRlRQorX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0RU5TXzEwSlNWYWx1
ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b1N0cmluZ0VOU18x
MEpTVmFsdWVQdHJFCitfX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRU5TXzEwSlNWYWx1
ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTFQcm9maWxlTm9kZTRzb3J0RVBGYlJLTjNX
VEY2UmVmUHRySVMwX0VFUzVfRQogX19aTjNKU0MxMWNoZWNrU3ludGF4RVBOU185RXhlY1N0YXRl
RVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMkRhdGVJbnN0YW5jZTRpbmZvRQpAQCAtMTIw
LDcgKzEyMCw3IEBAIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxNHRvVGhpc0pTU3RyaW5nRVAKIF9f
Wk4zSlNDMTJTdHJpbmdPYmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5T
XzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MThnZXRPd25Qcm9w
ZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlT
bG90RQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhl
Y1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzEyU3RyaW5nT2JqZWN0M3B1dEVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJv
cGVydHlTbG90RQorX19aTjNKU0MxMlN0cmluZ09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKIF9f
Wk4zSlNDMTJTdHJpbmdPYmplY3Q0aW5mb0UKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3RDMkVQTlNf
OUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU185U3RydWN0dXJlRUVFUktOU183VVN0cmlu
Z0UKIF9fWk4zSlNDMTJqc051bWJlckNlbGxFUE5TXzlFeGVjU3RhdGVFZApAQCAtMTMxLDkgKzEz
MSw5IEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEyZGVmaW5lR2V0dGVyRVAKIF9fWk4zSlND
MTRKU0dsb2JhbE9iamVjdDEyZGVmaW5lU2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNHNldFRpbWVv
dXRUaW1lRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE2c3RvcFRpbWVvdXRDaGVja0V2Ci1f
X1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRl
RVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqCitfX1pOM0pTQzE0SlNHbG9iYWxPYmpl
Y3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5T
XzEwSlNWYWx1ZVB0ckVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN3N0YXJ0VGltZW91dENo
ZWNrRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKK19fWk4zSlND
MTRKU0dsb2JhbE9iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNf
MTBKU1ZhbHVlUHRyRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTRKU0dsb2JhbE9i
amVjdDRpbml0RVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0bWFya0V2
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3REMkV2CkBAIC0xNTIsMTMgKzE1MiwxMyBAQCBfX1pO
M0pTQzE2UGFyc2VyUmVmQ291bnRlZDNyZWZFdgogX19aTjNKU0MxNlBhcnNlclJlZkNvdW50ZWQ1
ZGVyZWZFdgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dlbmVyYXRlZENv
ZGVFYgogX19aTjNKU0MxN1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTlNfN1VTdHJpbmczUmVwRQot
X19aTjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183SlNWYWx1ZUVT
Ml9QTlNfOEpTT2JqZWN0RVNCX1JLTlNfN0FyZ0xpc3RFRQotX19aTjNKU0MxN1Byb3RvdHlwZUZ1
bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUE5TXzdKU1ZhbHVl
RVMyX1BOU184SlNPYmplY3RFUzdfUktOU183QXJnTGlzdEVFCitfX1pOM0pTQzE3UHJvdG90eXBl
RnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU185U3RydWN0dXJl
RUVFaVJLTlNfMTBJZGVudGlmaWVyRVBGTlNfMTBKU1ZhbHVlUHRyRVMyX1BOU184SlNPYmplY3RF
U0FfUktOU183QXJnTGlzdEVFCitfX1pOM0pTQzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4
ZWNTdGF0ZUVpUktOU18xMElkZW50aWZpZXJFUEZOU18xMEpTVmFsdWVQdHJFUzJfUE5TXzhKU09i
amVjdEVTNl9SS05TXzdBcmdMaXN0RUUKIF9fWk4zSlNDMTdjb25zdHJ1Y3RGdW5jdGlvbkVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdF
aQogX19aTjNKU0MxOWNvbnN0cnVjdEVtcHR5QXJyYXlFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pT
QzE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM0pTQzIwY29uc3RydWN0RW1wdHlPYmplY3RF
UE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlF
eGVjU3RhdGVFUE5TXzhKU09iamVjdEVQTlNfN0pTVmFsdWVFUktOU183QXJnTGlzdEUKK19fWk4z
SlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0
RU5TXzEwSlNWYWx1ZVB0ckVSS05TXzdBcmdMaXN0RQogX19aTjNKU0MyM3NldFVwU3RhdGljRnVu
Y3Rpb25TbG90RVBOU185RXhlY1N0YXRlRVBLTlNfOUhhc2hFbnRyeUVQTlNfOEpTT2JqZWN0RVJL
TlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDNEhlYXAxMW9iamVj
dENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNGFsbG9jYXRlTnVtYmVyRW0KQEAgLTE3MCwxNCArMTcw
LDE0IEBAIF9fWk4zSlNDNEhlYXAyMHByb3RlY3RlZE9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhl
YXAyNHNldEdDUHJvdGVjdE5lZWRzTG9ja2luZ0V2CiBfX1pOM0pTQzRIZWFwMjVwcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzRXYKIF9fWk4zSlNDNEhlYXAyNnByb3RlY3RlZEdsb2JhbE9iamVjdENv
dW50RXYKLV9fWk4zSlNDNEhlYXA0aGVhcEVQTlNfN0pTVmFsdWVFCitfX1pOM0pTQzRIZWFwNGhl
YXBFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M0SGVhcDZpc0J1c3lFdgogX19aTjNKU0M0SGVh
cDdjb2xsZWN0RXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2Ci1fX1pOM0pTQzRIZWFwN3Byb3Rl
Y3RFUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzEwSlNWYWx1ZVB0ckUK
IF9fWk4zSlNDNEhlYXA4YWxsb2NhdGVFbQotX19aTjNKU0M0SGVhcDl1bnByb3RlY3RFUE5TXzdK
U1ZhbHVlRQotX19aTjNKU0M0Y2FsbEVQTlNfOUV4ZWNTdGF0ZUVQTlNfN0pTVmFsdWVFTlNfOENh
bGxUeXBlRVJLTlNfOENhbGxEYXRhRVMzX1JLTlNfN0FyZ0xpc3RFCitfX1pOM0pTQzRIZWFwOXVu
cHJvdGVjdEVOU18xMEpTVmFsdWVQdHJFCitfX1pOM0pTQzRjYWxsRVBOU185RXhlY1N0YXRlRU5T
XzEwSlNWYWx1ZVB0ckVOU184Q2FsbFR5cGVFUktOU184Q2FsbERhdGFFUzJfUktOU183QXJnTGlz
dEUKIF9fWk4zSlNDNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVMzXwogX19aTjNKU0M2SlNDZWxs
MTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNKU0M2SlNDZWxsMTFnZXRKU051bWJl
ckV2CkBAIC0xODcsOCArMTg3LDggQEAgX19aTjNKU0M2SlNDZWxsMTR0b1RoaXNKU1N0cmluZ0VQ
TlNfOUV4ZQogX19aTjNKU0M2SlNDZWxsMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVj
dERhdGFFCiBfX1pOM0pTQzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzZKU0NlbGwx
OGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQot
X19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNf
N0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQotX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNf
OUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU18xMEpTVmFsdWVQdHJFUk5TXzE1UHV0UHJvcGVydHlT
bG90RQorX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVqTlNfMTBKU1ZhbHVlUHRy
RQogX19aTjNKU0M2SlNDZWxsOWdldE9iamVjdEV2CiBfX1pOM0pTQzZKU0NlbGxud0VtUE5TXzlF
eGVjU3RhdGVFCiBfX1pOM0pTQzZKU0xvY2sxMkRyb3BBbGxMb2Nrc0MxRVBOU185RXhlY1N0YXRl
RQpAQCAtMTk5LDcgKzE5OSw3IEBAIF9fWk4zSlNDNkpTTG9jazZ1bmxvY2tFYgogX19aTjNKU0M2
SlNMb2NrOWxvY2tDb3VudEV2CiBfX1pOM0pTQzZKU0xvY2tDMUVQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDNlBhcnNlcjVwYXJzZUVQTlNfMTJKU0dsb2JhbERhdGFFUGlQTlNfN1VTdHJpbmdFCi1f
X1pOM0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRVBOU183SlNWYWx1ZUUKK19fWk4zSlNDN0FyZ0xp
c3QxMHNsb3dBcHBlbmRFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M3Q1N0cmluZ0QxRXYKIF9f
Wk4zSlNDN0NTdHJpbmdhU0VSS1MwXwogX19aTjNKU0M3SlNBcnJheTRpbmZvRQpAQCAtMjIxLDcg
KzIyMSw3IEBAIF9fWk4zSlNDOERlYnVnZ2VyNmF0dGFjaEVQTlNfMTRKU0dsb2JhbE8KIF9fWk4z
SlNDOERlYnVnZ2VyNmRldGFjaEVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk4zSlNDOERlYnVn
Z2VyQzJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2Ci1fX1pOM0pTQzhKU09iamVjdDExaGFzSW5z
dGFuY2VFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVlRVM0XworX19aTjNKU0M4SlNPYmplY3Qx
MWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRU5TXzEwSlNWYWx1ZVB0ckVTM18KIF9fWk4zSlND
OEpTT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJF
UFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVQUzBfCiBfX1pOM0pTQzhKU09iamVjdDEybG9va3VwR2V0dGVyRVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQpAQCAtMjMyLDE5ICsyMzIsMTkgQEAgX19aTjNK
U0M4SlNPYmplY3QxNXVud3JhcHBlZE9iamVjdEV2CiBfX1pOM0pTQzhKU09iamVjdDE2Z2V0UHJv
cGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUUKIF9fWk4z
SlNDOEpTT2JqZWN0MTdjcmVhdGVJbmhlcml0b3JJREV2CiBfX1pOM0pTQzhKU09iamVjdDE3cHV0
RGlyZWN0RnVuY3Rpb25FUE5TXzlFeGVjU3RhdGVFUE5TXzE2SW50ZXJuYWxGdW5jdGlvbkVqCi1f
X1pOM0pTQzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWoKLV9fWk4zSlNDOEpTT2JqZWN0MTdwdXRXaXRoQXR0
cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWoKK19fWk4zSlNDOEpTT2JqZWN0
MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU18x
MEpTVmFsdWVQdHJFagorX19aTjNKU0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185
RXhlY1N0YXRlRWpOU18xMEpTVmFsdWVQdHJFagogX19aTjNKU0M4SlNPYmplY3QxOGdldE93blBy
b3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0M4
SlNPYmplY3QxOGdldFByaW1pdGl2ZU51bWJlckVQTlNfOUV4ZWNTdGF0ZUVSZFJQTlNfN0pTVmFs
dWVFCi1fX1pOM0pTQzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVSTlNfMTJQcm9w
ZXJ0eVNsb3RFUFBOU183SlNWYWx1ZUUKK19fWk4zSlNDOEpTT2JqZWN0MThnZXRQcmltaXRpdmVO
dW1iZXJFUE5TXzlFeGVjU3RhdGVFUmRSTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNKU0M4SlNPYmpl
Y3QyMmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3RFUk5TXzEyUHJvcGVydHlTbG90RVBOU18xMEpTVmFs
dWVQdHJFCiBfX1pOM0pTQzhKU09iamVjdDIzYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VFbW0KLV9f
Wk4zSlNDOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNf
N0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQotX19aTjNKU0M4SlNPYmplY3QzcHV0RVBO
U185RXhlY1N0YXRlRWpQTlNfN0pTVmFsdWVFCitfX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1dFByb3Bl
cnR5U2xvdEUKK19fWk4zSlNDOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVqTlNfMTBKU1Zh
bHVlUHRyRQogX19aTjNKU0M4SlNPYmplY3Q0bWFya0V2CiBfX1pOM0pTQzhQcm9maWxlcjEzc3Rv
cFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M4UHJvZmls
ZXIxNHN0YXJ0UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pT
QzhQcm9maWxlcjhwcm9maWxlckV2Ci1fX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVS
TlNfMTBTY29wZUNoYWluRVJLTlNfMTBTb3VyY2VDb2RlRVBOU183SlNWYWx1ZUUKK19fWk4zSlND
OGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVJOU18xMFNjb3BlQ2hhaW5FUktOU18xMFNvdXJjZUNv
ZGVFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M4anNTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRh
RVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzlDb2RlQmxvY2tEMUV2CiBfX1pOM0pTQzlDb2RlQmxv
Y2tEMkV2CkBAIC0yNTIsMTMgKzI1MiwxMyBAQCBfX1pOM0pTQzlTdHJ1Y3R1cmUxN3N0b3BJZ25v
cmluZ0xlYWtzRXYKIF9fWk4zSlNDOVN0cnVjdHVyZTE4c3RhcnRJZ25vcmluZ0xlYWtzRXYKIF9f
Wk4zSlNDOVN0cnVjdHVyZTIxYWRkUHJvcGVydHlUcmFuc2l0aW9uRVBTMF9SS05TXzEwSWRlbnRp
ZmllckVqUm0KIF9fWk4zSlNDOVN0cnVjdHVyZTIybWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEV2Ci1f
X1pOM0pTQzlTdHJ1Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUFMwX1BOU183SlNW
YWx1ZUUKK19fWk4zSlNDOVN0cnVjdHVyZTI1Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbkVQUzBf
TlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M5U3RydWN0dXJlMjhhZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uRVJLTlNfMTBJZGVudGlmaWVyRWoKIF9fWk4zSlNDOVN0cnVjdHVyZTNnZXRFUktO
U18xMElkZW50aWZpZXJFUmoKIF9fWk4zSlNDOVN0cnVjdHVyZTQwYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUVQUzBfUktOU18xMElkZW50aWZpZXJFalJtCi1fX1pOM0pT
QzlTdHJ1Y3R1cmVDMUVQTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FCitfX1pOM0pTQzlTdHJ1
Y3R1cmVDMUVOU18xMEpTVmFsdWVQdHJFUktOU184VHlwZUluZm9FCiBfX1pOM0pTQzlTdHJ1Y3R1
cmVEMUV2Ci1fX1pOM0pTQzljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVlRU5T
XzEzQ29uc3RydWN0VHlwZUVSS05TXzEzQ29uc3RydWN0RGF0YUVSS05TXzdBcmdMaXN0RQorX19a
TjNKU0M5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRU5TXzEwSlNWYWx1ZVB0ckVOU18xM0NvbnN0
cnVjdFR5cGVFUktOU18xM0NvbnN0cnVjdERhdGFFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDZXFF
UktOU183VVN0cmluZ0VQS2MKIF9fWk4zSlNDZXFFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlND
Z3RFUktOU183VVN0cmluZ0VTMl8KQEAgLTMwNSw3ICszMDUsNyBAQCBfX1pOM1dURjhDb2xsYXRv
ckMxRVBLYwogX19aTjNXVEY4Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19a
TkszSlNDMTFJbnRlcnByZXRlcjE0cmV0cmlldmVDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUE5TXzE2
SW50ZXJuYWxGdW5jdGlvbkUKLV9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJpZXZlTGFzdENh
bGxlckVQTlNfOUV4ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJQTlNfN0pTVmFsdWVFCitfX1pO
SzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlS
bFJOU183VVN0cmluZ0VSTlNfMTBKU1ZhbHVlUHRyRQogX19aTkszSlNDMTJEYXRlSW5zdGFuY2U3
Z2V0VGltZUVSZFJpCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDEydG9UaGlzU3RyaW5nRVBOU185
RXhlY1N0YXRlRQogX19aTkszSlNDMTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3Rh
dGVFCkBAIC0zMTYsNyArMzE2LDcgQEAgX19aTkszSlNDMTZKU1ZhcmlhYmxlT2JqZWN0MjFnZXRQ
cm9wZXJ0eQogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEwdGhpc09iamVjdEV2CiBfX1pO
SzNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lMTJmdW5jdGlvbk5hbWVFdgogX19aTkszSlNDMTdEZWJ1
Z2dlckNhbGxGcmFtZTR0eXBlRXYKLV9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWU4ZXZhbHVh
dGVFUktOU183VVN0cmluZ0VSUE5TXzdKU1ZhbHVlRQorX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxG
cmFtZThldmFsdWF0ZUVSS05TXzdVU3RyaW5nRVJOU18xMEpTVmFsdWVQdHJFCiBfX1pOSzNKU0M0
SGVhcDEwc3RhdGlzdGljc0V2CiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNPYmplY3RFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3RhdGVF
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiBz
dGF0aWMgdm9pZCBjbGVhbnVwR2xvYmFsRGF0YShKU0dsb2JhbERhdGEqKTsKIHN0YXRpYyBib29s
IGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgVVN0cmluZyYgZmlsZU5hbWUsIFZl
Y3RvcjxjaGFyPiYgYnVmZmVyKTsKIAotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUHJpbnQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0
aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uTG9hZChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25RdWl0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgZnVuY3Rpb25HQyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVu
Y3Rpb25SZWFkbGluZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogc3RydWN0IE9wdGlvbnMgewog
ICAgIE9wdGlvbnMoKQpAQCAtMTc0LDcgKzE3NCw3IEBAIEdsb2JhbE9iamVjdDo6R2xvYmFsT2Jq
ZWN0KGNvbnN0IFZlY3RvcjwKICAgICBwdXREaXJlY3QoSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJhcmd1bWVudHMiKSwgYXJyYXkpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblByaW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSAhPSAwKQpAQCAtMTg4LDI3ICsx
ODgsMjcgQEAgSlNWYWx1ZSogZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xu
IiwgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmNfc3RyKCkp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvbkdDKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlUHRyIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBleGVjLT5o
ZWFwKCktPmNvbGxlY3QoKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBXZSBuZWVkIHRoaXMg
ZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBKUyB0ZXN0cyBidXQg
Zm9yIG5vdwogICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGRvIGFueSB2ZXJzaW9uLXNwZWNpZmlj
IGhhbmRsaW5nCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIGZ1bmN0
aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgU3RvcFdhdGNoIHN0
b3BXYXRjaDsKICAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyk7CkBAIC0yMjUsNyArMjI1LDcgQEAgSlNWYWx1ZSogZnVuY3Rpb25SdW4oRXhlY1N0
YXRlKiBleGVjLCBKUwogICAgIHJldHVybiBqc051bWJlcihnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25M
b2FkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgZmlsZU5h
bWUgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKICAgICBWZWN0b3I8Y2hhcj4g
c2NyaXB0OwpAQCAtMjM4LDcgKzIzOCw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqIGV4ZWMsIEoKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVu
Y3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBWZWN0b3I8Y2hh
ciwgMjU2PiBsaW5lOwogICAgIGludCBjOwpAQCAtMjUyLDcgKzI1Miw3IEBAIEpTVmFsdWUqIGZ1
bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
bGluZS5kYXRhKCkpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZnVuY3Rp
b25RdWl0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0JikKIHsKICAgICBjbGVhbnVwR2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAg
ICBleGl0KEVYSVRfU1VDQ0VTUyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHJldmlzaW9uIDM5
NTkzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTIgKzI2LDE1IEBACiAjaWZuZGVmIEFQSUNhc3RfaAogI2RlZmluZSBBUElDYXN0X2gKIAor
I2luY2x1ZGUgIkpTVmFsdWUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0
YXRlOwogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogICAgIGNsYXNzIEpTR2xvYmFsRGF0
YTsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEpT
VmFsdWVQdHI7CiB9CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dEdyb3Vw
KiBKU0NvbnRleHRHcm91cFJlZjsKQEAgLTUzLDkgKzU2LDkgQEAgaW5saW5lIEpTQzo6RXhlY1N0
YXRlKiB0b0pTKEpTR2xvYmFsQ29udAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6
RXhlY1N0YXRlKj4oYyk7CiB9CiAKLWlubGluZSBKU0M6OkpTVmFsdWUqIHRvSlMoSlNWYWx1ZVJl
ZiB2KQoraW5saW5lIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTVmFsdWVSZWYgdikKIHsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpTVmFsdWUqPihjb25zdF9jYXN0PE9wYXF1ZUpT
VmFsdWUqPih2KSk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZVB0cjo6ZGVjb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8SlNDOjpKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KGNvbnN0X2Nhc3Q8T3BhcXVl
SlNWYWx1ZSo+KHYpKSk7CiB9CiAKIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTKEpTT2JqZWN0
UmVmIG8pCkBAIC03MywxNCArNzYsMTQgQEAgaW5saW5lIEpTQzo6SlNHbG9iYWxEYXRhKiB0b0pT
KEpTQ29udGV4dAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6SlNHbG9iYWxEYXRh
Kj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKIH0KIAotaW5saW5lIEpT
VmFsdWVSZWYgdG9SZWYoSlNDOjpKU1ZhbHVlKiB2KQoraW5saW5lIEpTVmFsdWVSZWYgdG9SZWYo
SlNDOjpKU1ZhbHVlUHRyIHYpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1
ZVJlZj4odik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4oSlNDOjpK
U1ZhbHVlUHRyOjplbmNvZGUodikpOwogfQogCi1pbmxpbmUgSlNWYWx1ZVJlZiogdG9SZWYoSlND
OjpKU1ZhbHVlKiogdikKK2lubGluZSBKU1ZhbHVlUmVmKiB0b1JlZihKU0M6OkpTVmFsdWVQdHIq
IHYpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZio+KGNvbnN0X2Nh
c3Q8Y29uc3QgSlNDOjpKU1ZhbHVlKio+KHYpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlUmVmKj4odik7CiB9CiAKIGlubGluZSBKU09iamVjdFJlZiB0b1JlZihKU0M6OkpT
T2JqZWN0KiBvKQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAg
IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGJhY2s7IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZSogcHJvdG8pIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsgCiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNrRnVuY3Rpb24o
RQogewogfQogCi1KU1ZhbHVlKiBKU0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRv
UmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9SZWYoZnVuY3Rpb25P
YmplY3QpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2
aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIElu
dGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1bmN0aW9uIGJlaGF2
aW9yIC0tIHdlIHNob3VsZCAKICAgICAvLyByZWZhY3RvciB0aGUgY29kZSBzbyB0aGlzIG92ZXJy
aWRlIGlzbid0IG5lY2Vzc2FyeQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7IAogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEhh
c1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7IAogICAgIH0KQEAgLTQ4LDcgKzQ4LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgY2FsbChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBtX2NhbGxiYWNrOwogfTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIHB1YmxpYzoKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsYmFja09iamVjdERhdGEtPmpzQ2xhc3M7IH0KICAgICBib29sIGluaGVyaXRzKEpT
Q2xhc3NSZWYpIGNvbnN0OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsgCiAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UpKTsgCiAgICAgfQpAQCAt
NTksMTIgKzU5LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJv
cGVydHlTbG90Jik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCi0gICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBK
U1ZhbHVlUHRyIHByb3RvKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKQEAgLTc3LDE0ICs3NywxNCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSopOwogIAotICAgIHN0YXRpYyBKU0NhbGxi
YWNrT2JqZWN0KiBhc0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUqKTsKKyAgICBzdGF0aWMgSlNDYWxs
YmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1ZhbHVlUHRyKTsKICAKLSAgICBzdGF0aWMg
SlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGNh
bGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogICAgIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYpOwogICAgCi0g
ICAgc3RhdGljIEpTVmFsdWUqIHN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogc3Rh
dGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxsYmFja0dldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IEpTVmFsdWVQdHIgc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHN0YXRpY0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsYmFja0dldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBzdHJ1Y3Qg
SlNDYWxsYmFja09iamVjdERhdGEgewogICAgICAgICBKU0NhbGxiYWNrT2JqZWN0RGF0YSh2b2lk
KiBwcml2YXRlRGF0YSwgSlNDbGFzc1JlZiBqc0NsYXNzKQpJbmRleDogSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzOTU5MykKKysr
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZSA8Y2xh
c3MgQmFzZT4KLWlubGluZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+KiBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+Ojphc0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQoraW5saW5lIEpTQ2FsbGJh
Y2tPYmplY3Q8QmFzZT4qIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmFzQ2FsbGJhY2tPYmplY3Qo
SlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0
cygmaW5mbykpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oYXNP
YmplY3QodmFsdWUpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46OmdldE93blByb3BlCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotdm9pZCBKU0Nh
bGxiYWNrT2JqZWN0PEJhc2U+OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTQ29udGV4dFJlZiBjdHggPSB0b1JlZihleGVjKTsKICAgICBKU09i
amVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpcyk7CkBAIC0yNzcsNyArMjc3LDcgQEAgSlNPYmpl
Y3QqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNvbnN0cgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
QmFzZT4KLWJvb2wgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6aGFzSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSopCitib29sIEpTQ2FsbGJhY2tPYmplY3Q8
QmFzZT46Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNW
YWx1ZVB0cikKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwogICAg
IEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBD
YWxsVHlwZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpnZXRDYWxsCiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojpj
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0NvbnRleHRSZWYgZXhl
Y1JlZiA9IHRvUmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9SZWYo
ZnVuY3Rpb25PYmplY3QpOwpAQCAtNDI3LDcgKzQyNyw3IEBAIGJvb2wgSlNDYWxsYmFja09iamVj
dDxCYXNlPjo6aW5oZXJpdHMoSlMKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVl
KiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNWYWx1ZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBh
c0NhbGxiYWNrT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgCkBAIC00NDksNyArNDQ5LDcg
QEAgSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVgogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTQ2FsbGJhY2tPYmpl
Y3Q8QmFzZT46OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IGFzQ2FsbGJhY2tPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKTsKICAgICAKQEAgLTQ3NCw3ICs0NzQsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+OjpzdGF0aWNGCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWVQdHIgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0gYXNDYWxsYmFja09i
amVjdChzbG90LnNsb3RCYXNlKCkpOwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNHbG9iYWxDb250ZXh0
UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG5ldyAoZ2xvYmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD4oZ2xvYmFsT2JqZWN0Q2xhc3MpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IGdsb2JhbE9iamVj
dENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBnbG9i
YWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOwogICAgIGlmICghcHJvdG90eXBlKQogICAg
ICAgICBwcm90b3R5cGUgPSBqc051bGwoKTsKICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90
eXBlKHByb3RvdHlwZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0
cnVjdG9yKEpTQ28KICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgp
OwogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNQcm90b3R5cGUgPSBq
c0NsYXNzIAorICAgIEpTVmFsdWVQdHIganNQcm90b3R5cGUgPSBqc0NsYXNzIAogICAgICAgICA/
IGpzQ2xhc3MtPnByb3RvdHlwZShleGVjKQogICAgICAgICA6IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgCkBAIC0yMzMsNyArMjMzLDcgQEAgSlNW
YWx1ZVJlZiBKU09iamVjdEdldFByb3RvdHlwZShKU0NvbnRleAogdm9pZCBKU09iamVjdFNldFBy
b3RvdHlwZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVJlZiB2YWx1
ZSkKIHsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgSlNWYWx1
ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlMo
dmFsdWUpOwogCiAgICAganNPYmplY3QtPnNldFByb3RvdHlwZShqc1ZhbHVlLT5pc09iamVjdCgp
ID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBKU1ZhbHVlUmVm
IEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAKICAgICBKU09iamVjdCoganNPYmplY3Qg
PSB0b0pTKG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0ganNPYmplY3QtPmdldChl
eGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAg
IEpTVmFsdWVQdHIganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5p
ZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLT5leGNlcHRpb24oKSk7CkBAIC0yNzQsNyArMjc0LDcgQEAgdm9pZCBKU09i
amVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdAogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOwogICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5hbWUtPmlkZW50
aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOwotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pT
KHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKIAogICAgIGlm
IChhdHRyaWJ1dGVzICYmICFqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgbmFtZSkpCiAgICAg
ICAgIGpzT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBuYW1lLCBqc1ZhbHVlLCBhdHRy
aWJ1dGVzKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVy
dHlBdEluZGV4KEpTCiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAK
LSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eUluZGV4
KTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5
SW5kZXgpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMtPmV4Y2VwdGlvbigp
KTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KEpT
Q29udGV4CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKICAgICBKU09iamVjdCoganNPYmplY3Qg
PSB0b0pTKG9iamVjdCk7Ci0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAg
IEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIGpzT2JqZWN0LT5w
dXQoZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAzOTU5
MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNyArNDMsNyBAQAogCiBKU1R5cGUgSlNWYWx1ZUdldFR5cGUoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTQzo6SlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFs
dWUpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgaWYg
KGpzVmFsdWUtPmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBrSlNUeXBlVW5kZWZpbmVk
OwogICAgIGlmIChqc1ZhbHVlLT5pc051bGwoKSkKQEAgLTYyLDQzICs2Miw0MyBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOyAvLyBwbGFjZWQgaGVyZSB0byBhCiAKIGJvb2wgSlNWYWx1ZUlzVW5kZWZp
bmVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU1ZhbHVlKiBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7
CiAgICAgcmV0dXJuIGpzVmFsdWUtPmlzVW5kZWZpbmVkKCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlz
TnVsbChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSoganNW
YWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIHJldHVybiBqc1ZhbHVlLT5pc051bGwoKTsKIH0KIAogYm9vbCBKU1ZhbHVlSXNCb29s
ZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU1ZhbHVlKiBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7
CiAgICAgcmV0dXJuIGpzVmFsdWUtPmlzQm9vbGVhbigpOwogfQogCiBib29sIEpTVmFsdWVJc051
bWJlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSoganNW
YWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIHJldHVybiBqc1ZhbHVlLT5pc051bWJlcigpOwogfQogCiBib29sIEpTVmFsdWVJc1N0
cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSoganNW
YWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIHJldHVybiBqc1ZhbHVlLT5pc1N0cmluZygpOwogfQogCiBib29sIEpTVmFsdWVJc09i
amVjdChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNWYWx1ZSoganNW
YWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIHJldHVybiBqc1ZhbHVlLT5pc09iamVjdCgpOwogfQogCiBib29sIEpTVmFsdWVJc09i
amVjdE9mQ2xhc3MoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU0NsYXNzUmVmIGpz
Q2xhc3MpCiB7Ci0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFs
dWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIGlmIChKU09iamVjdCogbyA9
IGpzVmFsdWUtPmdldE9iamVjdCgpKSB7CiAgICAgICAgIGlmIChvLT5pbmhlcml0cygmSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmluZm8pKQpAQCAtMTE1LDggKzExNSw4IEBAIGJv
b2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlMKICAgICBleGVjLT5nbG9iYWxE
YXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0g
ICAgSlNWYWx1ZSoganNBID0gdG9KUyhhKTsKLSAgICBKU1ZhbHVlKiBqc0IgPSB0b0pTKGIpOwor
ICAgIEpTVmFsdWVQdHIganNBID0gdG9KUyhhKTsKKyAgICBKU1ZhbHVlUHRyIGpzQiA9IHRvSlMo
Yik7CiAKICAgICBib29sIHJlc3VsdCA9IGVxdWFsKGV4ZWMsIGpzQSwganNCKTsgLy8gZmFsc2Ug
aWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewpAQCAtMTI5LDggKzEyOSw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0
eCwgSlMKIAogYm9vbCBKU1ZhbHVlSXNTdHJpY3RFcXVhbChKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYgYSwgSlNWYWx1ZVJlZiBiKQogewotICAgIEpTVmFsdWUqIGpzQSA9IHRvSlMoYSk7Ci0gICAg
SlNWYWx1ZSoganNCID0gdG9KUyhiKTsKKyAgICBKU1ZhbHVlUHRyIGpzQSA9IHRvSlMoYSk7Cisg
ICAgSlNWYWx1ZVB0ciBqc0IgPSB0b0pTKGIpOwogICAgIAogICAgIGJvb2wgcmVzdWx0ID0gc3Ry
aWN0RXF1YWwoanNBLCBqc0IpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDIsNyArMTQyLDcg
QEAgYm9vbCBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoSlNDbwogICAgIGV4ZWMtPmds
b2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7
CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBq
c1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgSlNPYmplY3QqIGpzQ29uc3RydWN0b3IgPSB0b0pT
KGNvbnN0cnVjdG9yKTsKICAgICBpZiAoIWpzQ29uc3RydWN0b3ItPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTEsNyArMTkxLDcgQEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZyhKU0NvbnRleHRS
ZQogYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFs
dWUpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTVmFsdWUqIGpz
VmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVl
KTsKICAgICByZXR1cm4ganNWYWx1ZS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCkBAIC0yMDEsNyAr
MjAxLDcgQEAgZG91YmxlIEpTVmFsdWVUb051bWJlcihKU0NvbnRleHRSZWYgY3R4LAogICAgIGV4
ZWMtPmdsb2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2so
ZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1
ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0ganNWYWx1
ZS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0y
MTksNyArMjE5LDcgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShKU0NvbnRleAog
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2Nr
IGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAg
SlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgCiAgICAgUmVmUHRyPE9wYXF1
ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1ZhbHVlLT50b1N0
cmluZyhleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMjM3LDcg
KzIzNyw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVjdChKU0NvbnRleHRSZWYKICAgICBl
eGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBsb2Nr
KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFs
dWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIEpTT2JqZWN0UmVmIG9iamVj
dFJlZiA9IHRvUmVmKGpzVmFsdWUtPnRvT2JqZWN0KGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIEpTVmFsdWVQcm90ZWN0KEpT
Q29udGV4dFJlZiBjdHgsIEpTCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJU
aHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUqIGpzVmFsdWUg
PSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAg
ICBnY1Byb3RlY3QoanNWYWx1ZSk7CiB9CiAKQEAgLTI2NSw2ICsyNjUsNiBAQCB2b2lkIEpTVmFs
dWVVbnByb3RlY3QoSlNDb250ZXh0UmVmIGN0eCwgCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhl
YXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFs
dWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pT
KHZhbHVlKTsKICAgICBnY1VucHJvdGVjdChqc1ZhbHVlKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IHN0YXRpYyBVU3RyaW5nIGVzY2FwZVF1b3Rlcyhjb25zdCBVU3RyaW4KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgVVN0cmluZyB2YWx1ZVRvU291cmNlU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsKQorc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsKQogewogICAgIGlmICh2YWwtPmlzU3RyaW5n
KCkpIHsKICAgICAgICAgVVN0cmluZyByZXN1bHQoIlwiIik7CkBAIC03NCw3ICs3NCw3IEBAIHN0
YXRpYyBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikKICAgICByZXR1cm4gKFVTdHJpbmcoInIi
KSArIFVTdHJpbmc6OmZyb20ocikpLlVURjhTdHJpbmcoKTsKIH0KIAotc3RhdGljIENTdHJpbmcg
Y29uc3RhbnROYW1lKEV4ZWNTdGF0ZSogZXhlYywgaW50IGssIEpTVmFsdWUqIHZhbHVlKQorc3Rh
dGljIENTdHJpbmcgY29uc3RhbnROYW1lKEV4ZWNTdGF0ZSogZXhlYywgaW50IGssIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZVRvU291cmNlU3RyaW5nKGV4ZWMsIHZhbHVl
KSArICIoQGsiICsgVVN0cmluZzo6ZnJvbShrKSArICIpIikuVVRGOFN0cmluZygpOwogfQpAQCAt
NzAzLDcgKzcwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsOiB7CiAgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNjb3Bl
ID0gc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KCgrK2l0KS0+dS5qc0NlbGwpOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciBzY29wZSA9IEpTVmFsdWVQdHIoKCsraXQpLT51LmpzQ2VsbCk7CiAgICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlsl
NGRdIHJlc29sdmVfZ2xvYmFsXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuY19zdHIoKSwgdmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCBzY29wZSkuYXNjaWkoKSwg
aWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKICAgICAgICAgICAgIGl0
ICs9IDI7CkBAIC03MjUsMTMgKzcyNSwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3Rh
dGUqIGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3Zhcjog
ewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUqPigoKytpdCktPnUuanNDZWxsKTsK
KyAgICAgICAgICAgIEpTVmFsdWVQdHIgc2NvcGUgPSBKU1ZhbHVlUHRyKCgrK2l0KS0+dS5qc0Nl
bGwpOwogICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBwcmludGYoIlslNGRdIGdldF9nbG9iYWxfdmFyXHQgJXMsICVzLCAlZFxuIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgdmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCBz
Y29wZSkuYXNjaWkoKSwgaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAgSlNWYWx1ZSogc2Nv
cGUgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oKCsraXQpLT51LmpzQ2VsbCk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHNjb3BlID0gSlNWYWx1ZVB0cigoKytpdCktPnUuanNDZWxsKTsKICAgICAg
ICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHB1dF9nbG9i
YWxfdmFyXHQgJXMsICVkLCAlc1xuIiwgbG9jYXRpb24sIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhl
Yywgc2NvcGUpLmFzY2lpKCksIGluZGV4LCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCkpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3
ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmRleCA+PSBt
X251bVZhcnMgJiYgaW5kZXggPCBtX251bVZhcnMgKyBtX251bUNvbnN0YW50czsKICAgICAgICAg
fQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogZ2V0Q29uc3RhbnQoaW50IGluZGV4
KQorICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgZ2V0Q29uc3RhbnQoaW50IGluZGV4
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRl
eCAtIG1fbnVtVmFyc10uZ2V0SlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0zODgsOCArMzg4LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uKEZ1bmNEZWNs
Tm9kZSogbikgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVkIHNpemUgPSBt
X3JhcmVEYXRhLT5tX2Z1bmN0aW9ucy5zaXplKCk7IG1fcmFyZURhdGEtPm1fZnVuY3Rpb25zLmFw
cGVuZChuKTsgcmV0dXJuIHNpemU7IH0KICAgICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jdGlvbihp
bnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9mdW5jdGlvbnNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICAgICAgdW5zaWduZWQgYWRkVW5leHBl
Y3RlZENvbnN0YW50KEpTVmFsdWUqIHYpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1
bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLnNpemUoKTsg
bV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLmFwcGVuZCh2KTsgcmV0dXJuIHNpemU7
IH0KLSAgICAgICAgSlNWYWx1ZSogdW5leHBlY3RlZENvbnN0YW50KGludCBpbmRleCkgY29uc3Qg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3VuZXhwZWN0ZWRDb25z
dGFudHNbaW5kZXhdOyB9CisgICAgICAgIHVuc2lnbmVkIGFkZFVuZXhwZWN0ZWRDb25zdGFudChK
U1ZhbHVlUHRyIHYpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1bnNpZ25lZCBzaXpl
ID0gbV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLnNpemUoKTsgbV9yYXJlRGF0YS0+
bV91bmV4cGVjdGVkQ29uc3RhbnRzLmFwcGVuZCh2KTsgcmV0dXJuIHNpemU7IH0KKyAgICAgICAg
SlNWYWx1ZVB0ciB1bmV4cGVjdGVkQ29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVCht
X3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50c1tpbmRl
eF07IH0KIAogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fcmVnZXhw
cy5zaXplKCk7IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQocik7IHJldHVybiBzaXplOyB9
CiAgICAgICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NFUlQobV9yYXJl
RGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgpOyB9CkBAIC00
OTMsNyArNDkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIC8vIFJhcmUgQ29u
c3RhbnRzCiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNsTm9kZT4gPiBtX2Z1bmN0
aW9uczsKLSAgICAgICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4gbV91bmV4cGVjdGVkQ29uc3RhbnRz
OworICAgICAgICAgICAgVmVjdG9yPEpTVmFsdWVQdHI+IG1fdW5leHBlY3RlZENvbnN0YW50czsK
ICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8UmVnRXhwPiA+IG1fcmVnZXhwczsKIAogICAgICAg
ICAgICAgLy8gSnVtcCBUYWJsZXMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxD
b2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29k
ZUNhY2hlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZh
bENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgRXZhbENvZGVDYWNoZSB7CiAgICAgcHVibGljOgotICAgICAgICBQ
YXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBl
dmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSomIGV4Y2VwdGlv
blZhbHVlKQorICAgICAgICBQYXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
SlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZlB0
cjxFdmFsTm9kZT4gZXZhbE5vZGU7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjUsNyArMjY1LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFBybwogICAgICAgICBhbGxvY2F0ZUNvbnN0YW50cyhwcm9ncmFtTm9kZS0+bmVlZGVkQ29u
c3RhbnRzKCkpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3VmFycy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIGVtaXRMb2FkKG5ld1ZhcnNbaV0sIGpzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgZW1pdExvYWRKU1YobmV3VmFyc1tpXSwganNVbmRlZmluZWQoKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNr
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmNEZWNsID0gZnVu
Y3Rpb25TdGFja1tpXS5nZXQoKTsKQEAgLTcwNSwyMiArNzA1LDIyIEBAIHVuc2lnbmVkIEJ5dGVj
b2RlR2VuZXJhdG9yOjphZGRDb25zdGFudCgKICAgICByZXR1cm4gcmVzdWx0LmZpcnN0LT5zZWNv
bmQ7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChKU1Zh
bHVlKiB2KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KEpTVmFs
dWVQdHIgdikKIHsKLSAgICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSBtX2pzVmFsdWVNYXAuYWRkKHYsIG1fbmV4dENvbnN0YW50SW5kZXgpOworICAgIHBhaXI8SlNW
YWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1
ZVB0cjo6ZW5jb2RlKHYpLCBtX25leHRDb25zdGFudEluZGV4KTsKICAgICBpZiAocmVzdWx0LnNl
Y29uZCkgewogICAgICAgICBSZWdpc3RlcklEJiBjb25zdGFudCA9IG1fY2FsbGVlUmVnaXN0ZXJz
W21fbmV4dENvbnN0YW50SW5kZXhdOwogICAgICAgICAKICAgICAgICAgKyttX25leHRDb25zdGFu
dEluZGV4OwogCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudFJlZ2lzdGVyKHYpOwor
ICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRSZWdpc3RlcihKU1ZhbHVlUHRyKHYpKTsK
ICAgICAgICAgcmV0dXJuICZjb25zdGFudDsKICAgICB9CiAKICAgICByZXR1cm4gJnJlZ2lzdGVy
Rm9yKHJlc3VsdC5maXJzdC0+c2Vjb25kKTsKIH0KIAotdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmFkZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlKiB2KQordW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlUHRyIHYpCiB7CiAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5hZGRVbmV4cGVjdGVkQ29uc3RhbnQodik7CiB9CkBAIC04NTgsNyAr
ODU4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbAogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29s
IGIpCiB7Ci0gICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwganNCb29sZWFuKGIpKTsKKyAgICByZXR1
cm4gZW1pdExvYWRKU1YoZHN0LCBqc0Jvb2xlYW4oYikpOwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUgbnVtYmVyKQpA
QCAtODY2LDExICs4NjYsMTEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRM
b2FkKAogICAgIC8vIEZJWE1FOiBPdXIgaGFzaCB0YWJsZXMgd29uJ3QgaG9sZCBpbmZpbml0eSwg
c28gd2UgbWFrZSBhIG5ldyBKU051bWJlckNlbGwgZWFjaCB0aW1lLgogICAgIC8vIExhdGVyIHdl
IGNhbiBkbyB0aGUgZXh0cmEgd29yayB0byBoYW5kbGUgdGhhdCBsaWtlIHRoZSBvdGhlciBjYXNl
cy4KICAgICBpZiAobnVtYmVyID09IEhhc2hUcmFpdHM8ZG91YmxlPjo6ZW1wdHlWYWx1ZSgpIHx8
IEhhc2hUcmFpdHM8ZG91YmxlPjo6aXNEZWxldGVkVmFsdWUobnVtYmVyKSkKLSAgICAgICAgcmV0
dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIoZ2xvYmFsRGF0YSgpLCBudW1iZXIpKTsKLSAgICBK
U1ZhbHVlKiYgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIG5vVmFsdWUoKSku
Zmlyc3QtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGVtaXRMb2FkSlNWKGRzdCwganNOdW1iZXIo
Z2xvYmFsRGF0YSgpLCBudW1iZXIpKTsKKyAgICBKU1ZhbHVlUHRyJiB2YWx1ZUluTWFwID0gbV9u
dW1iZXJNYXAuYWRkKG51bWJlciwgbm9WYWx1ZSgpKS5maXJzdC0+c2Vjb25kOwogICAgIGlmICgh
dmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVyKGdsb2JhbERhdGEoKSwg
bnVtYmVyKTsKLSAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKKyAgICByZXR1
cm4gZW1pdExvYWRKU1YoZHN0LCB2YWx1ZUluTWFwKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcikKQEAgLTg3OCwxMCArODc4LDEwIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TG9hZCgKICAgICBKU1N0cmluZyomIHZhbHVlSW5NYXAgPSBtX3N0cmluZ01h
cC5hZGQoaWRlbnRpZmllci51c3RyaW5nKCkucmVwKCksIDApLmZpcnN0LT5zZWNvbmQ7CiAgICAg
aWYgKCF2YWx1ZUluTWFwKQogICAgICAgICB2YWx1ZUluTWFwID0ganNPd25lZFN0cmluZyhnbG9i
YWxEYXRhKCksIGlkZW50aWZpZXIudXN0cmluZygpKTsKLSAgICByZXR1cm4gZW1pdExvYWQoZHN0
LCB2YWx1ZUluTWFwKTsKKyAgICByZXR1cm4gZW1pdExvYWRKU1YoZHN0LCB2YWx1ZUluTWFwKTsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgSlNWYWx1ZSogdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9h
ZEpTVihSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWVQdHIgdikKIHsKICAgICBSZWdpc3RlcklEKiBj
b25zdGFudElEID0gYWRkQ29uc3RhbnQodik7CiAgICAgaWYgKGRzdCkKQEAgLTg4OSwxMiArODg5
LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKAogICAgIHJldHVy
biBjb25zdGFudElEOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExv
YWQoUmVnaXN0ZXJJRCogZHN0LCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNWYWx1ZSogdmFsdWUg
PSBjZWxsOwotICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHZhbHVlKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmV4cGVjdGVkTG9hZChSZWdpc3RlcklEKiBkc3Qs
IGJvb2wgYikKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3VuZXhwZWN0ZWRfbG9hZCk7CkBAIC0xMDE3
LDcgKzEwMTEsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAg
ICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRTY29wZWRWYXIoUmVnaXN0ZXJJRCogZHN0LCBzaXplX3QgZGVwdGgsIGludCBpbmRleCwgSlNW
YWx1ZSogZ2xvYmFsT2JqZWN0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRH
ZXRTY29wZWRWYXIoUmVnaXN0ZXJJRCogZHN0LCBzaXplX3QgZGVwdGgsIGludCBpbmRleCwgSlNW
YWx1ZVB0ciBnbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdCkgewogICAgICAg
ICBlbWl0T3Bjb2RlKG9wX2dldF9nbG9iYWxfdmFyKTsKQEAgLTEwMzQsNyArMTAyOCw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U2MKICAgICByZXR1cm4gZHN0Owog
fQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcihzaXpl
X3QgZGVwdGgsIGludCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFsdWUqIGdsb2JhbE9i
amVjdCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U2NvcGVkVmFyKHNp
emVfdCBkZXB0aCwgaW50IGluZGV4LCBSZWdpc3RlcklEKiB2YWx1ZSwgSlNWYWx1ZVB0ciBnbG9i
YWxPYmplY3QpCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdCkgewogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3B1dF9nbG9iYWxfdmFyKTsKQEAgLTE2MDIsNyArMTU5Niw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2gKICAgICByZXR1cm4gdGFyZ2V0UmVnaXN0ZXI7CiB9
CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RXJyb3IoUmVnaXN0ZXJJ
RCogZHN0LCBFcnJvclR5cGUgdHlwZSwgSlNWYWx1ZSogbWVzc2FnZSkKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RXJyb3IoUmVnaXN0ZXJJRCogZHN0LCBFcnJvclR5cGUg
dHlwZSwgSlNWYWx1ZVB0ciBtZXNzYWdlKQogewogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Vycm9y
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsOCArMjQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgYm9vbCk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVy
Jik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1
ZSopOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTQ2Vs
bCopOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZEpTVihSZWdpc3RlcklEKiBkc3QsIEpT
VmFsdWVQdHIpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5leHBlY3RlZExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuZXhwZWN0ZWRMb2Fk
KFJlZ2lzdGVySUQqIGRzdCwgZG91YmxlKTsKIApAQCAtMjcwLDggKzI2OSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW4oUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogYmFzZSkgeyByZXR1cm4gZW1pdEJpbmFyeU9w
KG9wX2luLCBkc3QsIHByb3BlcnR5LCBiYXNlLCBPcGVyYW5kVHlwZXMoKSk7IH0KIAogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFNjb3BlZFZhcihSZWdp
c3RlcklEKiBkc3QsIHNpemVfdCBza2lwLCBpbnQgaW5kZXgsIEpTVmFsdWUqIGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRTY29wZWRWYXIoc2l6ZV90IHNraXAsIGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFsdWUqIGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTY29wZWRWYXIoUmVnaXN0ZXJJRCogZHN0LCBzaXplX3Qg
c2tpcCwgaW50IGluZGV4LCBKU1ZhbHVlUHRyIGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRQdXRTY29wZWRWYXIoc2l6ZV90IHNraXAsIGludCBpbmRleCwgUmVnaXN0ZXJJ
RCogdmFsdWUsIEpTVmFsdWVQdHIgZ2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0UmVzb2x2ZUJhc2UoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJ
RCogYmFzZURzdCwgUmVnaXN0ZXJJRCogcHJvcERzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpOwpAQCAtMzA5LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDYXRjaChSZWdpc3RlcklEKiwgTGFiZWwqIHN0YXJ0LCBMYWJlbCogZW5kKTsK
ICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJRCogZXhjKSB7IGVtaXRVbmFyeU5vRHN0
T3Aob3BfdGhyb3csIGV4Yyk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Vycm9yKFJl
Z2lzdGVySUQqIGRzdCwgRXJyb3JUeXBlIHR5cGUsIEpTVmFsdWUqIG1lc3NhZ2UpOworICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TmV3RXJyb3IoUmVnaXN0ZXJJRCogZHN0LCBFcnJvclR5cGUgdHlw
ZSwgSlNWYWx1ZVB0ciBtZXNzYWdlKTsKICAgICAgICAgdm9pZCBlbWl0UHVzaE5ld1Njb3BlKFJl
Z2lzdGVySUQqIGRzdCwgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsK
IAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHVzaFNjb3BlKFJlZ2lzdGVySUQqIHNjb3BlKTsK
QEAgLTMzOSwxMiArMzM4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFBhc3NSZWZQ
dHI8TGFiZWw+IGVtaXRDb21wbGV4SnVtcFNjb3BlcyhMYWJlbCogdGFyZ2V0LCBDb250cm9sRmxv
d0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsKIAot
ICAgICAgICBzdHJ1Y3QgSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEpTVmFsdWUqPiB7
Ci0gICAgICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNWYWx1ZSom
IHNsb3QpIHsgc2xvdCA9IEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsgfQotICAgICAg
ICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoSlNWYWx1ZSogdmFsdWUpIHsgcmV0dXJu
IHZhbHVlID09IEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsgfQorICAgICAgICBzdHJ1
Y3QgSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
Kj4geworICAgICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpT
SW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSk7IH0KKyAgICAgICAgICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiB2YWx1ZSkgeyByZXR1cm4g
dmFsdWUgPT0gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUo
KSk7IH0KICAgICAgICAgfTsKIAotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SlNWYWx1ZSosIHVu
c2lnbmVkLCBQdHJIYXNoPEpTVmFsdWUqPiwgSlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7
CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciosIHVuc2ln
bmVkLCBQdHJIYXNoPEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKj4sIEpTVmFsdWVIYXNoVHJhaXRz
PiBKU1ZhbHVlTWFwOwogCiAgICAgICAgIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJh
aXRzIHsKICAgICAgICAgICAgIHR5cGVkZWYgaW50IFRyYWl0VHlwZTsKQEAgLTM1Niw3ICszNTUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKIAogICAgICAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFp
dHM8UmVmUHRyPFVTdHJpbmc6OlJlcD4gPiwgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cz4g
SWRlbnRpZmllck1hcDsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZSo+
IE51bWJlck1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZVB0cj4g
TnVtYmVyTWFwOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VVN0cmluZzo6UmVwKiwgSlNTdHJp
bmcqLCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKIAogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIEFyZ3VtZW50c05vZGUqLCB1bnNpZ25l
ZCBkaXZvdCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CkBAIC00
MDYsOCArNDA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGFkZENvbnN0
YW50KEZ1bmNEZWNsTm9kZSopOwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChGdW5jRXhw
ck5vZGUqKTsKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYp
OwotICAgICAgICBSZWdpc3RlcklEKiBhZGRDb25zdGFudChKU1ZhbHVlKik7Ci0gICAgICAgIHVu
c2lnbmVkIGFkZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlKik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGFkZENvbnN0YW50KEpTVmFsdWVQdHIpOworICAgICAgICB1bnNpZ25lZCBhZGRVbmV4cGVj
dGVkQ29uc3RhbnQoSlNWYWx1ZVB0cik7CiAgICAgICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdF
eHAqKTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIEpTT2JqZWN0KiBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc09i
amVjdCgKICAgICByZXR1cm4gYXNPYmplY3QobV9jYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIH0K
IAotSlNWYWx1ZSogRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNj
cmlwdCwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKK0pTVmFsdWVQdHIgRGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZVB0ciYgZXhjZXB0
aW9uKSBjb25zdAogewogICAgIGlmICghbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpKQogICAgICAg
ICByZXR1cm4gbm9WYWx1ZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIERlYnVnZ2Vy
Q2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiBleGNlcHRpb24pCisgICAg
ICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlUHRyIGV4
Y2VwdGlvbikKICAgICAgICAgICAgIDogbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAgICAg
ICAgLCBtX2V4Y2VwdGlvbihleGNlcHRpb24pCiAgICAgICAgIHsKQEAgLTU0LDEyICs1NCwxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVVN0cmluZyogZnVuY3Rpb25OYW1lKCkg
Y29uc3Q7CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgICAgICBKU09iamVjdCogdGhp
c09iamVjdCgpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBldmFsdWF0ZShjb25zdCBVU3RyaW5n
JiwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CisgICAgICAgIEpTVmFsdWVQdHIgZXZh
bHVhdGUoY29uc3QgVVN0cmluZyYsIEpTVmFsdWVQdHImIGV4Y2VwdGlvbikgY29uc3Q7CisgICAg
ICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb247IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7Ci0gICAgICAg
IEpTVmFsdWUqIG1fZXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlUHRyIG1fZXhjZXB0aW9uOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIENhbGxGcmFtZTo6dGhpc1ZhbHVlKCkKK0pT
VmFsdWVQdHIgQ2FsbEZyYW1lOjp0aGlzVmFsdWUoKQogewogICAgIHJldHVybiB0aGlzW2NvZGVC
bG9jaygpLT50aGlzUmVnaXN0ZXIoKV0uanNWYWx1ZSh0aGlzKTsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29k
ZUJsb2NrKCk7IH0KICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7
IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0uUmVnaXN0ZXI6OnNjb3BlQ2hh
aW4oKTsgfQogCi0gICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSgpOwogCiAgICAgICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhl
Y3V0aW9uIGJlZ2FuLgogICAgICAgICBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVj
dCgpOwpAQCAtNzMsMTEgKzczLDExIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gcG9p
bnRlciwgc28gdGhlc2UgYXJlIGluZWZmaWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQgc3Bhcmlu
Z2x5IGluIG5ldyBjb2RlLgogICAgICAgICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1hbnkgcGxh
Y2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0aW1lIHNv
b24uCiAKLSAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oSlNWYWx1ZSogZXhjZXB0aW9uKSB7IGds
b2JhbERhdGEoKS5leGNlcHRpb24gPSBleGNlcHRpb247IH0KKyAgICAgICAgdm9pZCBzZXRFeGNl
cHRpb24oSlNWYWx1ZVB0ciBleGNlcHRpb24pIHsgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGV4
Y2VwdGlvbjsgfQogICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBnbG9iYWxEYXRhKCku
ZXhjZXB0aW9uID0gbm9WYWx1ZSgpOyB9Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KLSAgICAgICAgSlNWYWx1ZSoq
IGV4Y2VwdGlvblNsb3QoKSB7IHJldHVybiAmZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQotICAg
ICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhZ2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbjsgfQorICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgSlNWYWx1ZVB0ciogZXhjZXB0aW9u
U2xvdCgpIHsgcmV0dXJuICZnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9CisgICAgICAgIGJvb2wg
aGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQog
CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gKmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzOyB9CiAgICAgICAgIGNvbnN0IEFy
Z0xpc3QmIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkuZW1wdHlMaXN0
OyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyBpbnQgZGVwdGgo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFMKIAogLy8gRklYTUU6IFRoaXMgb3BlcmF0aW9uIHNob3Vs
ZCBiZSBjYWxsZWQgImdldE51bWJlciIsIG5vdCAiaXNOdW1iZXIiIChhcyBpdCBpcyBpbiBKU1Zh
bHVlLmgpLgogLy8gRklYTUU6IFRoZXJlJ3Mgbm8gbmVlZCB0byBoYXZlIGEgInNsb3ciIHZlcnNp
b24gb2YgdGhpcy4gQWxsIHZlcnNpb25zIHNob3VsZCBiZSBmYXN0Lgotc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBmYXN0SXNOdW1iZXIoSlNWYWx1ZSogdmFsdWUsIGRvdWJsZSYgYXJnKQorc3Rh
dGljIEFMV0FZU19JTkxJTkUgYm9vbCBmYXN0SXNOdW1iZXIoSlNWYWx1ZVB0ciB2YWx1ZSwgZG91
YmxlJiBhcmcpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkpCiAgICAg
ICAgIGFyZyA9IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWx1ZSk7CkBAIC0xMTgs
OCArMTE4LDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBmYXN0SXNOdW1iZXIoSgogICAg
IHJldHVybiB0cnVlOwogfQogCi0vLyBGSVhNRTogV2h5IGRvZXNuJ3QgSlNWYWx1ZSo6OnRvSW50
MzIgaGF2ZSB0aGUgSGVhcDo6aXNOdW1iZXIgb3B0aW1pemF0aW9uPwotc3RhdGljIGJvb2wgZmFz
dFRvSW50MzIoSlNWYWx1ZSogdmFsdWUsIGludDMyX3QmIGFyZykKKy8vIEZJWE1FOiBXaHkgZG9l
c24ndCBKU1ZhbHVlUHRyOjp0b0ludDMyIGhhdmUgdGhlIEhlYXA6OmlzTnVtYmVyIG9wdGltaXph
dGlvbj8KK3N0YXRpYyBib29sIGZhc3RUb0ludDMyKEpTVmFsdWVQdHIgdmFsdWUsIGludDMyX3Qm
IGFyZykKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSkKICAgICAgICAg
YXJnID0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbHVlKTsKQEAgLTEzMCw3ICsx
MzAsNyBAQCBzdGF0aWMgYm9vbCBmYXN0VG9JbnQzMihKU1ZhbHVlKiB2YWx1ZSwgCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdFRvVUludDMyKEpT
VmFsdWUqIHZhbHVlLCB1aW50MzJfdCYgYXJnKQorc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBm
YXN0VG9VSW50MzIoSlNWYWx1ZVB0ciB2YWx1ZSwgdWludDMyX3QmIGFyZykKIHsKICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSkgewogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSwgYXJnKSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RUb1VJbnQzMihKCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3MoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgaWYgKEpT
SW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQogICAgICAgICByZXR1
cm4gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHYxKSA8IEpTSW1tZWRpYXRlOjpnZXRU
cnVuY2F0ZWRJbnQzMih2Mik7CkBAIC0xNTksOCArMTU5LDggQEAgc3RhdGljIGlubGluZSBib29s
IGpzTGVzcyhDYWxsRnJhbWUqIGNhbAogICAgIGlmIChpbnRlcnByZXRlci0+aXNKU1N0cmluZyh2
MSkgJiYgaW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcodjIpKQogICAgICAgICByZXR1cm4gYXNTdHJp
bmcodjEpLT52YWx1ZSgpIDwgYXNTdHJpbmcodjIpLT52YWx1ZSgpOwogCi0gICAgSlNWYWx1ZSog
cDE7Ci0gICAgSlNWYWx1ZSogcDI7CisgICAgSlNWYWx1ZVB0ciBwMTsKKyAgICBKU1ZhbHVlUHRy
IHAyOwogICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoY2Fs
bEZyYW1lLCBuMSwgcDEpOwogICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRp
dmVOdW1iZXIoY2FsbEZyYW1lLCBuMiwgcDIpOwogCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGpzTGVzcyhDYWxsRnJhbWUqIGNhbAogICAgIHJldHVybiBhc1N0cmluZyhw
MSktPnZhbHVlKCkgPCBhc1N0cmluZyhwMiktPnZhbHVlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUq
IHYyKQorc3RhdGljIGlubGluZSBib29sIGpzTGVzc0VxKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewogICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJl
Qm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRl
OjpnZXRUcnVuY2F0ZWRJbnQzMih2MSkgPD0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMy
KHYyKTsKQEAgLTE4NCw4ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzRXEoQ2Fs
bEZyYW1lKiBjCiAgICAgaWYgKGludGVycHJldGVyLT5pc0pTU3RyaW5nKHYxKSAmJiBpbnRlcnBy
ZXRlci0+aXNKU1N0cmluZyh2MikpCiAgICAgICAgIHJldHVybiAhKGFzU3RyaW5nKHYyKS0+dmFs
dWUoKSA8IGFzU3RyaW5nKHYxKS0+dmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlKiBwMTsKLSAgICBK
U1ZhbHVlKiBwMjsKKyAgICBKU1ZhbHVlUHRyIHAxOworICAgIEpTVmFsdWVQdHIgcDI7CiAgICAg
Ym9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1pdGl2ZU51bWJlcihjYWxsRnJhbWUsIG4x
LCBwMSk7CiAgICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2ZU51bWJlcihj
YWxsRnJhbWUsIG4yLCBwMik7CiAKQEAgLTE5NSwxMSArMTk1LDExIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGMKICAgICByZXR1cm4gIShhc1N0cmluZyhwMiktPnZh
bHVlKCkgPCBhc1N0cmluZyhwMSktPnZhbHVlKCkpOwogfQogCi1zdGF0aWMgTkVWRVJfSU5MSU5F
IEpTVmFsdWUqIGpzQWRkU2xvd0Nhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIHYx
LCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciBqc0FkZFNsb3dD
YXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQog
ewogICAgIC8vIGV4Y2VwdGlvbiBmb3IgdGhlIERhdGUgZXhjZXB0aW9uIGluIGRlZmF1bHRWYWx1
ZSgpCi0gICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBK
U1ZhbHVlKiBwMiA9IHYyLT50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIg
cDEgPSB2MS0+dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIHAyID0gdjIt
PnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CiAKICAgICBpZiAocDEtPmlzU3RyaW5nKCkgfHwgcDIt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSBjb25j
YXRlbmF0ZShwMS0+dG9TdHJpbmcoY2FsbEZyYW1lKS5yZXAoKSwgcDItPnRvU3RyaW5nKGNhbGxG
cmFtZSkucmVwKCkpOwpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNW
YWx1ZSoganNBZGRTbG93Q2EKIC8vICAgIDEzOTYyICAgQWRkIGNhc2U6IDUgMwogLy8gICAgNDAw
MCAgICBBZGQgY2FzZTogMyA1CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzQWRk
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzQWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJs
ZSByaWdodCA9IDAuMDsKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBqc0FkZChDYWxsCiAgICAgcmV0dXJuIGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2
MSwgdjIpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIHYpCitzdGF0aWMgSlNWYWx1ZVB0ciBqc1R5cGVTdHJp
bmdGb3JWYWx1ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciB2KQogewogICAgIGlm
ICh2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNh
bGxGcmFtZSwgInVuZGVmaW5lZCIpOwpAQCAtMjczLDcgKzI3Myw3IEBAIHN0YXRpYyBKU1ZhbHVl
KiBqc1R5cGVTdHJpbmdGb3JWYWx1ZShDYWwKICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGNhbGxGcmFtZSwgIm9iamVjdCIpOwogfQogCi1zdGF0aWMgYm9vbCBqc0lzT2JqZWN0VHlwZShK
U1ZhbHVlKiB2KQorc3RhdGljIGJvb2wganNJc09iamVjdFR5cGUoSlNWYWx1ZVB0ciB2KQogewog
ICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikpCiAgICAgICAgIHJldHVybiB2LT5p
c051bGwoKTsKQEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgYm9vbCBqc0lzT2JqZWN0VHlwZShK
U1ZhbHVlKiB2KQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBqc0lzRnVuY3Rp
b25UeXBlKEpTVmFsdWUqIHYpCitzdGF0aWMgYm9vbCBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWVQ
dHIgdikKIHsKICAgICBpZiAodi0+aXNPYmplY3QoKSkgewogICAgICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgYm9vbCBqc0lzRnVuY3Rpb25UeXBlKEpT
VmFsdWUqIHYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6cmVzb2x2ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywg
SlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6
OnJlc29sdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQ
dHImIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUub3BlcmFu
ZDsKICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMiktPnUub3BlcmFuZDsKQEAgLTMxNywxMSAr
MzE3LDExIEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlKEMKICAgICAg
ICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qobyk7CiAg
ICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBp
ZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2Fs
bEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgr
K2l0ZXIgIT0gZW5kKTsKQEAgLTMyOSw3ICszMjksNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6cmVzb2x2ZShDCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ORVZFUl9JTkxJTkUg
Ym9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3Ry
dWN0aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29s
IEludGVycHJldGVyOjpyZXNvbHZlU2tpcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rp
b24qIHZQQywgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCkBAIC0zNTAsMTEgKzM1MCwxMSBA
QCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZVNrCiAgICAgICAgIEpTT2Jq
ZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBp
ZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1
bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoKytpdGVyICE9
IGVuZCk7CkBAIC0zNjIsNyArMzYyLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6
OnJlc29sdmVTawogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50
ZXJwcmV0ZXI6OnJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9u
KiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIEludGVy
cHJldGVyOjpyZXNvbHZlR2xvYmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiog
dlBDLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgZHN0ID0gKHZQQyAr
IDEpLT51Lm9wZXJhbmQ7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oKHZQQyArIDIpLT51LmpzQ2VsbCk7CkBAIC0zNzIsNyAr
MzcyLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbAogICAgIGlu
dCBvZmZzZXQgPSAodlBDICsgNSktPnUub3BlcmFuZDsKIAogICAgIGlmIChzdHJ1Y3R1cmUgPT0g
Z2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSkgewotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGds
b2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gSlNWYWx1ZVB0cihnbG9iYWxPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zODAsMjEgKzM4MCwyMSBAQCBORVZF
Ul9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsCiAgICAgSWRlbnRpZmllciYgaWRl
bnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgIFByb3BlcnR5U2xvdCBz
bG90KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNs
b3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0
ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkp
IHsKICAgICAgICAgICAgIGlmICh2UENbNF0udS5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAg
dlBDWzRdLnUuc3RydWN0dXJlLT5kZXJlZigpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+cmVmKCk7CiAgICAgICAgICAgICB2UENbNF0gPSBnbG9iYWxPYmplY3QtPnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgdlBDWzVdID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAg
ICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogCiAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uOwogICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OworICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC00MDIsNyArNDAyLDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0
ZXI6OnJlc29sdmVHbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogaW5saW5lUmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElkZW50
aWZpZXImIHByb3BlcnR5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWVQdHIgaW5saW5lUmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIElkZW50aWZpZXImIHByb3BlcnR5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKIHsK
ICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CiAgICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIG5leHQgPSBpdGVyOwpAQCAtNDI5LDEwICs0MjksMTAgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogewogICAgIGludCBkc3QgPSAo
dlBDICsgMSktPnUub3BlcmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSAodlBDICsgMiktPnUub3Bl
cmFuZDsKLSAgICBjYWxsRnJhbWVbZHN0XSA9IGlubGluZVJlc29sdmVCYXNlKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSksIGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpKTsKKyAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoaW5saW5lUmVz
b2x2ZUJhc2UoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBy
b3BlcnR5KSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpKTsKIH0KIAotTkVWRVJfSU5MSU5FIGJv
b2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lO
TElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmFzZUFuZFByb3BlcnR5KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSkK
IHsKICAgICBpbnQgYmFzZURzdCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIGludCBwcm9w
RHN0ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7CkBAIC00NTMsMTIgKzQ1MywxMiBAQCBORVZFUl9J
TkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhCiAgICAgICAgIGJhc2UgPSAqaXRlcjsK
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CiAgICAgICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAg
ICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbjsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbcHJvcERzdF0gPSByZXN1bHQ7Ci0g
ICAgICAgICAgICBjYWxsRnJhbWVbYmFzZURzdF0gPSBiYXNlOworICAgICAgICAgICAgY2FsbEZy
YW1lW3Byb3BEc3RdID0gSlNWYWx1ZVB0cihyZXN1bHQpOworICAgICAgICAgICAgY2FsbEZyYW1l
W2Jhc2VEc3RdID0gSlNWYWx1ZVB0cihiYXNlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgICsraXRlcjsKQEAgLTQ2OCw3ICs0NjgsNyBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1O
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRGdW5jKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUp
CitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRGdW5jKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25W
YWx1ZSkKIHsKICAgICBpbnQgYmFzZURzdCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIGlu
dCBmdW5jRHN0ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7CkBAIC00OTcsMTMgKzQ5NywxMyBAQCBO
RVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhCiAgICAgICAgICAgICAvLyB0
aGF0IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlzIGdldCBhIHZhbGlkIG9iamVjdCBmb3IgdGhp
cy4KICAgICAgICAgICAgIC8vIFdlIGFsc28gaGFuZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9uIGZv
ciB0aGUgZ2xvYmFsIG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSBiYXNlLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAg
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVu
dCk7CiAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmV4Y2VwdGlvbjsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGNhbGxGcmFtZVtiYXNlRHN0XSA9IHRo
aXNPYmo7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZnVuY0RzdF0gPSByZXN1bHQ7CisgICAgICAg
ICAgICBjYWxsRnJhbWVbYmFzZURzdF0gPSBKU1ZhbHVlUHRyKHRoaXNPYmopOworICAgICAgICAg
ICAgY2FsbEZyYW1lW2Z1bmNEc3RdID0gSlNWYWx1ZVB0cihyZXN1bHQpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyOwpAQCAtNTUwLDcgKzU1MCw3
IEBAIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBJbnRlcnByZXRlcjo6c2wKICAgICByZXR1cm4g
Q2FsbEZyYW1lOjpjcmVhdGUocik7CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgYm9vbCBpc05v
dE9iamVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgYm9vbCBmb3JJbnN0YW5jZU9mLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogdmFsdWUsIEpT
VmFsdWUqJiBleGNlcHRpb25EYXRhKQorc3RhdGljIE5FVkVSX0lOTElORSBib29sIGlzTm90T2Jq
ZWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBib29sIGZvckluc3RhbmNlT2YsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyIHZhbHVlLCBKU1Zh
bHVlUHRyJiBleGNlcHRpb25EYXRhKQogewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU4LDEyICs1NTgsMTIgQEAgc3RhdGljIE5FVkVSX0lO
TElORSBib29sIGlzTm90T2JqZWN0KENhbAogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9J
TkxJTkUgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIGFyZ3YsIGludCBhcmdjLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElO
RSBKU1ZhbHVlUHRyIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYywgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpZiAo
YXJnYyA8IDIpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNWYWx1ZSog
cHJvZ3JhbSA9IGFyZ3ZbMV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIgcHJv
Z3JhbSA9IGFyZ3ZbMV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgaWYgKCFwcm9ncmFtLT5p
c1N0cmluZygpKQogICAgICAgICByZXR1cm4gcHJvZ3JhbTsKQEAgLTU3NCw3ICs1NzQsNyBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmNhbGxFCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFJlZlB0cjxFdmFsTm9kZT4g
ZXZhbE5vZGUgPSBjb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXQoY2FsbEZyYW1lLCBwcm9n
cmFtU291cmNlLCBzY29wZUNoYWluLCBleGNlcHRpb25WYWx1ZSk7CiAKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKICAgICBpZiAoZXZhbE5vZGUpCiAgICAgICAgIHJlc3VsdCA9IGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmludGVycHJldGVyLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCktPnRvVGhpc09iamVjdChjYWxsRnJhbWUpLCBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpIC0gcmVnaXN0ZXJGaWxlLT5zdGFydCgpICsgcmVnaXN0ZXJPZmZzZXQs
IHNjb3BlQ2hhaW4sICZleGNlcHRpb25WYWx1ZSk7CiAKQEAgLTcyOCw3ICs3MjgsNyBAQCBib29s
IEludGVycHJldGVyOjppc09wY29kZShPcGNvZGUgb3Bjb2RlCiAjZW5kaWYKIH0KIAotTkVWRVJf
SU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiBjYWxs
RnJhbWUsIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQs
IENvZGVCbG9jayomIGNvZGVCbG9jaykKK05FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1
bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlUHRyIGV4Y2VwdGlv
blZhbHVlLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomIGNvZGVCbG9jaykK
IHsKICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwpAQCAtNzcxLDcg
Kzc3MSw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6
dGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlKiYgZXhjZXB0aW9u
VmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBib29sIGV4cGxpY2l0VGhyb3cpCitORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbihDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgYm9vbCBleHBsaWNpdFRocm93KQogewogICAgIC8vIFNldCB1cCB0aGUgZXhj
ZXB0aW9uIG9iamVjdAogCkBAIC04NTUsNyArODU1LDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJ
bmZvKiBJbnRlcnByZXRlcjo6dAogICAgIHJldHVybiBoYW5kbGVyOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNPYmplY3QqIHRoaXNPYmos
IEpTVmFsdWUqKiBleGNlcHRpb24pCitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpleGVjdXRlKFBy
b2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9u
KQogewogICAgIEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKIApA
QCAtODgwLDcgKzg4MCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1O
b2QKICAgICBnbG9iYWxPYmplY3QtPmNvcHlHbG9iYWxzVG8obV9yZWdpc3RlckZpbGUpOwogCiAg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBj
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSk7Ci0gICAgbmV3Q2FsbEZyYW1lW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCldID0gdGhp
c09iajsKKyAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSBKU1Zh
bHVlUHRyKHRoaXNPYmopOwogICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNj
b3BlQ2hhaW4sIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29k
ZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCkBAIC04OTAsNyArODkwLDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZAogICAgIGlmICgqcHJvZmlsZXIpCiAg
ICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIHByb2dyYW1Ob2Rl
LT5zb3VyY2VVUkwoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpKTsKIAotICAgIEpTVmFsdWUqIHJl
c3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICB7CiAgICAgICAgIFNhbXBsaW5nVG9v
bDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlcik7CiAKQEAgLTkxNiw3ICs5MTYsNyBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9k
ZSogZnVuY3Rpb25Cb2R5Tm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCitKU1ZhbHVlUHRyIEludGVy
cHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVl
UHRyKiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5l
eGNlcHRpb24pOwogCkBAIC05MzcsNyArOTM3LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUoRnVuY3Rpb25CbwogCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJh
bWU6OmNyZWF0ZShvbGRFbmQpOwogICAgIHNpemVfdCBkc3QgPSAwOwotICAgIG5ld0NhbGxGcmFt
ZVswXSA9IHRoaXNPYmo7CisgICAgbmV3Q2FsbEZyYW1lWzBdID0gSlNWYWx1ZVB0cih0aGlzT2Jq
KTsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwogICAgIGZv
ciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgbmV3Q2FsbEZyYW1lWysrZHN0XSA9ICppdDsKQEAgLTk1Niw3ICs5NTYs
NyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShGdW5jdGlvbkJvCiAgICAgaWYgKCpw
cm9maWxlcikKICAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwg
ZnVuY3Rpb24pOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0
OwogICAgIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9z
YW1wbGVyKTsKIApAQCAtOTc4LDEyICs5NzgsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUoRnVuY3Rpb25CbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoq
IGV4Y2VwdGlvbikKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2
YWxOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pCiB7CiAgICAgcmV0dXJu
IGV4ZWN1dGUoZXZhbE5vZGUsIGNhbGxGcmFtZSwgdGhpc09iaiwgbV9yZWdpc3RlckZpbGUuc2l6
ZSgpICsgZXZhbE5vZGUtPmJ5dGVjb2RlKHNjb3BlQ2hhaW4pLm1fbnVtUGFyYW1ldGVycyArIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uKTsK
IH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIGludCBnbG9iYWxSZWdpc3Rl
ck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24p
CitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgZ2xvYmFsUmVnaXN0ZXJP
ZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24p
CiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogCkBA
IC0xMDM4LDcgKzEwMzgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9k
ZSogCiAgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShtX3Jl
Z2lzdGVyRmlsZS5zdGFydCgpICsgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgLy8gYSAw
IGNvZGVCbG9jayBpbmRpY2F0ZXMgYSBidWlsdC1pbiBjYWxsZXIKLSAgICBuZXdDYWxsRnJhbWVb
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSB0aGlzT2JqOworICAgIG5ld0NhbGxGcmFtZVtj
b2RlQmxvY2stPnRoaXNSZWdpc3RlcigpXSA9IEpTVmFsdWVQdHIodGhpc09iaik7CiAgICAgbmV3
Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRI
b3N0Q2FsbEZyYW1lRmxhZygpLCAwLCAwLCAwKTsKIAogICAgIGlmIChjb2RlQmxvY2stPm5lZWRz
RnVsbFNjb3BlQ2hhaW4oKSkKQEAgLTEwNDgsNyArMTA0OCw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpleGVjdXRlKEV2YWxOb2RlKiAKICAgICBpZiAoKnByb2ZpbGVyKQogICAgICAgICAoKnBy
b2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBldmFsTm9kZS0+c291cmNlVVJMKCks
IGV2YWxOb2RlLT5saW5lTm8oKSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQ7CiAgICAgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2Fs
bFJlY29yZChtX3NhbXBsZXIpOwogCkBAIC0xMTQ5LDE0ICsxMTQ5LDE0IEBAIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgZ2V0Q1BVVGltZSgpCiAKIC8vIFdlIGhhdmUgdG8gcmV0dXJuIGEgSlNWYWx1
ZSBoZXJlLCBnY2Mgc2VlbXMgdG8gcHJvZHVjZSB3b3JzZSBjb2RlIGlmIAogLy8gd2UgYXR0ZW1w
dCB0byByZXR1cm4gYSBib29sCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEludGVycHJldGVyOjpj
aGVja1RpbWVvdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK0FMV0FZU19JTkxJTkUg
Ym9vbCBJbnRlcnByZXRlcjo6Y2hlY2tUaW1lb3V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgdW5zaWduZWQgY3VycmVudFRpbWUgPSBnZXRDUFVUaW1lKCk7CiAgICAgCiAg
ICAgaWYgKCFtX3RpbWVBdExhc3RDaGVja1RpbWVvdXQpIHsKICAgICAgICAgLy8gU3VzcGljaW91
cyBhbW91bnQgb2YgbG9vcGluZyBpbiBhIHNjcmlwdCAtLSBzdGFydCB0aW1pbmcgaXQKICAgICAg
ICAgbV90aW1lQXRMYXN0Q2hlY2tUaW1lb3V0ID0gY3VycmVudFRpbWU7Ci0gICAgICAgIHJldHVy
biBub1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgdW5z
aWduZWQgdGltZURpZmYgPSBjdXJyZW50VGltZSAtIG1fdGltZUF0TGFzdENoZWNrVGltZW91dDsK
QEAgLTExNzcsMTIgKzExNzcsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y2hlYwogICAgIAogICAgIGlmIChtX3RpbWVvdXRUaW1lICYmIG1fdGltZUV4ZWN1dGluZyA+
IG1fdGltZW91dFRpbWUpIHsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c2hvdWxkSW50ZXJy
dXB0U2NyaXB0KCkpCi0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7IC8vIEFwcGVhc2luZyBH
Q0MsIGFsbCB3ZSBuZWVkIGlzIGEgbm9uLW51bGwganMgdmFsdWUuCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIHJlc2V0VGltZW91dENoZWNrKCk7CiAgICAgfQog
ICAgIAotICAgIHJldHVybiBub1ZhbHVlKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBORVZF
Ul9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIEludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29w
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQykKQEAgLTExOTAs
MTYgKzExOTAsMTYgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgog
ICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIElkZW50aWZpZXImIHByb3BlcnR5ID0g
Y29kZUJsb2NrLT5pZGVudGlmaWVyKCgrK3ZQQyktPnUub3BlcmFuZCk7Ci0gICAgSlNWYWx1ZSog
dmFsdWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKICAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkg
SlNTdGF0aWNTY29wZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0
ZSk7Ci0gICAgY2FsbEZyYW1lW2RzdF0gPSBzY29wZTsKKyAgICBjYWxsRnJhbWVbZHN0XSA9IEpT
VmFsdWVQdHIoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5w
dXNoKHNjb3BlKTsKIH0KIAogc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjYWNoZVByb3RvdHlwZUNo
YWluKENhbGxGcmFtZSogY2FsbEZyYW1lLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBK
U1ZhbHVlKiBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJh
bWUpOworICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JM
b29rdXAoY2FsbEZyYW1lKTsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHByb3Rv
dHlwZSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTdHJ1Y3R1cmVDaGFpbj4gY2hh
aW4gPSBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVy
ZSgpKTsKQEAgLTEyMDcsNyArMTIwNyw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVQ
cm90b3R5cGVDaGEKICAgICByZXR1cm4gc3RydWN0dXJlLT5jYWNoZWRQcm90b3R5cGVDaGFpbigp
OwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQ
QywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZF
Ul9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0
ciBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBSZWN1
cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVkIHRoaXMgaW5zdHJ1
Y3Rpb24uCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSAhPSBnZXRPcGNvZGUob3BfcHV0X2J5X2lk
KSkKQEAgLTEyODQsMTMgKzEyODQsMTMgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6
OnVuY2FjaGVQdQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLXN0YXRpYyBzaXplX3QgY291bnRQcm90
b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorc3RhdGljIHNp
emVfdCBjb3VudFByb3RvdHlwZUNoYWluRW50cmllc0FuZENoZWNrRm9yUHJveGllcyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU0NlbGwqIGNlbGwgPSBhc0NlbGwoYmFzZVZhbHVlKTsKICAgICBzaXpl
X3QgY291bnQgPSAwOwogCiAgICAgd2hpbGUgKHNsb3Quc2xvdEJhc2UoKSAhPSBjZWxsKSB7Ci0g
ICAgICAgIEpTVmFsdWUqIHYgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3Vw
KGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNlbGwtPnN0cnVjdHVyZSgpLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKIAogICAgICAgICAvLyBJZiB3ZSBkaWRuJ3Qg
ZmluZCBzbG90QmFzZSBpbiBiYXNlVmFsdWUncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gYmFzZVZh
bHVlCiAgICAgICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmplY3QuCkBAIC0x
MzE1LDcgKzEzMTUsNyBAQCBzdGF0aWMgc2l6ZV90IGNvdW50UHJvdG90eXBlQ2hhaW5FbnRyaWVz
CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6
dHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2
b2lkIEludGVycHJldGVyOjp0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyIGJhc2VWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgLy8gUmVjdXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVj
aWFsaXplZCB0aGlzIGluc3RydWN0aW9uLgogICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0
T3Bjb2RlKG9wX2dldF9ieV9pZCkpCkBAIC0xNDIxLDcgKzE0MjEsNyBAQCBORVZFUl9JTkxJTkUg
dm9pZCBJbnRlcnByZXRlcjo6dW5jYWNoZUdlCiAgICAgdlBDWzRdID0gMDsKIH0KIAotSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0
ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiogZXhj
ZXB0aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9u
RmxhZyBmbGFnLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBPbmUtdGltZSBpbml0aWFsaXph
dGlvbiBvZiBvdXIgYWRkcmVzcyB0YWJsZXMuIFdlIGhhdmUgdG8gcHV0IHRoaXMgY29kZQogICAg
IC8vIGhlcmUgYmVjYXVzZSBvdXIgbGFiZWxzIGFyZSBvbmx5IGluIHNjb3BlIGluc2lkZSB0aGlz
IGZ1bmN0aW9uLgpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogI2VuZGlmCiAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUg
PSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciBleGNlcHRpb25WYWx1ZSA9IG5vVmFsdWUoKTsK
ICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IDA7CiAKICAgICBJbnN0cnVjdGlvbiogdlBDID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKQEAgLTE0NjYs
OCArMTQ2NiwxMCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAK
ICNkZWZpbmUgQ0hFQ0tfRk9SX1RJTUVPVVQoKSBcCiAgICAgaWYgKCEtLXRpY2tDb3VudCkgeyBc
Ci0gICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBjaGVja1RpbWVvdXQoY2FsbEZyYW1lLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpKSkgXAorICAgICAgICBpZiAoY2hlY2tUaW1lb3V0KGNhbGxG
cmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkgeyBcCisgICAgICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGpzTnVsbCgpOyBcCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OyBcCisgICAgICAg
IH0gXAogICAgICAgICB0aWNrQ291bnQgPSBtX3RpY2tzVW50aWxOZXh0VGltZW91dENoZWNrOyBc
CiAgICAgfQogICAgIApAQCAtMTUwNiw3ICsxNTA4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBjb25zdHJ1Y3RvciwgYW5kIHB1dHMgdGhl
IHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gY29uc3RydWN0RW1w
dHlPYmplY3QoY2FsbEZyYW1lKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRy
KGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSkpOwogCiAgICAgICAgICsrdlBDOwogICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0xNTIzLDcgKzE1MjUsNyBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBmaXJzdEFyZyA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwogICAgICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIGZpcnN0
QXJnLCBhcmdDb3VudCk7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gY29uc3RydWN0QXJyYXko
Y2FsbEZyYW1lLCBhcmdzKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGNv
bnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgYXJncykpOwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0xNTM3LDcgKzE1MzksNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdFeHAgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gbmV3IChnbG9iYWxEYXRhKSBSZWdFeHBP
YmplY3QoY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cmVnZXhwKHJlZ0V4cCkpOworICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIobmV3IChnbG9iYWxEYXRhKSBSZWdFeHBPYmpl
Y3QoY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1
cmUoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cmVnZXhwKHJlZ0V4cCkpKTsKIAogICAgICAg
ICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMTU2MiwxMiArMTU2NCwx
MiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAg
IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFs
dWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAo
SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQogICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oc3JjMSA9PSBzcmMyKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWxTbG93
Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2UoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAg
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTU4Miw3ICsxNTg0LDcgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBvcGVyYXRvciwgYW5k
IHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAq
LwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIEpTVmFsdWVQdHIgc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChzcmMtPmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHRydWUpOwpAQCAt
MTYwMiwxMiArMTYwNCwxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAg
ICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBK
U1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVy
cyhzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHNy
YzEgIT0gc3JjMik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKCFlcXVhbFNsb3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOworICAg
ICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xvd0Nhc2UoY2Fs
bEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTYy
Miw3ICsxNjI0LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICAgICBvcGVyYXRvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4g
cmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlm
IChzcmMtPmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0ganNCb29sZWFuKGZhbHNlKTsKQEAgLTE2NDIsOCArMTY0NCw4IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcmVzdWx0IGFzIGEgYm9vbGVh
biBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmFyZUJvdGhJbW1lZGlhdGUoc3JjMSwgc3JjMikpCiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IGpzQm9vbGVhbihzcmMxID09IHNyYzIpOwogICAgICAgICBlbHNlIGlmIChKU0ltbWVkaWF0
ZTo6aXNFaXRoZXJJbW1lZGlhdGUoc3JjMSwgc3JjMikgJiAoc3JjMSAhPSBKU0ltbWVkaWF0ZTo6
emVyb0ltbWVkaWF0ZSgpKSAmIChzcmMyICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkp
KQpAQCAtMTY2Miw4ICsxNjY0LDggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlKHNyYzEsIHNyYzIpKQogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jv
b2xlYW4oc3JjMSAhPSBzcmMyKTsKQEAgLTE2ODMsOSArMTY4NSw5IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNCb29sZWFuKGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0ganNCb29sZWFuKGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsK
IApAQCAtMTcwMCw5ICsxNzAyLDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgICBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNCb29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOworICAg
ICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1
bHQ7CiAKQEAgLTE3MTYsMTEgKzE3MTgsMTEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBiYWNrIGluIHJlZ2lzdGVyIHNyY0RzdC4KICAgICAg
ICAgKi8KICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0
ZU51bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0cihK
U0ltbWVkaWF0ZTo6aW5jSW1tZWRpYXRlTnVtYmVyKHYpKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHYtPnRvTnVtYmVy
KGNhbGxGcmFtZSkgKyAxKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1i
ZXIoY2FsbEZyYW1lLCB2LT50b051bWJlcihjYWxsRnJhbWUpICsgMSk7CiAgICAgICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IHJl
c3VsdDsKICAgICAgICAgfQpAQCAtMTczNSwxMSArMTczNywxMSBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3Jj
RHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVy
YXRpb25zKHYpKQotICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6
ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBK
U1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIodikpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
di0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIDEpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKICAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtz
cmNEc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xNzU2LDE1ICsxNzU4LDE1IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAg
aW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3NyY0Rz
dF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFz
dEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkgewogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSB2
OwotICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6aW5jSW1tZWRp
YXRlTnVtYmVyKHYpOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU1ZhbHVlUHRy
KEpTSW1tZWRpYXRlOjppbmNJbW1lZGlhdGVOdW1iZXIodikpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSogbnVtYmVyID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShj
YWxsRnJhbWUpLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRy
IG51bWJlciA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9KU051bWJl
cihjYWxsRnJhbWUpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBudW1iZXI7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbc3Jj
RHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAr
IDEpOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVy
KGNhbGxGcmFtZSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpKTsKICAgICAgICAg
fQogCiAgICAgICAgICsrdlBDOwpAQCAtMTc3OSwxNSArMTc4MSwxNSBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2
ZU9wZXJhdGlvbnModikpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gdjsKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJl
cih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVk
aWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIG51bWJlciA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1l
KS0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBudW1iZXIg
PSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvSlNOdW1iZXIoY2FsbEZy
YW1lKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0gbnVtYmVyOwotICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBq
c051bWJlcihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJh
bWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICArK3ZQQzsKQEAgLTE4MDIsMTIgKzE4MDQsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFs
dWUqIHNyY1ZhbCA9IGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBzcmNWYWwgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAK
ICAgICAgICAgaWYgKExJS0VMWShzcmNWYWwtPmlzTnVtYmVyKCkpKQogICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBjYWxsRnJhbWVbc3JjXTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBzcmNWYWwtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc3JjVmFsLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTgyMiwxMyArMTgyNCwxMyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJlc3VsdCBp
biByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgICsr
dlBDOwogICAgICAgICBkb3VibGUgdjsKICAgICAgICAgaWYgKGZhc3RJc051bWJlcihzcmMsIHYp
KQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIC12KTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJh
bWUsIC12KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNOdW1iZXIoY2FsbEZyYW1lLCAtc3JjLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICAgICAg
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAtc3JjLT50b051bWJl
cihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xODQzLDEyICsx
ODQ1LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgICAgbnVtZXJpYyBhZGQsIGRlcGVuZGluZyBvbiB0aGUgdHlwZXMgb2YgdGhlIG9wZXJhbmRz
LikKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMx
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAg
ICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRp
dmVPcGVyYXRpb25zKHNyYzEpICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJh
dGlvbnMoc3JjMikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjph
ZGRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2Rz
dF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjphZGRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNy
YzIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Fk
ZChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBqc0FkZChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAg
IH0KQEAgLTE4NjIsMjEgKzE4NjQsMjEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICBudW1iZXJzKSwgYW5kIHB1dHMgdGhlIHByb2R1Y3QgaW4g
cmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgZG91YmxlIGxlZnQ7CiAgICAgICAg
IGRvdWJsZSByaWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
TnVtYmVycyhzcmMxLCBzcmMyKSkgewogICAgICAgICAgICAgaW50MzJfdCBsZWZ0ID0gSlNJbW1l
ZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHNyYzEpOwogICAgICAgICAgICAgaW50MzJfdCByaWdo
dCA9IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihzcmMyKTsKICAgICAgICAgICAgIGlm
ICgobGVmdCB8IHJpZ2h0KSA+PiAxNSA9PSAwKQotICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0ICogcmlnaHQpOworICAgICAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgKiBy
aWdodCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxkb3VibGU+KGxlZnQpICogc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyaWdodCkpOworICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PGRvdWJsZT4obGVmdCkg
KiBzdGF0aWNfY2FzdDxkb3VibGU+KHJpZ2h0KSkpOwogICAgICAgICB9IGVsc2UgaWYgKGZhc3RJ
c051bWJlcihzcmMxLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgKiByaWdodCk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZy
YW1lLCBsZWZ0ICogcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkg
KiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpICogc3Jj
Mi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAt
MTg5MiwxNCArMTg5NCwxNCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIHF1b3RpZW50IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAg
ICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogZGl2
aWRlbmQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
Ci0gICAgICAgIEpTVmFsdWUqIGRpdmlzb3IgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZGl2aWRlbmQgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgZGl2aXNvciA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKICAgICAgICAgZG91YmxlIGxlZnQ7CiAgICAgICAgIGRvdWJsZSByaWdodDsK
ICAgICAgICAgaWYgKGZhc3RJc051bWJlcihkaXZpZGVuZCwgbGVmdCkgJiYgZmFzdElzTnVtYmVy
KGRpdmlzb3IsIHJpZ2h0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCBsZWZ0IC8gcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBK
U1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAvIHJpZ2h0KSk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBk
aXZpZGVuZC0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3ItPnRvTnVtYmVyKGNhbGxGcmFt
ZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUs
IGRpdmlkZW5kLT50b051bWJlcihjYWxsRnJhbWUpIC8gZGl2aXNvci0+dG9OdW1iZXIoY2FsbEZy
YW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTkxNywxNyArMTkxOSwxNyBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBk
aXZpZGVuZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGRpdmlzb3IgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogZGl2aWRlbmRWYWx1ZSA9IGNhbGxG
cmFtZVtkaXZpZGVuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBkaXZp
c29yVmFsdWUgPSBjYWxsRnJhbWVbZGl2aXNvcl0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIGRpdmlkZW5kVmFsdWUgPSBjYWxsRnJhbWVbZGl2aWRlbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBkaXZpc29yVmFsdWUgPSBjYWxsRnJhbWVb
ZGl2aXNvcl0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6
YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoZGl2aWRlbmRWYWx1ZSwgZGl2aXNvclZhbHVlKSAmJiBk
aXZpc29yVmFsdWUgIT0gSlNJbW1lZGlhdGU6OmZyb20oMCkpIHsKLSAgICAgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OmZyb20oSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZElu
dDMyKGRpdmlkZW5kVmFsdWUpICUgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKGRpdmlz
b3JWYWx1ZSkpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1t
ZWRpYXRlOjpmcm9tKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihkaXZpZGVuZFZhbHVl
KSAlIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihkaXZpc29yVmFsdWUpKSk7CiAgICAg
ICAgICAgICArK3ZQQzsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAg
fQogCiAgICAgICAgIGRvdWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1l
KTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBmbW9kKGQs
IGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOworICAgICAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgZm1vZChkLCBkaXZpc29yVmFsdWUtPnRvTnVt
YmVyKGNhbGxGcmFtZSkpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgKyt2UEM7CkBAIC0xOTQxLDE2ICsx
OTQzLDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgICAgcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgZG91YmxlIGxlZnQ7CiAg
ICAgICAgIGRvdWJsZSByaWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RB
ZGRpdGl2ZU9wZXJhdGlvbnMoc3JjMSkgJiYgSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZl
T3BlcmF0aW9ucyhzcmMyKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlh
dGU6OnN1YkltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlhdGU6OnN1YkltbWVkaWF0ZU51bWJlcnMoc3Jj
MSwgc3JjMikpOwogICAgICAgICBlbHNlIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYg
ZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
anNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IC0gcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAtIHJpZ2h0KSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2Fs
bEZyYW1lLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpIC0gc3JjMi0+dG9OdW1iZXIoY2FsbEZy
YW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFt
ZSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkp
OwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE5NjUsMTYgKzE5NjcsMTYgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBpbiByZWdp
c3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUqIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIHVp
bnQzMl90IHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJl
cihjYWxsRnJhbWUsIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWwpIDw8IChKU0lt
bWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0KSAmIDB4MWYpKTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIEpTSW1tZWRp
YXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWwpIDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVk
VUludDMyKHNoaWZ0KSAmIDB4MWYpKSk7CiAgICAgICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHZh
bCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCA8PCAocmlnaHQgJiAweDFmKSk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZy
YW1lLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b0ludDMyKGNh
bGxGcmFtZSkpIDw8IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b0lu
dDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xOTkwLDE2ICsxOTkyLDE2IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgdWludDMyKSwg
YW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAg
IGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHZhbCA9IGNh
bGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAg
SlNWYWx1ZSogc2hpZnQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIHVpbnQzMl90IHJpZ2h0OwogICAgICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKQotICAgICAgICAg
ICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJl
cnModmFsLCBzaGlmdCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIo
SlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKTsKICAg
ICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hp
ZnQsIHJpZ2h0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZy
YW1lLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihjYWxsRnJhbWUsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQz
MihjYWxsRnJhbWUpICYgMHgxZikpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c051bWJlcihjYWxsRnJhbWUsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50
b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0K
QEAgLTIwMTUsMTIgKzIwMTcsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzaGlmdCA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkgJiYgIUpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKHZh
bCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0
SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFs
LCBzaGlmdCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0
LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsICh2YWwtPnRvVUludDMyKGNhbGxGcmFtZSkpID4+
IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0Owog
ICAgICAgICB9CkBAIC0yMDM2LDE2ICsyMDM4LDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAq
LwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICBpbnQzMl90IHJpZ2h0OwogICAgICAg
ICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVt
YmVycyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0
cihKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7CiAgICAgICAg
IGVsc2UgaWYgKGZhc3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJp
Z2h0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBs
ZWZ0ICYgcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpz
TnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAmIHJpZ2h0KSk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMy
KGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZy
YW1lKSAmIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAg
ICAgfQpAQCAtMjA2MSwxNiArMjA2MywxNiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0
ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAg
ICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3Jj
MSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAg
ICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNy
YzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAg
ICAgICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdodDsKICAgICAgICAgaWYg
KEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OnhvckltbWVkaWF0ZU51bWJlcnMo
c3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJ
bW1lZGlhdGU6OnhvckltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogICAgICAgICBlbHNl
IGlmIChmYXN0VG9JbnQzMihzcmMxLCBsZWZ0KSAmJiBmYXN0VG9JbnQzMihzcmMyLCByaWdodCkp
Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCBe
IHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJl
cihjYWxsRnJhbWUsIGxlZnQgXiByaWdodCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxs
RnJhbWUpIF4gc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkg
XiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0K
QEAgLTIwODYsMTYgKzIwODgsMTYgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgICByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwog
ICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBz
cmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwot
ICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIg
c3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICBpbnQzMl90IHJpZ2h0OwogICAgICAgICBp
ZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6b3JJbW1lZGlhdGVOdW1iZXJz
KHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpT
SW1tZWRpYXRlOjpvckltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogICAgICAgICBlbHNl
IGlmIChmYXN0VG9JbnQzMihzcmMxLCBsZWZ0KSAmJiBmYXN0VG9JbnQzMihzcmMyLCByaWdodCkp
Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCB8
IHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJl
cihjYWxsRnJhbWUsIGxlZnQgfCByaWdodCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxs
RnJhbWUpIHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkg
fCBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0K
QEAgLTIxMTAsMTIgKzIxMTIsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgICBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4K
ICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJfdCB2YWx1ZTsKICAg
ICAgICAgaWYgKGZhc3RUb0ludDMyKHNyYywgdmFsdWUpKQotICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIH52YWx1ZSk7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCB+dmFsdWUpKTsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJh
bWUsIH5zcmMtPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJl
c3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgfnNyYy0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0yMTMwLDcgKzIxMzIsNyBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lW3Ny
Y10uanNWYWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CisgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxG
cmFtZSktPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKIApAQCAtMjE1NSw3ICsyMTU3
LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBp
bnQgYmFzZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBiYXNlUHJvdG8gPSB2UENb
NF0udS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbYmFz
ZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWwgPSBjYWxs
RnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChpc05vdE9iamVj
dChjYWxsRnJhbWUsIHRydWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQywgYmFzZVZhbCwg
ZXhjZXB0aW9uVmFsdWUpKQogICAgICAgICAgICAgZ290byB2bV90aHJvdzsKQEAgLTIxNzQsNyAr
MjE3Niw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50
IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc1R5
cGVTdHJpbmdGb3JWYWx1ZShjYWxsRnJhbWUsIGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZy
YW1lKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc1R5cGVTdHJpbmdG
b3JWYWx1ZShjYWxsRnJhbWUsIGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKSkpOwog
CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0yMTg4LDcg
KzIxOTAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJh
bWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxG
cmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBq
c0Jvb2xlYW4oSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpID8gdi0+aXNVbmRlZmluZWQoKSA6
IHYtPmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgICsrdlBDOwpAQCAtMjI3NywxMyArMjI3OSwxMyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBwcm9wZXJ0eSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGJhc2UgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbCA9IGNhbGxGcmFtZVtiYXNl
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChpc05vdE9iamVjdChjYWxsRnJhbWUs
IGZhbHNlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMsIGJhc2VWYWwsIGV4Y2VwdGlvblZh
bHVlKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAKICAgICAgICAgSlNPYmplY3QqIGJh
c2VPYmogPSBhc09iamVjdChiYXNlVmFsKTsKIAotICAgICAgICBKU1ZhbHVlKiBwcm9wTmFtZSA9
IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIHByb3BOYW1lID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAK
ICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHByb3BOYW1lLT5nZXRVSW50MzIoaSkp
CkBAIC0yMzYzLDcgKzIzNjUsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlCiAgICAgICAgIGludCBpbmRleCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAg
aW50IHZhbHVlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICAKLSAgICAgICAgc2NvcGUt
PnJlZ2lzdGVyQXQoaW5kZXgpID0gY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IEpTVmFsdWVQdHIoY2FsbEZyYW1l
W3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwogICAgIH0gICAgICAgICAgICAKQEAgLTI0MTEsNyArMjQxMyw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICBBU1NF
UlQoKCppdGVyKS0+aXNWYXJpYWJsZU9iamVjdCgpKTsKICAgICAgICAgSlNWYXJpYWJsZU9iamVj
dCogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oKml0ZXIpOwotICAgICAg
ICBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKKyAgICAgICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpID0gSlNWYWx1ZVB0cihj
YWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgICsrdlBDOwogICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQpAQCAtMjQ3OSw5ICsyNDgxLDkgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBKU1Zh
bHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAg
ICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKICAgICAgICAgdHJ5
Q2FjaGVHZXRCeUlEKGNhbGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIGJhc2VWYWx1ZSwgaWRlbnQs
IHNsb3QpOwpAQCAtMjQ5OCw3ICsyNTAwLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBvcF9nZXRfYnlfaWQuCiAgICAgICAgICovCiAgICAg
ICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZh
bHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAg
ICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUpKSkg
ewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFzQ2VsbChiYXNlVmFsdWUpOwpAQCAt
MjUxMSw3ICsyNTEzLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4
ZQogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbNV0udS5vcGVyYW5kOwogCiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIodlBDWzNdLnUub3BlcmFuZCkpID09IGJhc2VPYmplY3Qt
PmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSk7CiAKICAgICAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0yNTI5LDcgKzI1MzEsNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJldmVydHMgdG8gb3BfZ2V0X2J5
X2lkLgogICAgICAgICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJ
bW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBh
c0NlbGwoYmFzZVZhbHVlKTsKQEAgLTI1NDUsNyArMjU0Nyw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9
IHZQQ1s2XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvT2Jq
ZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHZQ
Q1szXS51Lm9wZXJhbmQpKSA9PSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkp
OwotICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHByb3RvT2JqZWN0LT5nZXRE
aXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSBKU1ZhbHVlUHRyKHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKQEAgLTI1NzgsNyArMjU4MCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRfYnlfaWQuCiAg
ICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShj
YWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFzQ2VsbChi
YXNlVmFsdWUpOwpAQCAtMjYwMCw3ICsyNjAyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQ
Q1s3XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2Jq
ZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHZQ
Q1szXS51Lm9wZXJhbmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGJhc2VPYmplY3QtPmdl
dERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBKU1ZhbHVlUHRyKGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0yNjIzLDkgKzI2MjUsOSBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQ
Q1szXS51Lm9wZXJhbmQ7CiAKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKKyAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90
KTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCiAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwpAQCAtMjY0MSwxMCArMjY0MywxMCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAKICAgICAgICAgaW50IGJhc2UgPSB2
UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVb
YmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChMSUtFTFko
aXNKU0FycmF5KGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1l
LCBhc0FycmF5KGJhc2VWYWx1ZSktPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGFzQXJyYXkoYmFzZVZhbHVlKS0+
bGVuZ3RoKCkpKTsKICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwogICAgICAgICB9CkBAIC0yNjYxLDEwICsyNjYzLDEwIEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KIAogICAgICAgICBpbnQg
YmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNh
bGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYg
KExJS0VMWShpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBpbnQgZHN0ID0g
dlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCBhc1N0cmluZyhiYXNlVmFsdWUpLT52YWx1ZSgpLnNpemUoKSk7CisgICAgICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBhc1N0
cmluZyhiYXNlVmFsdWUpLT52YWx1ZSgpLnNpemUoKSkpOwogICAgICAgICAgICAgdlBDICs9IDg7
CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KQEAgLTI2ODcsNyAr
MjY4OSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKIAogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAg
ICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkp
OwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYmFzZVZhbHVlLT5wdXQo
Y2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSksIHNs
b3QpOwpAQCAtMjcxMCw3ICsyNzEyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgICovCiAg
ICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJh
c2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXNDZWxsKGJhc2VW
YWx1ZSk7CkBAIC0yNzIzLDcgKzI3MjUsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0
ZUV4ZWN1dGUoRXhlCiAKICAgICAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiogaXQgPSB2
UENbNl0udS5zdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOwogCi0gICAgICAgICAgICAgICAgSlNWYWx1
ZSogcHJvdG8gPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNh
bGxGcmFtZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBwcm90byA9IGJhc2VPYmplY3Qt
PnN0cnVjdHVyZSgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoIXByb3RvLT5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoYXNPYmplY3QocHJvdG8pLT5zdHJ1Y3R1cmUoKSAhPSAoKml0KS5nZXQoKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuY2FjaGVQdXRCeUlEKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksIHZQQyk7CkBAIC0yNzYwLDcgKzI3NjIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHRoZSByZWdpc3RlciBmaWxlLgogICAgICAg
ICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFz
ZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBhc0NlbGwoYmFzZVZh
bHVlKTsKQEAgLTI3OTYsNyArMjc5OCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGUKICAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzJdLnUub3BlcmFuZDsKICAg
ICAgICAgaW50IHZhbHVlID0gdlBDWzNdLnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBi
YXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBK
U1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcihwcm9wZXJ0eSk7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgICAg
ICBiYXNlVmFsdWUtPnB1dChjYWxsRnJhbWUsIGlkZW50LCBjYWxsRnJhbWVbdmFsdWVdLmpzVmFs
dWUoY2FsbEZyYW1lKSwgc2xvdCk7CkBAIC0yODE5LDcgKzI4MjEsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAKICAgICAgICAgSlNPYmplY3QqIGJhc2VPYmog
PSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpLT50b09iamVjdChjYWxsRnJhbWUp
OwogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlk
ZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4o
YmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCBpZGVudCkpOworICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJh
bWUsIGlkZW50KSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwpAQCAtMjgzNywxMCArMjgzOSwx
MCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGlu
dCBiYXNlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBj
YWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzdWJz
Y3JpcHQgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHN1YnNjcmlwdCA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNW
YWx1ZShjYWxsRnJhbWUpOwogCi0gICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQ7CiAgICAgICAgIHVuc2lnbmVkIGk7CiAKICAgICAgICAgYm9vbCBpc1VJ
bnQzMiA9IEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoc3Vic2NyaXB0LCBpKTsKQEAgLTI4ODAsOCAr
Mjg4Miw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgaW50IHByb3BlcnR5ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdmFsdWUg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2Fs
bEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3Vic2Ny
aXB0ID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFs
dWUoY2FsbEZyYW1lKTsKIAogICAgICAgICB1bnNpZ25lZCBpOwogCkBAIC0yOTIxLDggKzI5MjMs
OCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAKICAgICAgICAg
SlNPYmplY3QqIGJhc2VPYmogPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpLT50
b09iamVjdChjYWxsRnJhbWUpOyAvLyBtYXkgdGhyb3cKIAotICAgICAgICBKU1ZhbHVlKiBzdWJz
Y3JpcHQgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAg
SlNWYWx1ZSogcmVzdWx0OworICAgICAgICBKU1ZhbHVlUHRyIHN1YnNjcmlwdCA9IGNhbGxGcmFt
ZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dDsKICAgICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMy
KGkpKQogICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3Bl
cnR5KGNhbGxGcmFtZSwgaSkpOwpAQCAtMzA1MCw3ICszMDUyLDcgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmNWYWx1ZSA9IGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmNWYWx1ZSA9IGNhbGxGcmFtZVtzcmNd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoc3JjVmFsdWUtPmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoc3JjVmFsdWUpICYmIHNyY1Zh
bHVlLT5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCgpKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKQEAgLTMwNjgsNyArMzA3MCw3
IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8K
ICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdl
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjVmFsdWUgPSBjYWxs
RnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjVmFs
dWUgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKCFz
cmNWYWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSB8fCAoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZShzcmNWYWx1ZSkgJiYgIXNyY1ZhbHVlLT5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdl
dDsKQEAgLTMwODksOCArMzA5MSw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBt
YXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcwogICAgICAgICAgICB0aGUgSlMgdGltZW91dCBp
cyByZWFjaGVkLgogICAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1
ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludCB0
YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIAogICAgICAgICBib29sIHJlc3Vs
dCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwpAQCAtMzExNiw4ICszMTE4LDggQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBBZGRp
dGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJtaW5hdGUgSlMgZXhlY3V0aW9u
IGlzCiAgICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNoZWQuCiAgICAgICAgICovCi0g
ICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3Jj
MSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwogICAgICAgICAKICAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcShjYWxsRnJhbWUsIHNy
YzEsIHNyYzIpOwpAQCAtMzE0MCw4ICszMTQyLDggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICB0YXJnZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0
cnVjdGlvbiwgaWYgYW5kIG9ubHkgaWYgdGhlIAogICAgICAgICAgICByZXN1bHQgb2YgdGhlIGNv
bXBhcmlzb24gaXMgZmFsc2UuCiAgICAgICAgICovCi0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAg
IEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCiAgICAgICAgIGJvb2wgcmVzdWx0
ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CkBAIC0zMTY2LDcgKzMxNjgsNyBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAqLwogICAg
ICAgICBpbnQgdGFibGVJbmRleCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGRl
ZmF1bHRPZmZzZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNjcnV0
aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBzY3J1dGluZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmICghSlNJbW1lZGlhdGU6OmlzTnVt
YmVyKHNjcnV0aW5lZSkpCiAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAg
ICAgZWxzZSB7CkBAIC0zMTg2LDcgKzMxODgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAqLwogICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGRlZmF1bHRPZmZzZXQgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzY3J1
dGluZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgICAgIGlmICghc2NydXRpbmVlLT5pc1N0cmluZygpKQogICAgICAgICAgICAgdlBDICs9
IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgIGVsc2UgewpAQCAtMzIwOSw3ICszMjExLDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgKi8KICAgICAg
ICAgaW50IHRhYmxlSW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkZWZh
dWx0T2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzY3J1dGlu
ZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoIXNjcnV0aW5lZS0+aXNTdHJpbmco
KSkKICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIApAQCAt
MzI2NSwxNSArMzI2NywxNSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgIGludCBhcmdDb3VudCA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSog
ZnVuY1ZhbCA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgZnVuY1ZhbCA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAK
ICAgICAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkg
KyByZWdpc3Rlck9mZnNldDsKICAgICAgICAgUmVnaXN0ZXIqIGFyZ3YgPSBuZXdDYWxsRnJhbWUg
LSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudDsKLSAgICAgICAg
SlNWYWx1ZSogdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICAgICAgaWYgKHRoaXNWYWx1ZSA9PSBnbG9iYWxPYmpl
Y3QgJiYgZnVuY1ZhbCA9PSBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsRXZhbChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwg
YXJndiwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBleGNlcHRpb25WYWx1ZSk7CisgICAgICAg
ICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGxFdmFsKGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxl
LCBhcmd2LCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIGV4Y2VwdGlvblZhbHVlKTsKICAgICAg
ICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICBnb3RvIHZtX3Rocm93
OwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CkBAIC0zMzAyLDcgKzMzMDQs
NyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGlu
dCBhcmdDb3VudCA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IHZQQ1s0XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtm
dW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFt
ZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwpA
QCAtMzM0MCwxOCArMzM0MiwxOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlCiAgICAgICAgICAgICBBcmdMaXN0IGFyZ3ModGhpc1JlZ2lzdGVyICsgMSwgYXJnQ291
bnQgLSAxKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBob3N0IG1ldGhvZHMgc2hvdWxk
IGJlIGNhbGxpbmcgdG9UaGlzT2JqZWN0LCBidXQgdGhpcyBpcyBub3QgcHJlc2VudGx5IHRoZSBj
YXNlLgotICAgICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlID0gdGhpc1JlZ2lzdGVyLT5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSA9IHRoaXNS
ZWdpc3Rlci0+anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZSA9
PSBqc051bGwoKSkKICAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2Jh
bFRoaXNWYWx1ZSgpOwogCi0gICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgICAgIEpTVmFsdWVQdHIgcmV0dXJuVmFsdWU7CiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlcik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24o
bmV3Q2FsbEZyYW1lLCBhc09iamVjdCh2KSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAotICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihyZXR1cm5WYWx1ZSk7CiAKICAgICAgICAgICAgIHZQQyArPSA1OwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzQxOCw3ICszNDIwLDcgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpZiAoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKQogICAgICAgICAgICAgY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPmRlcmVmKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUg
PSBjYWxsRnJhbWVbcmVzdWx0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgcmV0dXJuVmFsdWUgPSBjYWxsRnJhbWVbcmVzdWx0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAK
ICAgICAgICAgdlBDID0gY2FsbEZyYW1lLT5yZXR1cm5QQygpOwogICAgICAgICBpbnQgZHN0ID0g
Y2FsbEZyYW1lLT5yZXR1cm5WYWx1ZVJlZ2lzdGVyKCk7CkBAIC0zNDI3LDcgKzM0MjksNyBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGlmIChjYWxs
RnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpCiAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CiAKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJldHVyblZhbHVlKTsKIAogICAgICAgICBORVhU
X0lOU1RSVUNUSU9OKCk7CiAgICAgfQpAQCAtMzQ5Nyw5ICszNDk5LDkgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogCiAgICAgICAgIGludCB0
aGlzUmVnaXN0ZXIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHRoaXNW
YWwgPSBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXS5nZXRKU1ZhbHVlKCk7CisgICAgICAgIEpTVmFs
dWVQdHIgdGhpc1ZhbCA9IGNhbGxGcmFtZVt0aGlzUmVnaXN0ZXJdLmdldEpTVmFsdWUoKTsKICAg
ICAgICAgaWYgKHRoaXNWYWwtPm5lZWRzVGhpc0NvbnZlcnNpb24oKSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZVt0aGlzUmVnaXN0ZXJdID0gdGhpc1ZhbC0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IEpTVmFsdWVQdHIodGhpc1Zh
bC0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zNTQ0LDcgKzM1NDYsNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBwcm90byA9IHZQQ1s1XS51Lm9w
ZXJhbmQ7CiAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSB2UENbNl0udS5vcGVyYW5kOwogCi0g
ICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUp
OwogCiAgICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICAgICAgQ29uc3Ry
dWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdi0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRh
KTsKQEAgLTM1NTUsMTQgKzM1NTcsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmZnVuY3Rp
b25Cb2R5Tm9kZS0+Ynl0ZWNvZGUoY2FsbERhdGFTY29wZUNoYWluKTsKIAogICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBj
YWxsRnJhbWVbcHJvdG9dLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIgcHJvdG90eXBlID0gY2FsbEZyYW1lW3Byb3RvXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSA9IGFzT2JqZWN0KHByb3RvdHlwZSktPmluaGVyaXRvcklEKCk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gY2FsbERhdGFTY29wZUNoYWluLT5nbG9i
YWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIEpTT2JqZWN0
KiBuZXdPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiAKLSAg
ICAgICAgICAgIGNhbGxGcmFtZVt0aGlzUmVnaXN0ZXJdID0gbmV3T2JqZWN0OyAvLyAidGhpcyIg
dmFsdWUKKyAgICAgICAgICAgIGNhbGxGcmFtZVt0aGlzUmVnaXN0ZXJdID0gSlNWYWx1ZVB0cihu
ZXdPYmplY3QpOyAvLyAidGhpcyIgdmFsdWUKIAogICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2
aW91c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIApAQCAtMzU5MCwxMyArMzU5MiwxMyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgICBDYWxsRnJh
bWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwg
dlBDICsgNywgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLCBkc3QsIGFyZ0NvdW50LCAwKTsKIAotICAg
ICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJl
dHVyblZhbHVlOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6
SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIpOwogICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lLCBh
c09iamVjdCh2KSwgYXJncyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJldHVyblZhbHVlOwor
ICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJldHVyblZhbHVlKTsKIAog
ICAgICAgICAgICAgdlBDICs9IDc7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBA
IC0zNjM0LDExICszNjM2LDExIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGUKICAgICAgICAgICAgYXJlIHJlcGxhY2VkIGJ5IHRoZSByZXN1bHQgb2YgdG9PYmplY3Qg
Y29udmVyc2lvbiBvZiB0aGUgc2NvcGUuCiAgICAgICAgICovCiAgICAgICAgIGludCBzY29wZSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzY29w
ZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVb
c2NvcGVdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgSlNPYmplY3QqIG8gPSB2LT50b09i
amVjdChjYWxsRnJhbWUpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAg
ICAgY2FsbEZyYW1lW3Njb3BlXSA9IG87CisgICAgICAgIGNhbGxGcmFtZVtzY29wZV0gPSBKU1Zh
bHVlUHRyKG8pOwogICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnB1c2gobykpOwogCiAgICAgICAgICsrdlBDOwpAQCAtMzY4Myw5ICszNjg1
LDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBp
bnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCiAgICAgICAgIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGl0ID0gY2FsbEZyYW1lW2l0ZXJdLnByb3BlcnR5TmFtZUl0ZXJhdG9yKCk7Ci0g
ICAgICAgIGlmIChKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoY2FsbEZyYW1lKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZVB0ciB0ZW1wID0gaXQtPm5leHQoY2FsbEZyYW1lKSkgewogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gdGVt
cDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cih0ZW1wKTsKICAgICAg
ICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgICAgIH0KQEAgLTM3NzcsNyArMzc3OSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51bmV4cGVjdGVkQ29uc3Rh
bnQoc3JjKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPnVuZXhwZWN0ZWRDb25zdGFudChzcmMpKTsKIAogICAgICAgICArK3ZQQzsK
ICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzc5NSw3ICszNzk3LDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgbWVzc2FnZSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gRXJyb3I6OmNy
ZWF0ZShjYWxsRnJhbWUsIChFcnJvclR5cGUpdHlwZSwgY29kZUJsb2NrLT51bmV4cGVjdGVkQ29u
c3RhbnQobWVzc2FnZSktPnRvU3RyaW5nKGNhbGxGcmFtZSksIGNvZGVCbG9jay0+bGluZU51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KHZQQyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSksIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJO
b2RlKCktPnNvdXJjZVVSTCgpKTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRy
KEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCAoRXJyb3JUeXBlKXR5cGUsIGNvZGVCbG9jay0+dW5l
eHBlY3RlZENvbnN0YW50KG1lc3NhZ2UpLT50b1N0cmluZyhjYWxsRnJhbWUpLCBjb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCkpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxv
Y2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSkpOwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zOTU2LDcgKzM5NTgsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgI3VuZGVmIENIRUNLX0ZPUl9USU1FT1VU
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CitKU1ZhbHVlUHRyIEludGVy
cHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlv
biogZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9
IGZpbmRGdW5jdGlvbkNhbGxGcmFtZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKICAgICBpZiAoIWZ1
bmN0aW9uQ2FsbEZyYW1lKQpAQCAtMzk4MCw3ICszOTgyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnJldHJpZXZlQXJndW1lbnRzKAogICAgIHJldHVybiBhcmd1bWVudHM7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpyZXRyaWV2ZUNhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW50
ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24pIGNvbnN0CitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpy
ZXRyaWV2ZUNhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW50ZXJuYWxGdW5jdGlvbiogZnVu
Y3Rpb24pIGNvbnN0CiB7CiAgICAgQ2FsbEZyYW1lKiBmdW5jdGlvbkNhbGxGcmFtZSA9IGZpbmRG
dW5jdGlvbkNhbGxGcmFtZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKICAgICBpZiAoIWZ1bmN0aW9u
Q2FsbEZyYW1lKQpAQCAtMzk5MCwxNCArMzk5MiwxNCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cmV0cmlldmVDYWxsZXIoQ2FsCiAgICAgaWYgKGNhbGxlckZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1l
RmxhZygpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU1ZhbHVlKiBjYWxsZXIg
PSBjYWxsZXJGcmFtZS0+Y2FsbGVlKCk7CisgICAgSlNWYWx1ZVB0ciBjYWxsZXIgPSBjYWxsZXJG
cmFtZS0+Y2FsbGVlKCk7CiAgICAgaWYgKCFjYWxsZXIpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAogICAgIHJldHVybiBjYWxsZXI7CiB9CiAKLXZvaWQgSW50ZXJwcmV0ZXI6OnJldHJpZXZl
TGFzdENhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJf
dCYgc291cmNlSUQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25z
dAordm9pZCBJbnRlcnByZXRlcjo6cmV0cmlldmVMYXN0Q2FsbGVyKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBzb3VyY2VJRCwgVVN0cmluZyYgc291cmNl
VVJMLCBKU1ZhbHVlUHRyJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBmdW5jdGlvbiA9IG5vVmFs
dWUoKTsKICAgICBsaW5lTnVtYmVyID0gLTE7CkBAIC00MDMxLDcgKzQwMzMsNyBAQCBDYWxsRnJh
bWUqIEludGVycHJldGVyOjpmaW5kRnVuY3Rpb25DYWxsCiAKICNpZiBFTkFCTEUoSklUX09QVElN
SVpFX1BST1BFUlRZX0FDQ0VTUykKIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRy
eUNUSUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNUSUNh
Y2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZv
aWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3IgcmVjdXJz
aW9uIGhlcmU7IEkgZG8gbm90IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgogCkBAIC00
MDg4LDcgKzQwOTAsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q1RJQ2Fj
CiAjZW5kaWYKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNUSUNhY2hl
R2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQq
IHJldHVybkFkZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZFUl9JTkxJTkUgdm9pZCBJ
bnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZVB0ciBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0
byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAogICAgIC8vIGxpa2UgdGhlIGludGVycHJl
dGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vyc2lvbi4KQEAgLTQyODMsNyArNDI4
NSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGgKIHsKICAgICBC
RUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2MSA9IEFSR19zcmMxOworICAg
IEpTVmFsdWVQdHIgdjEgPSBBUkdfc3JjMTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gdjEtPnRvVGhpc09iamVjdChj
YWxsRnJhbWUpOwpAQCAtNDMwMCwxOSArNDMwMiwxOSBAQCB2b2lkIEludGVycHJldGVyOjpjdGlf
b3BfZW5kKFNUVUJfQVJHUykKICAgICBzY29wZUNoYWluLT5kZXJlZigpOwogfQogCi1KU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NU
VUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHYxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1
ZSogdjIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHYxID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciB2MiA9IEFSR19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJp
Z2h0ID0gMC4wOwogCiAgICAgYm9vbCByaWdodElzTnVtYmVyID0gZmFzdElzTnVtYmVyKHYyLCBy
aWdodCk7CiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIgJiYgZmFzdElzTnVtYmVyKHYxLCBsZWZ0KSkK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICsgcmlnaHQpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCBsZWZ0ICsgcmlnaHQpKTsKICAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7CiAKQEAgLTQzMjQsNyArNDMyNiw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfYWRkKFNUVUJfQVIKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKEFSR19nbG9iYWxEYXRhLCB2YWx1ZS5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzU3RyaW5nKEFS
R19nbG9iYWxEYXRhLCB2YWx1ZS5yZWxlYXNlKCkpKTsKICAgICB9CiAKICAgICBpZiAocmlnaHRJ
c051bWJlciAmIGxlZnRJc1N0cmluZykgewpAQCAtNDMzNiwyNSArNDMzOCwyNSBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZChTVFVCX0FSCiAgICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhBUkdfZ2xvYmFsRGF0YSwgdmFs
dWUucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc1N0cmlu
ZyhBUkdfZ2xvYmFsRGF0YSwgdmFsdWUucmVsZWFzZSgpKSk7CiAgICAgfQogCiAgICAgLy8gQWxs
IG90aGVyIGNhc2VzIGFyZSBwcmV0dHkgdW5jb21tb24KLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c0FkZFNsb3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2lu
YyhTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9wcmVfaW5jKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAg
ICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciB2ID0gQVJHX3NyYzE7CiAK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkg
KyAxKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2
LT50b051bWJlcihjYWxsRnJhbWUpICsgMSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogaW50IEludGVycHJldGVyOjpjdGlfdGltZW91dF9jaGVjayhTVFVCX0FS
R1MpCkBAIC00Mzg4LDggKzQzOTAsOCBAQCBpbnQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lm
X2xlc3MoU1RVCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSog
c3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1Zh
bHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBib29sIHJl
c3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwpAQCAtNDQwMSw4ICs0NDAzLDgg
QEAgaW50IEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEoUwogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBK
U1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7
CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcShjYWxsRnJh
bWUsIHNyYzEsIHNyYzIpOwpAQCAtNDQyNiwxOSArNDQyOCwxOSBAQCB2b2lkIEludGVycHJldGVy
OjpjdGlfb3BfcHV0X2J5X2lkX2dlbmVyCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQo
KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyhT
VFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfZ2VuZXJpYyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50
aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdf
c3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5n
ZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNl
VmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0
cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZ
X0FDQ0VTUykKQEAgLTQ0ODEsNTAgKzQ0ODMsNTAgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29w
X3B1dF9ieV9pZF9mYWlsKAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAK
LUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZChTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7
CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJh
c2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xv
dCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlk
ZW50LCBzbG90KTsKIAogICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVS
Tl9BRERSRVNTLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjdGlfb3BfZ2V0X2J5X2lkX3NlY29u
ZCkpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWNvbmQo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpB
UkdfaWQyOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1
ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZy
YW1lLCBpZGVudCwgc2xvdCk7CiAKICAgICBBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnRy
eUNUSUNhY2hlR2V0QnlJRChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJf
UkVUVVJOX0FERFJFU1MsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1Zh
bHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCi0gICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUg
PSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xv
dCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKQEAgLTQ1NTgsNyArNDU2MCw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3MKICAgICB9IGVsc2Ugewog
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKSk7CiAgICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogfQogCiBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnZXRQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTbG90KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgaW50JiBsaXN0SW5kZXgpCkBAIC00NTkwLDIxICs0NTkyLDIxIEBAIHN0YXRpYyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGcKICAgICByZXR1cm4gcHJvdG90eXBlU3RydWN0dXJl
TGlzdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
bGlzdChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9G
VU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNl
VmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgKkFSR19pZDIsIHNs
b3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCAq
QVJHX2lkMiwgc2xvdCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkgfHwgIXNsb3QuaXNDYWNoZWFibGUo
KSB8fCBhc0NlbGwoYmFzZVZhbHVlKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYXNDZWxsKGJhc2VW
YWx1ZSktPnN0cnVjdHVyZSgpOwpAQCAtNDY0OCw2NyArNDY1MCw2NyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wCiAgICAgfSBlbHNlCiAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKIAotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RVQl9BUkdT
KQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lk
X3Byb3RvX2xpc3RfZnVsbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBi
YXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdf
aWQyLCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19j
YWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3By
b3RvX2ZhaWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NU
VUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAg
IEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qo
YmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChBUkdfY2Fs
bEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFs
dWUtPmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CiAKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKFNUVUJfQVJHUykKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBB
Ukdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3Bl
cnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVl
LT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOwogCiAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWls
KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVl
KiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19z
cmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19p
ZDIsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAog
I2VuZGlmCiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FS
R1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5j
ZW9mKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBB
Ukdfc3JjMTsKLSAgICBKU1ZhbHVlKiBiYXNlVmFsID0gQVJHX3NyYzI7Ci0gICAgSlNWYWx1ZSog
cHJvdG8gPSBBUkdfc3JjMzsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gQVJHX3NyYzE7CisgICAg
SlNWYWx1ZVB0ciBiYXNlVmFsID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBwcm90byA9IEFS
R19zcmMzOwogCiAgICAgLy8gYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGNoZWNrcyBtdXN0IGhhdmUg
ZmFpbGVkIHRvIGdldCB0byB0aGUgc2xvdyBjYXNlCiAgICAgQVNTRVJUKEpTSW1tZWRpYXRlOjpp
c0FueUltbWVkaWF0ZSh2YWx1ZSwgYmFzZVZhbCwgcHJvdG8pIApAQCAtNDcyNCw3ICs0NzI2LDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKAogICAgIH0KIAogICAg
IGlmICghYXNPYmplY3QoYmFzZVZhbCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAogICAgIGlm
ICghcHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihjYWxsRnJhbWUsIFR5
cGVFcnJvciwgImluc3RhbmNlb2YgY2FsbGVkIG9uIGFuIG9iamVjdCB3aXRoIGFuIGludmFsaWQg
cHJvdG90eXBlIHByb3BlcnR5LiIpOwpAQCAtNDczMiwxNSArNDczNCwxNSBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YoCiAgICAgfQogICAgICAgICAKICAgICBpZiAo
IXZhbHVlLT5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihhc09iamVjdChiYXNlVmFsKS0+aGFzSW5zdGFu
Y2UoY2FsbEZyYW1lLCB2YWx1ZSwgcHJvdG8pKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
Qm9vbGVhbihhc09iamVjdChiYXNlVmFsKS0+aGFzSW5zdGFuY2UoY2FsbEZyYW1lLCB2YWx1ZSwg
cHJvdG8pKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpT
VmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJHUykKK0pTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZChTVFVCX0FSR1Mp
CiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCkBAIC00NzQ4LDI3ICs0NzUwLDI3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X2lkKFMKICAgICAKICAgICBKU09i
amVjdCogYmFzZU9iaiA9IEFSR19zcmMxLT50b09iamVjdChjYWxsRnJhbWUpOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFt
ZSwgKkFSR19pZDIpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2Jq
LT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsICpBUkdfaWQyKSk7CiAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVl
UHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9t
dWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlf
b3BfbXVsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBK
U1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwor
ICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFS
R19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0OwogICAgIGlmIChm
YXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICogcmlnaHQpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBs
ZWZ0ICogcmlnaHQpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+
dG9OdW1iZXIoY2FsbEZyYW1lKSAqIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVy
KGNhbGxGcmFtZSkgKiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9uZXdfZnVuYyhTVFVCX0FSR1MpCkBAIC00ODc5LDExICs0ODgxLDExIEBAIEpTT2JqZWN0KiBJ
bnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfYWN0aXYKICAgICByZXR1cm4gYWN0aXZhdGlvbjsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24oU1RVQl9B
UkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9O
b3RKU0Z1bmN0aW9uKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAK
LSAgICBKU1ZhbHVlKiBmdW5jVmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBmdW5jVmFs
ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmNWYWwtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKQEAgLTQ5MDIsMTIgKzQ5MDQs
MTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRgogICAgICAgICBS
ZWdpc3RlciogYXJndiA9IEFSR19jYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlz
dChhcmd2ICsgMSwgYXJnQ291bnQgLSAxKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1
ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR1cm5WYWx1ZTsKICAgICAgICAgewogICAgICAgICAg
ICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSKTsK
IAogICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBob3N0IG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxp
bmcgdG9UaGlzT2JqZWN0LCBidXQgdGhpcyBpcyBub3QgcHJlc2VudGx5IHRoZSBjYXNlLgotICAg
ICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc051bGwoKSkKICAgICAgICAg
ICAgICAgICB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpOwogCkBAIC00
OTE2LDcgKzQ5MTgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNG
CiAgICAgICAgIEFSR19zZXRDYWxsRnJhbWUocHJldmlvdXNDYWxsRnJhbWUpOwogICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJldHVyblZhbHVlKTsKICAgICB9CiAKICAg
ICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKQEAgLTQ5OTMsNyArNDk5NSw3IEBA
IEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19hcnJheSgKICAgICByZXR1cm4gY29u
c3RydWN0QXJyYXkoQVJHX2NhbGxGcmFtZSwgYXJnTGlzdCk7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9T
VFVCX0ZVTkNUSU9OKCk7CiAKQEAgLTUwMDksOSArNTAxMSw5IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZShTVFUKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3Qobyk7CiAgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNs
b3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKICAgICAg
ICAgfQogICAgIH0gd2hpbGUgKCsraXRlciAhPSBlbmQpOwogCkBAIC01MDM4LDEzICs1MDQwLDEz
IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF8KICAgICByZXR1cm4g
bmV3IChBUkdfZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0dXJlKTsKIH0KIAotSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QoU1RVQl9BUkdTKQor
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X05v
dEpTQ29uc3RydWN0KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVl
KiBjb25zdHJWYWwgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGNvbnN0clZhbCA9IEFSR19z
cmMxOwogICAgIGludCBhcmdDb3VudCA9IEFSR19pbnQzOwogICAgIGludCB0aGlzUmVnaXN0ZXIg
PSBBUkdfaW50NTsKIApAQCAtNTA1NCwxNCArNTA1NiwxNCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y3RpX29wX2NvbnN0cnVjdF9OCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZUhvc3QpIHsKICAgICAgICAgQXJnTGlzdCBhcmdMaXN0KGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyB0aGlzUmVnaXN0ZXIgKyAxLCBhcmdDb3VudCAtIDEpOwogCi0gICAgICAgIEpTVmFsdWUq
IHJldHVyblZhbHVlOworICAgICAgICBKU1ZhbHVlUHRyIHJldHVyblZhbHVlOwogICAgICAgICB7
CiAgICAgICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJ
X1NBTVBMRVIpOwogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbihjYWxsRnJhbWUsIGFzT2JqZWN0KGNvbnN0clZhbCksIGFyZ0xpc3QpOwogICAg
ICAgICB9CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAotICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmV0dXJuVmFs
dWUpOwogICAgIH0KIAogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVO
b25lKTsKQEAgLTUwNzIsMTcgKzUwNzQsMTcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9jb25zdHJ1Y3RfTgogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1MpCiB7CiAg
ICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBB
UkdfY2FsbEZyYW1lOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IEFSR19nbG9iYWxE
YXRhLT5pbnRlcnByZXRlcjsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwot
ICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgYmFzZVZh
bHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKIAot
ICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICB1bnNpZ25l
ZCBpOwogCiAgICAgYm9vbCBpc1VJbnQzMiA9IEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoc3Vic2Ny
aXB0LCBpKTsKQEAgLTUxMDMsNyArNTEwNSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X3ZhbCgKICAgICB9CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogfQogCiBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZnVuYyhT
VFVCX0FSR1MpCkBAIC01MTM0LDEwICs1MTM2LDEwIEBAIFZvaWRQdHJQYWlyIEludGVycHJldGVy
OjpjdGlfb3BfcmVzb2x2ZV8KICAgICAgICAgICAgIC8vIHRoYXQgaW4gaG9zdCBvYmplY3RzIHlv
dSBhbHdheXMgZ2V0IGEgdmFsaWQgb2JqZWN0IGZvciB0aGlzLgogICAgICAgICAgICAgLy8gV2Ug
YWxzbyBoYW5kbGUgd3JhcHBlciBzdWJzdGl0dXRpb24gZm9yIHRoZSBnbG9iYWwgb2JqZWN0IGF0
IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IGJhc2UtPnRv
VGhpc09iamVjdChjYWxsRnJhbWUpOwotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICAgICAgICAgIFJFVFVSTl9QQUlSKHRoaXNP
YmosIGFzUG9pbnRlcihyZXN1bHQpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QQUlSKHRoaXNPYmos
IEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgICAgICArK2l0ZXI7
CiAgICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtNTE0OCwyMiArNTE1MCwyMiBAQCBWb2lk
UHRyUGFpciBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfCiAgICAgVk1fVEhST1dfRVhDRVBU
SU9OXzIoKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIoU1RVQl9BUkdT
KQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bfc3ViKFNUVUJf
QVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMx
ID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQ
dHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAg
ICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0OwogICAgIGlmIChmYXN0SXNOdW1iZXIo
c3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC0gcmlnaHQpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC0gcmlnaHQp
KTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoY2Fs
bEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkg
LSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FU
X0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29k
ZShyZXN1bHQpOwogfQogCiB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbChTVFVC
X0FSR1MpCkBAIC01MTczLDkgKzUxNzUsOSBAQCB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfcHV0
X2J5X3ZhbChTVFVCCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRl
cjsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHN1
YnNjcmlwdCA9IEFSR19zcmMyOwotICAgIEpTVmFsdWUqIHZhbHVlID0gQVJHX3NyYzM7CisgICAg
SlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHN1YnNjcmlw
dCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBBUkdfc3JjMzsKIAogICAgIHVu
c2lnbmVkIGk7CiAKQEAgLTUyMDYsOSArNTIwOCw5IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9wdXRfYnlfdmFsX2FycmEKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgaW50IGkgPSBBUkdfaW50MjsKLSAgICBKU1Zh
bHVlKiB2YWx1ZSA9IEFSR19zcmMzOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBBUkdfc3JjMzsK
IAogICAgIEFTU0VSVChBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmlzSlNBcnJheShiYXNl
VmFsdWUpKTsKIApAQCAtNTIyNiwyMSArNTIyOCwyMSBAQCB2b2lkIEludGVycHJldGVyOjpjdGlf
b3BfcHV0X2J5X3ZhbF9hcnJhCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sZXNzZXEoU1RVQl9BUkdTKQorSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbGVzc2VxKFNUVUJfQVJHUykK
IHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGpzTGVz
c0VxKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEoY2FsbEZyYW1lLCBBUkdfc3JjMSwgQVJHX3NyYzIpKTsK
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBpbnQgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9sb29wX2lmX3RydWUoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHNyYzEgPSBBUkdfc3JjMTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKIApAQCAtNTI0OSwzMCArNTI1MSwzMCBAQCBpbnQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9s
b29wX2lmX3RydWUoU1RVCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZWdhdGUoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
IEludGVycHJldGVyOjpjdGlfb3BfbmVnYXRlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVC
X0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVl
UHRyIHNyYyA9IEFSR19zcmMxOwogCiAgICAgZG91YmxlIHY7CiAgICAgaWYgKGZhc3RJc051bWJl
cihzcmMsIHYpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC12KTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0
YSwgLXYpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgLXNyYy0+dG9OdW1i
ZXIoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgLXNyYy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNv
bHZlX2Jhc2UoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVy
OjpjdGlfb3BfcmVzb2x2ZV9iYXNlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICByZXR1cm4gaW5saW5lUmVzb2x2ZUJhc2UoQVJHX2NhbGxGcmFtZSwgKkFS
R19pZDEsIEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShpbmxpbmVSZXNvbHZlQmFzZShBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMSwgQVJH
X2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfcmVzb2x2ZV9za2lwKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpcChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCkBAIC01MjkzLDkgKzUyOTUsOSBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpCiAgICAgICAgIEpTT2JqZWN0KiBvID0gKml0ZXI7CiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlT
bG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKIApAQCAtNTMwNSw3ICs1MzA3LDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3NraQogICAgIFZNX1RIUk9X
X0VYQ0VQVElPTigpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVf
Z2xvYmFsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6
Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKQEAgLTUzMTcsNyArNTMxOSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfcmVzb2x2ZV9nbG8KIAogICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7CiAg
ICAgaWYgKGdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNs
b3QpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1l
LCBpZGVudCk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxs
RnJhbWUsIGlkZW50KTsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGUoKSAmJiAhZ2xvYmFs
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgICAgIEdsb2Jh
bFJlc29sdmVJbmZvJiBnbG9iYWxSZXNvbHZlSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pmdsb2JhbFJlc29sdmVJbmZvKGdsb2JhbFJlc29sdmVJbmZvSW5kZXgpOwogICAgICAgICAgICAg
aWYgKGdsb2JhbFJlc29sdmVJbmZvLnN0cnVjdHVyZSkKQEAgLTUzMjUsMTEgKzUzMjcsMTEgQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsbwogICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cmVmKCk7CiAgICAgICAgICAgICBnbG9iYWxSZXNvbHZl
SW5mby5zdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAg
Z2xvYmFsUmVzb2x2ZUluZm8ub2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdlBDSW5kZXggPSBBUkdfY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0Qnl0ZWNvZGVJbmRleChTVFVCX1JFVFVSTl9BRERSRVNT
KTsKQEAgLTUzMzcsNDIgKzUzMzksNDIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9y
ZXNvbHZlX2dsbwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX2RpdihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9kaXYoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBz
cmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUg
cmlnaHQ7CiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMxLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIo
c3JjMiwgcmlnaHQpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxl
ZnQgLyByaWdodCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIGxlZnQgLyByaWdodCkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpIC8gc3JjMi0+dG9OdW1iZXIoY2Fs
bEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0
YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIElu
dGVycHJldGVyOjpjdGlfb3BfcHJlX2RlYyhTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciB2ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19j
YWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihjYWxsRnJhbWUpIC0gMSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogaW50IEludGVycHJldGVyOjpj
dGlfb3Bfamxlc3MoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAot
ICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3Ny
YzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMy
ID0gQVJHX3NyYzI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
CiAgICAgYm9vbCByZXN1bHQgPSBqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTUz
ODAsMjQgKzUzODIsMjQgQEAgaW50IEludGVycHJldGVyOjpjdGlfb3Bfamxlc3MoU1RVQl9BUkdT
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bf
bm90KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX25vdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAg
SlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMgPSBBUkdfc3JjMTsK
IAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy0+dG9Cb29sZWFuKGNhbGxGcmFtZSkp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIGludCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2p0cnVlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9O
KCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMx
ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7
CiAKQEAgLTU0MTAsMTAzICs1NDEyLDEwMyBAQCBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Bvc3RfaW5jCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1
ZSogdiA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgdiA9IEFSR19zcmMxOwogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogbnVtYmVy
ID0gdi0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIgbnVtYmVyID0gdi0+
dG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7
CiAKLSAgICBSRVRVUk5fUEFJUihhc1BvaW50ZXIobnVtYmVyKSwgYXNQb2ludGVyKGpzTnVtYmVy
KEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpICsgMSkpKTsKKyAg
ICBSRVRVUk5fUEFJUihKU1ZhbHVlUHRyOjplbmNvZGUobnVtYmVyKSwgSlNWYWx1ZVB0cjo6ZW5j
b2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigp
ICsgMSkpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9lcShTVFVCX0FSR1Mp
CitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9lcShTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9
IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRy
IHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIEFTU0VSVCghSlNJ
bW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNy
YzEsIHNyYzIpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dD
YXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0
KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2xzaGlmdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAg
SlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsK
KyAgICBKU1ZhbHVlUHRyIHZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBB
Ukdfc3JjMjsKIAogICAgIGludDMyX3QgbGVmdDsKICAgICB1aW50MzJfdCByaWdodDsKICAgICBp
ZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKQotICAg
ICAgICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIEpTSW1tZWRpYXRlOjpnZXRUcnVu
Y2F0ZWRJbnQzMih2YWwpIDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0
KSAmIDB4MWYpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihB
UkdfZ2xvYmFsRGF0YSwgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbCkgPDwgKEpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoc2hpZnQpICYgMHgxZikpKTsKICAgICBpZiAo
ZmFzdFRvSW50MzIodmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IDw8IChyaWdodCAmIDB4
MWYpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgbGVmdCA8PCAocmlnaHQgJiAweDFmKSkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFS
R19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+dG9VSW50
MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVy
KEFSR19nbG9iYWxEYXRhLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpIDw8IChzaGlmdC0+dG9V
SW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZChTVFVCX0FS
R1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRhbmQo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUq
IHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNW
YWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7
CiAKICAgICBpbnQzMl90IGxlZnQ7CiAgICAgaW50MzJfdCByaWdodDsKICAgICBpZiAoZmFzdFRv
SW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgJiByaWdodCk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgJiBy
aWdodCkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMy
KGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1l
KSAmIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yc2hpZnQoU1RV
Ql9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfcnNo
aWZ0KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1Zh
bHVlKiB2YWwgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzaGlmdCA9IEFSR19zcmMyOworICAg
IEpTVmFsdWVQdHIgdmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzaGlmdCA9IEFSR19z
cmMyOwogCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIHVpbnQzMl90IHJpZ2h0OwogICAgIGlmIChK
U0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCi0gICAgICAg
IHJldHVybiBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlm
dCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OnJpZ2h0
U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKTsKICAgICBpZiAoZmFzdFRvSW50MzIo
dmFsLCBsZWZ0KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVm
dCA+PiAocmlnaHQgJiAweDFmKSkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1l
KSAmIDB4MWYpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZy
YW1lKSAmIDB4MWYpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG5vdChTVFVCX0FSR1MpCitKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QoU1RVQl9BUkdTKQog
ewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYyA9IEFSR19z
cmMxOworICAgIEpTVmFsdWVQdHIgc3JjID0gQVJHX3NyYzE7CiAKICAgICBpbnQgdmFsdWU7CiAg
ICAgaWYgKGZhc3RUb0ludDMyKHNyYywgdmFsdWUpKQotICAgICAgICByZXR1cm4ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIH52YWx1ZSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgfnZhbHVlKSk7CisKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH5zcmMtPnRvSW50MzIoY2FsbEZyYW1lKSk7
CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgfnNyYy0+
dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogfQogCiBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNl
KFNUVUJfQVJHUykKQEAgLTU1MjksMTAgKzU1MzEsMTAgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXNvbHZlXwogICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KGJhc2UpOwogICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGNh
bGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBz
bG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgICAgICAgICAgUkVUVVJOX1BBSVIoYmFz
ZSwgYXNQb2ludGVyKHJlc3VsdCkpOworICAgICAgICAgICAgUkVUVVJOX1BBSVIoYmFzZSwgSlNW
YWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKICAg
ICB9IHdoaWxlIChpdGVyICE9IGVuZCk7CkBAIC01NTUwLDg5ICs1NTUyLDg5IEBAIEpTT2JqZWN0
KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19mdW5jX2UKICAgICByZXR1cm4gQVJHX2Z1bmNleHAx
LT5tYWtlRnVuY3Rpb24oQVJHX2NhbGxGcmFtZSwgQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigp
KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9tb2QoU1RVQl9BUkdTKQorSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbW9kKFNUVUJfQVJHUykK
IHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBkaXZpZGVuZFZh
bHVlID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogZGl2aXNvclZhbHVlID0gQVJHX3NyYzI7Cisg
ICAgSlNWYWx1ZVB0ciBkaXZpZGVuZFZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBk
aXZpc29yVmFsdWUgPSBBUkdfc3JjMjsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKICAgICBkb3VibGUgZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVyKGNhbGxG
cmFtZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZt
b2QoZCwgZGl2aXNvclZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpKSk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgZm1vZChkLCBkaXZpc29yVmFsdWUt
PnRvTnVtYmVyKGNhbGxGcmFtZSkpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3MoU1RVQl9BUkdTKQor
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbGVzcyhTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihq
c0xlc3MoY2FsbEZyYW1lLCBBUkdfc3JjMSwgQVJHX3NyYzIpKTsKKyAgICBKU1ZhbHVlUHRyIHJl
c3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBBUkdfc3JjMSwgQVJHX3NyYzIpKTsK
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX25lcShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXEoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBz
cmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVC
b3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFl
cXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0ganNCb29sZWFuKCFlcXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3Jj
MSwgc3JjMikpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIFZv
aWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlfb3BfcG9zdF9kZWMoU1RVQl9BUkdTKQogewogICAg
IEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKKyAg
ICBKU1ZhbHVlUHRyIHYgPSBBUkdfc3JjMTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoY2Fs
bEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoY2FsbEZyYW1l
KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogCi0gICAgUkVUVVJOX1BBSVIo
YXNQb2ludGVyKG51bWJlciksIGFzUG9pbnRlcihqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbnVt
YmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpKSk7CisgICAgUkVUVVJOX1BBSVIoSlNWYWx1
ZVB0cjo6ZW5jb2RlKG51bWJlciksIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpKSk7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfdXJzaGlmdChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF91cnNoaWZ0KFNUVUJfQVJHUykKIHsKICAg
ICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2YWwgPSBBUkdfc3JjMTsK
LSAgICBKU1ZhbHVlKiBzaGlmdCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgdmFsID0gQVJH
X3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzaGlmdCA9IEFSR19zcmMyOwogCiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVC
b3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSAmJiAhSlNJbW1lZGlhdGU6OmlzTmVnYXRp
dmUodmFsKSkKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRl
TnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShK
U0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpOwogICAg
IGVsc2UgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0
YSwgKHZhbC0+dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJh
bWUpICYgMHgxZikpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCAodmFsLT50b1VJbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMy
KGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5E
KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKICAgICB9CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bf
Yml0eG9yKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6
Y3RpX29wX2JpdHhvcihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
Ci0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdf
c3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNy
YzIgPSBBUkdfc3JjMjsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMx
LT50b0ludDMyKGNhbGxGcmFtZSkgXiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIo
Y2FsbEZyYW1lKSBeIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVl
UHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogSlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3Bf
bmV3X3JlZ2V4cChTVFVCX0FSR1MpCkBAIC01NjQyLDIxICs1NjQ0LDIxIEBAIEpTT2JqZWN0KiBJ
bnRlcnByZXRlcjo6Y3RpX29wX25ld19yZWdleHAKICAgICByZXR1cm4gbmV3IChBUkdfZ2xvYmFs
RGF0YSkgUmVnRXhwT2JqZWN0KEFSR19jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwU3RydWN0dXJlKCksIEFSR19yZWdleHAxKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9iaXRvcihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50
ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNy
YzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1Zh
bHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgfCBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEt
PnRvSW50MzIoY2FsbEZyYW1lKSB8IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9jYWxsX2V2YWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIElu
dGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVC
X0ZVTkNUSU9OKCk7CiAKQEAgLTU2NjUsMjkgKzU2NjcsMjkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9jYWxsX2V2YWwoUwogCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
QVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyOwogICAgIAotICAgIEpTVmFsdWUqIGZ1bmNWYWwg
PSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmNWYWwgPSBBUkdfc3JjMTsKICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSBBUkdfaW50MjsKICAgICBpbnQgYXJnQ291bnQgPSBBUkdfaW50MzsK
IAogICAgIFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
cmVnaXN0ZXJPZmZzZXQ7CiAgICAgUmVnaXN0ZXIqIGFyZ3YgPSBuZXdDYWxsRnJhbWUgLSBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudDsKLSAgICBKU1ZhbHVlKiB0
aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCk7
CiAKICAgICBpZiAodGhpc1ZhbHVlID09IGdsb2JhbE9iamVjdCAmJiBmdW5jVmFsID09IGdsb2Jh
bE9iamVjdC0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFs
dWUgPSBub1ZhbHVlKCk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGludGVycHJldGVyLT5j
YWxsRXZhbChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwgYXJnQ291bnQsIHJlZ2lzdGVy
T2Zmc2V0LCBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uVmFs
dWUgPSBub1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gaW50ZXJwcmV0ZXIt
PmNhbGxFdmFsKGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxlLCBhcmd2LCBhcmdDb3VudCwgcmVnaXN0
ZXJPZmZzZXQsIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGV4Y2VwdGlv
blZhbHVlICE9IG5vVmFsdWUoKSkpIHsKICAgICAgICAgICAgIEFSR19nbG9iYWxEYXRhLT5leGNl
cHRpb24gPSBleGNlcHRpb25WYWx1ZTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9B
VF9FTkQoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfdGhyb3coU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIElu
dGVycHJldGVyOjpjdGlfb3BfdGhyb3coU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIApAQCAtNTY5NiwyMSArNTY5OCwyMSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
Y3RpX29wX3Rocm93KFNUVUJfCiAKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+
Z2V0Qnl0ZWNvZGVJbmRleChTVFVCX1JFVFVSTl9BRERSRVNTKTsKIAotICAgIEpTVmFsdWUqIGV4
Y2VwdGlvblZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBleGNlcHRpb25WYWx1ZSA9
IEFSR19zcmMxOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CiAKICAgICBIYW5kbGVySW5m
byogaGFuZGxlciA9IEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+dGhyb3dFeGNlcHRpb24o
Y2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgdlBDSW5kZXgsIHRydWUpOwogCiAgICAgaWYgKCFo
YW5kbGVyKSB7CiAgICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7Ci0gICAg
ICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkpOwogICAgIH0K
IAogICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICB2b2lkKiBjYXRjaFJvdXRp
bmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlOwogICAgIEFTU0VSVChjYXRjaFJvdXRpbmUpOwogICAg
IFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoZXhjZXB0aW9uVmFsdWUp
OwogfQogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9w
bmFtZXMoU1RVQl9BUkdTKQpAQCAtNTcyMCwxNSArNTcyMiwxNSBAQCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBJbnRlcnByZXRlcjo6Y3RpCiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6OmNyZWF0ZShBUkdfY2FsbEZyYW1lLCBBUkdfc3JjMSk7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXh0X3BuYW1lKFNUVUJfQVJHUykKIHsKICAgICBC
RUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9
IEFSR19wbmkxOwotICAgIEpTVmFsdWUqIHRlbXAgPSBpdC0+bmV4dChBUkdfY2FsbEZyYW1lKTsK
KyAgICBKU1ZhbHVlUHRyIHRlbXAgPSBpdC0+bmV4dChBUkdfY2FsbEZyYW1lKTsKICAgICBpZiAo
IXRlbXApCiAgICAgICAgIGl0LT5pbnZhbGlkYXRlKCk7Ci0gICAgcmV0dXJuIHRlbXA7CisgICAg
cmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZSh0ZW1wKTsKIH0KIAogSlNPYmplY3QqIEludGVycHJl
dGVyOjpjdGlfb3BfcHVzaF9zY29wZShTVFVCX0FSR1MpCkBAIC01NzQ4LDEwMiArNTc1MCwxMDIg
QEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3BvcF9zY29wZShTVFVCXwogICAgIEFSR19jYWxs
RnJhbWUtPnNldFNjb3BlQ2hhaW4oQVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wb3AoKSk7
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfdHlwZW9mKFNUVUJfQVJHUykKK0pT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZihTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzVHlwZVN0
cmluZ0ZvclZhbHVlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKKyAgICByZXR1cm4gSlNWYWx1
ZVB0cjo6ZW5jb2RlKGpzVHlwZVN0cmluZ0ZvclZhbHVlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMx
KSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfdW5kZWZpbmVkKFNUVUJf
QVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX3Vu
ZGVmaW5lZChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAg
SlNWYWx1ZSogdiA9IEFSR19zcmMxOwotICAgIHJldHVybiBqc0Jvb2xlYW4oSlNJbW1lZGlhdGU6
OmlzSW1tZWRpYXRlKHYpID8gdi0+aXNVbmRlZmluZWQoKSA6IHYtPmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkpOworICAgIEpTVmFsdWVQ
dHIgdiA9IEFSR19zcmMxOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFu
KEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVkKCkgOiB2LT5hc0Nl
bGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKSk7
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfYm9vbGVhbihTVFVCX0FSR1Mp
CitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19ib29sZWFu
KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICByZXR1cm4g
anNCb29sZWFuKEFSR19zcmMxLT5pc0Jvb2xlYW4oKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6
OmVuY29kZShqc0Jvb2xlYW4oQVJHX3NyYzEtPmlzQm9vbGVhbigpKSk7CiB9CiAKLUpTVmFsdWUq
IEludGVycHJldGVyOjpjdGlfb3BfaXNfbnVtYmVyKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX251bWJlcihTVFVCX0FSR1MpCiB7CiAg
ICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihBUkdfc3Jj
MS0+aXNOdW1iZXIoKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4o
QVJHX3NyYzEtPmlzTnVtYmVyKCkpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9pc19zdHJpbmcoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfaXNfc3RyaW5nKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICByZXR1cm4ganNCb29sZWFuKEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRl
ci0+aXNKU1N0cmluZyhBUkdfc3JjMSkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
anNCb29sZWFuKEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+aXNKU1N0cmluZyhBUkdfc3Jj
MSkpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19vYmplY3QoU1RVQl9B
UkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaXNfb2Jq
ZWN0KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICByZXR1
cm4ganNCb29sZWFuKGpzSXNPYmplY3RUeXBlKEFSR19zcmMxKSk7CisgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oanNJc09iamVjdFR5cGUoQVJHX3NyYzEpKSk7CiB9CiAK
LUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfZnVuY3Rpb24oU1RVQl9BUkdTKQorSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaXNfZnVuY3Rpb24oU1RV
Ql9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc0Jv
b2xlYW4oanNJc0Z1bmN0aW9uVHlwZShBUkdfc3JjMSkpOworICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUoanNCb29sZWFuKGpzSXNGdW5jdGlvblR5cGUoQVJHX3NyYzEpKSk7CiB9CiAKLUpT
VmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEoU1RVQl9BUkdTKQog
ewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdf
c3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMx
ID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICAvLyBo
YW5kbGVkIGlubGluZSBhcyBmYXN0IGNhc2VzCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJl
Qm90aEltbWVkaWF0ZShzcmMxLCBzcmMyKSk7CiAgICAgQVNTRVJUKCEoSlNJbW1lZGlhdGU6Omlz
RWl0aGVySW1tZWRpYXRlKHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9J
bW1lZGlhdGUoKSkgJiAoc3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkpOwog
Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKHNyYzEsIHNy
YzIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihzdHJpY3RFcXVh
bFNsb3dDYXNlSW5saW5lKHNyYzEsIHNyYzIpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfbnN0cmljdGVxKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX25zdHJpY3RlcShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RV
Ql9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFs
dWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAg
ICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIC8vIGhhbmRsZWQgaW5saW5lIGFz
IGZhc3QgY2FzZXMKICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlKHNy
YzEsIHNyYzIpKTsKICAgICBBU1NFUlQoIShKU0ltbWVkaWF0ZTo6aXNFaXRoZXJJbW1lZGlhdGUo
c3JjMSwgc3JjMikgJiAoc3JjMSAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSAmIChz
cmMyICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7CiAgICAgCi0gICAgcmV0dXJu
IGpzQm9vbGVhbighc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShzcmMxLCBzcmMyKSk7CisgICAg
cmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oIXN0cmljdEVxdWFsU2xvd0Nhc2VJ
bmxpbmUoc3JjMSwgc3JjMikpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF90
b19qc251bWJlcihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF90b19qc251bWJlcihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBz
cmMgPSBBUkdfc3JjMTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7
CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBzcmMtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNyYy0+dG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfaW4oU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfaW4oU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVl
KiBiYXNlVmFsID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsID0gQVJHX3NyYzI7
CiAKICAgICBpZiAoIWJhc2VWYWwtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwpAQCAtNTg1MywxNiArNTg1NSwxNiBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2luKFNUVUJfQVJHCiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQ
VElPTigpOwogICAgIH0KIAotICAgIEpTVmFsdWUqIHByb3BOYW1lID0gQVJHX3NyYzE7CisgICAg
SlNWYWx1ZVB0ciBwcm9wTmFtZSA9IEFSR19zcmMxOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0g
YXNPYmplY3QoYmFzZVZhbCk7CiAKICAgICB1aW50MzJfdCBpOwogICAgIGlmIChwcm9wTmFtZS0+
Z2V0VUludDMyKGkpKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGNhbGxGcmFtZSwgaSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpz
Qm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGkpKSk7CiAKICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgcHJvcE5hbWUtPnRvU3RyaW5nKGNhbGxGcmFtZSkp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICByZXR1cm4ganNCb29sZWFuKGJhc2VP
YmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHBy
b3BlcnR5KSkpOwogfQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX25ld19z
Y29wZShTVFVCX0FSR1MpCkBAIC01OTAzLDcgKzU5MDUsNyBAQCB2b2lkKiBJbnRlcnByZXRlcjo6
Y3RpX29wX3N3aXRjaF9pbW0oU1RVCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0g
ICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzY3J1dGlu
ZWUgPSBBUkdfc3JjMTsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gQVJHX2ludDI7CiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKQEAgLTU5MjAsNyArNTkyMiw3IEBAIHZv
aWQqIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2NoYXIoU1QKIHsKICAgICBCRUdJTl9TVFVC
X0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBBUkdfc3JjMTsKKyAgICBK
U1ZhbHVlUHRyIHNjcnV0aW5lZSA9IEFSR19zcmMxOwogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXgg
PSBBUkdfaW50MjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtNTk0
MCw3ICs1OTQyLDcgQEAgdm9pZCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKAog
ewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9
IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5z
aWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CkBAIC01OTU1LDE3ICs1OTU3LDE3IEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlf
b3Bfc3dpdGNoX3N0cmluZygKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbChTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBKU09iamVjdCogYmFzZU9iaiA9IGJh
c2VWYWx1ZS0+dG9PYmplY3QoY2FsbEZyYW1lKTsgLy8gbWF5IHRocm93CiAKLSAgICBKU1ZhbHVl
KiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1
ZVB0ciBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICB1
aW50MzJfdCBpOwogICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihpKSkKICAgICAgICAgcmVz
dWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaSkpOwpA
QCAtNTk3Nyw3ICs1OTc5LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlf
dmFsKAogICAgIH0KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
IHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfZ2V0dGVyKFNUVUJfQVJHUykKQEAgLTYwMTEs
NyArNjAxMyw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJvcigKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIHR5cGUgPSBB
UkdfaW50MTsKLSAgICBKU1ZhbHVlKiBtZXNzYWdlID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0
ciBtZXNzYWdlID0gQVJHX3NyYzI7CiAgICAgdW5zaWduZWQgbGluZU51bWJlciA9IEFSR19pbnQz
OwogCiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxFcnJv
clR5cGU+KHR5cGUpLCBtZXNzYWdlLT50b1N0cmluZyhjYWxsRnJhbWUpLCBsaW5lTnVtYmVyLCBj
b2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgp
LT5zb3VyY2VVUkwoKSk7CkBAIC02MDMwLDcgKzYwMzIsNyBAQCB2b2lkIEludGVycHJldGVyOjpj
dGlfb3BfZGVidWcoU1RVQl9BUkdTCiAgICAgQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5k
ZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVnSG9va0lEPihkZWJ1Z0hvb2tJRCksIGZp
cnN0TGluZSwgbGFzdExpbmUpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX3ZtX3Ro
cm93KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X3ZtX3Rocm93KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKQEAg
LTYwNDAsNyArNjA0Miw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfdm1fdGhyb3coU1RV
Ql8KIAogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5nZXRCeXRlY29kZUluZGV4
KGdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKTsKIAotICAgIEpTVmFsdWUqIGV4Y2VwdGlv
blZhbHVlID0gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9u
VmFsdWUgPSBnbG9iYWxEYXRhLT5leGNlcHRpb247CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVl
KTsKICAgICBnbG9iYWxEYXRhLT5leGNlcHRpb24gPSBub1ZhbHVlKCk7CiAKQEAgLTYwNDgsMTQg
KzYwNTAsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdyhTVFVCXwogCiAg
ICAgaWYgKCFoYW5kbGVyKSB7CiAgICAgICAgICpBUkdfZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFs
dWU7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkp
OwogICAgIH0KIAogICAgIEFSR19zZXRDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICB2b2lkKiBj
YXRjaFJvdXRpbmUgPSBoYW5kbGVyLT5uYXRpdmVDb2RlOwogICAgIEFTU0VSVChjYXRjaFJvdXRp
bmUpOwogICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGNhdGNoUm91dGluZSk7Ci0gICAgcmV0
dXJuIGV4Y2VwdGlvblZhbHVlOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoZXhjZXB0
aW9uVmFsdWUpOwogfQogCiAjdW5kZWYgU1RVQl9SRVRVUk5fQUREUkVTUwpJbmRleDogSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAzOTU5MykKKysrIEph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCwxMyArMTQwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNPcGNv
ZGUoT3Bjb2RlKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoUHJvZ3JhbU5v
ZGUqLCBDYWxsRnJhbWUqLCBTY29wZUNoYWluTm9kZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1Zh
bHVlKiogZXhjZXB0aW9uKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShGdW5jdGlvbkJvZHlO
b2RlKiwgQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBB
cmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24pOwotICAg
ICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUq
KiBleGNlcHRpb24pOwotCi0gICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQXJndW1lbnRzKENhbGxG
cmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogcmV0cmlldmVDYWxs
ZXIoQ2FsbEZyYW1lKiwgSW50ZXJuYWxGdW5jdGlvbiopIGNvbnN0OwotICAgICAgICB2b2lkIHJl
dHJpZXZlTGFzdENhbGxlcihDYWxsRnJhbWUqLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBz
b3VyY2VJRCwgVVN0cmluZyYgc291cmNlVVJMLCBKU1ZhbHVlKiYgZnVuY3Rpb24pIGNvbnN0Owor
ICAgICAgICBKU1ZhbHVlUHRyIGV4ZWN1dGUoUHJvZ3JhbU5vZGUqLCBDYWxsRnJhbWUqLCBTY29w
ZUNoYWluTm9kZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pOwor
ICAgICAgICBKU1ZhbHVlUHRyIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIENhbGxGcmFtZSos
IEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2Nv
cGVDaGFpbk5vZGUqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlUHRy
IGV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9u
KTsKKworICAgICAgICBKU1ZhbHVlUHRyIHJldHJpZXZlQXJndW1lbnRzKENhbGxGcmFtZSosIEpT
RnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXRyaWV2ZUNhbGxlcihDYWxs
RnJhbWUqLCBJbnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7CisgICAgICAgIHZvaWQgcmV0cmlldmVM
YXN0Q2FsbGVyKENhbGxGcmFtZSosIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlE
LCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWVQdHImIGZ1bmN0aW9uKSBjb25zdDsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgZ2V0QXJndW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9u
KiYsIHB0cmRpZmZfdCYgZmlyc3RQYXJhbWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQm
IGFyZ2MpOwogICAgICAgICB2b2lkIHNldFRpbWVvdXRUaW1lKHVuc2lnbmVkIHRpbWVvdXRUaW1l
KSB7IG1fdGltZW91dFRpbWUgPSB0aW1lb3V0VGltZTsgfQpAQCAtMTgzLDggKzE4Myw4IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29w
X2NvbnZlcnRfdGhpcyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfZW5kKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfYWRkKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfcHJlX2luYyhTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9hZGQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcHJlX2luYyhTVFVCX0FS
R1MpOwogICAgICAgICBzdGF0aWMgaW50IEpJVF9TVFVCIGN0aV9vcF9sb29wX2lmX2xlc3MoU1RV
Ql9BUkdTKTsKICAgICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlfb3BfbG9vcF9pZl9sZXNz
ZXEoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3Bf
bmV3X29iamVjdChTVFVCX0FSR1MpOwpAQCAtMTkyLDIyICsxOTIsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfc2Vjb25k
KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfaWQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKFNUVUJfQVJHUyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9B
UkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRf
c2VsZl9mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKFNUVUJfQVJH
Uyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3By
b3RvX2ZhaWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0
aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2RlbF9ieV9pZChTVFVCX0FS
R1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2Yo
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9tdWwo
U1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRf
U1RVQiBjdGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWNvbmQoU1RVQl9B
UkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBj
dGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0
aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fbGlzdF9mdWxsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHUyk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV9vcF9kZWxfYnlfaWQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1MpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9t
dWwoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3Bf
bmV3X2Z1bmMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJVF9TVFVCIGN0aV9v
cF9jYWxsX0pTRnVuY3Rpb24oU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIFZvaWRQdHJQYWly
IEpJVF9TVFVCIGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24oU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRp
YyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyhTVFVCX0FS
R1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0aXZh
dGlvbihTVFVCX0FSR1MpOwpAQCAtMjE2LDcxICsyMTYsNzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX2RpZF9jYWxsKFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9yZXRfc2NvcGVDaGFp
bihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9u
ZXdfYXJyYXkoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0
aV9vcF9yZXNvbHZlKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RV
QiBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZShTVFVCX0FSR1MpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9y
ZXNvbHZlX2dsb2JhbChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9T
VFVCIGN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QoU1RVQl9BUkdTKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QoU1RV
Ql9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlf
dmFsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1MpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfdmFsKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBKSVRfU1RVQiBj
dGlfb3BfcmVzb2x2ZV9mdW5jKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3Bfc3ViKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3N1YihTVFVCX0FSR1MpOwogICAgICAgICBz
dGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbChTVFVCX0FSR1MpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheShTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2xlc3NlcShTVFVCX0FS
R1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0
aV9vcF9sZXNzZXEoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlf
b3BfbG9vcF9pZl90cnVlKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRf
U1RVQiBjdGlfb3BfcmVzb2x2ZV9iYXNlKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBKSVRfU1RVQiBjdGlfb3BfbmVnYXRlKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9za2lwKFNUVUJfQVJHUyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZGl2KFNUVUJfQVJHUyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfcHJlX2RlYyhTVFVCX0FSR1MpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9yZXNv
bHZlX2Jhc2UoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfbmVnYXRlKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfc2tpcChTVFVC
X0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVC
IGN0aV9vcF9kaXYoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcHJlX2RlYyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0
aWMgaW50IEpJVF9TVFVCIGN0aV9vcF9qbGVzcyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX25vdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9ub3QoU1RVQl9BUkdTKTsK
ICAgICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlfb3BfanRydWUoU1RVQl9BUkdTKTsKICAg
ICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9wb3N0X2luYyhTVFVCX0FS
R1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2VxKFNUVUJfQVJH
Uyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbHNoaWZ0KFNUVUJf
QVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfYml0YW5kKFNU
VUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfcnNoaWZ0
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfYml0
bm90KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SklUX1NUVUIgY3RpX29wX2VxKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2xzaGlmdChTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXRhbmQo
U1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRf
U1RVQiBjdGlfb3BfcnNoaWZ0KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2JpdG5vdChTVFVCX0FSR1MpOwogICAgICAg
ICBzdGF0aWMgVm9pZFB0clBhaXIgSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKFNU
VUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19m
dW5jX2V4cChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX21vZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX2xlc3MoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0
aV9vcF9uZXEoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfbW9kKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2xlc3MoU1RVQl9BUkdTKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbmVx
KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBKSVRfU1RVQiBjdGlfb3Bf
cG9zdF9kZWMoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0
aV9vcF91cnNoaWZ0KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RV
QiBjdGlfb3BfYml0eG9yKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdTKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfYml0eG9yKFNU
VUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19y
ZWdleHAoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9v
cF9iaXRvcihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX2NhbGxfZXZhbChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NU
VUIgY3RpX29wX3Rocm93KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2JpdG9yKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2NhbGxfZXZhbChT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV9vcF90aHJvdyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogSklUX1NUVUIgY3RpX29wX2dldF9wbmFtZXMoU1RVQl9BUkdTKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9uZXh0X3BuYW1lKFNUVUJfQVJHUyk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29w
X25leHRfcG5hbWUoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RV
QiBjdGlfb3BfcHVzaF9zY29wZShTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfcG9wX3Njb3BlKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBKSVRfU1RVQiBjdGlfb3BfdHlwZW9mKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfdW5kZWZpbmVkKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfYm9vbGVhbihTVFVCX0FSR1MpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX251bWJlcihTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX3N0cmluZyhTVFVC
X0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX29iamVj
dChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lz
X2Z1bmN0aW9uKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3Bfc3RyaWN0ZXEoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9T
VFVCIGN0aV9vcF9uc3RyaWN0ZXEoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IEpJVF9TVFVCIGN0aV9vcF90b19qc251bWJlcihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2luKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3R5cGVvZihTVFVCX0FSR1Mp
OworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9v
cF9pc191bmRlZmluZWQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaXNfYm9vbGVhbihTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9pc19udW1i
ZXIoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBK
SVRfU1RVQiBjdGlfb3BfaXNfc3RyaW5nKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX29iamVjdChTVFVCX0FSR1Mp
OworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9v
cF9pc19mdW5jdGlvbihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9zdHJpY3RlcShTVFVCX0FSR1MpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9uc3RyaWN0ZXEo
U1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRf
U1RVQiBjdGlfb3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTKTsKICAgICAg
ICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9uZXdfc2NvcGUoU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX2ptcF9zY29wZXMoU1RV
Ql9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRl
eChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRj
aF9pbW0oU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9z
d2l0Y2hfY2hhcihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NUVUIgY3Rp
X29wX3N3aXRjaF9zdHJpbmcoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9kZWxfYnlfdmFsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2RlbF9ieV92YWwoU1RVQl9BUkdT
KTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXIoU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9zZXR0ZXIoU1RV
Ql9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2Vy
cm9yKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9kZWJ1
ZyhTVFVCX0FSR1MpOwogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfdm1f
dGhyb3coU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQq
IEpJVF9TVFVCIGN0aV92bV9kb250TGF6eUxpbmtDYWxsKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0
YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fbGF6eUxpbmtDYWxsKFNUVUJfQVJHUyk7CiAgICAg
ICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfYWN0aXZhdGlvbihTVFVC
X0FSR1MpOwpAQCAtMjkwLDQzICsyOTAsNDMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IERlZmF1bHQgbnVtYmVyIG9mIHRpY2tzIGJlZm9yZSBhIHRpbWVvdXQgY2hlY2sgc2hvdWxkIGJl
IGRvbmUuCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaW5pdGlhbFRpY2tDb3VudFRocmVzaG9s
ZCA9IDEwMjQ7CiAKLSAgICAgICAgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZSogdikgeyByZXR1cm4g
IUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0cigpID09IG1f
anNBcnJheVZwdHI7IH0KLSAgICAgICAgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWUqIHYpIHsgcmV0
dXJuICFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxsKCktPnZwdHIoKSA9
PSBtX2pzU3RyaW5nVnB0cjsgfQorICAgICAgICBib29sIGlzSlNBcnJheShKU1ZhbHVlUHRyIHYp
IHsgcmV0dXJuICFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxsKCktPnZw
dHIoKSA9PSBtX2pzQXJyYXlWcHRyOyB9CisgICAgICAgIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVl
UHRyIHYpIHsgcmV0dXJuICFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxs
KCktPnZwdHIoKSA9PSBtX2pzU3RyaW5nVnB0cjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07CiAKLSAg
ICAgICAgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGNhbGxFdmFsKENhbGxGcmFtZSosIFJlZ2lzdGVy
RmlsZSosIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBKU1Zh
bHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2YWxOb2Rl
KiwgQ2FsbEZyYW1lKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGludCBnbG9iYWxSZWdpc3Rlck9m
ZnNldCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgTkVW
RVJfSU5MSU5FIEpTVmFsdWVQdHIgY2FsbEV2YWwoQ2FsbEZyYW1lKiwgUmVnaXN0ZXJGaWxlKiwg
UmVnaXN0ZXIqIGFyZ3YsIGludCBhcmdjLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIEpTVmFsdWVQdHIm
IGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGVjdXRlKEV2YWxOb2RlKiwg
Q2FsbEZyYW1lKiwgSlNPYmplY3QqIHRoaXNPYmplY3QsIGludCBnbG9iYWxSZWdpc3Rlck9mZnNl
dCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pOwogCiAgICAgICAgIE5F
VkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lELCBpbnQgZmlyc3RM
aW5lLCBpbnQgbGFzdExpbmUpOwogCi0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmUo
Q2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAg
ICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlU2tpcChDYWxsRnJhbWUqLCBJbnN0cnVjdGlv
biosIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29s
IHJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0
aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlKENhbGxGcmFtZSos
IEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZF
Ul9JTkxJTkUgYm9vbCByZXNvbHZlU2tpcChDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFs
dWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2
ZUdsb2JhbChDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZh
bHVlKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiwg
SW5zdHJ1Y3Rpb24qIHZQQyk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNl
QW5kUHJvcGVydHkoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9u
VmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlQmFzZUFuZFByb3BlcnR5
KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpOwog
ICAgICAgICBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZUV4Y2VwdGlvblNjb3Bl
KENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpOwogCi0gICAgICAgIE5FVkVSX0lO
TElORSBib29sIHVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZSosIHVuc2lnbmVk
JiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYpOwotICAgICAgICBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomLCBKU1ZhbHVlKiYsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBib29sKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2
ZUJhc2VBbmRGdW5jKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlv
blZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgdW53aW5kQ2FsbEZyYW1lKENhbGxG
cmFtZSomLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayom
KTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB0aHJvd0V4Y2VwdGlvbihDYWxs
RnJhbWUqJiwgSlNWYWx1ZVB0ciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBib29sKTsKKyAg
ICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRGdW5jKENhbGxGcmFtZSosIElu
c3RydWN0aW9uKiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoQ29k
ZUJsb2NrKiwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJnYyk7CiAKICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogZmluZEZ1bmN0aW9uQ2Fs
bEZyYW1lKENhbGxGcmFtZSosIEludGVybmFsRnVuY3Rpb24qKTsKIAotICAgICAgICBKU1ZhbHVl
KiBwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUq
LCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcml2YXRlRXhlY3V0
ZShFeGVjdXRpb25GbGFnLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlUHRyKiBl
eGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgZHVtcENhbGxGcmFtZShDYWxsRnJhbWUqKTsKICAg
ICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwogCi0gICAgICAgIEpTVmFsdWUq
IGNoZWNrVGltZW91dChKU0dsb2JhbE9iamVjdCopOworICAgICAgICBib29sIGNoZWNrVGltZW91
dChKU0dsb2JhbE9iamVjdCopOwogICAgICAgICB2b2lkIHJlc2V0VGltZW91dENoZWNrKCk7CiAK
LSAgICAgICAgdm9pZCB0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgSW5z
dHJ1Y3Rpb24qLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5Q2FjaGVHZXRCeUlE
KENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZvaWQgdW5jYWNoZUdldEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qIHZQ
Qyk7Ci0gICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayos
IEluc3RydWN0aW9uKiwgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgdm9pZCB0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwg
SW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHZvaWQgdW5jYWNoZVB1dEJ5SUQoQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24q
IHZQQyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzQ2FsbEJ5dGVjb2RlKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbCkgfHwgb3Bjb2RlID09IGdl
dE9wY29kZShvcF9jb25zdHJ1Y3QpIHx8IG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbF9ldmFs
KTsgfQpAQCAtMzM0LDggKzMzNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIHN0YXRpYyB2b2lkIHRocm93U3RhY2tPdmVyZmxvd1ByZXZpb3VzRnJhbWUoQ2Fs
bEZyYW1lKiosIEpTR2xvYmFsRGF0YSosIHZvaWQqJiByZXR1cm5BZGRyZXNzKTsKIAotICAgICAg
ICB2b2lkIHRyeUNUSUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiBy
ZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgdHJ5Q1RJQ2FjaGVQ
dXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFs
dWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5
Q1RJQ2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIHZvaWQqIHJldHVybkFkZHJl
c3MsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRyeUNUSUNhY2hlUHV0QnlJRChD
YWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlUHRyIGJh
c2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CiAjZW5kaWYKIAogICAgICAgICBTYW1w
bGluZ1Rvb2wqIG1fc2FtcGxlcjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0
ZXIuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgUmVnaXN0ZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVnaXN0ZXIoKTsK
LSAgICAgICAgUmVnaXN0ZXIoSlNWYWx1ZSopOworICAgICAgICBSZWdpc3RlcihKU1ZhbHVlUHRy
KTsKIAotICAgICAgICBKU1ZhbHVlKiBqc1ZhbHVlKENhbGxGcmFtZSopIGNvbnN0OwotICAgICAg
ICBKU1ZhbHVlKiBnZXRKU1ZhbHVlKCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIganNWYWx1
ZShDYWxsRnJhbWUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRKU1ZhbHVlKCkgY29u
c3Q7CiAKICAgICAgICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBtYXJrKCk7
CkBAIC04OSw3ICs4OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bmlvbiB7CiAgICAg
ICAgICAgICBpbnRwdHJfdCBpOwogICAgICAgICAgICAgdm9pZCogdjsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIHZhbHVl
OwogCiAgICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb247CiAgICAgICAgICAgICBB
cmd1bWVudHMqIGFyZ3VtZW50czsKQEAgLTEzNSwyOSArMTM1LDI5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFNFVF9UWVBFKEVtcHR5VHlwZSk7Ci0g
ICAgICAgICp0aGlzID0gbm9WYWx1ZSgpOworICAgICAgICB1LnZhbHVlID0gSlNWYWx1ZVB0cjo6
ZW5jb2RlKG5vVmFsdWUoKSk7CiAjZW5kaWYKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJl
Z2lzdGVyOjpSZWdpc3RlcihKU1ZhbHVlKiB2KQorICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6
OlJlZ2lzdGVyKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAgICAgIFNFVF9UWVBFKFZhbHVlVHlw
ZSk7Ci0gICAgICAgIHUudmFsdWUgPSB2OworICAgICAgICB1LnZhbHVlID0gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHYpOwogICAgIH0KIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgc2NhZmZvbGRpbmcg
Zm9yIGxlZ2FjeSBjbGllbnRzLiBJdCB3aWxsIGV2ZW50dWFsbHkgZ28gYXdheS4KLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIFJlZ2lzdGVyOjpqc1ZhbHVlKENhbGxGcmFtZSopIGNvbnN0Cisg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIFJlZ2lzdGVyOjpqc1ZhbHVlKENhbGxGcmFtZSop
IGNvbnN0CiAgICAgewogICAgICAgICAvLyBPbmNlIHJlZ2lzdGVycyBob2xkIGRvdWJsZXMsIHRo
aXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSBhIEpTVmFsdWUqCiAgICAgICAgIC8vIGlmIHRoZSBy
ZWdpc3RlciBkb2Vzbid0IGhvbGQgb25lIGFscmVhZHkuIAogICAgICAgICBBU1NFUlRfVFlQRShW
YWx1ZVR5cGUpOwotICAgICAgICByZXR1cm4gdS52YWx1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmRlY29kZSh1LnZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBSZWdpc3Rlcjo6Z2V0SlNWYWx1ZSgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIFJlZ2lzdGVyOjpnZXRKU1ZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVF9UWVBFKEpTVmFsdWVUeXBlKTsKLSAgICAgICAgcmV0dXJuIHUudmFsdWU7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlUHRyOjpkZWNvZGUodS52YWx1ZSk7CiAgICAgfQogICAgIAogICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBSZWdpc3Rlcjo6bWFya2VkKCkgY29uc3QKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJh
bXBvbGluZSkgIjoiIAogCiBleHRlcm4gIkMiIHsKICAgICAKLSAgICBfX2RlY2xzcGVjKG5ha2Vk
KSBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxG
cmFtZSosIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopCisg
ICAgX19kZWNsc3BlYyhuYWtlZCkgSlNWYWx1ZVB0ciBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUs
IFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbiwgUHJvZmls
ZXIqKiwgSlNHbG9iYWxEYXRhKikKICAgICB7CiAgICAgICAgIF9fYXNtIHsKICAgICAgICAgICAg
IHB1c2ggZWJwOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cShJbnN0cnVjdGlvbioKICAgICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0J1dE5vdEVxdWFsID0g
am5lMzIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKIAogICAgIC8vIFRoZXkgYXJlIGVxdWFsIC0gc2V0
IHRoZSByZXN1bHQgdG8gdHJ1ZS4gKE9yIGZhbHNlLCBpZiBuZWdhdGVkKS4KLSAgICBtb3ZlKElt
bVB0cihqc0Jvb2xlYW4oIW5lZ2F0ZWQpKSwgWDg2OjplYXgpOworICAgIG1vdmUoSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oIW5lZ2F0ZWQpKSksIFg4Njo6ZWF4KTsKICAgICBK
dW1wIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsID0ganVtcCgpOwogCiAgICAgLy8gZWF4IHdh
cyBub3QgYW4gaW1tZWRpYXRlLCB3ZSBoYXZlbid0IHlldCBjaGVja2VkIGVkeC4KQEAgLTIzNSwx
OSArMjM1LDE5IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAg
ICAvLyBvdGhlcndpc2UgdGhlc2UgdmFsdWVzIGFyZSBub3QgZXF1YWwuCiAgICAgZmlyc3ROb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoWDg2Ojpl
ZHgpOwotICAgIGFkZFNsb3dDYXNlKGplUHRyKFg4Njo6ZWR4LCBJbW1QdHIoSlNJbW1lZGlhdGU6
Onplcm9JbW1lZGlhdGUoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShqZVB0cihYODY6OmVkeCwgSW1t
UHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkpKTsK
ICAgICBKdW1wIGZpcnN0V2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAgICAgLy8gZWF4IHdh
cyBhbiBpbW1lZGlhdGUsIGJ1dCBlZHggd2Fzbid0LgogICAgIC8vIElmIGVheCBpcyAwIGp1bXAg
dG8gYSBzbG93IGNhc2UsIG90aGVyd2lzZSB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBlcXVhbC4KICAg
ICBzZWNvbmROb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShqZVB0cihY
ODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7CisgICAgYWRk
U2xvd0Nhc2UoamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1l
ZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKSk7CiAKICAgICAvLyBXZSBnZXQgaGVyZSBpZiB0aGUg
dHdvIHZhbHVlcyBhcmUgZGlmZmVyZW50IGltbWVkaWF0ZXMsIG9yIG9uZSBpcyAwIGFuZCB0aGUg
b3RoZXIgaXMgYSBKU0NlbGwuCiAgICAgLy8gVmFlbHVlcyBhcmUgbm90IGVxdWFsLCBzZXQgdGhl
IHJlc3VsdCB0byBmYWxzZS4KICAgICBib3RoV2VyZUltbWVkaWF0ZXNCdXROb3RFcXVhbC5saW5r
KHRoaXMpOwogICAgIGZpcnN0V2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShJ
bW1QdHIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOworICAgIG1vdmUoSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4obmVnYXRlZCkpKSwgWDg2OjplYXgpOwogICAgIAog
ICAgIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsLmxpbmsodGhpcyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoamxQdHIoWDg2OjplYXgsIElt
bVB0cihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpLCB0YXJnZXQgKyAzKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGpsUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGdl
dENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBYODY6OmVh
eCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlh
dGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpsZVB0cihYODY6OmVheCwgSW1t
UHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSksIHRhcmdldCArIDMpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoamxlUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGdl
dENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBYODY6OmVh
eCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsgLy8gcmVsb2FkIHByb3RvCiAK
ICAgICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGxvYWQgdHJ1ZSByZXN1bHQKLSAgICAgICAg
ICAgIG1vdmUoSW1tUHRyKGpzQm9vbGVhbih0cnVlKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgWDg2Ojpl
YXgpOwogCiAgICAgICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwogCkBAIC00MjksOSArNDI5LDkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICBKdW1w
IGV4aXQgPSBqZVB0cihYODY6OmVjeCwgWDg2OjplZHgpOwogCi0gICAgICAgICAgICBqbmVQdHIo
WDg2OjplY3gsIEltbVB0cihqc051bGwoKSksIGxvb3ApOworICAgICAgICAgICAgam5lUHRyKFg4
Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSksIGxvb3ApOwogCi0g
ICAgICAgICAgICBtb3ZlKEltbVB0cihqc0Jvb2xlYW4oZmFsc2UpKSwgWDg2OjplYXgpOworICAg
ICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
KSwgWDg2OjplYXgpOwogCiAgICAgICAgICAgICBleGl0LmxpbmsodGhpcyk7CiAKQEAgLTYxOCwx
MSArNjE4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBqZVB0cihY
ODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKTsKKyAgICAgICAg
ICAgIEp1bXAgaXNaZXJvID0gamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNv
ZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKICAgICAgICAgICAgIGFkZEp1bXAo
am56MzIoWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlcikpLCB0
YXJnZXQgKyAyKTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRy
KGpzQm9vbGVhbih0cnVlKSkpLCB0YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbihmYWxzZSkpKSk7CisgICAgICAgICAg
ICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQ
dHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkp
KSk7CiAKICAgICAgICAgICAgIGlzWmVyby5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfbG9vcF9pZl90cnVlKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpnZVB0cihYODY6OmVh
eCwgSW1tUHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSksIHRhcmdldCArIDMpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoamdlUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBY
ODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTcxMiwxMSArNzEyLDExIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAot
ICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6
ZXJvSW1tZWRpYXRlKCkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRKdW1wKGplUHRy
KFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjp6ZXJvSW1t
ZWRpYXRlKCkpKSksIHRhcmdldCArIDIpOwogICAgICAgICAgICAgSnVtcCBpc05vblplcm8gPSBq
bnozMihYODY6OmVheCwgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyKSk7CiAK
LSAgICAgICAgICAgIGFkZEp1bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihqc0Jvb2xlYW4oZmFs
c2UpKSksIHRhcmdldCArIDIpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoam5lUHRyKFg4Njo6
ZWF4LCBJbW1QdHIoanNCb29sZWFuKHRydWUpKSkpOworICAgICAgICAgICAgYWRkSnVtcChqZVB0
cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkp
LCB0YXJnZXQgKyAyKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6OmVheCwg
SW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwogCiAgICAgICAg
ICAgICBpc05vblplcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2pm
YWxzZSk7CkBAIC03MzYsNyArNzM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5k
ZWZpbmVkICYgbnVsbAogICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICAg
ICAgICAgIGFuZDMyKEltbTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIo
anNOdWxsKCkpKSwgdGFyZ2V0ICsgMik7ICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRKdW1w
KGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQgKyAyKTsgICAgICAgICAgICAKIAogICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZXFfbnVsbCk7CkBAIC03NTYs
NyArNzU2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAog
ICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICAgICAgICAgIGFuZDMyKElt
bTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBhZGRKdW1wKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpzTnVsbCgpKSksIHRh
cmdldCArIDIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkSnVtcChqbmVQdHIoWDg2Ojpl
YXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCArIDIpOyAg
ICAgICAgICAgIAogCiAgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2puZXFfbnVsbCk7CkBAIC03NjYsOCArNzY2LDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdW5leHBlY3RlZF9s
b2FkOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRD
b25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIG1v
dmUoSW1tUHRyKHYpLCBYODY6OmVheCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHYgPSBtX2Nv
ZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKHYpKSwgWDg2
OjplYXgpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3VuZXhwZWN0
ZWRfbG9hZCk7CiAgICAgICAgIH0KQEAgLTgzMywxMSArODMzLDExIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAg
ICAgICAgICAgSnVtcCBpc1plcm8gPSBqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRl
Ojp6ZXJvSW1tZWRpYXRlKCkpKTsKKyAgICAgICAgICAgIEp1bXAgaXNaZXJvID0gamVQdHIoWDg2
OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlh
dGUoKSkpKTsKICAgICAgICAgICAgIGFkZEp1bXAoam56MzIoWDg2OjplYXgsIEltbTMyKEpTSW1t
ZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlcikpLCB0YXJnZXQgKyAyKTsKIAotICAgICAgICAgICAg
YWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbih0cnVlKSkpLCB0YXJnZXQg
KyAyKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpz
Qm9vbGVhbihmYWxzZSkpKSk7CisgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJ
bW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVl
UHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAKICAgICAgICAgICAgIGlzWmVyby5s
aW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfanRydWUpOwpAQCAtMTA1Niw5
ICsxMDU2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfcHV0X3NldHRlcik7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG1lc3NhZ2UgPSBtX2NvZGVCbG9j
ay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciBtZXNzYWdlID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRD
b25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVt
aXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwg
MSk7Ci0gICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0NvbnN0YW50KG1lc3NhZ2UsIDIpOwor
ICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChKU1ZhbHVlUHRyOjplbmNvZGUo
bWVzc2FnZSksIDIpOwogICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChtX2Nv
ZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRleCksIDMp
OwogICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZXJyb3Ip
OwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKQEAgLTEyODgsMTIgKzEyODgsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xzaGlmdCk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
ICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMy
aW1tKSB7CisgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3Ay
KSkgewogICAgICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAgICAgICAgICAg
ICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1
dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQsIDIsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIob3AyLCAyLCBYODY6OmVjeCk7CiAgICAgICAgICAgICAgICAgZW1p
dENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOwogICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGpuejMyKFg4Njo6ZWF4KSwgdGFyZ2V0ICsgMyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMTMxNSw5ICsxMzE1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTogeworICAgICAgICAg
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYg
KHNyYzJpbW0pIHsKKyAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDIpKSB7CiAgICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgICAgICAg
ICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAgICAgICBl
bWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCwgMiwgWDg2OjplY3gpOwpAQCAtMTM3NSw5ICsxMzc1LDkgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3By
ZV9kZWMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVy
aWNBcmcoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAo
c3JjMmltbSkgeworICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMikpIHsKICAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgICAg
ICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYXgsIDEpOwogICAgICAgICAgICAgICAgIGVt
aXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kLCAyLCBYODY6OmVjeCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAzOTU5MykK
KysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5
LDE3IEBACiAKICNkZWZpbmUgQVJHX2NhbGxGcmFtZSBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihB
UkdTW1NUVUJfQVJHU19jYWxsRnJhbWVdKQogI2RlZmluZSBBUkdfcmVnaXN0ZXJGaWxlIHN0YXRp
Y19jYXN0PFJlZ2lzdGVyRmlsZSo+KEFSR1NbU1RVQl9BUkdTX3JlZ2lzdGVyRmlsZV0pCi0jZGVm
aW5lIEFSR19leGNlcHRpb24gc3RhdGljX2Nhc3Q8SlNWYWx1ZSoqPihBUkdTW1NUVUJfQVJHU19l
eGNlcHRpb25dKQorI2RlZmluZSBBUkdfZXhjZXB0aW9uIHN0YXRpY19jYXN0PEpTVmFsdWVQdHIq
PihBUkdTW1NUVUJfQVJHU19leGNlcHRpb25dKQogI2RlZmluZSBBUkdfcHJvZmlsZXJSZWZlcmVu
Y2Ugc3RhdGljX2Nhc3Q8UHJvZmlsZXIqKj4oQVJHU1tTVFVCX0FSR1NfcHJvZmlsZXJSZWZlcmVu
Y2VdKQogI2RlZmluZSBBUkdfZ2xvYmFsRGF0YSBzdGF0aWNfY2FzdDxKU0dsb2JhbERhdGEqPihB
UkdTW1NUVUJfQVJHU19nbG9iYWxEYXRhXSkKIAogI2RlZmluZSBBUkdfc2V0Q2FsbEZyYW1lKG5l
d0NhbGxGcmFtZSkgKEFSR1NbU1RVQl9BUkdTX2NhbGxGcmFtZV0gPSAobmV3Q2FsbEZyYW1lKSkK
IAotI2RlZmluZSBBUkdfc3JjMSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1sxXSkKLSNkZWZp
bmUgQVJHX3NyYzIgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbMl0pCi0jZGVmaW5lIEFSR19z
cmMzIHN0YXRpY19jYXN0PEpTVmFsdWUqPihBUkdTWzNdKQotI2RlZmluZSBBUkdfc3JjNCBzdGF0
aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1s0XSkKLSNkZWZpbmUgQVJHX3NyYzUgc3RhdGljX2Nhc3Q8
SlNWYWx1ZSo+KEFSR1NbNV0pCisjZGVmaW5lIEFSR19zcmMxIEpTVmFsdWVQdHI6OmRlY29kZShz
dGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KEFSR1NbMV0pKQorI2RlZmluZSBB
Ukdfc3JjMiBKU1ZhbHVlUHRyOjpkZWNvZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqPihBUkdTWzJdKSkKKyNkZWZpbmUgQVJHX3NyYzMgSlNWYWx1ZVB0cjo6ZGVjb2RlKHN0
YXRpY19jYXN0PEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKj4oQVJHU1szXSkpCisjZGVmaW5lIEFS
R19zcmM0IEpTVmFsdWVQdHI6OmRlY29kZShzdGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlcio+KEFSR1NbNF0pKQorI2RlZmluZSBBUkdfc3JjNSBKU1ZhbHVlUHRyOjpkZWNvZGUoc3Rh
dGljX2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihBUkdTWzVdKSkKICNkZWZpbmUgQVJH
X2lkMSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1sxXSkKICNkZWZpbmUgQVJHX2lkMiBz
dGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1syXSkKICNkZWZpbmUgQVJHX2lkMyBzdGF0aWNf
Y2FzdDxJZGVudGlmaWVyKj4oQVJHU1szXSkKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDsKICAgICBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLSAgICB0eXBlZGVmIEpTVmFsdWUqIChKSVRfU1RVQiAq
Q1RJSGVscGVyX2opKFNUVUJfQVJHUyk7CisgICAgdHlwZWRlZiBKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogKEpJVF9TVFVCICpDVElIZWxwZXJfaikoU1RVQl9BUkdTKTsKICAgICB0eXBlZGVmIEpT
T2JqZWN0KiAoSklUX1NUVUIgKkNUSUhlbHBlcl9vKShTVFVCX0FSR1MpOwogICAgIHR5cGVkZWYg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogKEpJVF9TVFVCICpDVElIZWxwZXJfcCkoU1RVQl9BUkdT
KTsKICAgICB0eXBlZGVmIHZvaWQgKEpJVF9TVFVCICpDVElIZWxwZXJfdikoU1RVQl9BUkdTKTsK
QEAgLTE5MywxMyArMTkzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBleHRl
cm4gIkMiIHsKLSAgICAgICAgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSgKKyAgICAgICAgSlNWYWx1
ZVB0ciBjdGlUcmFtcG9saW5lKAogI2lmIFBMQVRGT1JNKFg4Nl82NCkKICAgICAgICAgICAgIC8v
IEZJWE1FOiAoYnVnICMyMjkxMCkgdGhpcyB3aWxsIGZvcmNlIGFsbCBhcmd1bWVudHMgb250byB0
aGUgc3RhY2sgKHJlZ3Bhcm0oMCkgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgYW55IGVmZmVjdCku
CiAgICAgICAgICAgICAvLyBXZSBjYW4gYWxsb3cgcmVnaXN0ZXIgcGFzc2luZyBoZXJlLCBhbmQg
bW92ZSB0aGUgd3JpdGVzIG9mIHRoZXNlIHZhbHVlcyBpbnRvIHRoZSB0cmFtcG9saW5lLgogICAg
ICAgICAgICAgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwKICNlbmRp
ZgotICAgICAgICAgICAgdm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNW
YWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKik7CisgICAgICAgICAg
ICB2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlUHRyKiBleGNl
cHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOwogICAgICAgICB2b2lkIGN0aVZNVGhy
b3dUcmFtcG9saW5lKCk7CiAgICAgfTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIENv
ZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCB2b2lkKiBjdGlDb2RlLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50KTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5s
aW5rQ2FsbChDYWxsTGlua0luZm8qKTsKIAotICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWUq
IGV4ZWN1dGUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUqKiBleGNlcHRp
b24pCisgICAgICAgIGlubGluZSBzdGF0aWMgSlNWYWx1ZVB0ciBleGVjdXRlKHZvaWQqIGNvZGUs
IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBjdGlUcmFtcG9saW5lKAogI2lmIFBMQVRGT1JNKFg4Nl82NCkKQEAg
LTQzMiw4ICs0MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UHV0SW1t
ZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkgZW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVy
SUQgdG8pOwogCi0gICAgICAgIEpTVmFsdWUqIGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
Zyh1bnNpZ25lZCBzcmMpOwotICAgICAgICBKU1ZhbHVlKiBnZXRDb25zdGFudE9wZXJhbmQodW5z
aWduZWQgc3JjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRDb25zdGFudE9wZXJhbmQodW5zaWdu
ZWQgc3JjKTsKICAgICAgICAgaW50MzJfdCBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQo
dW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dCh1bnNpZ25lZCBzcmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50MzFCaXRJbW1l
ZGlhdGVJbnQodW5zaWduZWQgc3JjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTEgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVGYXN0QXJpdGhTbG93X29wX2xzaGlmdAogCiB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9v
cF9yc2hpZnQodW5zaWduZWQgcmVzdWx0LCB1bnNpZ25lZCBvcDEsIHVuc2lnbmVkIG9wMikKIHsK
LSAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
b3AyKSkgeworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7CiAgICAgICAgIC8vIE1hc2sgd2l0
aCAweDFmIGFzIHBlciBlY21hLTI2MiAxMS43LjIgc3RlcCA3LgotICAgICAgICByc2hpZnRQdHIo
SW1tMzIoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSkgJiAweDFmKSwgWDg2
OjplYXgpOworICAgICAgICByc2hpZnRQdHIoSW1tMzIoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRl
ZFVJbnQzMihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkgJiAweDFmKSwgWDg2OjplYXgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgWDg2OjplYXgs
IG9wMiwgWDg2OjplY3gpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2
OjplYXgpOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29w
X3JzaGlmdCh1bnMKIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9yc2hpZnQodW5z
aWduZWQgcmVzdWx0LCB1bnNpZ25lZCwgdW5zaWduZWQgb3AyLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBpZiAo
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKG9wMikpCisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMikpCiAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihvcDIsIDIsIFg4Njo6ZWN4KTsKICAgICBlbHNlIHsKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBKSVQ6OnVubGlua0NhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTAog
ICAgIC8vIFdoZW4gdGhlIEpTRnVuY3Rpb24gaXMgZGVsZXRlZCB0aGUgcG9pbnRlciBlbWJlZGRl
ZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHdpbGwgbm8gbG9uZ2VyIGJlIHZhbGlkCiAgICAg
Ly8gKGFuZCwgaWYgYSBuZXcgSlNGdW5jdGlvbiBoYXBwZW5lZCB0byBiZSBjb25zdHJ1Y3RlZCBh
dCB0aGUgc2FtZSBsb2NhdGlvbiwgd2UgY291bGQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUKICAgICAv
LyBtYXRjaCkuICBSZXNldCB0aGUgY2hlY2sgc28gaXQgbm8gbG9uZ2VyIG1hdGNoZXMuCi0gICAg
RGF0YUxhYmVsUHRyOjpwYXRjaChjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgSlNJbW1lZGlh
dGU6OmltcG9zc2libGVWYWx1ZSgpKTsKKyAgICBEYXRhTGFiZWxQdHI6OnBhdGNoKGNhbGxMaW5r
SW5mby0+aG90UGF0aEJlZ2luLCBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OmltcG9z
c2libGVWYWx1ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxs
ZWUsIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCB2b2lkKiBjdGlDb2RlLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50KQpAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhCiAKICAgICBsb2FkUHRyKEFk
ZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsg
RklFTERfT0ZGU0VUKFNjb3BlQ2hhaW4sIG1fbm9kZSkpLCBYODY6OmVkeCk7IC8vIG5ld1Njb3Bl
Q2hhaW4KIAotICAgIHN0b3JlUHRyKEltbVB0cihub1ZhbHVlKCkpLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlUHRyKEltbVB0cihKU1Zh
bHVlUHRyOjplbmNvZGUobm9WYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJl
Z2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAgICAgc3RvcmVQdHIoWDg2OjplY3gsIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4gKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiB9CkBAIC0yMTEsMTQgKzIxMSwxNCBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgICAgIGNvbXBpbGVPcENhbGxFdmFsU2V0
dXBBcmdzKGluc3RydWN0aW9uKTsKIAogICAgICAgICBlbWl0Q1RJQ2FsbChJbnRlcnByZXRlcjo6
Y3RpX29wX2NhbGxfZXZhbCk7Ci0gICAgICAgIHdhc0V2YWwgPSBqbmVQdHIoWDg2OjplYXgsIElt
bVB0cihKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpKTsKKyAgICAgICAgd2FzRXZhbCA9
IGpuZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6
aW1wb3NzaWJsZVZhbHVlKCkpKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBwbGFudHMgYSBjaGVj
ayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28gd2UgY2FuIHBsYW50IGEgZmFzdCBs
aW5rIHRvIHRoZSBjYWxsZWUuCiAgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgbGVhdmVzIHRoZSBj
YWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUgYmVsb3cK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gpOwogICAgIERhdGFM
YWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAganVtcFRvU2xv
dyA9IGpuZVB0cldpdGhQYXRjaChYODY6OmVjeCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
aywgSW1tUHRyKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSkpOworICAgIEp1bXAganVt
cFRvU2xvdyA9IGpuZVB0cldpdGhQYXRjaChYODY6OmVjeCwgYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjaywgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3NzaWJs
ZVZhbHVlKCkpKSk7CiAgICAgYWRkU2xvd0Nhc2UoanVtcFRvU2xvdyk7CiAgICAgQVNTRVJUKGRp
ZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cp
ID09IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCk7CiAgICAgbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICAvLyBGYXN0IHZlcnNpb24gb2Yg
c3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVjdGx5IHJlbGF0aXZlIHRvIGVkaS4KICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQgdXAgUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCi0gICAgc3RvcmVQdHIoSW1tUHRyKG5vVmFs
dWUoKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lz
dGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlUHRyKEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUo
bm9WYWx1ZSgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKFg4Njo6ZWN4LCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIEZJ
RUxEX09GRlNFVChTY29wZUNoYWluLCBtX25vZGUpKSwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNo
YWluCiAgICAgc3RvcmUzMihJbW0zMihhcmdDb3VudCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAKICAgICAvLyBUT0RPOiB3ZSB3
YW50IHRvIHJldXNlIHZhbHVlcyB0aGF0IGFyZSBhbHJlYWR5IGluIHJlZ2lzdGVycyBpZiB3ZSBj
YW4gLSBhZGQgYSByZWdpc3RlciBhbGxvY2F0b3IhCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIG1vdmUoSW1tUHRyKHZhbHVlKSwg
ZHN0KTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOworICAgICAgICBtb3ZlKEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUodmFsdWUpKSwg
ZHN0KTsKICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTEyLDE2ICsxMTIsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0SklUU3R1YkFyCiAgICAgcGVlayhkc3QsIGFyZ3VtZW50TnVtYmVyKTsKIH0KIAotQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBKSVQ6OmdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyh1bnNp
Z25lZCBzcmMpCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChzcmMpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8g
dmFsdWUgOiBub1ZhbHVlKCk7Ci0gICAgfQotICAgIHJldHVybiBub1ZhbHVlKCk7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogSklUOjpnZXRDb25zdGFudE9wZXJhbmQodW5zaWduZWQgc3Jj
KQorQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKHVuc2ln
bmVkIHNyYykKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYykpOwogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKQEAg
LTE0Miw3ICsxMzMsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKTsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
Yyk7CiAKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogICAgIGlmICghSlNJbW1lZGlh
dGU6OmlzTnVtYmVyKHZhbHVlKSkKQEAgLTE1OSw4ICsxNTAsOCBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFuCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIodW5zaWduZWQgc3JjLCB1bnNpZ25lZCBhcmd1
bWVudE51bWJlciwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBlbWl0UHV0SklUU3R1YkFy
Z0NvbnN0YW50KHZhbHVlLCBhcmd1bWVudE51bWJlcik7CisgICAgICAgIEpTVmFsdWVQdHIgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgZW1pdFB1dEpJVFN0
dWJBcmdDb25zdGFudChKU1ZhbHVlUHRyOjplbmNvZGUodmFsdWUpLCBhcmd1bWVudE51bWJlcik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaCk7CiAgICAgICAgIGVtaXRQdXRKSVRT
dHViQXJnKHNjcmF0Y2gsIGFyZ3VtZW50TnVtYmVyKTsKQEAgLTIxMCw3ICsyMDEsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlCiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIodW5zaWduZWQgZHN0KQogewotICAgIHN0b3JlUHRyKElt
bVB0cihqc1VuZGVmaW5lZCgpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0b3JlUHRyKEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CiAgICAgLy8gRklYTUU6ICNpZm5kZWYgTkRFQlVHLCBXcml0ZSB0aGUgY29y
cmVjdCBtX3R5cGUgdG8gdGhlIHJlZ2lzdGVyLgogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDEwICsx
ODIsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXRCeUlkU2xvd0Nhc2UoaW50IGJhcwogICAgIG1f
cHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogcmVz
aXplUHJvcGVydHlTdG9yYWdlKEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBpbnQzMl90IG9sZFNpemUs
IGludDMyX3QgbmV3U2l6ZSkKK3N0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogcmVzaXpl
UHJvcGVydHlTdG9yYWdlKEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBpbnQzMl90IG9sZFNpemUsIGlu
dDMyX3QgbmV3U2l6ZSkKIHsKICAgICBiYXNlT2JqZWN0LT5hbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShvbGRTaXplLCBuZXdTaXplKTsKLSAgICByZXR1cm4gYmFzZU9iamVjdDsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKGJhc2VPYmplY3QpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wg
dHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2MoU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAvLyBlY3ggPSBiYXNlT2JqZWN0LT5t
X3N0cnVjdHVyZQogICAgIGZvciAoUmVmUHRyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQo
KTsgKml0OyArK2l0KSB7CiAgICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHByb3RvdHlwZQotICAg
ICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKGplUHRyKFg4Njo6ZWN4LCBJbW1QdHIoanNOdWxsKCkp
KSk7CisgICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoamVQdHIoWDg2OjplY3gsIEltbVB0cihK
U1ZhbHVlUHRyOjplbmNvZGUoanNOdWxsKCkpKSkpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUgaWQKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChqbmVQdHIoQWRkcmVzcyhY
ODY6OmVjeCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgSW1tUHRyKGl0LT5n
ZXQoKSkpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvCiAKICAgICAvLyB3cml0ZSB0aGUgdmFsdWUKICAgICBsb2FkUHRyKEFkZHJl
c3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpKSwg
WDg2OjplYXgpOwotICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBjYWNo
ZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSk7CisgICAgc3RvcmVQdHIoWDg2OjplZHgsIEFk
ZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSkpOwogCiAg
ICAgcmV0KCk7CiAgICAgCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBKSVQ6OnBhdGNoR2V0QnlJ
ZFNlbGYoU3RydWN0dXJlU3R1YgogICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90
UGF0aEJlZ2luKSArIHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSk7CiAgICAgdm9pZCogZGlz
cGxhY2VtZW50QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcGF0Y2hPZmZzZXRHZXRCeUlk
UHJvcGVydHlNYXBPZmZzZXQpOwogICAgIERhdGFMYWJlbFB0cjo6cGF0Y2goc3RydWN0dXJlQWRk
cmVzcywgc3RydWN0dXJlKTsKLSAgICBEYXRhTGFiZWwzMjo6cGF0Y2goZGlzcGxhY2VtZW50QWRk
cmVzcywgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgRGF0YUxhYmVsMzI6
OnBhdGNoKGRpc3BsYWNlbWVudEFkZHJlc3MsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
UHRyKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQs
IHZvaWQqIHJldHVybkFkZHJlc3MpCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBKSVQ6OnBhdGNo
UHV0QnlJZFJlcGxhY2UoU3RydWN0dXJlUwogICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHBhdGNoT2Zm
c2V0UHV0QnlJZFN0cnVjdHVyZTsKICAgICB2b2lkKiBkaXNwbGFjZW1lbnRBZGRyZXNzID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBwYXRjaE9mZnNl
dFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKICAgICBEYXRhTGFiZWxQdHI6OnBhdGNoKHN0cnVj
dHVyZUFkZHJlc3MsIHN0cnVjdHVyZSk7Ci0gICAgRGF0YUxhYmVsMzI6OnBhdGNoKGRpc3BsYWNl
bWVudEFkZHJlc3MsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOworICAgIERhdGFM
YWJlbDMyOjpwYXRjaChkaXNwbGFjZW1lbnRBZGRyZXNzLCBjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZVB0cikpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuZ3RoKHZvaWQqIHJldHVybkFkZHJlc3MpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGYoU3RydQogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldERpcmVjdE9mZnNldAogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVheCwgRklFTERf
T0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSkpLCBYODY6OmVheCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwg
WDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwogICAgIHJldCgpOwogCiAgICAgdm9pZCog
Y29kZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkUHJvdG8oU3RyCiAjZW5kaWYKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJl
Y3RPZmZzZXQKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4
LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAKICAgICBK
dW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKQEAgLTQzMSw3ICs0MzEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMzID0gam5l
UHRyKEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKSwgSW1tUHRyKHBy
b3RvdHlwZVN0cnVjdHVyZSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVj
dE9mZnNldAotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgs
IGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSksIFg4Njo6ZWF4KTsKIAogICAgIHJl
dCgpOwogCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KAogewogICAgIEp1bXAgZmFpbHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShYODY6
OmVheCwgc3RydWN0dXJlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpKSwgWDg2OjplYXgpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4
Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlUHRyKSksIFg4Njo6ZWF4KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7
CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOwpAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICNlbmRpZgogCiAgICAgLy8gQ2hlY2tzIG91dCBv
a2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2Fj
aGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSksIFg4Njo6
ZWF4KTsKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIApAQCAtNTU1LDcgKzU1NSw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIFByb3BlcnR5
U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlT
dG9yYWdlOwogICAgIGxvYWRQdHIocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UsIFg4Njo6ZWR4KTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
KikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZz
ZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogCiAgICAgdm9pZCogY29kZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1f
Y29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKQEAgLTYxNCw3ICs2MTQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAKICAgICBQcm9wZXJ0eVN0b3JhZ2Uq
IHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsK
ICAgICBsb2FkUHRyKHByb3RvUHJvcGVydHlTdG9yYWdlLCBYODY6OmVkeCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2
OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
IAogICAgIHZvaWQqIGNvZGUgPSBtX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9j
ay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBAIC02NjQsNyArNjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogCiAgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1By
b3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgbG9h
ZFB0cihwcm90b1Byb3BlcnR5U3RvcmFnZSwgWDg2OjplZHgpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlUHRyKSksIFg4Njo6ZWF4KTsKICAgICByZXQoKTsKIAogICAgIHZvaWQqIGNvZGUgPSBtX2Fz
c2VtYmxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBA
IC02ODUsNyArNjg1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFJlcGxhY2Uo
UwogCiAgICAgLy8gY2hlY2tzIG91dCBva2F5ISAtIHB1dERpcmVjdE9mZnNldAogICAgIGxvYWRQ
dHIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3Rv
cmFnZSkpLCBYODY6OmVheCk7Ci0gICAgc3RvcmVQdHIoWDg2OjplZHgsIEFkZHJlc3MoWDg2Ojpl
YXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpKTsKKyAgICBzdG9yZVB0cihYODY6
OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIp
KSk7CiAgICAgcmV0KCk7CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0YWJs
ZUNvcHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsNyBAQCBSZWdpc3RlcklEKiBOdWxs
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiB7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdu
b3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRMb2FkKGRzdCwganNOdWxsKCkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWRKU1Yo
ZHN0LCBqc051bGwoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
b29sZWFuTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTcsNyAr
Mzk3LDcgQEAgUmVnaXN0ZXJJRCogQXJyYXlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogICAgIH0K
IAogICAgIGlmIChtX2VsaXNpb24pIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdExvYWQoMCwganNOdW1iZXIoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9lbGlz
aW9uICsgbGVuZ3RoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVt
aXRMb2FkSlNWKDAsIGpzTnVtYmVyKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fZWxpc2lvbiAr
IGxlbmd0aCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYXJyYXkuZ2V0KCksIGdl
bmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCB2YWx1ZSk7CiAgICAgfQogCkBAIC02MDgs
NyArNjA4LDcgQEAgdm9pZCBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OnJlbGVhc2VOb2RlcwogUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1Jl
Z2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdWxsKCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdl
dCgpLCBtX2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsK
IH0KIApAQCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OnJl
bGVhc2VOb2QKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAg
IGlmIChSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3IobV9p
ZGVudCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVy
YXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0TG9hZEpT
VihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHRoaXNSZWdp
c3Rlci5nZXQoKSksIGxvY2FsLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIG1fYXJncy5nZXQo
KSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KIApAQCAtNjM2
LDcgKzYzNiw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAg
ICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsKICAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29w
ZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIGZhbHNlLCBnbG9iYWxPYmplY3QpICYm
IGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewogICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgZGVwdGgsIGluZGV4LCBnbG9iYWxPYmplY3QpOwotICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwganNOdWxsKCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1Jl
Z2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdWxsKCkpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIHRoaXNSZWdpc3Rl
ci5nZXQoKSwgbV9hcmdzLmdldCgpLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CiAgICAgfQogCkBAIC05MjgsNyArOTI4LDcgQEAgUmVnaXN0ZXJJRCogVm9pZE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlYwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdExvYWRKU1YoZHN0LCBqc1VuZGVmaW5lZCgpKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgUmVnaXN0ZXJJRCogQ29u
c3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbAogICAgIC8vIEZJWE1FOiBXaGlsZSB0aGlzIGNvZGUg
c2hvdWxkIG9ubHkgYmUgaGl0IGluIGV2YWwgY29kZSwgaXQgd2lsbCBwb3RlbnRpYWxseQogICAg
IC8vIGFzc2lnbiB0byB0aGUgd3JvbmcgYmFzZSBpZiBtX2lkZW50IGV4aXN0cyBpbiBhbiBpbnRl
cnZlbmluZyBkeW5hbWljIHNjb3BlLgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIG1faWRlbnQp
OwotICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gbV9pbml0ID8gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
aW5pdC5nZXQoKSkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7CisgICAg
UmVnaXN0ZXJJRCogdmFsdWUgPSBtX2luaXQgPyBnZW5lcmF0b3IuZW1pdE5vZGUobV9pbml0Lmdl
dCgpKSA6IGdlbmVyYXRvci5lbWl0TG9hZEpTVigwLCBqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlKTsKIH0K
IApAQCAtMjAxNCw3ICsyMDE0LDcgQEAgUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dAogCiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAg
ICAgICBkc3QgPSAwOwotICAgIFJlZ2lzdGVySUQqIHIwID0gbV92YWx1ZSA/IGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fdmFsdWUuZ2V0KCkpIDogZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNV
bmRlZmluZWQoKSk7CisgICAgUmVnaXN0ZXJJRCogcjAgPSBtX3ZhbHVlID8gZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV92YWx1ZS5nZXQoKSkgOiBnZW5lcmF0b3IuZW1pdExvYWRKU1YoZHN0LCBq
c1VuZGVmaW5lZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnNjb3BlRGVwdGgoKSkgewogICAgICAg
ICBSZWZQdHI8TGFiZWw+IGwwID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcFNjb3BlcyhsMC5nZXQoKSwgMCk7CkBAIC0yNDYxLDcgKzI0NjEsNyBAQCBS
ZWdpc3RlcklEKiBFdmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7
CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZHN0UmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdFJlZ2lzdGVyLmdldCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExvYWRKU1YoZHN0UmVnaXN0ZXIuZ2V0KCks
IGpzVW5kZWZpbmVkKCkpOwogICAgIHN0YXRlbWVudExpc3RFbWl0Q29kZShjaGlsZHJlbigpLCBn
ZW5lcmF0b3IsIGRzdFJlZ2lzdGVyLmdldCgpKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKERpZEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CkBAIC0yNTcx
LDcgKzI1NzEsNyBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkJvZHlOb2RlOjplbWl0Qnl0ZWNvCiAg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRW50ZXJDYWxsRnJhbWUsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpKTsKICAgICBzdGF0ZW1lbnRMaXN0RW1pdENvZGUoY2hpbGRyZW4oKSwgZ2Vu
ZXJhdG9yLCBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKTsKICAgICBpZiAoIWNoaWxkcmVuKCku
c2l6ZSgpIHx8ICFjaGlsZHJlbigpLmxhc3QoKS0+aXNSZXR1cm5Ob2RlKCkpIHsKLSAgICAgICAg
UmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKDAsIGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJh
bWUsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1
cm4ocjApOwogICAgIH0KQEAgLTI1ODMsNyArMjU4Myw3IEBAIFJlZ2lzdGVySUQqIFByb2dyYW1O
b2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVByb2dyYW0sIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKIAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBkc3RSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBnZW5l
cmF0b3IuZW1pdExvYWQoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOworICAgIGdl
bmVyYXRvci5lbWl0TG9hZEpTVihkc3RSZWdpc3Rlci5nZXQoKSwganNVbmRlZmluZWQoKSk7CiAg
ICAgc3RhdGVtZW50TGlzdEVtaXRDb2RlKGNoaWxkcmVuKCksIGdlbmVyYXRvciwgZHN0UmVnaXN0
ZXIuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soRGlkRXhlY3V0ZVByb2dy
YW0sIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc28KICAg
ICBpbnQgbGluZU51bWJlcjsKICAgICBpbnRwdHJfdCBzb3VyY2VJRDsKICAgICBVU3RyaW5nIHNv
dXJjZVVSTDsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbjsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9u
OwogCiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIGxp
bmVOdW1iZXIsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGZ1bmN0aW9uKTsKICAgICBtX2N1cnJlbnRO
b2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb24gPyBmdW5jdGlvbi0+dG9UaGlzT2JqZWN0KGV4
ZWMpIDogMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
blRvUHJvCiAgICAgfQogfQogCi12b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIGZ1bmN0aW9uKQordm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVCghbV9jdXJy
ZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgUHJvZmls
ZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXgKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9m
aWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBj
YWxsSWRlbnRpZmllciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAo
KSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlKiBmdW5jdGlvbikKK3ZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlUHRyIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMu
aXNFbXB0eSgpKTsKIApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1
dGUoRXhlY1N0YXRlKiBleGUKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJl
bnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVu
dGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIG5vVmFsdWUoKSwgc291cmNlVVJMLCBzdGFydGlu
Z0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgp
KTsKIH0KIAotQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IFVTdHJpbmcm
IGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZhdWx0TGluZU51bWJlcikKK0NhbGxJZGVudGlmaWVy
IFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEpTVmFsdWVQdHIgZnVuY3Rpb24sIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGlu
dCBkZWZhdWx0TGluZU51bWJlcikKIHsKICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICByZXR1
cm4gQ2FsbElkZW50aWZpZXIoR2xvYmFsQ29kZUV4ZWN1dGlvbiwgZGVmYXVsdFNvdXJjZVVSTCwg
ZGVmYXVsdExpbmVOdW1iZXIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShy
ZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
RXhlY1N0YXRlOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU09iamVjdDsK
KyAgICBjbGFzcyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIFByb2ZpbGVHZW5lcmF0b3I7CiAgICAg
Y2xhc3MgVVN0cmluZzsKIApAQCAtNTEsMTQgKzUyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBwcm9maWxlcigpOyAKLSAgICAgICAg
c3RhdGljIENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSos
IEpTVmFsdWUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAg
ICAgICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSosIEpTVmFsdWVQdHIsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1i
ZXIpOwogCiAgICAgICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0
cmluZyYgdGl0bGUpOwogICAgICAgICBQYXNzUmVmUHRyPFByb2ZpbGU+IHN0b3BQcm9maWxpbmco
RXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgdGl0bGUpOwogCi0gICAgICAgIHZvaWQgd2lsbEV4
ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogZnVuY3Rpb24pOworICAgICAgICB2b2lkIHdpbGxF
eGVjdXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgZnVuY3Rpb24pOwogICAgICAgICB2b2lkIHdp
bGxFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0
aW5nTGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlKiBmdW5jdGlvbik7CisgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlUHRyIGZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSosIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAKICAgICAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQcm9maWxlR2VuZXJhdG9yPiA+JiBjdXJyZW50UHJvZmls
ZXMoKSB7IHJldHVybiBtX2N1cnJlbnRQcm9maWxlczsgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcmdMaXN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlz
dDo6bWFya0xpc3RzKExpc3RTZXQmIG1hcmtTZXQKICAgICB9CiB9CiAKLXZvaWQgQXJnTGlzdDo6
c2xvd0FwcGVuZChKU1ZhbHVlKiB2KQordm9pZCBBcmdMaXN0OjpzbG93QXBwZW5kKEpTVmFsdWVQ
dHIgdikKIHsKICAgICAvLyBBcyBsb25nIGFzIG91ciBzaXplIHN0YXlzIHdpdGhpbiBvdXIgVmVj
dG9yJ3MgaW5saW5lIAogICAgIC8vIGNhcGFjaXR5LCBhbGwgb3VyIHZhbHVlcyBhcmUgYWxsb2Nh
dGVkIG9uIHRoZSBzdGFjaywgYW5kIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJl
dmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX3NpemU7IH0KIAotICAgICAgICBKU1ZhbHVlKiBhdChFeGVjU3Rh
dGUqIGV4ZWMsIHNpemVfdCBpKSBjb25zdAorICAgICAgICBKU1ZhbHVlUHRyIGF0KEV4ZWNTdGF0
ZSogZXhlYywgc2l6ZV90IGkpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpIDwg
bV9zaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcltpXS5qc1ZhbHVlKGV4ZWMp
OwpAQCAtOTksNyArOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fc2l6ZSA9
IDA7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGFwcGVuZChKU1ZhbHVlKiB2KQorICAgICAg
ICB2b2lkIGFwcGVuZChKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VCghbV9pc1JlYWRPbmx5KTsKICAgICAgICAgICAgIApAQCAtMTI1LDcgKzEyNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBtYXJrTGlzdHMoTGlzdFNldCYpOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzbG93QXBwZW5kKEpTVmFsdWUqKTsKKyAgICAgICAg
dm9pZCBzbG93QXBwZW5kKEpTVmFsdWVQdHIpOwogICAgICAgICAKICAgICAgICAgUmVnaXN0ZXIq
IG1fYnVmZmVyOwogICAgICAgICBzaXplX3QgbV9zaXplOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwyOCArMTQ1LDI4IEBAIGJv
b2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1MKICAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12
b2lkIEFyZ3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSog
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgaWYgKGkgPCBkLT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJn
dW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQt
Pm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0
ZXJJbmRleCArIGldID0gdmFsdWU7CisgICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQ
YXJhbWV0ZXJJbmRleCArIGldID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVl
OworICAgICAgICAgICAgZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdID0g
SlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBKU09iamVj
dDo6cHV0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgVVN0cmluZzo6ZnJvbShpKSksIHZhbHVlLCBz
bG90KTsKIH0KIAotdm9pZCBBcmd1bWVudHM6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3ZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBib29sIGlzQXJyYXlJbmRleDsKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlO
YW1lLnRvQXJyYXlJbmRleCgmaXNBcnJheUluZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYm
IGkgPCBkLT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxl
dGVkQXJndW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0g
ICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gdmFs
dWU7CisgICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGld
ID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQtPmV4dHJh
QXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVlOworICAgICAgICAgICAgZC0+
ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdID0gSlNWYWx1ZVB0cih2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVu
dHMuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgZC0+cmVnaXN0ZXJzID0gJmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoMCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkgCiAgICAgICAgIHsg
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7IAogICAgICAgICB9CkBAIC04Miw4ICs4Miw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlv
biomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50
JiBhcmdjKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAK
QEAgLTk0LDkgKzk0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxBcmd1bWVu
dHNEYXRhPiBkOwogICAgIH07CiAKLSAgICBBcmd1bWVudHMqIGFzQXJndW1lbnRzKEpTVmFsdWUq
KTsKKyAgICBBcmd1bWVudHMqIGFzQXJndW1lbnRzKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5l
IEFyZ3VtZW50cyogYXNBcmd1bWVudHMoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEFyZ3Vt
ZW50cyogYXNBcmd1bWVudHMoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZBcmd1bWVudHM6OmluZm8pKTsKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBDb25zdHJ1Y3RUeXBlIEFycmF5Q29uc3RydWN0
b3I6OmdldENvbnN0CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMg
SlNWYWx1ZSogY2FsbEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEFy
cmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5V2l0aFNpemVR
dWlyayhleGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyNSArMzYsMjUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQXJyYXlQcm90b3R5cGUp
OwogCi1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNDb25jYXQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3Ao
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZl
cnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y1NsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jU3BsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNKb2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJh
eVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNT
bGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5
UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5j
Rm9yRWFjaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOwogCiB9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIEFycmF5UHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJy
YXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1
bmN0aW9uCi1zdGF0aWMgSlNWYWx1ZSogZ2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqLCB1bnNpZ25lZCBpbmRleCkKK3N0YXRpYyBKU1ZhbHVlUHRyIGdldFByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAg
UHJvcGVydHlTbG90IHNsb3Qob2JqKTsKICAgICBpZiAoIW9iai0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGluZGV4LCBzbG90KSkKQEAgLTExMiwxMyArMTEyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlKiBn
ZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBp
bmRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iaiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyB2b2lkIHB1dFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
aiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIG9iai0+cHV0KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
aWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZKU0FycmF5OjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBKU1ZhbHVl
KiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywg
ayk7CisgICAgICAgIEpTVmFsdWVQdHIgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsK
ICAgICAgICAgaWYgKGVsZW1lbnQtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtMTYyLDcgKzE2Miw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXQKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJCdWZm
ZXIuZGF0YSgpLCBzdHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDApKTsKIH0K
IAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhp
c1ZhbHVlLT5pc09iamVjdCgmSlNBcnJheTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC0xODcsMTIgKzE4NywxMiBAQCBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIEpTVmFsdWUqIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAg
ICAgaWYgKGVsZW1lbnQtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBKU09iamVjdCogbyA9IGVsZW1lbnQtPnRvT2JqZWN0KGV4ZWMpOwotICAg
ICAgICBKU1ZhbHVlKiBjb252ZXJzaW9uRnVuY3Rpb24gPSBvLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBjb252ZXJz
aW9uRnVuY3Rpb24gPSBvLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxl
U3RyaW5nKTsKICAgICAgICAgVVN0cmluZyBzdHI7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGNvbnZlcnNpb25GdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOwpAQCAtMjE0LDcgKzIxNCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXgKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhz
dHJCdWZmZXIuZGF0YSgpLCBzdHJCdWZmZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDAp
KTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIApAQCAtMjQxLDcgKzI0MSw3
IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSogZWxlbWVudCA9IHRoaXNPYmot
PmdldChleGVjLCBrKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBlbGVtZW50ID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGspOwogICAgICAgICBpZiAoZWxlbWVudC0+aXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yNjAsMTEgKzI2MCwxMSBAQCBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVT
dHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVmZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXpl
KCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBK
U0FycmF5KiBhcnIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwogICAgIGludCBuID0gMDsK
LSAgICBKU1ZhbHVlKiBjdXJBcmcgPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKKyAg
ICBKU1ZhbHVlUHRyIGN1ckFyZyA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogICAg
IEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOwogICAgIEFyZ0xpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CiAgICAgd2hpbGUgKDEpIHsKQEAgLTI3
Miw3ICsyNzIsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqCiAg
ICAgICAgICAgICBKU0FycmF5KiBjdXJBcnJheSA9IGFzQXJyYXkoY3VyQXJnKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGN1ckFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewotICAgICAgICAgICAgICAgIGlm
IChKU1ZhbHVlKiB2ID0gZ2V0UHJvcGVydHkoZXhlYywgY3VyQXJyYXksIGspKQorICAgICAgICAg
ICAgICAgIGlmIChKU1ZhbHVlUHRyIHYgPSBnZXRQcm9wZXJ0eShleGVjLCBjdXJBcnJheSwgaykp
CiAgICAgICAgICAgICAgICAgICAgIGFyci0+cHV0KGV4ZWMsIG4sIHYpOwogICAgICAgICAgICAg
ICAgIG4rKzsKICAgICAgICAgICAgIH0KQEAgLTI4OSwxMyArMjg5LDEzIEBAIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gYXJyOwogfQogCi1KU1Zh
bHVlKiBhcnJheVByb3RvRnVuY1BvcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQ
b3AoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+aXNKU0FycmF5KHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiBhc0FycmF5KHRoaXNWYWx1ZSktPnBvcCgpOwogCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKLSAg
ICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LT50b1VJbnQzMihleGVjKTsKICAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgcHV0UHJv
cGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoZXhlYywgbGVuZ3RoKSk7CkBAIC0zMDgsNyArMzA4LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNQb3AoRXhlY1N0YXRlKiBleAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y1B1c2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5pc0pT
QXJyYXkodGhpc1ZhbHVlKSAmJiBhcmdzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzVmFsdWUpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgbGVuZ3RoKTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU09iamVj
dCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KS0+dG9VSW50MzIoZXhlYyk7CkBAIC0zMzMsOCArMzMzLDggQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZQogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IG1p
ZGRsZTsgaysrKSB7CiAgICAgICAgIHVuc2lnbmVkIGxrMSA9IGxlbmd0aCAtIGsgLSAxOwotICAg
ICAgICBKU1ZhbHVlKiBvYmoyID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgbGsxKTsKLSAg
ICAgICAgSlNWYWx1ZSogb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CisgICAg
ICAgIEpTVmFsdWVQdHIgb2JqMiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGxrMSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CiAK
ICAgICAgICAgaWYgKG9iajIpCiAgICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaywgb2Jq
Mik7CkBAIC0zNDksMTAgKzM0OSwxMCBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1JldmVyc2Uo
RXhlY1N0YXRlCiAgICAgcmV0dXJuIHRoaXNPYmo7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
IHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
OwotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CkBAIC0zNjEs
NyArMzYxLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIAogICAg
IH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCAwKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMTsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBp
ZiAoSlNWYWx1ZSogb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaykpCisgICAgICAg
ICAgICBpZiAoSlNWYWx1ZVB0ciBvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrKSkK
ICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgayAtIDEsIG9iaik7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywg
ayAtIDEpOwpAQCAtMzcyLDcgKzM3Miw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU2hpZnQo
RXhlY1N0YXRlKiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2RvY3Mv
bWFudWFscy9qcy9jbGllbnQvanNyZWYvYXJyYXkuaHRtIzExOTM3MTMgb3IgMTUuNC40LjEwCiAK
QEAgLTM4MCw3ICszODAsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0
ZSogCiAKICAgICAvLyBXZSByZXR1cm4gYSBuZXcgYXJyYXkKICAgICBKU0FycmF5KiByZXNPYmog
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlc09i
ajsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHJlc09iajsKICAgICBkb3VibGUgYmVnaW4gPSBh
cmdzLmF0KGV4ZWMsIDApLT50b0ludGVnZXIoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQz
MihleGVjKTsKICAgICBpZiAoYmVnaW4gPj0gMCkgewpAQCAtNDEwLDE4ICs0MTAsMTggQEAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIAogICAgIGludCBiID0gc3RhdGlj
X2Nhc3Q8aW50PihiZWdpbik7CiAgICAgaW50IGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGVuZCk7CiAg
ICAgZm9yIChpbnQgayA9IGI7IGsgPCBlOyBrKyssIG4rKykgewotICAgICAgICBpZiAoSlNWYWx1
ZSogdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQorICAgICAgICBpZiAoSlNWYWx1
ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaykpCiAgICAgICAgICAgICByZXNP
YmotPnB1dChleGVjLCBuLCB2KTsKICAgICB9CiAgICAgcmVzT2JqLT5zZXRMZW5ndGgobik7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAot
ICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRy
IGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAK
QEAgLTQ0MSwxMSArNDQxLDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3Rh
dGUqIGUKICAgICAvLyAiTWluIiBzb3J0LiBOb3QgdGhlIGZhc3Rlc3QsIGJ1dCBkZWZpbml0ZWx5
IGxlc3MgY29kZSB0aGFuIGhlYXBzb3J0CiAgICAgLy8gb3IgcXVpY2tzb3J0LCBhbmQgbXVjaCBs
ZXNzIHN3YXBwaW5nIHRoYW4gYnViYmxlc29ydC9pbnNlcnRpb25zb3J0LgogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSAxOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSogaU9i
aiA9IHRoaXNPYmotPmdldChleGVjLCBpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBpT2JqID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICB1bnNpZ25lZCB0aGVtaW4gPSBpOwotICAgICAg
ICBKU1ZhbHVlKiBtaW5PYmogPSBpT2JqOworICAgICAgICBKU1ZhbHVlUHRyIG1pbk9iaiA9IGlP
Ymo7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgbGVuZ3RoOyArK2opIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIGpPYmogPSB0aGlzT2JqLT5nZXQoZXhlYywgaik7CisgICAg
ICAgICAgICBKU1ZhbHVlUHRyIGpPYmogPSB0aGlzT2JqLT5nZXQoZXhlYywgaik7CiAgICAgICAg
ICAgICBkb3VibGUgY29tcGFyZVJlc3VsdDsKICAgICAgICAgICAgIGlmIChqT2JqLT5pc1VuZGVm
aW5lZCgpKQogICAgICAgICAgICAgICAgIGNvbXBhcmVSZXN1bHQgPSAxOyAvLyBkb24ndCBjaGVj
ayBtaW5PYmogYmVjYXVzZSB0aGVyZSdzIG5vIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSA9PSAoMCkg
ZnJvbSA+ICgxKQpAQCAtNDczLDEzICs0NzMsMTMgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNT
b3J0KEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiB0aGlzT2JqOwogfQogCi1KU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1Nw
bGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUt
PnRvVGhpc09iamVjdChleGVjKTsKIAogICAgIC8vIDE1LjQuNC4xMgogICAgIEpTQXJyYXkqIHJl
c09iaiA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
cmVzT2JqOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gcmVzT2JqOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+
dG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKCFhcmdzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkBAIC00OTYsNyArNDk2LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNT
cGxpY2UoRXhlY1N0YXRlKgogICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGJlZ2luOwog
CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyBrKyspIHsKLSAgICAg
ICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4p
KQorICAgICAgICBpZiAoSlNWYWx1ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwg
ayArIGJlZ2luKSkKICAgICAgICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIGssIHYpOwogICAgIH0K
ICAgICByZXNPYmotPnNldExlbmd0aChkZWxldGVDb3VudCk7CkBAIC01MDUsNyArNTA1LDcgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKgogICAgIGlmIChhZGRpdGlv
bmFsQXJncyAhPSBkZWxldGVDb3VudCkgewogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBk
ZWxldGVDb3VudCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBs
ZW5ndGggLSBkZWxldGVDb3VudDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUq
IHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgZGVsZXRlQ291bnQpKQorICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlUHRyIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
ICsgZGVsZXRlQ291bnQpKQogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywg
ayArIGFkZGl0aW9uYWxBcmdzLCB2KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJn
cyk7CkBAIC01MTQsNyArNTE0LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhl
Y1N0YXRlKgogICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsg
LSAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGxl
bmd0aCAtIGRlbGV0ZUNvdW50OyAoaW50KWsgPiBiZWdpbjsgLS1rKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKEpTVmFsdWUqIG9iaiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBkZWxl
dGVDb3VudCAtIDEpKQorICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlUHRyIG9iaiA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBkZWxldGVDb3VudCAtIDEpKQogICAgICAgICAgICAg
ICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgayArIGFkZGl0aW9uYWxBcmdzIC0gMSwgb2JqKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0
ZVByb3BlcnR5KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJncyAtIDEpOwpAQCAtNTI4LDcgKzUyOCw3
IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBK
U09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCkBAIC01
MzcsNyArNTM3LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZQog
ICAgIHVuc2lnbmVkIG5yQXJncyA9IGFyZ3Muc2l6ZSgpOwogICAgIGlmIChuckFyZ3MpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gMDsgLS1rKSB7Ci0gICAgICAgICAg
ICBpZiAoSlNWYWx1ZSogdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgLSAxKSkKKyAg
ICAgICAgICAgIGlmIChKU1ZhbHVlUHRyIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
IC0gMSkpCiAgICAgICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgKyBuckFyZ3MgLSAx
LCB2KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQ
cm9wZXJ0eShleGVjLCBrICsgbnJBcmdzIC0gMSk7CkBAIC01NDUsMTYgKzU0NSwxNiBAQCBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlCiAgICAgfQogICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMs
IGssIGFyZ3MuYXQoZXhlYywgaykpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIGxlbmd0aCArIG5yQXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihl
eGVjLCBsZW5ndGggKyBuckFyZ3MpOwogICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBm
dW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFy
Z3MuYXQoZXhlYywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC01NzEsNyArNTcxLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKgogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5
U2xvdChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpT
VmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOwogCiAgICAgICAgIEFyZ0xpc3QgZWFjaEFyZ3VtZW50
czsKIApAQCAtNTc5LDcgKzU3OSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4
ZWNTdGF0ZSoKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykp
OwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFw
cGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1
bWVudHMpOwogCiAgICAgICAgIGlmIChyZXN1bHQtPnRvQm9vbGVhbihleGVjKSkKICAgICAgICAg
ICAgIHJlc3VsdEFycmF5LT5wdXQoZXhlYywgZmlsdGVySW5kZXgrKywgdik7CkBAIC01ODcsMTEg
KzU4NywxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqCiAgICAg
cmV0dXJuIHJlc3VsdEFycmF5OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAot
ICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRy
IGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTYwOCw3ICs2MDgsNyBAQCBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4CiAgICAgICAgIGlmICghdGhpc09i
ai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGssIHNsb3QpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgayk7CisgICAgICAg
IEpTVmFsdWVQdHIgdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgayk7CiAKICAgICAgICAgQXJnTGlz
dCBlYWNoQXJndW1lbnRzOwogCkBAIC02MTYsNyArNjE2LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051
bWJlcihleGVjLCBrKSk7CiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwog
Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5
VGhpcywgZWFjaEFyZ3VtZW50cyk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXQoZXhlYywgaywg
cmVzdWx0KTsKICAgICB9CiAKQEAgLTYyOCwxMSArNjI4LDExIEBAIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXgKIC8vIGh0dHA6Ly9kZXZlbG9wZXItdGVzdC5tb3ppbGxh
Lm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOk9iamVjdHM6QXJyYXk6
Zm9yRWFjaAogLy8gaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29y
ZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJheTpzb21lCiAKLUpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNFdmVyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFs
dWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJncy5h
dChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9u
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKQEAgLTY0MCw3ICs2NDAsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNT
dGF0ZSogCiAKICAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdChleGVjLCAxKS0+aXNV
bmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdChleGVj
LCAxKS0+dG9PYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4o
dHJ1ZSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAKICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBs
ZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTY2NiwxMSArNjY2LDEx
IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBK
U09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAg
SlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnVu
Y3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtNjk0LDExICs2OTQsMTEgQEAgSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZQogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCog
dGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSog
ZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBh
cmdzLmF0KGV4ZWMsIDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtNzA2LDcgKzcwNiw3IEBAIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jU29tZShFeGVjU3RhdGUqIGUKIAogICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdz
LmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVl
KCkgOiBhcmdzLmF0KGV4ZWMsIDEpLT50b09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xl
YW4oZmFsc2UpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7
CkBAIC03MjksNyArNzI5LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0
ZSogZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSW5k
ZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIC8vIEphdmFTY3JpcHQgMS41IEV4dGVuc2lvbiBieSBNb3ppbGxhCiAg
ICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2Nz
L0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5OmluZGV4
T2YKQEAgLTc0OCw5ICs3NDgsOSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhl
Y1N0YXRlCiAgICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkKTsKICAg
ICB9CiAKLSAgICBKU1ZhbHVlKiBzZWFyY2hFbGVtZW50ID0gYXJncy5hdChleGVjLCAwKTsKKyAg
ICBKU1ZhbHVlUHRyIHNlYXJjaEVsZW1lbnQgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGZvciAo
OyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewotICAgICAgICBKU1ZhbHVlKiBlID0gZ2V0UHJv
cGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOworICAgICAgICBKU1ZhbHVlUHRyIGUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RyaWN0RXF1YWwoc2VhcmNoRWxlbWVudCwgZSkp
CkBAIC03NjAsNyArNzYwLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNT
dGF0ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCAtMSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gSmF2YVNjcmlwdCAxLjYgRXh0
ZW5zaW9uIGJ5IE1vemlsbGEKICAgICAvLyBEb2N1bWVudGF0aW9uOiBodHRwOi8vZGV2ZWxvcGVy
Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xvYmFs
X09iamVjdHM6QXJyYXk6bGFzdEluZGV4T2YKQEAgLTc3OSw5ICs3NzksOSBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTCiAgICAgaWYgKGQgPCBsZW5ndGgpCiAgICAg
ICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKIAotICAgIEpTVmFsdWUqIHNlYXJjaEVs
ZW1lbnQgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgc2VhcmNoRWxlbWVudCA9
IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKLSAg
ICAgICAgSlNWYWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwog
ICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0cmlj
dEVxdWFsKHNlYXJjaEVsZW1lbnQsIGUpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAgQ29uc3RydWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbgogfQog
CiAvLyBFQ01BIDE1LjYuMQotc3RhdGljIEpTVmFsdWUqIGNhbGxCb29sZWFuQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBy
ZXR1cm4ganNCb29sZWFuKGFyZ3MuYXQoZXhlYywgMCktPnRvQm9vbGVhbihleGVjKSk7CiB9CkBA
IC02OCw3ICs2OCw3IEBAIENhbGxUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEK
ICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1KU09iamVjdCogY29uc3RydWN0Qm9vbGVh
bkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogaW1tZWRpYXRl
Qm9vbGVhblZhbHVlKQorSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9v
bGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgaW1tZWRpYXRlQm9vbGVhblZhbHVlKQog
ewogICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAg
b2JqLT5zZXRJbnRlcm5hbFZhbHVlKGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NTkz
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIH07CiAKLSAgICBKU09iamVj
dCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSosIEpTVmFs
dWUqKTsKKyAgICBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFu
KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIpOwogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFu
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gMzk1OTMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogICAgIH07CiAKLSAgICBCb29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmpl
Y3QoSlNWYWx1ZSopOworICAgIEJvb2xlYW5PYmplY3QqIGFzQm9vbGVhbk9iamVjdChKU1ZhbHVl
UHRyKTsKIAotICAgIGlubGluZSBCb29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1
ZSogdmFsdWUpCisgICAgaW5saW5lIEJvb2xlYW5PYmplY3QqIGFzQm9vbGVhbk9iamVjdChKU1Zh
bHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5o
ZXJpdHMoJkJvb2xlYW5PYmplY3Q6OmluZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJvb2xlYW5PYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEJvb2xlYW5Qcm90b3R5cGUpOwogCiAvLyBGdW5jdGlvbnMKLXN0YXRpYyBKU1ZhbHVlKiBib29s
ZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGJvb2xlYW5Q
cm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOwogCiAvLyBFQ01BIDE1LjYuNAogCkBAIC01MCw3ICs1MCw3IEBAIEJvb2xlYW5Q
cm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUoRXhlY1MKIAogLy8gRUNNQSAxNS42LjQuMiArIDE1
LjYuNC4zCiAKLUpTVmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWVQdHIgYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKHRoaXNW
YWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2UpKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJmYWxzZSIpOwpAQCAtNjgsNyArNjgsNyBAQCBKU1ZhbHVlKiBib29sZWFuUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCAidHJ1ZSIpOwogfQogCi1KU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWVQdHIgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzQm9vbGVhbih0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhpc1Zh
bHVlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDM5NTkz
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIGNhbGwoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBm
dW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0
YSwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCkKICAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjLCBhc09iamVjdChmdW5jdGlvbk9iamVjdCksIHRoaXNWYWx1ZSwgYXJn
cyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAzOTU5MykKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTQgKzI5LDEzIEBACiAjaWZuZGVmIENhbGxEYXRhX2gKICNkZWZpbmUgQ2FsbERhdGFfaAogCi0j
aW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBB
cmdMaXN0OwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2Rl
OwogICAgIGNsYXNzIEpTT2JqZWN0OworICAgIGNsYXNzIEpTVmFsdWVQdHI7CiAgICAgY2xhc3Mg
U2NvcGVDaGFpbk5vZGU7CiAKICAgICBlbnVtIENhbGxUeXBlIHsKQEAgLTQ1LDcgKzQ0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENhbGxUeXBlSlMKICAgICB9OwogCi0gICAgdHlwZWRl
ZiBKU1ZhbHVlKiAoKk5hdGl2ZUZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHR5cGVkZWYgSlNWYWx1ZVB0ciAo
Kk5hdGl2ZUZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICB1bmlvbiBDYWxsRGF0YSB7CiAgICAgICAgIHN0
cnVjdCB7CkBAIC01Nyw3ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9IGpzOwog
ICAgIH07CiAKLSAgICBKU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIGZ1bmN0aW9u
T2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0
ciBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDcs
NyArODA3LDcgQEAgdm9pZCBIZWFwOjpzZXRHQ1Byb3RlY3ROZWVkc0xvY2tpbmcoKQogICAgICAg
ICBtX3Byb3RlY3RlZFZhbHVlc011dGV4LnNldChuZXcgTXV0ZXgpOwogfQogCi12b2lkIEhlYXA6
OnByb3RlY3QoSlNWYWx1ZSogaykKK3ZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlUHRyIGspCiB7
CiAgICAgQVNTRVJUKGspOwogICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSk7CkBAIC04MjQsNyAr
ODI0LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUqIGspCiAgICAgICAgIG1fcHJvdGVj
dGVkVmFsdWVzTXV0ZXgtPnVubG9jaygpOwogfQogCi12b2lkIEhlYXA6OnVucHJvdGVjdChKU1Zh
bHVlKiBrKQordm9pZCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZVB0ciBrKQogewogICAgIEFTU0VS
VChrKTsKICAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8
ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UpOwpAQCAtODQxLDcgKzg0MSw3IEBAIHZv
aWQgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUqIGspCiAgICAgICAgIG1fcHJvdGVjdGVkVmFsdWVz
TXV0ZXgtPnVubG9jaygpOwogfQogCi1IZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWUqIHYpCitIZWFw
KiBIZWFwOjpoZWFwKEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKHYpKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xs
ZWN0b3IuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIENvbGxlY3Rv
cl9oCiAjZGVmaW5lIENvbGxlY3Rvcl9oCiAKLSNpbmNsdWRlICJKU0ltbWVkaWF0ZS5oIgogI2lu
Y2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgpAQCAtNDQsNiArNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBDb2xsZWN0b3JCbG9jazsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9iYWxE
YXRhOworICAgIGNsYXNzIEpTVmFsdWVQdHI7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jl
c3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OwogICAgIGVudW0gSGVh
cFR5cGUgeyBQcmltYXJ5SGVhcCwgTnVtYmVySGVhcCB9OwpAQCAtOTYsMTAgKzk2LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBTdGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIHNldEdDUHJvdGVjdE5lZWRzTG9ja2luZygpOwotICAgICAgICB2b2lkIHBy
b3RlY3QoSlNWYWx1ZSopOwotICAgICAgICB2b2lkIHVucHJvdGVjdChKU1ZhbHVlKik7CisgICAg
ICAgIHZvaWQgcHJvdGVjdChKU1ZhbHVlUHRyKTsKKyAgICAgICAgdm9pZCB1bnByb3RlY3QoSlNW
YWx1ZVB0cik7CiAKLSAgICAgICAgc3RhdGljIEhlYXAqIGhlYXAoSlNWYWx1ZSopOyAvLyAwIGZv
ciBpbW1lZGlhdGUgdmFsdWVzCisgICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKEpTVmFsdWVQdHIp
OyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCiAKICAgICAgICAgc2l6ZV90IGdsb2JhbE9iamVj
dENvdW50KCk7CiAgICAgICAgIHNpemVfdCBwcm90ZWN0ZWRPYmplY3RDb3VudCgpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgQ29tcGxldGlvbiBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogICAg
IHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCk7CiB9CiAKLUNvbXBsZXRpb24gZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUqIHRoaXNWYWx1ZSkKK0NvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlKQogewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAgIApA
QCAtNjMsOCArNjMsOCBAQCBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
CiAKICAgICBKU09iamVjdCogdGhpc09iaiA9ICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS0+aXNV
bmRlZmluZWRPck51bGwoKSkgPyBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkgOiB0aGlzVmFs
dWUtPnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gbm9WYWx1ZSgp
OwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJv
Z3JhbU5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4ubm9kZSgpLCB0aGlzT2JqLCAmZXhjZXB0
aW9uKTsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJvZ3JhbU5vZGUuZ2V0
KCksIGV4ZWMsIHNjb3BlQ2hhaW4ubm9kZSgpLCB0aGlzT2JqLCAmZXhjZXB0aW9uKTsKIAogICAg
IGlmIChleGNlcHRpb24pIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbi0+aXNPYmplY3QoKSAmJiBh
c09iamVjdChleGNlcHRpb24pLT5pc1dhdGNoZG9nRXhjZXB0aW9uKCkpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjQgKzM5LDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAqLwogICAgIGNsYXNzIENvbXBsZXRpb24gewogICAgIHB1
YmxpYzoKLSAgICAgICAgQ29tcGxldGlvbihDb21wbFR5cGUgdHlwZSA9IE5vcm1hbCwgSlNWYWx1
ZSogdmFsdWUgPSBub1ZhbHVlKCkpCisgICAgICAgIENvbXBsZXRpb24oQ29tcGxUeXBlIHR5cGUg
PSBOb3JtYWwsIEpTVmFsdWVQdHIgdmFsdWUgPSBub1ZhbHVlKCkpCiAgICAgICAgICAgICA6IG1f
dHlwZSh0eXBlKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb21wbFR5cGUgY29tcGxUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUqIHYpIHsgbV92YWx1ZSA9IHY7IH0KLSAg
ICAgICAgYm9vbCBpc1ZhbHVlQ29tcGxldGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQorICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
ICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWVQdHIgdikgeyBtX3ZhbHVlID0gdjsgfQorICAg
ICAgICBib29sIGlzVmFsdWVDb21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1
ZSogbV92YWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX3ZhbHVlOwogICAgIH07CiAKICAgICBD
b21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAg
ICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW4mLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNWYWx1ZSogdGhpc1ZhbHVlID0gbm9WYWx1ZSgpKTsKKyAgICBDb21wbGV0aW9u
IGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW4mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUgPSBub1ZhbHVlKCkpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0
KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBvYmplY3QsIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlUHRyIG9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlm
IChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KQogICAgICAgICByZXR1cm4gY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgYXNPYmplY3Qob2JqZWN0KSwgYXJncyk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAkocmV2aXNpb24gMzk1
OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOCArMjksNiBAQAogI2lmbmRlZiBDb25zdHJ1Y3REYXRhX2gKICNkZWZpbmUg
Q29uc3RydWN0RGF0YV9oCiAKLSNpbmNsdWRlICJKU0ltbWVkaWF0ZS5oIiAvLyB0ZW1wb3Jhcnkg
dW50aWwgSlNWYWx1ZSogYmVjb21lcyBhIGNsYXNzIHdlIGNhbiBmb3J3YXJkLWRlY2xhcmUKLQog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmdMaXN0OwpAQCAtNTcsNyArNTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfSBqczsKICAgICB9OwogCi0gICAgSlNPYmplY3QqIGNv
bnN0cnVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwg
Y29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU09iamVjdCogY29u
c3RydWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgY29uc3RydWN0b3IsIENvbnN0cnVjdFR5cGUs
IGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRlQ29uc3RydWN0b3IpOwogCi1zdGF0aWMg
SlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlTm93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVOb3coRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBk
YXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
OwogCiBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUsIERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5h
bEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVj
LCBkYXRlUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKQEAgLTc2LDcgKzc2LDcg
QEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICBpZiAo
YXJncy5hdChleGVjLCAwKS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAg
ICAgICB2YWx1ZSA9IGFzRGF0ZUluc3RhbmNlKGFyZ3MuYXQoZXhlYywgMCkpLT5pbnRlcm5hbE51
bWJlcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9
IGFyZ3MuYXQoZXhlYywgMCktPnRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICAgICAgSlNWYWx1
ZVB0ciBwcmltaXRpdmUgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1ByaW1pdGl2ZShleGVjKTsKICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmUtPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICAgICAgdmFs
dWUgPSBwYXJzZURhdGUocHJpbWl0aXZlLT5nZXRTdHJpbmcoKSk7CiAgICAgICAgICAgICBlbHNl
CkBAIC0xMjMsNyArMTIzLDcgQEAgQ29uc3RydWN0VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENv
bnN0cgogfQogCiAvLyBFQ01BIDE1LjkuMgotc3RhdGljIEpTVmFsdWUqIGNhbGxEYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitzdGF0aWMg
SlNWYWx1ZVB0ciBjYWxsRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgdGltZV90IGxvY2FsVGltZSA9IHRpbWUoMCk7CiAg
ICAgdG0gbG9jYWxUTTsKQEAgLTEzOCwxNyArMTM4LDE3IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2EKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQYXJzZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VEYXRlKGFyZ3MuYXQoZXhlYywgMCkt
PnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlTm93KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitzdGF0aWMgSlNW
YWx1ZVB0ciBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ2V0Q3VycmVudFVU
Q1RpbWUoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVl
UHRyIGRhdGVVVEMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaW50IG4gPSBhcmdzLnNpemUoKTsKICAgICBpZiAoaXNu
YW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgbXV0YWJsZSBDYWNoZSogbV9jYWNoZTsKICAgICB9Owog
Ci0gICAgRGF0ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlKik7CisgICAgRGF0ZUlu
c3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBEYXRlSW5z
dGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBEYXRlSW5z
dGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBB
U1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihhc09iamVjdCh2YWx1ZSkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDUwICs1OCw1MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRlUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRIb3Vy
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1l
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0
SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0
VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0RhdGUoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1NldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0
ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0
RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1pbGxp
U2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFNl
Y29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29u
ZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRV
VENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRGdWxs
WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0
TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFRp
bWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRV
VENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNv
bmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvR01UU3Ry
aW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90
b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAK
IH0KIApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgRGF0ZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVy
dHlTbG90KEUKIAogLy8gRnVuY3Rpb25zCiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtMzc2LDcgKzM3Niw3IEBA
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUKICAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUodCkgKyAiICIgKyBmb3JtYXRUaW1lKHQs
IHV0YykpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTM5Myw3ICszOTMsNyBAQCBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0CiAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRDVmFyaWFudCh0KSArICIgIiArIGZvcm1hdFRpbWUo
dCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC00MTAsNyArNDEwLDcgQEAgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjUwogICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0KSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb1RpbWVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CkBAIC00MjcsNyArNDI3LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhF
eGVjUwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0VGltZSh0LCB1
dGMpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNDUxLDcgKzQ1
MSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGUKICNlbmRpZgog
fQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nCiAjZW5kaWYK
IH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC00OTksNyAr
NDk5LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZwogI2VuZGlm
CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBk
YXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKIH0K
IAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwpAQCAtNTI1LDcgKzUyNSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRU
aW1lKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbWlsbGkpOwogfQogCi1K
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKQEAgLTU0Miw3ICs1NDIsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0RnVsbFllYXIoRXhlY1N0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyB0Lnll
YXIpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlCiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9HTVRT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTU3Niw3ICs1
NzYsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0CiAgICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRDVmFyaWFudCh0KSArICIg
IiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRN
b250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTkzLDcgKzU5Myw3
IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRV
VENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNjEwLDcg
KzYxMCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3QKICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTYyNyw3ICs2
MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqCiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC02
NDQsNyArNjQ0LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YQog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoRGF5KTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldERheShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjpp
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTY2
MSw3ICs2NjEsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogCiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQud2Vla0RheSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5j
ZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBA
IC02NzgsNyArNjc4LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3Rh
dAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LndlZWtEYXkpOwogfQogCi1KU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRI
b3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3Rh
bmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
QEAgLTY5NSw3ICs2OTUsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0
YXRlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuaG91cik7CiB9CiAKLUpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dl
dFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRl
SW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwpAQCAtNzEyLDcgKzcxMiw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENIb3Vy
cyhFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5ob3VyKTsKIH0KIAotSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtNzI5LDcgKzcyOSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNaW51
dGVzKEV4ZWNTdGEKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5taW51dGUpOwogfQogCi1K
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+
aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03NDYsNyArNzQ2LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY0dldFVUQ01pbnV0ZXMoRXhlYwogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1pbnV0
ZSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZVB0ciBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1Zh
bHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTc2Myw3ICs3NjMsNyBAQCBKU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQu
c2Vjb25kKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
aWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzgwLDcgKzc4MCw3IEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWMKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgdC5zZWNvbmQpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWlsbGlT
ZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzk1
LDcgKzc5NSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXgKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRD
TWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtODEwLDcgKzgxMCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENN
aWxsaXNlY29uZHMKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQogCi1KU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVl
LT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTgyNyw3ICs4MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIC1nbXRv
ZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNT
ZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC04
MzUsMTIgKzgzNSwxMiBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUq
CiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1
ZSk7IAogCiAgICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoYXJncy5hdChleGVjLCAwKS0+dG9O
dW1iZXIoZXhlYykpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIG1pbGxp
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFy
Z3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWVQdHIgc2V0TmV3VmFsdWVG
cm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQogewogICAg
IGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTg0OSw3ICs4NDksNyBAQCBz
dGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgZG91YmxlIG1pbGxp
ID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgCiAgICAgaWYgKGFyZ3MuaXNF
bXB0eSgpIHx8IGlzbmFuKG1pbGxpKSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05h
TihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAg
ICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC04NjEsMjQgKzg2MSwyNCBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0
TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgdGhpc0RhdGVPYmotPm1zVG9HcmVnb3JpYW5EYXRl
VGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7CiAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNp
bmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpKSB7Ci0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0gCiAgICAgCi0gICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBp
bnB1dElzVVRDKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVn
b3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0SXNVVEMpKTsKICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9v
bCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWVQdHIgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3Mo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQogewogICAgIGlmICghdGhpc1Zh
bHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmog
PSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOwogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkgewot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFs
VmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9ICAgICAgCkBAIC04
OTgsMTAxICs4OTgsMTAxIEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRlQXJn
cygKICAgICB9CiAgICAgCiAgICAgaWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhl
YywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc05hTihleGVj
KTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9IAogICAgICAgICAgICAKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0SXNV
VEMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRh
dGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlu
cHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhl
YywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29s
IGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5j
U2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0g
ZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1
ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRV
VENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNv
bmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwog
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3Ms
IDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMywgaW5wdXRJc1VU
Qyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1
ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlu
cHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhl
YywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNT
ZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0g
dHJ1ZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVl
LCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldERh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwogICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNV
VEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Y29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9t
RGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKIH0KIAotSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElz
VVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRo
aXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRD
TW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7
CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJn
cywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVh
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwogICAgIHJldHVy
biBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0
SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXRO
ZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMp
OwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlz
VmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlz
RGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7ICAgICAKICAgICBpZiAoYXJncy5p
c0VtcHR5KCkpIHsgCi0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAg
ICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9i
ai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTEwMjMsMTggKzEwMjMsMTggQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIo
RXhlY1N0YXRlKgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGludDMyX3QgeWVhciA9IGFyZ3Mu
YXQoZXhlYywgMCktPnRvSW50MzIoZXhlYywgb2spOwogICAgIGlmICghb2spIHsKLSAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oZXhlYyk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0
ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAgICAgCiAgICAg
dC55ZWFyID0gKHllYXIgPiA5OSB8fCB5ZWFyIDwgMCkgPyB5ZWFyIC0gMTkwMCA6IHllYXI7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01T
KHQsIG1zLCB1dGMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7CiAgICAgdGhpc0RhdGVPYmotPnNldElu
dGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFll
YXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5j
ZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gMzk1OTMp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIg
cHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIENvbnN0cnVjdFR5cGUgRXJyb3JDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3QKIH0KIAogLy8gRUNNQSAxNS45LjIKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsRXJy
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICAvLyAiRXJyb3IoKSIgZ2l2ZXMgdGhlIHNhbWVzIHJlc3VsdCBhcyAibmV3IEVy
cm9yKCkiCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVycm9yKGV4ZWMsIGFyZ3MpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NTkzKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoRXJyb3JQcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogZXJyb3JQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiAvLyBFQ01BIDE1Ljku
NAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSkKQEAgLTQ0LDEzICs0NCwxMyBAQCBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5
cGUoRXhlY1N0YXRlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3Ry
dWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGVycm9yUHJvdG9GdW5j
VG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUqIGVycm9yUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCitKU1ZhbHVlUHRyIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwog
CiAgICAgVVN0cmluZyBzID0gIkVycm9yIjsKIAotICAgIEpTVmFsdWUqIHYgPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOworICAgIEpTVmFsdWVQdHIgdiA9
IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7CiAgICAgaWYg
KCF2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzID0gdi0+dG9TdHJpbmcoZXhlYyk7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OCwzNiArNTgsMzYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1dhdGNoZG9nRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAot
SlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQorSlNWYWx1ZVB0ciBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFs
RGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKIH0KIAotSlNWYWx1
ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciog
bXNnKQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBl
LCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgZSwg
bXNnLCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVs
KQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBj
b25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQogewogICAgIFVTdHJpbmcg
bWVzc2FnZSA9IG1zZzsKICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxhYmVsLnVzdHJpbmcoKSk7
CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbWVzc2FnZSwgLTEsIC0xLCAwKTsK
IH0KIAotSlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUgZSwg
Y29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2KQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWVQdHIgdikK
IHsKICAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CiAgICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2
LT50b1N0cmluZyhleGVjKSk7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbWVz
c2FnZSwgLTEsIC0xLCAwKTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWVQdHIgY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgUmFuZ2VFcnJv
ciwgIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpOwogfQogCi1KU1ZhbHVlKiBj
cmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK0pTVmFsdWVQdHIgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpbnQg
ZW5kT2Zmc2V0ID0gMDsKQEAgLTEwNCw3ICsxMDQsNyBAQCBKU1ZhbHVlKiBjcmVhdGVVbmRlZmlu
ZWRWYXJpYWJsZUVycm9yKEV4CiAgICAgCiBib29sIGlzU3RyV2hpdGVTcGFjZShVQ2hhciBjKTsK
IAotc3RhdGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgaW50IGV4cHJlc3Npb25TdGFydCwgaW50IGV4cHJlc3Np
b25TdG9wLCBKU1ZhbHVlKiB2YWx1ZSwgVVN0cmluZyBlcnJvcikKK3N0YXRpYyBVU3RyaW5nIGNy
ZWF0ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBp
bnQsIGludCBleHByZXNzaW9uU3RhcnQsIGludCBleHByZXNzaW9uU3RvcCwgSlNWYWx1ZVB0ciB2
YWx1ZSwgVVN0cmluZyBlcnJvcikKIHsKICAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJl
c3Npb25TdGFydCA+IGNvZGVCbG9jay0+c291cmNlKCktPmxlbmd0aCgpKSB7CiAgICAgICAgIFVT
dHJpbmcgZXJyb3JUZXh0ID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMTQ4LDcgKzE0OCw3
IEBAIHN0YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVzc2FnZShFeGVjU3QKICAgICByZXR1cm4g
ZXJyb3JUZXh0OwogfQogCi1KU09iamVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0pTT2JqZWN0KiBjcmVhdGVJbnZhbGlk
UGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIG9wLCBKU1ZhbHVlUHRyIHZh
bHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgVVN0cmluZyBtZXNzYWdlID0gIm5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciAnIjsKICAgICBt
ZXNzYWdlLmFwcGVuZChvcCk7CkBAIC0xNjYsNyArMTY2LDcgQEAgSlNPYmplY3QqIGNyZWF0ZUlu
dmFsaWRQYXJhbUVycm9yKEV4ZWNTdAogICAgIHJldHVybiBleGNlcHRpb247CiB9CiAKLUpTT2Jq
ZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitK
U09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpbnQgZW5kT2Zmc2V0ID0gMDsK
QEAgLTE4Nyw3ICsxODcsNyBAQCBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
RXhlCiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNWYWx1ZSogY3JlYXRlTm90QUZ1bmN0
aW9uRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQorSlNWYWx1ZVB0ciBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpbnQgc3RhcnRPZmZz
ZXQgPSAwOwogICAgIGludCBlbmRPZmZzZXQgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0
MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xh
c3MgSlNOb3RBbk9iamVjdEVycm9yU3R1YjsKICAgICBjbGFzcyBKU09iamVjdDsKKyAgICBjbGFz
cyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIE5vZGU7CiAKLSAgICBKU1ZhbHVlKiBjcmVhdGVJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsKLSAgICBKU1ZhbHVlKiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAgSlNWYWx1ZSogY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOworICAgIEpTVmFsdWVQdHIgY3JlYXRl
SW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKik7CisgICAgSlNWYWx1
ZVB0ciBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZVB0
ciBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CiAgICAgSlNOb3RBbk9i
amVjdEVycm9yU3R1YiogY3JlYXRlTm90QW5PYmplY3RFcnJvclN0dWIoRXhlY1N0YXRlKiwgYm9v
bCBpc051bGwpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3Rh
dGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBD
b2RlQmxvY2sqKTsKLSAgICBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsK
LSAgICBKU1ZhbHVlKiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVl
KiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOworICAgIEpTT2JqZWN0KiBj
cmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1
ZVB0ciwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOworICAgIEpTT2JqZWN0
KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVO
b3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgQ29kZUJsb2NrKik7CiAgICAgSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoRXhlY1N0YXRlKiwgSlNOb3RBbk9iamVjdEVycm9yU3R1YiosIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBDb2RlQmxvY2sqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDb25zdHJ1Y3RUeXBlIEZ1bmN0aW9uQ29u
c3RydWN0b3I6OmdldENvCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0
aWMgSlNWYWx1ZSogY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIg
Y2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0
aW9uKGV4ZWMsIGFyZ3MpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRnVuY3Rpb25Q
cm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1
bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25Qcm90b0Z1bmND
YWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwog
CiBGdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udWxs
SWRlbnRpZmllcikKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRk
RnVuY3Rpb25Qcm9wZQogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhl
YywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5j
Q2FsbCksIERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxGdW5jdGlvblByb3Rv
dHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKK3N0
YXRpYyBKU1ZhbHVlUHRyIGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQpAQCAtNjMsNyArNjMsNyBAQCBDYWxsVHlwZSBGdW5jdGlvblByb3RvdHlwZTo6Z2V0
Q2FsbERhdGEoCiAKIC8vIEZ1bmN0aW9ucwogCi1KU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS0+aXNPYmplY3QoJkpTRnVuY3Rpb246OmluZm8pKSB7
CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbih0aGlzVmFsdWUpOwpA
QCAtNzgsMTcgKzc4LDE3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1MKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogfQogCi1KU1ZhbHVl
KiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9u
UHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpTVmFsdWUqIHRoaXNBcmcgPSBhcmdzLmF0
KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGFyZ0FycmF5ID0gYXJncy5hdChleGVjLCAxKTsKKyAg
ICBKU1ZhbHVlUHRyIHRoaXNBcmcgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIg
YXJnQXJyYXkgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCi0gICAgSlNWYWx1ZSogYXBwbHlUaGlzOwor
ICAgIEpTVmFsdWVQdHIgYXBwbHlUaGlzOwogICAgIGlmICh0aGlzQXJnLT5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICBhcHBseVRoaXMgPSBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKICAg
ICBlbHNlCkBAIC0xMTMsMTQgKzExMywxNCBAQCBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGNhbGwoZXhlYywgdGhpc1ZhbHVlLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGFwcGx5VGhpcywgYXBwbHlBcmdzKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Q
cm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jQ2Fs
bChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSB0aGlzVmFsdWUtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogdGhpc0FyZyA9IGFyZ3MuYXQoZXhlYywgMCk7Cisg
ICAgSlNWYWx1ZVB0ciB0aGlzQXJnID0gYXJncy5hdChleGVjLCAwKTsKIAogICAgIEpTT2JqZWN0
KiBjYWxsVGhpczsKICAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDM5
NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5j
dGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogICAgICAg
ICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOwogICAgICAg
ICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIHZvaWQgR2V0dGVyU2V0dGVyOjptYXJrKCkK
ICAgICAgICAgbV9zZXR0ZXItPm1hcmsoKTsKIH0KIAotSlNWYWx1ZSogR2V0dGVyU2V0dGVyOjp0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNW
YWx1ZVB0ciBHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIGpzTnVsbCgpOwogfQogCi1ib29sIEdldHRlclNldHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpCitib29sIEdldHRl
clNldHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBK
U1ZhbHVlUHRyJiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBudW1i
ZXIgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdmlydHVhbCBib29sIGlzR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKKyAgICAgICAgdmly
dHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4
ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSk7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
ZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJp
bmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC02MSw5ICs2MSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU09iamVjdCogbV9zZXR0ZXI7ICAKICAgICB9OwogCi0gICAgR2V0
dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVlKik7CisgICAgR2V0dGVyU2V0dGVyKiBh
c0dldHRlclNldHRlcihKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFz
R2V0dGVyU2V0dGVyKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFz
R2V0dGVyU2V0dGVyKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXND
ZWxsKHZhbHVlKS0+aXNHZXR0ZXJTZXR0ZXIoKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxHZXR0ZXJTZXR0ZXIqPihhc0NlbGwodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5p
dGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKICNpbmNsdWRl
ICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJEYXRlTWF0aC5oIgogI2luY2x1ZGUgImR0b2EuaCIK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IGNvbnN0IFVTdHJpbmcmIG5hbWUoSlNHbG9iYWxEYXRhKik7CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVl
UHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
SGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgICAgIH0KQEAgLTUxLDkgKzUx
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERh
dGEoQ2FsbERhdGEmKSA9IDA7CiAgICAgfTsKIAotICAgIEludGVybmFsRnVuY3Rpb24qIGFzSW50
ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKik7CisgICAgSW50ZXJuYWxGdW5jdGlvbiogYXNJbnRlcm5h
bEZ1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEludGVybmFsRnVuY3Rpb24qIGFz
SW50ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgSW50ZXJuYWxGdW5j
dGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5m
bykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGFzT2Jq
ZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBib29sIEpTQWN0aXZhdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgaWYgKHN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEpTVmFsdWUqKiBsb2Nh
dGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKKyAgICBpZiAoSlNWYWx1
ZVB0ciogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpKSB7CiAgICAg
ICAgIHNsb3Quc2V0VmFsdWVTbG90KGxvY2F0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0FjdGl2YXRpb246OnB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCkBAIC0xMTgsNyArMTE4
LDcgQEAgdm9pZCBKU0FjdGl2YXRpb246OnB1dChFeGVjU3RhdGUqLCBjb25zdAogfQogCiAvLyBG
SVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGhvbm9yIFJlYWRPbmx5IChjb25zdCkgYW5kIERvbnRF
bnVtCi12b2lkIEpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKK3ZvaWQgSlNBY3RpdmF0aW9uOjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKIApAQCAtMTUxLDcgKzE1MSw3IEBA
IGJvb2wgSlNBY3RpdmF0aW9uOjppc0R5bmFtaWNTY29wZSgpIGNvbnMKICAgICByZXR1cm4gZCgp
LT5mdW5jdGlvbkJvZHktPnVzZXNFdmFsKCk7CiB9CiAKLUpTVmFsdWUqIEpTQWN0aXZhdGlvbjo6
YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNBY3RpdmF0aW9uOjphcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGFzQWN0aXZhdGlv
bihzbG90LnNsb3RCYXNlKCkpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNW
YWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0
aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC02NCw3
ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpT
VmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3RE
YXRhIHsKQEAgLTc3LDE1ICs3NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJl
ZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHk7CiAgICAgICAgIH07CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVQdHIgYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwogCiAgICAgICAgIEpTQWN0aXZhdGlv
bkRhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb25EYXRhKj4o
SlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0KICAgICB9OwogCi0gICAgSlNBY3RpdmF0aW9uKiBhc0Fj
dGl2YXRpb24oSlNWYWx1ZSopOworICAgIEpTQWN0aXZhdGlvbiogYXNBY3RpdmF0aW9uKEpTVmFs
dWVQdHIpOwogCi0gICAgaW5saW5lIEpTQWN0aXZhdGlvbiogYXNBY3RpdmF0aW9uKEpTVmFsdWUq
IHZhbHVlKQorICAgIGlubGluZSBKU0FjdGl2YXRpb24qIGFzQWN0aXZhdGlvbihKU1ZhbHVlUHRy
IHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMo
JkpTQWN0aXZhdGlvbjo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNBY3Rp
dmF0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNBcnJheSk7CiAKIC8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCiAvLyBm
dW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRl
ZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBv
dmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKikpICsKLS8v
ICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoSlNWYWx1ZSopKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZV
ICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXpl
b2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKikpKSAvIHNpemVvZihKU1ZhbHVlKikp
CisvLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkgKworLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihK
U1ZhbHVlUHRyKSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1
ZSBvZiBzaXplX3QpLgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXpl
b2YoSlNWYWx1ZVB0cikpKSAvIHNpemVvZihKU1ZhbHVlUHRyKSkKIAogLy8gVGhlc2UgdmFsdWVz
IGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQg
aW50cm9kdWNpbmcKIC8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNTk3MTM5MT4uCkBAIC05MCwxMCArOTAsMTAgQEAgc3RhdGljIGlubGluZSBz
aXplX3Qgc3RvcmFnZVNpemUodW5zaWduZQogCiAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92ZSAtIHRoZSBm
b2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAgIHNpemVfdCBzaXplID0g
KHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpTVmFsdWUqKSkgKyAodmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgc2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3Rv
cmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihKU1Zh
bHVlUHRyKSk7CiAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGlu
IHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0
aGF0CiAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5l
ZCkuCi0gICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihK
U1ZhbHVlKikpKSAvIHNpemVvZihKU1ZhbHVlKikgPT0gdmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+
PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZSopKSkpOworICAgIEFTU0VS
VCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpKSAv
IHNpemVvZihKU1ZhbHVlUHRyKSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49IChzaXplb2Yo
QXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkpKTsKIAogICAgIHJldHVybiBzaXpl
OwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBAIEpTQXJyYXk6OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IHMKICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbENhcGFjaXR5
OwogICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogCi0gICAgSGVhcDo6
aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGluaXRpYWxDYXBhY2l0eSAqIHNpemVv
ZihKU1ZhbHVlKikpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChpbml0aWFsQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZVB0cikpOwogCiAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwogfQpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGEKICAgICB9CiAKICAgICBpZiAoaSA8IHN0b3JhZ2UtPm1fdmVjdG9y
TGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVT
bG90KCZ2YWx1ZVNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzQsNyArMjM0
LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YQogfQogCiAvLyBF
Q01BIDE1LjQuNS4xCi12b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3ZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgYm9vbCBpc0FycmF5SW5kZXg7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS50b0FycmF5SW5kZXgoJmlzQXJyYXlJbmRleCk7CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBK
U0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdAogICAgIEpTT2JqZWN0OjpwdXQoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTQXJyYXk6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC0yNjcsNyArMjY3LDcgQEAgdm9pZCBKU0FycmF5
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAgIH0KIAogICAgIGlmIChpIDwgbV9zdG9y
YWdlLT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0gbV9z
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gbV9z
dG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewogICAgICAgICAg
ICAgdmFsdWVTbG90ID0gdmFsdWU7CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBA
IC0yODMsNyArMjgzLDcgQEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNp
ZwogICAgIHB1dFNsb3dDYXNlKGV4ZWMsIGksIHZhbHVlKTsKIH0KIAotTkVWRVJfSU5MSU5FIHZv
aWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlKiB2YWx1ZSkKK05FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1dFNsb3dDYXNlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKQEAgLTM5MSw3ICszOTEsNyBAQCBib29sIEpT
QXJyYXk6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwogCiAgICAgaWYgKGkgPCBzdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Cisg
ICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAg
ICAgICBpZiAoIXZhbHVlU2xvdCkgewogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIHZvaWQgSlNBcnJh
eTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmcKIAogICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9IHZhbHVlU2xvdDsKICAgICAgICAgICAg
IHZhbHVlU2xvdCA9IG5vVmFsdWUoKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgLT0gaGFkVmFsdWU7CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBKU0FycmF5Ojpz
ZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAot
SlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKK0pTVmFsdWVQdHIgSlNBcnJheTo6cG9wKCkKIHsKICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTUyMCwxNyArNTIwLDE3IEBAIEpTVmFsdWUqIEpT
QXJyYXk6OnBvcCgpCiAKICAgICAtLWxlbmd0aDsKIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIGlmIChtX2Zhc3RBY2Nlc3NDdXRvZmYgPiBsZW5n
dGgpIHsKLSAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xvdCA9IG1fc3RvcmFnZS0+bV92ZWN0b3Jb
bGVuZ3RoXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gbV9zdG9yYWdlLT5tX3Zl
Y3RvcltsZW5ndGhdOwogICAgICAgICByZXN1bHQgPSB2YWx1ZVNsb3Q7CiAgICAgICAgIEFTU0VS
VChyZXN1bHQpOwogICAgICAgICB2YWx1ZVNsb3QgPSBub1ZhbHVlKCk7CiAgICAgICAgIC0tbV9z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICBtX2Zhc3RBY2Nlc3NDdXRvZmYg
PSBsZW5ndGg7CiAgICAgfSBlbHNlIGlmIChsZW5ndGggPCBtX3N0b3JhZ2UtPm1fdmVjdG9yTGVu
Z3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2xlbmd0aF07CisgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IG1fc3RvcmFnZS0+bV92
ZWN0b3JbbGVuZ3RoXTsKICAgICAgICAgcmVzdWx0ID0gdmFsdWVTbG90OwogICAgICAgICB2YWx1
ZVNsb3QgPSBub1ZhbHVlKCk7CiAgICAgICAgIGlmIChyZXN1bHQpCkBAIC01NTksNyArNTU5LDcg
QEAgSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNB
cnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogCkBAIC01OTksNyArNTk5LDcgQEAgdm9pZCBKU0FycmF5OjptYXJr
KCkKIAogICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5n
dGgsIHN0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+bWFya2VkKCkpCiAgICAg
ICAgICAgICB2YWx1ZS0+bWFyaygpOwogICAgIH0KQEAgLTYwNywxNCArNjA3LDE0IEBAIHZvaWQg
SlNBcnJheTo6bWFyaygpCiAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBKU1ZhbHVlUHRy
IHZhbHVlID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgIGlmICghdmFsdWUtPm1hcmtlZCgpKQog
ICAgICAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXR5
cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUqLCBVU3RyaW5nPiBBcnJheVFTb3J0UGFpcjsKK3R5cGVk
ZWYgc3RkOjpwYWlyPEpTVmFsdWVQdHIsIFVTdHJpbmc+IEFycmF5UVNvcnRQYWlyOwogCiBzdGF0
aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2
b2lkKiBiKQogewpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwogICAgICAgICBBU1NFUlQoIXZhbHVlLT5pc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAgICAgfQpAQCAtNjg0LDcgKzY4NCw3IEBA
IHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB9CiAKIHN0cnVjdCBBVkxUcmVl
Tm9kZUZvckFycmF5Q29tcGFyZSB7Ci0gICAgSlNWYWx1ZSogdmFsdWU7CisgICAgSlNWYWx1ZVB0
ciB2YWx1ZTsKIAogICAgIC8vIENoaWxkIHBvaW50ZXJzLiAgVGhlIGhpZ2ggYml0IG9mIGd0IGlz
IHJvYmJlZCBhbmQgdXNlZCBhcyB0aGUKICAgICAvLyBiYWxhbmNlIGZhY3RvciBzaWduLiAgVGhl
IGhpZ2ggYml0IG9mIGx0IGlzIHJvYmJlZCBhbmQgdXNlZCBhcwpAQCAtNjk1LDE1ICs2OTUsMTUg
QEAgc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKIAogc3RydWN0IEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIHsKICAgICB0eXBlZGVmIGludDMyX3QgaGFuZGxlOyAv
LyBIYW5kbGUgaXMgYW4gaW5kZXggaW50byBtX25vZGVzIHZlY3Rvci4KLSAgICB0eXBlZGVmIEpT
VmFsdWUqIGtleTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQdHIga2V5OwogICAgIHR5cGVkZWYgaW50
MzJfdCBzaXplOwogCiAgICAgVmVjdG9yPEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlPiBtX25v
ZGVzOwogICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAgIEpTVmFsdWUqIG1fY29tcGFyZUZ1bmN0
aW9uOworICAgIEpTVmFsdWVQdHIgbV9jb21wYXJlRnVuY3Rpb247CiAgICAgQ2FsbFR5cGUgbV9j
b21wYXJlQ2FsbFR5cGU7CiAgICAgY29uc3QgQ2FsbERhdGEqIG1fY29tcGFyZUNhbGxEYXRhOwot
ICAgIEpTVmFsdWUqIG1fZ2xvYmFsVGhpc1ZhbHVlOworICAgIEpTVmFsdWVQdHIgbV9nbG9iYWxU
aGlzVmFsdWU7CiAKICAgICBoYW5kbGUgZ2V0X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIG1fbm9k
ZXNbaF0ubHQgJiAweDdGRkZGRkZGOyB9CiAgICAgdm9pZCBzZXRfbGVzcyhoYW5kbGUgaCwgaGFu
ZGxlIGxoKSB7IG1fbm9kZXNbaF0ubHQgJj0gMHg4MDAwMDAwMDsgbV9ub2Rlc1toXS5sdCB8PSBs
aDsgfQpAQCAtNzUyLDcgKzc1Miw3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSAKICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9
CiB9OwogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBjb21w
YXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEp
Cit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGNvbXBhcmVG
dW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsK
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTc5MCwxNCArNzkwLDE1IEBAIHZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0
aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25l
cywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgogICAgIGZvciAo
OyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAg
IEpTVmFsdWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdOworICAgICAgICBK
U1ZhbHVlUHRyIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdOwogICAgICAgICBp
ZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKEpTVmFs
dWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBp
ZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKICAg
ICAgICAgICAgIGVsc2UgewpAQCAtODgwLDEyICs4ODEsMTMgQEAgdW5zaWduZWQgSlNBcnJheTo6
Y29tcGFjdEZvclNvcnRpbmcoKQogICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAKICAg
ICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewot
ICAgICAgICBKU1ZhbHVlKiB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF07CisgICAg
ICAgIEpTVmFsdWVQdHIgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdOwogICAgICAg
ICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0pIHsK
KyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIGlm
ICh2KSB7CiAgICAgICAgICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UKQEAgLTk0OSw3ICs5NTEsNyBAQCB2
b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuCiAKICAgICB1bnNpZ25lZCBu
dW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3Rv
cmFnZS0+bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CisgICAgICAgIGlmIChKU1ZhbHVlUHRyIHZhbHVl
ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXSkgewogICAgICAgICAgICAgQVNTRVJUKGkgPCBtX3N0
b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25z
aXN0ZW5jeUNoZWNrKQogICAgICAgICAgICAgICAgIHZhbHVlLT50eXBlKCk7IC8vIExpa2VseSB0
byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KQEAgLTk4OCw3ICs5OTAsNyBA
QCBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0
dXJlKCksIGluaXRpYWxMZW5ndGgpOwogfQogCi1KU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHNpbmdsZUl0ZW1WYWx1ZSkKK0pTQXJyYXkqIGNvbnN0cnVj
dEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBzaW5nbGVJdGVtVmFsdWUpCiB7CiAg
ICAgQXJnTGlzdCB2YWx1ZXM7CiAgICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJdGVtVmFsdWUpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEpT
VmFsdWUqPiBTcGFyc2VBcnJheVZhbHVlTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25l
ZCwgSlNWYWx1ZVB0cj4gU3BhcnNlQXJyYXlWYWx1ZU1hcDsKIAogICAgIHN0cnVjdCBBcnJheVN0
b3JhZ2UgewogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVNYXA7CiAgICAgICAgIHZvaWQq
IGxhenlDcmVhdGlvbkRhdGE7IC8vIEEgSlNBcnJheSBzdWJjbGFzcyBjYW4gdXNlIHRoaXMgdG8g
ZmlsbCB0aGUgdmVjdG9yIGxhemlseS4KLSAgICAgICAgSlNWYWx1ZSogbV92ZWN0b3JbMV07Cisg
ICAgICAgIEpTVmFsdWVQdHIgbV92ZWN0b3JbMV07CiAgICAgfTsKIAogICAgIGNsYXNzIEpTQXJy
YXkgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsgLy8gRklYTUU6IE1ha2UgcHJv
dGVjdGVkIGFuZCBhZGQgc2V0SXRlbS4KKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIpOyAvLyBGSVhNRTogTWFrZSBw
cm90ZWN0ZWQgYW5kIGFkZCBzZXRJdGVtLgogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKIApAQCAtNTUsMjAgKzU1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQg
bm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KIAogICAgICAgICB2b2lkIHNv
cnQoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZvaWQgc29ydChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBj
b21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOworICAgICAgICB2b2lk
IHNvcnQoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBj
b25zdCBDYWxsRGF0YSYpOwogCi0gICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVl
Kik7Ci0gICAgICAgIEpTVmFsdWUqIHBvcCgpOworICAgICAgICB2b2lkIHB1c2goRXhlY1N0YXRl
KiwgSlNWYWx1ZVB0cik7CisgICAgICAgIEpTVmFsdWVQdHIgcG9wKCk7CiAKICAgICAgICAgYm9v
bCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV9mYXN0QWNjZXNzQ3V0b2Zm
OyB9Ci0gICAgICAgIEpTVmFsdWUqIGdldEluZGV4KHVuc2lnbmVkIGkpCisgICAgICAgIEpTVmFs
dWVQdHIgZ2V0SW5kZXgodW5zaWduZWQgaSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
KGNhbkdldEluZGV4KGkpKTsKICAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7
IHJldHVybiBpIDwgbV9mYXN0QWNjZXNzQ3V0b2ZmOyB9Ci0gICAgICAgIEpTVmFsdWUqIHNldElu
ZGV4KHVuc2lnbmVkIGksIEpTVmFsdWUqIHYpCisgICAgICAgIEpTVmFsdWVQdHIgc2V0SW5kZXgo
dW5zaWduZWQgaSwgSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
Y2FuU2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0gPSB2OwpAQCAtNzYsMTMgKzc2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgQXJnTGlzdCYpOwogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNW
YWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGdldFBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKQEAgLTk1LDcgKzk1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCiAgICAgICAgIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBwdXRTbG93Q2FzZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIpOwogCiAgICAgICAg
IGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgodW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAg
CkBAIC0xMDgsMTQgKzEwOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBtX3N0b3JhZ2U7CiAgICAgfTsKIAotICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSop
OworICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZVB0cik7CiAKICAgICBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSopOwogICAgIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5
QXJyYXkoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgSlNBcnJheSog
Y29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiwgSlNWYWx1ZSogc2luZ2xlSXRlbVZhbHVlKTsKKyAg
ICBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHNpbmdsZUl0
ZW1WYWx1ZSk7CiAgICAgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYgdmFsdWVzKTsKIAotICAgIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUq
IHZhbHVlKQorICAgIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmSlNBcnJheTo6
aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNBcnJheSo+KGFzT2JqZWN0KHZh
bHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAzOTU5MykK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcwLDEyICsxNzAsMTIgQEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQ2VsbDo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgdG9PYmplY3QoZXhlYyktPnB1dChleGVjLCBpZGVudGlmaWVyLCB2YWx1
ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIHRv
T2JqZWN0KGV4ZWMpLT5wdXQoZXhlYywgaWRlbnRpZmllciwgdmFsdWUpOwogfQpAQCAtMjEwLDcg
KzIxMCw3IEBAIGNvbnN0IENsYXNzSW5mbyogSlNDZWxsOjpjbGFzc0luZm8oKSBjb24KICAgICBy
ZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogSlNDZWxsOjpnZXRKU051bWJlcigpCitKU1ZhbHVlUHRy
IEpTQ2VsbDo6Z2V0SlNOdW1iZXIoKQogewogICAgIHJldHVybiBub1ZhbHVlKCk7CiB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpT
SW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtNzEsOCArNzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dFRydW5jYXRlZFVJbnQzMih1aW50MzJfdCYpIGNvbnN0OwogCiAgICAgICAgIC8vIEJhc2ljIGNv
bnZlcnNpb25zLgotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSomKSA9IDA7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWVQdHImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdCA9IDA7CkBAIC04NywxNSArODgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Ly8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRl
ZC4KICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
KTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRy
IGdldEpTTnVtYmVyKCk7CiAgICAgICAgIHZvaWQqIHZwdHIoKSB7IHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KHRoaXMpOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMTA3LDEyICsxMDgs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiAg
ICAgfTsKIAotICAgIEpTQ2VsbCogYXNDZWxsKEpTVmFsdWUqKTsKKyAgICBKU0NlbGwqIGFzQ2Vs
bChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0NlbGwqIGFzQ2VsbChKU1ZhbHVlKiB2YWx1
ZSkKKyAgICBpbmxpbmUgSlNDZWxsKiBhc0NlbGwoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSk7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPih2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1
ZS0+YXNDZWxsKCk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpAQCAtMTU3LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFM
V0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgpKSk7Ci0gICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KHRo
aXMpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBKU0NlbGwqPih0aGlzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQqIEpTQ2Vs
bDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBA
IC0yNDYsMTIgKzI0NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpIHx8IGFzQ2VsbCgpLT5tYXJrZWQoKTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRl
KiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CisgICAg
aW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgPyBhc1ZhbHVlKCkg
OiBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgcHJlZmVycmVkVHlwZSk7CiAgICAgfQogCi0g
ICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSkKKyAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwg
SlNWYWx1ZVB0ciYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKGFzVmFsdWUoKSkpIHsKICAgICAgICAgICAgIG51bWJlciA9IEpTSW1tZWRpYXRlOjp0
b0RvdWJsZShhc1ZhbHVlKCkpOwpAQCAtMzAwLDkgKzMwMSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgPyBKU0lt
bWVkaWF0ZTo6dG9TdHJpbmcoYXNWYWx1ZSgpKSA6IGFzQ2VsbCgpLT50b1RoaXNTdHJpbmcoZXhl
Yyk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIEpTVmFsdWU6OmdldEpTTnVtYmVyKCkK
KyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpnZXRKU051bWJlcigpCiAgICAgewotCiAg
ICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYXNWYWx1ZSgpKSA/IGFzVmFsdWUo
KSA6IEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpID8gbm9WYWx1ZSgpIDogYXND
ZWxsKCktPmdldEpTTnVtYmVyKCk7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMjQgKzc3LDI0IEBAIENhbGxU
eXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxEYXQKICAgICByZXR1cm4gQ2FsbFR5cGVK
UzsKIH0KIAotSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNGdW5jdGlv
bjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKG1f
Ym9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyksIGFy
Z3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiB9CiAKLUpT
VmFsdWUqIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVu
Y3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9
IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iaik7CiB9CiAKLUpTVmFsdWUqIEpT
RnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVuY3Rpb246OmNhbGxl
ckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xv
dC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVD
YWxsZXIoZXhlYywgdGhpc09iaik7CiB9CiAKLUpTVmFsdWUqIEpTRnVuY3Rpb246Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVuY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+bV9ib2R5LT5wYXJhbWV0ZXJDb3VudCgp
KTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlKiBKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIo
RXhlY1N0CiBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSkgewotICAgICAgICBKU1ZhbHVlKiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9w
ZXJ0eU5hbWUpOworICAgICAgICBKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0
aW9uKHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKCFsb2NhdGlvbikgewogICAgICAgICAg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG5ldyAoZXhlYykgSlNPYmplY3QobV9zY29wZUNoYWlu
Lmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKQEAgLTEzMyw3ICsxMzMs
NyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci12b2lkIEpTRnVuY3Rpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3Zv
aWQgSlNGdW5jdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNTgsMTQgKzE1OCwxNCBAQCBDb25zdHJ1Y3RUeXBlIEpTRnVuY3Rpb246Omdl
dENvbnN0cnVjdERhCiBKU09iamVjdCogSlNGdW5jdGlvbjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsK
LSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBnZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CiAgICAgaWYgKHByb3RvdHlwZS0+aXNPYmplY3Qo
KSkKICAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG90eXBlKS0+aW5oZXJpdG9ySUQo
KTsKICAgICBlbHNlCiAgICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IG5l
dyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4
ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUobV9ib2R5LmdldCgpLCBleGVjLCB0aGlzLCB0aGlz
T2JqLCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOwor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShtX2Jv
ZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNPYmosIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCks
IGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8
ICFyZXN1bHQtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aGlzT2JqOwogICAgIHJldHVy
biBhc09iamVjdChyZXN1bHQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgICAg
ICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAg
ICAgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICAgICAgdm9pZCBzZXRTY29wZShjb25z
dCBTY29wZUNoYWluJiBzY29wZUNoYWluKSB7IG1fc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW47IH0K
ICAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlQ2hhaW47IH0KQEAg
LTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKSAKICAg
ICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKICAgICAgICAg
fQpAQCAtODIsMTcgKzgyLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIENv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAgICAgIHZp
cnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGNhbGxlckdldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsZXJHZXR0ZXIoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZVB0ciBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBtX2JvZHk7CiAgICAgICAgIFNjb3BlQ2hhaW4gbV9zY29wZUNoYWluOwogICAgIH07
CiAKLSAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWUqKTsKKyAgICBKU0Z1bmN0aW9u
KiBhc0Z1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTRnVuY3Rpb24qIGFzRnVu
Y3Rpb24oSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24o
SlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSkt
PmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU0Z1bmN0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTVmFsdWUuaCIKIAogc3RydWN0IE9w
YXF1ZUpTQ2xhc3M7CiBzdHJ1Y3QgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOwpAQCAtNzEsNyAr
NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXI7CiAKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOworICAgICAgICBKU1ZhbHVlUHRyIGV4
Y2VwdGlvbjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkKiBleGNlcHRpb25Mb2NhdGlv
bjsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIGNvbnN0IGlu
dCBpbml0aWFsVGlja0NvdW50VGhyZXNobwogLy8gUHJlZmVycmVkIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMgYmV0d2VlbiBlYWNoIHRpbWVvdXQgY2hlY2sKIHN0YXRpYyBjb25zdCBpbnQgcHJlZmVy
cmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAxMDAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQg
bWFya0lmTmVlZGVkKEpTVmFsdWUqIHYpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVk
KEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAodiAmJiAhdi0+bWFya2VkKCkpCiAgICAgICAgIHYt
Pm1hcmsoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpT
T2JqZWN0KiB0aGlzCiAgICAgcmVzZXQocHJvdG90eXBlKCkpOwogfQogCi12b2lkIEpTR2xvYmFs
T2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTR2xvYmFs
T2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwogCkBAIC0xNTYsMTggKzE1NiwxOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQo
RXhlY1N0YXRlKiBleGVjCiAgICAgSlNWYXJpYWJsZU9iamVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXRXaXRoQXR0
cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lkIEpTR2xvYmFsT2JqZWN0
OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAg
ICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6
OmhlYXAodGhpcykpOwogCiAgICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMocHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
VmFsdWUqIHZhbHVlQmVmb3JlID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1
ZVB0ciB2YWx1ZUJlZm9yZSA9IGdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90OwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKICAgICBpZiAoIXZhbHVlQmVmb3JlKSB7Ci0gICAgICAgIGlmIChK
U1ZhbHVlKiB2YWx1ZUFmdGVyID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSkpCisgICAgICAgIEpT
VmFsdWVQdHIgdmFsdWVBZnRlciA9IGdldERpcmVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBp
ZiAodmFsdWVBZnRlcikKICAgICAgICAgICAgIHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIHZhbHVl
QWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KIH0KQEAgLTE5NCw3ICsxOTUsNyBAQCBzdGF0aWMg
aW5saW5lIEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDCiAgICAgcmV0dXJuIG87CiB9CiAKLXZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3RvdHlwZSkKK3ZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWVQdHIgcHJvdG90eXBlKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKQEAgLTI0NywxMyArMjQ4LDEz
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIC8vIENv
bnN0cnVjdG9ycwogCi0gICAgSlNWYWx1ZSogb2JqZWN0Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMp
IE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBK
U1ZhbHVlKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVj
dG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogYXJy
YXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+
YXJyYXlQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIHN0cmluZ0NvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3Ry
dWN0dXJlLmdldCgpLCBkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogYm9vbGVh
bkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgQm9vbGVh
bkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQo
KS0+Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+bnVtYmVyUHJvdG90eXBl
KTsKLSAgICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1
Y3RvcihleGVjLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5k
YXRlUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIG9iamVjdENvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPm9iamVjdFByb3RvdHlwZSk7Cisg
ICAgSlNWYWx1ZVB0ciBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNv
bnN0cnVjdG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgSlNWYWx1
ZVB0ciBhcnJheUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMs
IEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBl
KSwgZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBzdHJpbmdDb25zdHJ1Y3Rv
ciA9IG5ldyAoZXhlYykgU3RyaW5nQ29uc3RydWN0b3IoZXhlYywgU3RyaW5nQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVG
dW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5zdHJpbmdQcm90b3R5cGUpOworICAgIEpTVmFs
dWVQdHIgYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3Io
ZXhlYywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJD
b25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgTnVtYmVyQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5u
dW1iZXJQcm90b3R5cGUpOworICAgIEpTVmFsdWVQdHIgZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUuZ2V0KCksIGQoKS0+ZGF0ZVByb3RvdHlwZSk7CiAKICAgICBkKCktPnJlZ0V4cENvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCBSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnJlZ0V4cFBy
b3RvdHlwZSk7CiAKQEAgLTMzNyw3ICszMzgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNl
dChKU1ZhbHVlKiBwcm90CiB9CiAKIC8vIFNldCBwcm90b3R5cGUsIGFuZCBhbHNvIGluc2VydCB0
aGUgb2JqZWN0IHByb3RvdHlwZSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFpbi4KLXZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWUqIHByb3RvdHlwZSkKK3ZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogewogICAgIHNl
dFByb3RvdHlwZShwcm90b3R5cGUpOwogICAgIGxhc3RJblByb3RvdHlwZUNoYWluKHRoaXMpLT5z
ZXRQcm90b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw4ICsxNjEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1
ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJp
YnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
KiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lR2V0dGVyKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGdldHRlckZ1
bmMpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRlckZ1bmMpOwpAQCAtMjQ0
LDE5ICsyNDQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29weUdsb2JhbHNG
cm9tKFJlZ2lzdGVyRmlsZSYpOwogICAgICAgICB2b2lkIGNvcHlHbG9iYWxzVG8oUmVnaXN0ZXJG
aWxlJik7CiAgICAgICAgIAotICAgICAgICB2b2lkIHJlc2V0UHJvdG90eXBlKEpTVmFsdWUqIHBy
b3RvdHlwZSk7CisgICAgICAgIHZvaWQgcmVzZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5
cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIGQoKS0+
Z2xvYmFsRGF0YS5nZXQoKTsgfQogICAgICAgICBKU0dsb2JhbE9iamVjdERhdGEqIGQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdERhdGEqPihKU1ZhcmlhYmxlT2Jq
ZWN0OjpkKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBz
dHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKLSAgICAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1ZhbHVlKiB2LCB1bnNpZ25lZCBhKQorICAgICAgICAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWVQdHIgdiwg
dW5zaWduZWQgYSkKICAgICAgICAgICAgICAgICA6IGlkZW50aWZpZXIoaSkKICAgICAgICAgICAg
ICAgICAsIHZhbHVlKHYpCiAgICAgICAgICAgICAgICAgLCBhdHRyaWJ1dGVzKGEpCkBAIC0yNjQs
NyArMjY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNvbnN0IElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVl
OworICAgICAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgYWRkU3RhdGljR2xvYmFscyhHbG9i
YWxQcm9wZXJ0eUluZm8qLCBpbnQgY291bnQpOwpAQCAtMjcyLDE2ICsyNzIsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IEZvbGQgcmVzZXQgaW50
byBpbml0LgogICAgICAgICB2b2lkIGluaXQoSlNPYmplY3QqIHRoaXNWYWx1ZSk7Ci0gICAgICAg
IHZvaWQgcmVzZXQoSlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAgdm9pZCByZXNldChKU1Zh
bHVlUHRyIHByb3RvdHlwZSk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoUmVnaXN0ZXIq
IHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7CiAKICAg
ICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7IC8vIGNhbiBvbmx5IGJlIGFsbG9jYXRl
ZCB3aXRoIEpTR2xvYmFsRGF0YQogICAgIH07CiAKLSAgICBKU0dsb2JhbE9iamVjdCogYXNHbG9i
YWxPYmplY3QoSlNWYWx1ZSopOworICAgIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChK
U1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3Qo
SlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVj
dChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVl
KS0+aXNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2Jh
bE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0zMzMsNyArMzMzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiBhc0dsb2JhbE9iamVjdChuLT5vYmplY3QpOwogICAgIH0K
IAotICAgIGlubGluZSBKU1ZhbHVlKiBTdHJ1Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1cChFeGVj
U3RhdGUqIGV4ZWMpCisgICAgaW5saW5lIEpTVmFsdWVQdHIgU3RydWN0dXJlOjpwcm90b3R5cGVG
b3JMb29rdXAoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAgICAgaWYgKHR5cGVJbmZvKCku
dHlwZSgpID09IE9iamVjdFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gbV9wcm90b3R5cGU7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB1
c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBKU1Zh
bHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBj
aGFyKiBkb05vdEVzY2FwZSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGVuY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90RXNjYXBlKQogewogICAg
IFVTdHJpbmcgc3RyID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgQ1N0
cmluZyBjc3RyID0gc3RyLlVURjhTdHJpbmcodHJ1ZSk7CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRp
YyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgcmVzdWx0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGRlY29kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90VW5lc2NhcGUsIGJvb2wg
c3RyaWN0KQorc3RhdGljIEpTVmFsdWVQdHIgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9Ob3RVbmVzY2FwZSwgYm9vbCBzdHJpY3QpCiB7
CiAgICAgVVN0cmluZyByZXN1bHQgPSAiIjsKICAgICBVU3RyaW5nIHN0ciA9IGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMjY4LDE0ICsyNjgsMTQgQEAgc3RhdGljIGRvdWJs
ZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAgIHJldHVybiBzLnRvRG91YmxlKHRydWUg
Lyp0b2xlcmFudCovLCBmYWxzZSAvKiBOYU4gZm9yIGVtcHR5IHN0cmluZyAqLyk7CiB9CiAKLUpT
VmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9u
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGds
b2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIEpTT2JqZWN0KiB1
bndyYXBwZWRPYmplY3QgPSB0aGlzT2JqZWN0LT51bndyYXBwZWRPYmplY3QoKTsKICAgICBpZiAo
IXVud3JhcHBlZE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSB8fCBzdGF0aWNfY2FzdDxKU0dsb2Jh
bE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmV2YWxGdW5jdGlvbigpICE9IGZ1bmN0aW9uKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIg
dmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdoaWNo
IGV2YWwgb3JpZ2luYXRlZCIpOwogCi0gICAgSlNWYWx1ZSogeCA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciB4ID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpZiAoIXgtPmlzU3Ry
aW5nKCkpCiAgICAgICAgIHJldHVybiB4OwogCkBAIC0yOTMsOSArMjkzLDkgQEAgSlNWYWx1ZSog
Z2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiBleGVjLT5pbnRlcnBy
ZXRlcigpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlzT2JqZWN0LCBzdGF0aWNf
Y2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmdsb2JhbFNjb3BlQ2hhaW4o
KS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1
bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBK
U1ZhbHVlKiB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9
IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaW50MzJfdCByYWRpeCA9IGFyZ3MuYXQoZXhlYywgMSkt
PnRvSW50MzIoZXhlYyk7CiAKICAgICBpZiAodmFsdWUtPmlzTnVtYmVyKCkgJiYgKHJhZGl4ID09
IDAgfHwgcmFkaXggPT0gMTApKSB7CkBAIC0zMTAsMjMgKzMxMCwyMyBAQCBKU1ZhbHVlKiBnbG9i
YWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBh
cnNlSW50KHZhbHVlLT50b1N0cmluZyhleGVjKSwgcmFkaXgpKTsKIH0KIAotSlNWYWx1ZSogZ2xv
YmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VGbG9hdChhcmdzLmF0KGV4ZWMsIDAp
LT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihpc25h
bihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBnbG9i
YWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgZG91YmxlIG4gPSBhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKTsKICAgICByZXR1
cm4ganNCb29sZWFuKCFpc25hbihuKSAmJiAhaXNpbmYobikpOwogfQogCi1KU1ZhbHVlKiBnbG9i
YWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUklb
XSA9CiAgICAgICAgICIjJCYrLC86Oz0/QCI7CkBAIC0zMzQsMTIgKzMzNCwxMiBAQCBKU1ZhbHVl
KiBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGRlY29kZShleGVj
LCBhcmdzLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUkksIHRydWUpOwogfQogCi1K
U1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFs
RnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFy
Z3MsICIiLCB0cnVlKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIg
ZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSVtdID0KICAgICAgICAgIkFCQ0RFRkdISUpL
TE1OT1BRUlNUVVZXWFlaIgpAQCAtMzUwLDcgKzM1MCw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNF
bmNvZGVVUkkoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25v
dF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUkkpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRW5j
b2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2Rp
bmdfVVJJX2NvbXBvbmVudFtdID0KICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
IgpAQCAtMzYxLDcgKzM2MSw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25l
bnQoRXgKICAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF9lc2NhcGVfd2hlbl9l
bmNvZGluZ19VUklfY29tcG9uZW50KTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0VzY2FwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNo
YXIgZG9fbm90X2VzY2FwZVtdID0KICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
IgpAQCAtMzkyLDcgKzM5Miw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRl
KiBleGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSog
Z2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIFVTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgVVN0cmluZyBzdHIgPSBhcmdzLmF0KGV4
ZWMsIDApLT50b1N0cmluZyhleGVjKTsKQEAgLTQyMCw3ICs0MjAsNyBAQCBKU1ZhbHVlKiBnbG9i
YWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBlCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1KU1ZhbHVl
KiBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSlNDUHJpbnQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgQ1N0cmluZ0J1ZmZlciBzdHJpbmc7CiAgICAgYXJncy5hdChleGVjLCAwKS0+dG9T
dHJpbmcoZXhlYykuZ2V0Q1N0cmluZyhzdHJpbmcpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMzk1OTMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDE5ICszNSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBGSVhN
RTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkgYmUgaW4gSlNHbG9iYWxPYmplY3QuY3Bw
LCBidXQgcHV0dGluZyB0aGVtIHRoZXJlCiAgICAgLy8gaXMgYSAwLjUlIHJlZHVjdGlvbi4KIAot
ICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VJbnQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFs
dWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGds
b2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFs
RnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSog
Z2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0VzY2FwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1
ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIg
Z2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1
ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1
ZVB0ciBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY0RlY29kZVVSSUNv
bXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxG
dW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVl
UHRyIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgSlNWYWx1ZSogZ2xvYmFsRnVu
Y0pTQ1ByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNKU0NQcmludChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKICNlbmRpZgogCiAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIu
MDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0
KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2JqZWN0KEpTVmFsdWUqIHYsIEV4ZWNTdGF0ZSogZXhlYykK
K0pTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2JqZWN0KEpTVmFsdWVQdHIgdiwgRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVt
YmVyKHYpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJl
cihleGVjLCB2KTsKICAgICBpZiAoaXNCb29sZWFuKHYpKQogICAgICAgICByZXR1cm4gY29uc3Ry
dWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGV4ZWMsIHYpOwotICAgIGlmICh2ID09IGpz
TnVsbCgpKQorICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmdsb2Jh
bFRoaXNWYWx1ZSgpOwogICAgIAogICAgIEpTTm90QW5PYmplY3RFcnJvclN0dWIqIGV4Y2VwdGlv
biA9IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3JTdHViKGV4ZWMsIHYtPmlzTnVsbCgpKTsKQEAgLTQ3
LDcgKzQ3LDcgQEAgSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b1RoaXNPYmplY3QoSlNWYQogICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYywgZXhjZXB0aW9uKTsKIH0KIAot
SlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b09iamVjdChKU1ZhbHVlKiB2LCBFeGVjU3RhdGUqIGV4
ZWMpCitKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0KEpTVmFsdWVQdHIgdiwgRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVt
YmVyKHYpKQpAQCAtNjAsNyArNjAsNyBAQCBKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0
KEpTVmFsdWUqCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjLCBleGNl
cHRpb24pOwogfQogCi1KU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3RvdHlwZShKU1ZhbHVlKiB2
LCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3RvdHlwZShKU1Zh
bHVlUHRyIHYsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoaXNJbW1lZGlhdGUodikp
OwogICAgIGlmIChpc051bWJlcih2KSkKQEAgLTczLDE4ICs3MywxOCBAQCBKU09iamVjdCogSlNJ
bW1lZGlhdGU6OnByb3RvdHlwZShKU1ZhbHVlCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RB
bk9iamVjdChleGVjLCBleGNlcHRpb24pOwogfQogCi1VU3RyaW5nIEpTSW1tZWRpYXRlOjp0b1N0
cmluZyhKU1ZhbHVlKiB2KQorVVN0cmluZyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcoSlNWYWx1ZVB0
ciB2KQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYp
KQogICAgICAgICByZXR1cm4gVVN0cmluZzo6ZnJvbShnZXRUcnVuY2F0ZWRJbnQzMih2KSk7Ci0g
ICAgaWYgKHYgPT0ganNCb29sZWFuKGZhbHNlKSkKKyAgICBpZiAoanNCb29sZWFuKGZhbHNlKSA9
PSB2KQogICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAgICBpZiAodiA9PSBqc0Jvb2xlYW4odHJ1
ZSkpCisgICAgaWYgKGpzQm9vbGVhbih0cnVlKSA9PSB2KQogICAgICAgICByZXR1cm4gInRydWUi
OwogICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuICJudWxsIjsKLSAgICBBU1NF
UlQodiA9PSBqc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NFUlQodi0+aXNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuICJ1bmRlZmluZWQiOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lt
bWVkaWF0ZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgPGxpbWl0
cz4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTM5LDkgKzQw
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNWYWx1ZTsKICAgICBjbGFzcyBVU3Ry
aW5nOwogCi0gICAgaW5saW5lIEpTVmFsdWUqIG5vVmFsdWUoKSB7IHJldHVybiAwOyB9Ci0gICAg
aW5saW5lIHZvaWQqIGFzUG9pbnRlcihKU1ZhbHVlKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0K
LQogICAgIC8qCiAgICAgICogQSBKU1ZhbHVlKiBpcyBlaXRoZXIgYSBwb2ludGVyIHRvIGEgY2Vs
bCAoYSBoZWFwLWFsbG9jYXRlZCBvYmplY3QpIG9yIGFuIGltbWVkaWF0ZSAoYSB0eXBlLXRhZ2dl
ZCAKICAgICAgKiB2YWx1ZSBtYXNxdWVyYWRpbmcgYXMgYSBwb2ludGVyKS4gVGhlIGxvdyB0d28g
Yml0cyBpbiBhIEpTVmFsdWUqIGFyZSBhdmFpbGFibGUgZm9yIHR5cGUgdGFnZ2luZwpAQCAtMTEz
LDE1MiArMTExLDE1MiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogIAogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0ltbWVkaWF0ZShKU1ZhbHVlKiB2
KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzSW1tZWRpYXRlKEpTVmFsdWVQ
dHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgVGFnTWFz
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc051bWJlcihKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IGlzTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJh
d1ZhbHVlKHYpICYgVGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIGlzUG9zaXRpdmVOdW1iZXIoSlNWYWx1ZSogdikKKyAgICAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc1Bvc2l0aXZlTnVtYmVyKEpTVmFsdWVQdHIg
dikKICAgICAgICAgewogICAgICAgICAgICAgLy8gQSBzaW5nbGUgbWFzayB0byBjaGVjayBmb3Ig
dGhlIHNpZ24gYml0IGFuZCB0aGUgbnVtYmVyIHRhZyBhbGwgYXQgb25jZS4KICAgICAgICAgICAg
IHJldHVybiAocmF3VmFsdWUodikgJiAoc2lnbkJpdCB8IFRhZ0JpdFR5cGVJbnRlZ2VyKSkgPT0g
VGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2KSAmIEZ1bGxUYWdUeXBlTWFzaykgPT0gRnVsbFRh
Z1R5cGVCb29sOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIGlzVW5kZWZpbmVkT3JOdWxsKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNVbmRlZmluZWRPck51bGwoSlNWYWx1ZVB0ciB2KQogICAgICAg
ICB7CiAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYW5kIG51bGwgc2hhcmUgdGhlIHNhbWUgdmFs
dWUsIGJhciB0aGUgJ3VuZGVmaW5lZCcgYml0IGluIHRoZSBleHRlbmRlZCB0YWcuCiAgICAgICAg
ICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgfkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkKSA9PSBG
dWxsVGFnVHlwZU51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBpc05lZ2F0
aXZlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBib29sIGlzTmVnYXRpdmUoSlNWYWx1ZVB0
ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikpOwogICAgICAg
ICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgc2lnbkJpdDsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGNoYXIpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJv
bShzaWduZWQgY2hhcik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHVuc2lnbmVkIGNo
YXIpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShzaG9ydCk7Ci0gICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBmcm9tKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IGZyb20oaW50KTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWduZWQpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShsb25nKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IGZyb20odW5zaWduZWQgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGxvbmcg
bG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHVuc2lnbmVkIGxvbmcgbG9uZyk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGRvdWJsZSk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlUHRyIGZyb20oY2hhcik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oc2ln
bmVkIGNoYXIpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKHVuc2lnbmVkIGNoYXIp
OworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKHNob3J0KTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCBzaG9ydCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
UHRyIGZyb20oaW50KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20obG9uZyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlUHRyIGZyb20odW5zaWduZWQgbG9uZyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IGZyb20obG9uZyBsb25nKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25l
ZCBsb25nIGxvbmcpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKGRvdWJsZSk7CiAK
LSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VpdGhlckltbWVkaWF0ZShKU1Zh
bHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNFaXRoZXJJbW1lZGlhdGUoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2MSkgfCByYXdWYWx1ZSh2MikpICYgVGFn
TWFzazsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNB
bnlJbW1lZGlhdGUoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyLCBKU1ZhbHVlKiB2MykKKyAgICAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FueUltbWVkaWF0ZShKU1ZhbHVlUHRyIHYx
LCBKU1ZhbHVlUHRyIHYyLCBKU1ZhbHVlUHRyIHYzKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gKHJhd1ZhbHVlKHYxKSB8IHJhd1ZhbHVlKHYyKSB8IHJhd1ZhbHVlKHYzKSkgJiBUYWdN
YXNrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBhcmVC
b3RoSW1tZWRpYXRlKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRlKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQ
dHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpc0ltbWVkaWF0ZSh2MSkgJiBp
c0ltbWVkaWF0ZSh2Mik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikK
KyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRlTnVtYmVy
cyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gcmF3VmFsdWUodjEpICYgcmF3VmFsdWUodjIpICYgVGFnQml0VHlwZUludGVnZXI7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBhbmRJbW1l
ZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBhbmRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEs
IEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChhcmVCb3RoSW1t
ZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3
VmFsdWUodjEpICYgcmF3VmFsdWUodjIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIHhvckltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEsIEpT
VmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIHhvcklt
bWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpOwogICAg
ICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgocmF3VmFsdWUodjEpIF4gcmF3VmFsdWUodjIpKSB8
IFRhZ0JpdFR5cGVJbnRlZ2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUqIG9ySW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlKiB2MSwgSlNWYWx1ZSog
djIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgb3JJbW1lZGlhdGVO
dW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKICAgICAgICAgICAg
IHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpIHwgcmF3VmFsdWUodjIpKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHJpZ2h0U2hpZnRJbW1l
ZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHZhbCwgSlNWYWx1ZSogc2hpZnQpCisgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgcmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnMoSlNW
YWx1ZVB0ciB2YWwsIEpTVmFsdWVQdHIgc2hpZnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7CiAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVZhbHVlKChyYXdWYWx1ZSh2YWwpID4+ICgocmF3VmFsdWUoc2hpZnQpID4+IElu
dGVnZXJQYXlsb2FkU2hpZnQpICYgMHgxZikpIHwgVGFnQml0VHlwZUludGVnZXIpOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2
ZU9wZXJhdGlvbnMoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAg
ICAgICAgICAgICAvLyBOdW1iZXIgaXMgbm9uLW5lZ2F0aXZlIGFuZCBhbiBvcGVyYXRpb24gaW52
b2x2aW5nIHR3byBvZiB0aGVzZSBjYW4ndCBvdmVyZmxvdy4KICAgICAgICAgICAgIC8vIENoZWNr
aW5nIGZvciBhbGxvd2VkIG5lZ2F0aXZlIG51bWJlcnMgdGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQn
cyB3b3J0aCBvbiBTdW5TcGlkZXIuCiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYg
KFRhZ0JpdFR5cGVJbnRlZ2VyICsgKHNpZ25CaXQgfCAoc2lnbkJpdCA+PiAxKSkpKSA9PSBUYWdC
aXRUeXBlSW50ZWdlcjsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGFkZEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQor
ICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGFkZEltbWVkaWF0ZU51bWJl
cnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MSkpOwogICAgICAgICAgICAgQVNT
RVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpOwogICAgICAgICAgICAgcmV0dXJu
IG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgKyByYXdWYWx1ZSh2MikgLSBUYWdCaXRUeXBlSW50ZWdl
cik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBz
dWJJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBzdWJJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQ
dHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChjYW5E
b0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpKTsKICAgICAgICAgICAgIEFTU0VSVChjYW5Eb0Zh
c3RBZGRpdGl2ZU9wZXJhdGlvbnModjIpKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUo
cmF3VmFsdWUodjEpIC0gcmF3VmFsdWUodjIpICsgVGFnQml0VHlwZUludGVnZXIpOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5jSW1tZWRpYXRl
TnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQ
dHIgaW5jSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSk7CiAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYpICsgKDEgPDwgSW50ZWdlclBheWxvYWRTaGlmdCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogZGVj
SW1tZWRpYXRlTnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWVQdHIgZGVjSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSk7CiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYpIC0gKDEgPDwgSW50ZWdlclBheWxv
YWRTaGlmdCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShK
U1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyBib29sIHRvQm9vbGVhbihKU1ZhbHVlKik7Ci0gICAg
ICAgIHN0YXRpYyBKU09iamVjdCogdG9PYmplY3QoSlNWYWx1ZSosIEV4ZWNTdGF0ZSopOwotICAg
ICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU1ZhbHVlKiwgRXhlY1N0YXRlKik7
Ci0gICAgICAgIHN0YXRpYyBVU3RyaW5nIHRvU3RyaW5nKEpTVmFsdWUqKTsKLQotICAgICAgICBz
dGF0aWMgYm9vbCBnZXRVSW50MzIoSlNWYWx1ZSosIHVpbnQzMl90Jik7Ci0gICAgICAgIHN0YXRp
YyBib29sIGdldFRydW5jYXRlZEludDMyKEpTVmFsdWUqLCBpbnQzMl90Jik7Ci0gICAgICAgIHN0
YXRpYyBib29sIGdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlKiwgdWludDMyX3QmKTsKLQotICAg
ICAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0ZWRJbnQzMihKU1ZhbHVlKik7Ci0gICAgICAg
IHN0YXRpYyB1aW50MzJfdCBnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZSopOwotCi0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiB0cnVlSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBmYWxzZUltbWVkaWF0ZSgpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogdW5kZWZpbmVkSW1t
ZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBudWxsSW1tZWRpYXRlKCk7Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiB6ZXJvSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBvbmVJbW1lZGlhdGUoKTsKKyAgICAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShKU1Zh
bHVlUHRyKTsKKyAgICAgICAgc3RhdGljIGJvb2wgdG9Cb29sZWFuKEpTVmFsdWVQdHIpOworICAg
ICAgICBzdGF0aWMgSlNPYmplY3QqIHRvT2JqZWN0KEpTVmFsdWVQdHIsIEV4ZWNTdGF0ZSopOwor
ICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU1ZhbHVlUHRyLCBFeGVjU3Rh
dGUqKTsKKyAgICAgICAgc3RhdGljIFVTdHJpbmcgdG9TdHJpbmcoSlNWYWx1ZVB0cik7CisKKyAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0VUludDMyKEpTVmFsdWVQdHIsIHVpbnQzMl90Jik7CisgICAg
ICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZEludDMyKEpTVmFsdWVQdHIsIGludDMyX3QmKTsK
KyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVkVUludDMyKEpTVmFsdWVQdHIsIHVpbnQz
Ml90Jik7CisKKyAgICAgICAgc3RhdGljIGludDMyX3QgZ2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1
ZVB0cik7CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1
ZVB0cik7CisKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgdHJ1ZUltbWVkaWF0ZSgpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmYWxzZUltbWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZVB0ciB1bmRlZmluZWRJbW1lZGlhdGUoKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQ
dHIgbnVsbEltbWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciB6ZXJvSW1tZWRp
YXRlKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIG9uZUltbWVkaWF0ZSgpOwogCi0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBpbXBvc3NpYmxlVmFsdWUoKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVQdHIgaW1wb3NzaWJsZVZhbHVlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgSlNP
YmplY3QqIHByb3RvdHlwZShKU1ZhbHVlKiwgRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBK
U09iamVjdCogcHJvdG90eXBlKEpTVmFsdWVQdHIsIEV4ZWNTdGF0ZSopOwogCiAgICAgcHJpdmF0
ZToKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQpAQCAtMjcwLDY1ICsyNjgsNjUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eEltbWVkaWF0ZVVJbnQgPSBtYXhJbW1lZGlhdGVJbnQ7CiAKLSAgICAgICAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogbWFrZVZhbHVlKGludHB0cl90IGludGVnZXIpCisgICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFrZVZhbHVlKGludHB0cl90IGludGVnZXIp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWUq
PihpbnRlZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjptYWtlSW1tZWRpYXRl
KGludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSogbWFrZUludChpbnQzMl90IHZhbHVlKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlUHRyIG1ha2VJbnQoaW50MzJfdCB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKSA8PCBJbnRl
Z2VyUGF5bG9hZFNoaWZ0KSB8IFRhZ0JpdFR5cGVJbnRlZ2VyKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZUJvb2woYm9vbCBi
KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VCb29sKGJvb2wg
YikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGIpIDw8IEV4dGVuZGVkUGF5bG9hZFNoaWZ0KSB8IEZ1bGxUYWdUeXBlQm9vbCk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIG1ha2VVbmRlZmluZWQoKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIG1ha2VVbmRlZmluZWQoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZh
bHVlKEZ1bGxUYWdUeXBlVW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZU51bGwoKQorICAgICAgICBzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VOdWxsKCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1ha2VWYWx1ZShGdWxsVGFnVHlwZU51bGwpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQzMl90IGludFZhbHVlKEpTVmFsdWUq
IHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW50VmFsdWUoSlNWYWx1
ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ocmF3VmFsdWUodikgPj4gSW50ZWdlclBheWxvYWRTaGlmdCk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHVpbnRWYWx1ZShKU1Zh
bHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCB1aW50VmFsdWUo
SlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHJhd1ZhbHVlKHYpID4+IEludGVnZXJQYXlsb2FkU2hpZnQpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGJvb2xWYWx1ZShK
U1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGJvb2xWYWx1ZShK
U1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZSh2KSAm
IEV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRyX3QgcmF3VmFsdWUoSlNWYWx1ZSogdikKKyAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRyX3QgcmF3VmFsdWUoSlNWYWx1ZVB0ciB2
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odik7CisgICAgICAgICAgICByZXR1cm4gdi5pbW1lZGlhdGVWYWx1ZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBub25JbmxpbmVOYU4oKTsKICAgICB9OwogCi0gICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpIHsgcmV0
dXJuIG1ha2VCb29sKHRydWUpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVk
aWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlQm9vbChmYWxzZSk7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjp1bmRlZmluZWRJbW1lZGlhdGUoKSB7
IHJldHVybiBtYWtlVW5kZWZpbmVkKCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpT
SW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZU51bGwoKTsgfQotICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSB7IHJldHVy
biBtYWtlSW50KDApOyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6
b25lSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUludCgxKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29s
KHRydWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmYWxz
ZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKGZhbHNlKTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dW5kZWZpbmVkSW1tZWRpYXRlKCkgeyByZXR1cm4g
bWFrZVVuZGVmaW5lZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRp
YXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZU51bGwoKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpIHsgcmV0dXJuIG1h
a2VJbnQoMCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6Om9u
ZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMSk7IH0KIAogICAgIC8vIFRoaXMgdmFsdWUg
aXMgaW1wb3NzaWJsZSBiZWNhdXNlIDB4NCBpcyBub3QgYSB2YWxpZCBwb2ludGVyIGJ1dCBhIHRh
ZyBvZiAwIHdvdWxkIGluZGljYXRlIG5vbi1pbW1lZGlhdGUKLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSB7IHJldHVybiBtYWtlVmFsdWUo
MHg0KTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6aW1wb3Nz
aWJsZVZhbHVlKCkgeyByZXR1cm4gbWFrZVZhbHVlKDB4NCk7IH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKEpTVmFsdWUqIHYpCisgICAgQUxXQVlTX0lO
TElORSBib29sIEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4oSlNWYWx1ZVB0ciB2KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKICAgICAgICAgaW50cHRyX3QgYml0cyA9IHJh
d1ZhbHVlKHYpOwpAQCAtMzM3LDgwICszMzUsODAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICA6IGJpdHMgPT0gKEZ1bGxUYWdUeXBlQm9vbCB8IEV4dGVuZGVkUGF5bG9hZEJpdEJvb2xW
YWx1ZSk7IC8vIGJvb2wgdHJ1ZQogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qg
SlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlKiB2KQorICAgIEFMV0FZU19J
TkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlUHRy
IHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikpOwogICAgICAgICByZXR1cm4g
aW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVk
aWF0ZTo6ZnJvbShjaGFyIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRp
YXRlOjpmcm9tKGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20oc2lnbmVk
IGNoYXIgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20o
c2lnbmVkIGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQg
Y2hhciBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbSh1
bnNpZ25lZCBjaGFyIGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKHNob3J0IGkp
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHNob3J0IGkp
CiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIHNob3J0IGkpCisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIHNob3J0
IGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGludCBpKQorICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShpbnQgaSkKICAgICB7CiAgICAgICAg
IGlmICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+IG1heEltbWVkaWF0ZUludCkpCiAgICAg
ICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2ln
bmVkIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVu
c2lnbmVkIGkpCiAgICAgewogICAgICAgICBpZiAoaSA+IG1heEltbWVkaWF0ZVVJbnQpCiAgICAg
ICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcg
aSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20obG9uZyBp
KQogICAgIHsKICAgICAgICAgaWYgKChpIDwgbWluSW1tZWRpYXRlSW50KSB8IChpID4gbWF4SW1t
ZWRpYXRlSW50KSkKICAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7CiAgICAgICAgIHJldHVy
biBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1l
ZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0
ciBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBsb25nIGkpCiAgICAgewogICAgICAgICBpZiAo
aSA+IG1heEltbWVkaWF0ZVVJbnQpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAg
ICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShsb25nIGxvbmcgaSkKICAgICB7CiAgICAgICAgIGlm
ICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+IG1heEltbWVkaWF0ZUludCkpCiAgICAgICAg
ICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJ
bW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGxvbmcgbG9uZyBpKQogICAgIHsK
ICAgICAgICAgaWYgKGkgPiBtYXhJbW1lZGlhdGVVSW50KQogICAgICAgICAgICAgcmV0dXJuIG5v
VmFsdWUoKTsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGkp
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9t
KGRvdWJsZSBkKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJv
bShkb3VibGUgZCkKICAgICB7CiAgICAgICAgIGNvbnN0IGludCBpbnRWYWwgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGQpOwogCkBAIC00MjQsMTMgKzQyMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIG1ha2VJbnQoaW50VmFsKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGlu
dDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKEpTVmFsdWUqIHYpCisgICAgQUxX
QVlTX0lOTElORSBpbnQzMl90IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihKU1ZhbHVl
UHRyIHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikpOwogICAgICAgICByZXR1
cm4gaW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBkb3VibGUgSlNJbW1l
ZGlhdGU6OnRvRG91YmxlKEpTVmFsdWUqIHYpCisgICAgQUxXQVlTX0lOTElORSBkb3VibGUgSlNJ
bW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0ltbWVkaWF0ZSh2KSk7CiAgICAgICAgIGludCBpOwpAQCAtNDQzLDM2ICs0NDEsMTMzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihKU1ZhbHVlKiB2LCB1aW50MzJfdCYgaSkK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihKU1ZhbHVlUHRy
IHYsIHVpbnQzMl90JiBpKQogICAgIHsKICAgICAgICAgaSA9IHVpbnRWYWx1ZSh2KTsKICAgICAg
ICAgcmV0dXJuIGlzUG9zaXRpdmVOdW1iZXIodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihKU1ZhbHVlKiB2LCBpbnQzMl90
JiBpKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50
MzIoSlNWYWx1ZVB0ciB2LCBpbnQzMl90JiBpKQogICAgIHsKICAgICAgICAgaSA9IGludFZhbHVl
KHYpOwogICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZSogdiwgdWlu
dDMyX3QmIGkpCisgICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0
ZWRVSW50MzIoSlNWYWx1ZVB0ciB2LCB1aW50MzJfdCYgaSkKICAgICB7CiAgICAgICAgIHJldHVy
biBnZXRVSW50MzIodiwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBq
c1VuZGVmaW5lZCgpCisgICAgaW5saW5lIEpTVmFsdWVQdHIganNOdWxsKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOworICAgIH0KKworICAgIGlu
bGluZSBKU1ZhbHVlUHRyIGpzQm9vbGVhbihib29sIGIpCisgICAgeworICAgICAgICByZXR1cm4g
YiA/IEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkgOiBKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1l
ZGlhdGUoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBqc1VuZGVmaW5lZCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnVuZGVmaW5lZEltbWVkaWF0ZSgpOwog
ICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBqc051bGwoKQorICAgIC8vIFRoZXNlIGFyZSBp
ZGVudGljYWwgbG9naWMgdG8gdGhlIEpTVmFsdWUgZnVuY3Rpb25zIGFib3ZlLCBhbmQgZmFzdGVy
IHRoYW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMigpLgorICAgIGludDMyX3QgdG9JbnQzMihk
b3VibGUpOworICAgIHVpbnQzMl90IHRvVUludDMyKGRvdWJsZSk7CisgICAgaW50MzJfdCB0b0lu
dDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7CisgICAgdWludDMyX3QgdG9VSW50MzJTbG93
Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5k
ZWZpbmVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbElt
bWVkaWF0ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIGpzQm9vbGVhbihib29sIGIpCisgICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBiID8g
SlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSA6IEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0
ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzTnVsbCgpOworICAgIH0KKworICAg
IGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNVbmRlZmluZWRPck51bGwoYXNWYWx1ZSgpKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4oYXNWYWx1ZSgpKTsKKyAg
ICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRCb29sZWFuKGJvb2wmIHYpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzQm9vbGVhbihhc1ZhbHVlKCkpKSB7
CisgICAgICAgICAgICB2ID0gSlNJbW1lZGlhdGU6OnRvQm9vbGVhbihhc1ZhbHVlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRCb29sZWFuKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNCb29sZWFuKHRydWUp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGludDMyX3QgaTsKKyAgICAgICAg
aWYgKGdldFRydW5jYXRlZEludDMyKGkpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nhc2UoZXhlYywgb2spOworICAg
IH0KKworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CisgICAgeworICAgICAgICB1aW50MzJfdCBpOworICAgICAgICBpZiAoZ2V0VHJ1
bmNhdGVkVUludDMyKGkpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIGJvb2wgb2s7
CisgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgaW50MzJfdCB0b0ludDMyKGRvdWJsZSB2YWwpCisgICAgeworICAgICAgICBpZiAo
ISh2YWwgPj0gLTIxNDc0ODM2NDguMCAmJiB2YWwgPCAyMTQ3NDgzNjQ4LjApKSB7CisgICAgICAg
ICAgICBib29sIGlnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKHZh
bCwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbCk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IHRvVUludDMyKGRvdWJsZSB2
YWwpCisgICAgeworICAgICAgICBpZiAoISh2YWwgPj0gMC4wICYmIHZhbCA8IDQyOTQ5NjcyOTYu
MCkpIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQzMl90Pih2YWwpOworICAgIH0KKworICAgIGlubGluZSBpbnQzMl90IEpT
VmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGludDMyX3QgaTsKKyAgICAgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKSB7Cisg
ICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoRXhlY1N0YXRlKiBleGVjLCBib29sJiBv
aykgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGk7CisgICAgICAgIGlmIChnZXRUcnVu
Y2F0ZWRVSW50MzIoaSkpIHsKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMs
IG9rKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTm90QW5PYmplY3QuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICsz
NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNOb3RB
bk9iamVjdCk7CiAKIC8vIEpTVmFsdWUgbWV0aG9kcwotSlNWYWx1ZSogSlNOb3RBbk9iamVjdDo6
dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25z
dAorSlNWYWx1ZVB0ciBKU05vdEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMs
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKSA9
PSBtX2V4Y2VwdGlvbik7CiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uOwogfQogCi1ib29sIEpTTm90
QW5PYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYsIEpT
VmFsdWUqJikKK2Jvb2wgSlNOb3RBbk9iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlJiwgSlNWYWx1ZVB0ciYpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKSA9
PSBtX2V4Y2VwdGlvbik7CkBAIC0xMDIsMTMgKzEwMiwxMyBAQCBib29sIEpTTm90QW5PYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTTm90
QW5PYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImICwgSlNWYWx1
ZSosIFB1dFByb3BlcnR5U2xvdCYpCit2b2lkIEpTTm90QW5PYmplY3Q6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImICwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90JikK
IHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpICYmIGV4ZWMtPmV4Y2VwdGlvbigpID09IG1fZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBKU05v
dEFuT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCwgSlNWYWx1ZSopCit2b2lk
IEpTTm90QW5PYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkLCBKU1ZhbHVlUHRy
KQogewogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRpb24pOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE1
ICs2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSog
cHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0
cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwog
ICAgICAgICB9CiAKICAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gSlNWYWx1ZSBtZXRob2RzCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJik7CisgICAgICAgIHZp
cnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRv
U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtODEsOCArODEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJlckNl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxs
LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVy
Q2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxMiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotSlNWYWx1ZSogSlNOdW1iZXJDZWxsOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBKU051bWJlckNlbGw6OnRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNOdW1iZXJDZWxsKj4odGhpcyk7CiB9CiAKLWJvb2wgSlNO
dW1iZXJDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIs
IEpTVmFsdWUqJiB2YWx1ZSkKK2Jvb2wgSlNOdW1iZXJDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVlKQogewogICAgIG51
bWJlciA9IG1fdmFsdWU7CiAgICAgdmFsdWUgPSB0aGlzOwpAQCAtOTYsMjcgKzk2LDI3IEBAIGJv
b2wgSlNOdW1iZXJDZWxsOjpnZXRUcnVuY2F0ZWRVSW50MzIodWkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotSlNWYWx1ZSogSlNOdW1iZXJDZWxsOjpnZXRKU051bWJlcigpCitKU1ZhbHVlUHRyIEpT
TnVtYmVyQ2VsbDo6Z2V0SlNOdW1iZXIoKQogewogICAgIHJldHVybiB0aGlzOwogfQogCi1ORVZF
Ul9JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQp
CitORVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUgZCkKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBKU051bWJlckNlbGwoZXhlYywgZCk7
CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlKiBqc05hTihFeGVjU3RhdGUqIGV4ZWMpCitORVZF
Ul9JTkxJTkUgSlNWYWx1ZVB0ciBqc05hTihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNOdW1iZXJDZWxsKGV4ZWMsIE5hTik7CiB9CiAKLU5FVkVSX0lOTElORSBK
U1ZhbHVlKiBqc051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgZCkK
K05FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGRvdWJsZSBkKQogewogICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTTnVtYmVy
Q2VsbChnbG9iYWxEYXRhLCBkKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpzTmFOKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK05FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzTmFOKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBK
U051bWJlckNlbGwoZ2xvYmFsRGF0YSwgTmFOKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOdW1iZXJDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU051bWJlckNlbGwuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTnVtYmVyQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU051bWJlckNlbGwgOiBwdWJsaWMgSlNDZWxsIHsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTnVt
YmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3VibGUpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSog
anNOYU4oSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc051bWJlckNl
bGwoRXhlY1N0YXRlKiwgZG91YmxlKTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTmFOKEV4
ZWNTdGF0ZSopOworICAgICAgICBmcmllbmQgSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoSlNHbG9i
YWxEYXRhKiwgZG91YmxlKTsKKyAgICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOYU4oSlNHbG9i
YWxEYXRhKik7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChFeGVjU3Rh
dGUqLCBkb3VibGUpOworICAgICAgICBmcmllbmQgSlNWYWx1ZVB0ciBqc05hTihFeGVjU3RhdGUq
KTsKICAgICBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYg
dmFsdWUpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHIm
IHZhbHVlKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25z
dDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTU5
LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRv
VGhpc1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCog
dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUq
IGdldEpTTnVtYmVyKCk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRKU051bWJlcigp
OwogCiAgICAgICAgIGludDMyX3QgdG9JbnQzMigpIGNvbnN0OwogICAgICAgICB1aW50MzJfdCB0
b1VJbnQzMigpIGNvbnN0OwpAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAj
ZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
Y3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShwcm90bywgVHlwZUluZm8oTnVtYmVyVHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhO
dW1iZXJUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIEpTTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSB2YWx1ZSkK
QEAgLTEwNywxMjQgKzEwNywxMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgZXh0ZXJuIGNvbnN0
IGRvdWJsZSBOYU47CiAgICAgZXh0ZXJuIGNvbnN0IGRvdWJsZSBJbmY7CiAKLSAgICBKU051bWJl
ckNlbGwqIGFzTnVtYmVyQ2VsbChKU1ZhbHVlKik7CisgICAgSlNOdW1iZXJDZWxsKiBhc051bWJl
ckNlbGwoSlNWYWx1ZVB0cik7CiAKLSAgICBKU1ZhbHVlKiBqc051bWJlckNlbGwoSlNHbG9iYWxE
YXRhKiwgZG91YmxlKTsKLSAgICBKU1ZhbHVlKiBqc05hTihKU0dsb2JhbERhdGEqKTsKLSAgICBK
U1ZhbHVlKiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKTsKLSAgICBKU1ZhbHVlKiBq
c05hTihFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERh
dGEqLCBkb3VibGUpOworICAgIEpTVmFsdWVQdHIganNOYU4oSlNHbG9iYWxEYXRhKik7CisgICAg
SlNWYWx1ZVB0ciBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKTsKKyAgICBKU1ZhbHVl
UHRyIGpzTmFOKEV4ZWNTdGF0ZSopOwogCi0gICAgaW5saW5lIEpTTnVtYmVyQ2VsbCogYXNOdW1i
ZXJDZWxsKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU051bWJlckNlbGwqIGFzTnVtYmVy
Q2VsbChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzQ2VsbCh2YWx1
ZSktPmlzTnVtYmVyKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNOdW1iZXJDZWxs
Kj4oYXNDZWxsKHZhbHVlKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBq
c051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQorICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQogICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGQpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGV4ZWMsIGQpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCBzaG9ydCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHNob3J0IGkpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZXhlYywgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc2hvcnQgaSkKICAg
ICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8g
diA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IGkpCisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IGkpCiAgICAgewotICAg
ICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051
bWJlckNlbGwoZXhlYywgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBq
c051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKICAgICB7Ci0g
ICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpz
TnVtYmVyQ2VsbChleGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgaSkKICAgICB7Ci0gICAgICAg
IEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVy
Q2VsbChleGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGxvbmcgaSkKICAg
ICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8g
diA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBsb25nIGkpCisgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBsb25nIGkp
CiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4g
diA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGxvbmcgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051
bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGxvbmcgbG9uZyBpKQogICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3Vi
bGUgZCkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBkb3VibGUgZCkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0lt
bWVkaWF0ZTo6ZnJvbShkKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZy
b20oZCk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBk
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIg
anNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBzaG9ydCBpKQogICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBzaG9ydCBpKQor
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIHNob3J0IGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJ
bW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpm
cm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwg
aSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGludCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBq
c051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBpKQogICAgIHsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJD
ZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
anNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpKQorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20o
aSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAg
ICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7CiAgICAgfQogCi0g
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0g
SlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRl
Ojpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0
YSwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBs
b25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7
CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICBy
ZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgaSk7CiAgICAgfQogCi0gICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGxvbmcgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGxvbmcgbG9uZyBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1
ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0lt
bWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGds
b2JhbERhdGEsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBsb25nIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsb25nIGxvbmcgaSkKICAgICB7Ci0gICAg
ICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVt
YmVyQ2VsbChnbG9iYWxEYXRhLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKICAgICB9CiAKQEAg
LTI1Miw3ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIEpTQzo6dG9V
SW50MzJTbG93Q2FzZShtX3ZhbHVlLCBzY3JhdGNoKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUqIEpTVmFsdWU6OnRvSlNOdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjp0b0pTTnVtYmVyKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1i
ZXIoYXNWYWx1ZSgpKSA/IGFzVmFsdWUoKSA6IGpzTnVtYmVyKGV4ZWMsIHRoaXMtPnRvTnVtYmVy
KGV4ZWMpKTsKICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEpTT2JqZWN0OjptYXJrKCkKIAogICAg
IHNpemVfdCBzdG9yYWdlU2l6ZSA9IG1fc3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9yYWdlU2l6ZTsgKytpKSB7Ci0gICAgICAg
IEpTVmFsdWUqIHYgPSBtX3Byb3BlcnR5U3RvcmFnZVtpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2
ID0gbV9wcm9wZXJ0eVN0b3JhZ2VbaV07CiAgICAgICAgIGlmICghdi0+bWFya2VkKCkpCiAgICAg
ICAgICAgICB2LT5tYXJrKCk7CiAgICAgfQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCB0
aHJvd1NldHRlckVycm9yKEV4ZWNTdGF0ZSogCiB9CiAKIC8vIEVDTUEgOC42LjIuMgotdm9pZCBK
U09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU09iamVj
dDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpcykpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3Qo
KSAmJiAhdmFsdWUtPmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEpT
VmFsdWUqIG5leHRQcm90b3R5cGVWYWx1ZSA9IHZhbHVlOworICAgICAgICBKU1ZhbHVlUHRyIG5l
eHRQcm90b3R5cGVWYWx1ZSA9IHZhbHVlOwogICAgICAgICB3aGlsZSAobmV4dFByb3RvdHlwZVZh
bHVlICYmIG5leHRQcm90b3R5cGVWYWx1ZS0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNP
YmplY3QqIG5leHRQcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG90eXBlVmFsdWUpLT51bndy
YXBwZWRPYmplY3QoKTsKICAgICAgICAgICAgIGlmIChuZXh0UHJvdG90eXBlID09IHRoaXMpIHsK
QEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zCiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdl
dHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgotICAgIEpTVmFsdWUqIHByb3RvdHlwZTsKKyAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZTsKICAgICBmb3IgKEpTT2JqZWN0KiBvYmogPSB0aGlzOyAh
b2JqLT5zdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpOyBvYmogPSBhc09i
amVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7
CiAgICAgICAgIGlmIChwcm90b3R5cGUtPmlzTnVsbCgpKSB7CkBAIC0xMzcsNyArMTM3LDcgQEAg
dm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29ucwogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKEpTT2JqZWN0KiBvYmogPSB0aGlzOyA7IG9iaiA9IGFzT2JqZWN0KHByb3Rv
dHlwZSkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIGdzID0gb2JqLT5nZXREaXJlY3QocHJvcGVy
dHlOYW1lKSkgeworICAgICAgICBpZiAoSlNWYWx1ZVB0ciBncyA9IG9iai0+Z2V0RGlyZWN0KHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIGlmIChncy0+aXNHZXR0ZXJTZXR0ZXIoKSkgewog
ICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXJGdW5jID0gYXNHZXR0ZXJTZXR0ZXIoZ3Mp
LT5zZXR0ZXIoKTsgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc2V0dGVyRnVuYykgewpA
QCAtMTY3LDE4ICsxNjcsMTggQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29ucwogICAgIHJldHVybjsKIH0KIAotdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNPYmplY3Q6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2
YWx1ZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBwdXQoZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lk
IEpTT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7
CiAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogfQogCi12
b2lkIEpTT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lk
IEpTT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAg
ICBwdXRXaXRoQXR0cmlidXRlcyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5
TmFtZSksIHZhbHVlLCBhdHRyaWJ1dGVzKTsKIH0KQEAgLTIyNiw5ICsyMjYsOSBAQCBib29sIEpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CiAKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgY2FsbERlZmF1bHRW
YWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0g
b2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9u
ID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTIzOSw3ICsyMzksNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBjYWxsRGVmYXVsCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7CiAKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBleGVjLT5lbXB0eUxpc3QoKSk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBleGVjLT5lbXB0eUxpc3QoKSk7
CiAgICAgQVNTRVJUKCFyZXN1bHQtPmlzR2V0dGVyU2V0dGVyKCkpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwpAQCAtMjQ4
LDcgKzI0OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNhbGxEZWZhdWwKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHJlc3VsdCkKK2Jvb2wg
SlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVt
YmVyLCBKU1ZhbHVlUHRyJiByZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gZGVmYXVsdFZhbHVlKGV4
ZWMsIFByZWZlck51bWJlcik7CiAgICAgbnVtYmVyID0gcmVzdWx0LT50b051bWJlcihleGVjKTsK
QEAgLTI1NiwxOCArMjU2LDIyIEBAIGJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3QKIH0KIAogLy8gRUNNQSA4LjYuMi42Ci1KU1ZhbHVlKiBKU09iamVjdDo6ZGVmYXVsdFZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAor
SlNWYWx1ZVB0ciBKU09iamVjdDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAogewogICAgIC8vIE11c3QgY2FsbCB0b1N0cmlu
ZyBmaXJzdCBmb3IgRGF0ZSBvYmplY3RzLgogICAgIGlmICgoaGludCA9PSBQcmVmZXJTdHJpbmcp
IHx8IChoaW50ICE9IFByZWZlck51bWJlciAmJiBwcm90b3R5cGUoKSA9PSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmRhdGVQcm90b3R5cGUoKSkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUq
IHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS50b1N0cmluZykpCisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBjYWxsRGVm
YXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3Ry
aW5nKTsKKyAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
ICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywg
dGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpKQorICAgICAgICB2YWx1ZSA9IGNh
bGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dmFsdWVPZik7CisgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICB9IGVsc2UgewotICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBjYWxsRGVmYXVsdFZh
bHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpKQor
ICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMs
IHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKTsKKyAgICAgICAgaWYgKHZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUg
PSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnRvU3RyaW5nKSkKKyAgICAgICAgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24o
ZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKTsKKyAgICAgICAgaWYg
KHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIApAQCAtMjg5LDcgKzI5
Myw3IEBAIGNvbnN0IEhhc2hFbnRyeSogSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUgKIAogdm9pZCBK
U09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24pCiB7Ci0gICAgSlNWYWx1ZSog
b2JqZWN0ID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZVB0ciBvYmplY3Qg
PSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNH
ZXR0ZXJTZXR0ZXIoKSkgewogICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoKSk7CiAgICAgICAgIGFzR2V0dGVyU2V0dGVyKG9iamVjdCktPnNldEdl
dHRlcihnZXR0ZXJGdW5jdGlvbik7CkBAIC0zMTYsNyArMzIwLDcgQEAgdm9pZCBKU09iamVjdDo6
ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZQogCiB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzZXR0ZXJGdW5jdGlvbikKIHsKLSAgICBKU1ZhbHVlKiBvYmplY3QgPSBnZXREaXJlY3QocHJv
cGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG9iamVjdCA9IGdldERpcmVjdChwcm9wZXJ0eU5h
bWUpOwogICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0dldHRlclNldHRlcigpKSB7CiAgICAg
ICAgIEFTU0VSVChtX3N0cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKICAg
ICAgICAgYXNHZXR0ZXJTZXR0ZXIob2JqZWN0KS0+c2V0U2V0dGVyKHNldHRlckZ1bmN0aW9uKTsK
QEAgLTM0MSwxMiArMzQ1LDExIEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3Rh
dGUqIGUKICAgICBnZXR0ZXJTZXR0ZXItPnNldFNldHRlcihzZXR0ZXJGdW5jdGlvbik7CiB9CiAK
LUpTVmFsdWUqIEpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQorSlNWYWx1ZVB0ciBKU09iamVjdDo6bG9va3VwR2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBKU1ZhbHVlKiB2
YWx1ZSA9IG9iamVjdC0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmICh2YWx1
ZSkgeworICAgICAgICBpZiAoSlNWYWx1ZVB0ciB2YWx1ZSA9IG9iamVjdC0+Z2V0RGlyZWN0KHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIGlmICghdmFsdWUtPmlzR2V0dGVyU2V0dGVyKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBKU09i
amVjdCogZnVuY3Rpb25PYmplY3QgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwpA
QCAtMzYxLDEyICszNjQsMTEgQEAgSlNWYWx1ZSogSlNPYmplY3Q6Omxvb2t1cEdldHRlcihFeGVj
U3RhdAogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNPYmplY3Q6Omxvb2t1cFNldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlUHRyIEpTT2JqZWN0
Ojpsb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgIEpTVmFsdWUqIHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgIGlmIChKU1ZhbHVlUHRyIHZhbHVlID0gb2Jq
ZWN0LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNHZXR0ZXJTZXR0ZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCA9IGFzR2V0dGVyU2V0dGVyKHZh
bHVlKS0+c2V0dGVyKCk7CkBAIC0zODEsNyArMzgzLDcgQEAgSlNWYWx1ZSogSlNPYmplY3Q6Omxv
b2t1cFNldHRlcihFeGVjU3RhdAogICAgIH0KIH0KIAotYm9vbCBKU09iamVjdDo6aGFzSW5zdGFu
Y2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSogcHJvdG8pCitib29s
IEpTT2JqZWN0OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUs
IEpTVmFsdWVQdHIgcHJvdG8pCiB7CiAgICAgaWYgKCFwcm90by0+aXNPYmplY3QoKSkgewogICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgImluc3RhbmNlb2YgY2FsbGVkIG9uIGFu
IG9iamVjdCB3aXRoIGFuIGludmFsaWQgcHJvdG90eXBlIHByb3BlcnR5LiIpOwpAQCAtMzkzLDcg
KzM5NSw3IEBAIGJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXgKIAogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKChvYmplY3Qg
PSBvYmplY3QtPnByb3RvdHlwZSgpLT5nZXRPYmplY3QoKSkpIHsKLSAgICAgICAgaWYgKG9iamVj
dCA9PSBwcm90bykKKyAgICAgICAgaWYgKHByb3RvID09IG9iamVjdCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzQsNyArNDM2LDcgQEAg
Ym9vbCBKU09iamVjdDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbgogCiBkb3VibGUgSlNPYmpl
Y3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU1ZhbHVlKiBwcmlt
aXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOworICAgIEpTVmFsdWVQdHIg
cHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5j
cHAKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICByZXR1cm4gcHJpbWl0aXZlLT50b051bWJlcihl
eGVjKTsKQEAgLTQ0Miw3ICs0NDQsNyBAQCBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlCiAKIFVTdHJpbmcgSlNPYmplY3Q6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKLSAgICBKU1ZhbHVlKiBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVm
ZXJTdHJpbmcpOworICAgIEpTVmFsdWVQdHIgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywg
UHJlZmVyU3RyaW5nKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiAiIjsKICAgICByZXR1cm4gcHJpbWl0aXZlLT50b1N0cmluZyhleGVjKTsKQEAgLTQ4OSw3
ICs0OTEsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUCiAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbi0+bmFt
ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSksIGZ1bmN0aW9uLCBhdHRyKTsKIH0KIAotTkVWRVJfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBz
bG90LCBKU1ZhbHVlKiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6Zmls
bEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWVQdHIqIGxvY2F0
aW9uKQogewogICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRl
cigqbG9jYXRpb24pLT5nZXR0ZXIoKSkKICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRl
ckZ1bmN0aW9uKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDM5
NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvbiAgICAg
PSAxIDw8IDQsICAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25seSB1c2VkIGJ5IHN0YXRp
YyBoYXNodGFibGVzCiAgICAgfTsKIAotICAgIHR5cGVkZWYgSlNWYWx1ZSoqIFByb3BlcnR5U3Rv
cmFnZTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQdHIqIFByb3BlcnR5U3RvcmFnZTsKIAogICAgIGNs
YXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBCYXRj
aGVkVHJhbnNpdGlvbk9wdGltaXplcjsKQEAgLTY5LDggKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykgY29u
c3QgeyByZXR1cm4gSlNDZWxsOjppc09iamVjdChjbGFzc0luZm8pOyB9CiAKLSAgICAgICAgSlNW
YWx1ZSogcHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0UHJvdG90eXBlKEpTVmFs
dWUqIHByb3RvdHlwZSk7CisgICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgc2V0UHJvdG90eXBlKEpTVmFsdWVQdHIgcHJvdG90eXBlKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlKFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAgICAg
ICAgIFN0cnVjdHVyZSogaW5oZXJpdG9ySUQoKTsKQEAgLTc5LDggKzc5LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwogCi0g
ICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXQoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0
ciBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgICAg
ICBib29sIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBib29sIGdldFByb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtODgs
MTEgKzg4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyIHZhbHVlKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0
dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBw
dXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1
dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgICAgIGJv
b2wgcHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKSBjb25zdDsKIApAQCAtMTAzLDE0ICsxMDMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKIAotICAgICAgICB2aXJ0
dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIEpTVmFsdWUqIHByb3RvdHlw
ZVByb3BlcnR5KTsKKyAgICAgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSos
IEpTVmFsdWVQdHIsIEpTVmFsdWVQdHIgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
Jik7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwg
SlNWYWx1ZSomIHZhbHVlKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0
b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVt
YmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlKikgY29uc3Q7CkBAIC0xMjIsMzAgKzEyMiwzMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5QXR0cmlidXRlcyhFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25z
dDsKIAogICAgICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9w
ZXJ0eSBtYXAuCi0gICAgICAgIEpTVmFsdWUqIGdldERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0RGlyZWN0KGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgc2l6
ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlLT5nZXQocHJvcGVydHlOYW1lKTsKICAgICAgICAgICAg
IHJldHVybiBvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCA/IG1fcHJvcGVydHlTdG9yYWdlW29mZnNl
dF0gOiBub1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiogZ2V0RGlyZWN0
TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorICAgICAgICBKU1ZhbHVl
UHRyKiBnZXREaXJlY3RMb2NhdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVjdHVyZS0+Z2V0KHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IFdURjo6bm90Rm91bmQg
PyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQogCi0gICAgICAgIEpT
VmFsdWUqKiBnZXREaXJlY3RMb2NhdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQorICAgICAgICBKU1ZhbHVlUHRyKiBnZXREaXJlY3RMb2Nh
dGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVz
KQogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9zdHJ1Y3R1cmUtPmdl
dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIG9mZnNldCAh
PSBXVEY6Om5vdEZvdW5kID8gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSA6IDA7CiAgICAgICAg
IH0KIAotICAgICAgICBzaXplX3Qgb2Zmc2V0Rm9yTG9jYXRpb24oSlNWYWx1ZSoqIGxvY2F0aW9u
KQorICAgICAgICBzaXplX3Qgb2Zmc2V0Rm9yTG9jYXRpb24oSlNWYWx1ZVB0ciogbG9jYXRpb24p
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbiAtIG1fcHJvcGVydHlTdG9y
YWdlOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSoqIGxvY2F0aW9uRm9yT2Zmc2V0KHNp
emVfdCBvZmZzZXQpCisgICAgICAgIEpTVmFsdWVQdHIqIGxvY2F0aW9uRm9yT2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0eVN0b3Jh
Z2Vbb2Zmc2V0XTsKICAgICAgICAgfQpAQCAtMTU2LDIyICsxNTYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuICFtX3N0cnVj
dHVyZS0+aXNFbXB0eSgpOyB9CiAgICAgICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IH0K
IAotICAgICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyID0gMCk7Ci0gICAgICAgIHZvaWQgcHV0RGly
ZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2ln
bmVkIGF0dHIsIGJvb2wgY2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlTbG90JiBzbG90KTsKKyAg
ICAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyID0gMCk7CisgICAgICAgIHZvaWQgcHV0RGlyZWN0
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWdu
ZWQgYXR0ciwgYm9vbCBjaGVja1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICAg
ICAgICB2b2lkIHB1dERpcmVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5j
dGlvbiogZnVuY3Rpb24sIHVuc2lnbmVkIGF0dHIgPSAwKTsKLSAgICAgICAgdm9pZCBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyID0gMCk7CisgICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCB1bnNpZ25lZCBhdHRyID0gMCk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0RnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1
bmN0aW9uLCB1bnNpZ25lZCBhdHRyID0gMCk7CiAKICAgICAgICAgLy8gRmFzdCBhY2Nlc3MgdG8g
a25vd24gcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgSlNWYWx1ZSogZ2V0RGlyZWN0T2Zmc2V0
KHNpemVfdCBvZmZzZXQpIHsgcmV0dXJuIG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF07IH0KLSAg
ICAgICAgdm9pZCBwdXREaXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNldCwgSlNWYWx1ZSogdmFsdWUp
IHsgbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA9IHZhbHVlOyB9CisgICAgICAgIEpTVmFsdWVQ
dHIgZ2V0RGlyZWN0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIHsgcmV0dXJuIG1fcHJvcGVydHlTdG9y
YWdlW29mZnNldF07IH0KKyAgICAgICAgdm9pZCBwdXREaXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNl
dCwgSlNWYWx1ZVB0ciB2YWx1ZSkgeyBtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdID0gdmFsdWU7
IH0KIAotICAgICAgICB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90Jiwg
SlNWYWx1ZSoqIGxvY2F0aW9uKTsKKyAgICAgICAgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90
KFByb3BlcnR5U2xvdCYsIEpTVmFsdWVQdHIqIGxvY2F0aW9uKTsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRl
ZmluZVNldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzZXR0ZXJGdW5jdGlvbik7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogbG9va3Vw
R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZSogbG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBsb29rdXBH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIGxvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dsb2JhbE9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
cmlhYmxlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE4NSw3ICsxODUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgPSAyOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUJh
c2VTdG9yYWdlQ2FwYWNpdHkgPSAxNjsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90
eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xv
dCkpOwogICAgICAgICB9CkBAIC0yMDIsMTQgKzIwMiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbV9pbmhlcml0b3JJRDsKIAogICAgICAgICBQcm9wZXJ0
eVN0b3JhZ2UgbV9wcm9wZXJ0eVN0b3JhZ2U7ICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogbV9p
bmxpbmVTdG9yYWdlW2lubGluZVN0b3JhZ2VDYXBhY2l0eV07CisgICAgICAgIEpTVmFsdWVQdHIg
bV9pbmxpbmVTdG9yYWdlW2lubGluZVN0b3JhZ2VDYXBhY2l0eV07CiAgICAgfTsKIAotICAgIEpT
T2JqZWN0KiBhc09iamVjdChKU1ZhbHVlKik7CisgICAgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFs
dWVQdHIpOwogCiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSop
OwogCi1pbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQoraW5saW5lIEpT
T2JqZWN0KiBhc09iamVjdChKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEFTU0VSVChhc0NlbGwo
dmFsdWUpLT5pc09iamVjdCgpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihh
c0NlbGwodmFsdWUpKTsKQEAgLTIzMywxMiArMjMzLDEyIEBAIGlubGluZSBKU09iamVjdDo6fkpT
T2JqZWN0KCkKICAgICBtX3N0cnVjdHVyZS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUq
IEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIgSlNPYmplY3Q6
OnByb3RvdHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU1ZhbHVl
KiBwcm90b3R5cGUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTVmFsdWVQ
dHIgcHJvdG90eXBlKQogewogICAgIEFTU0VSVChwcm90b3R5cGUpOwogICAgIFJlZlB0cjxTdHJ1
Y3R1cmU+IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlv
bihtX3N0cnVjdHVyZSwgcHJvdG90eXBlKTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBpbmxpbmUgYm9v
bCBKU1ZhbHVlOjppc09iamVjdChjb25zdCBDbGFzCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYgKEpT
VmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKKyAg
ICBpZiAoSlNWYWx1ZVB0ciogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5h
bWUpKSB7CiAgICAgICAgIGlmIChtX3N0cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpICYmIGxvY2F0aW9uWzBdLT5pc0dldHRlclNldHRlcigpKQogICAgICAgICAgICAgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CiAgICAgICAgIGVsc2UKQEAgLTI5NSw3
ICsyOTUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93CiBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEZvcldyaXRlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwotICAgIGlmIChKU1ZhbHVlKiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpKSB7CisgICAgaWYgKEpTVmFsdWVQdHIqIGxvY2F0aW9uID0gZ2V0
RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkgewogICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvblswXS0+
aXNHZXR0ZXJTZXR0ZXIoKSkgewogICAgICAgICAgICAgc2xvdElzV3JpdGVhYmxlID0gZmFsc2U7
CiAgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKQEAg
LTMzOSw3ICszMzksNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4
CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKG9iamVjdC0+ZmFzdEdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICAg
ICAgaWYgKCFwcm90b3R5cGUtPmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CkBAIC0zNTIsMTQgKzM1Miwx
NCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4CiAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNW
YWx1ZSogcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAoIXByb3RvdHlw
ZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgb2JqZWN0
ID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU09i
amVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzKTsKICAgICBpZiAoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKQEAgLTM2OCw3ICszNjgsNyBA
QCBpbmxpbmUgSlNWYWx1ZSogSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIg
SlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29u
c3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICBpZiAoY29uc3RfY2FzdDxK
U09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSkKQEAgLTM3NywxMyArMzc3LDEzIEBAIGlubGluZSBKU1ZhbHVlKiBKU09iamVjdDo6Z2V0KEV4
ZWNTdGF0ZSoKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
IHZhbHVlLCB1bnNpZ25lZCBhdHRyKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVk
IGF0dHIpCiB7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgcHV0RGlyZWN0KHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHIsIGZhbHNlLCBzbG90KTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGNoZWNrUmVhZE9ubHksIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBib29sIGNoZWNrUmVhZE9ubHksIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpcykpOwogCkBAIC00NDQsNyArNDQ0LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdChjb25zdCBJZAogICAgIHNldFN0cnVjdHVyZShzdHJ1Y3R1cmUucmVsZWFzZSgpKTsK
IH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBtX3N0cnVj
dHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9z
dHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24ocHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKQEAgLTQ2MCwxOCArNDYwLDE4IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0Ojp0cmFu
c2l0aW9uVG8oU3RydWMKICAgICBzZXRTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKTsKIH0KIAotaW5s
aW5lIEpTVmFsdWUqIEpTT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRy
IEpTT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKIHsKICAgICByZXR1cm4gZGVmYXVsdFZhbHVlKGV4
ZWMsIHByZWZlcnJlZFR5cGUpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAoraW5s
aW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMp
OwogICAgIHJldHVybiBnZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotaW5saW5l
IEpTVmFsdWUqIEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAoraW5saW5lIEpTVmFsdWVQ
dHIgSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0CiB7CiAgICAgaWYgKFVOTElLRUxZKEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpKSkgewogICAgICAgICBKU09iamVjdCog
cHJvdG90eXBlID0gSlNJbW1lZGlhdGU6OnByb3RvdHlwZShhc1ZhbHVlKCksIGV4ZWMpOwpAQCAt
NDg0LDIwICs0ODQsMjAgQEAgaW5saW5lIEpTVmFsdWUqIEpTVmFsdWU6OmdldChFeGVjU3RhdGUq
IAogICAgICAgICBpZiAoY2VsbC0+ZmFzdEdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgQVNTRVJUKGNlbGwtPmlzT2JqZWN0KCkpOwotICAgICAgICBK
U1ZhbHVlKiBwcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNlbGwpLT5wcm90b3R5
cGUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KGNlbGwpLT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUtPmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgY2VsbCA9IGFz
T2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6
Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoraW5saW5l
IEpTVmFsdWVQdHIgSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwogICAgIHJldHVy
biBnZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotaW5saW5lIEpTVmFsdWUqIEpT
VmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6Z2V0KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIGNv
bnN0CiB7CiAgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVl
KCkpKSkgewogICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gSlNJbW1lZGlhdGU6OnByb3Rv
dHlwZShhc1ZhbHVlKCksIGV4ZWMpOwpAQCAtNTEwLDE0ICs1MTAsMTQgQEAgaW5saW5lIEpTVmFs
dWUqIEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIAogICAgICAgICBpZiAoY2VsbC0+Z2V0T3duUHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4g
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoY2VsbC0+
aXNPYmplY3QoKSk7Ci0gICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4oY2VsbCktPnByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHByb3RvdHlw
ZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnByb3RvdHlwZSgpOwogICAgICAgICBp
ZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICBjZWxsID0gcHJvdG90eXBlLT5hc0NlbGwoKTsKICAgICB9CiB9CiAKLWlu
bGluZSB2b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2lu
bGluZSB2b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgpKSkp
IHsKICAgICAgICAgSlNJbW1lZGlhdGU6OnRvT2JqZWN0KGFzVmFsdWUoKSwgZXhlYyktPnB1dChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKQEAgLTUyNiw3ICs1MjYsNyBAQCBpbmxp
bmUgdm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAgYXNDZWxsKCktPnB1dChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotaW5saW5lIHZvaWQgSlNWYWx1
ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2
YWx1ZSkKK2lubGluZSB2b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpKSB7CiAgICAgICAgIEpTSW1tZWRpYXRl
Ojp0b09iamVjdChhc1ZhbHVlKCksIGV4ZWMpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7CkBAIC01MzksOCArNTM5LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjphbGxv
Y2F0ZVBybwogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKLSAgICBKU1ZhbHVl
Kiogb2xkUHJvcGVydHlTdG9yYWdlID0gbV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgbV9wcm9wZXJ0
eVN0b3JhZ2UgPSBuZXcgSlNWYWx1ZSpbbmV3U2l6ZV07CisgICAgSlNWYWx1ZVB0ciogb2xkUHJv
cGVydHlTdG9yYWdlID0gbV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAgbV9wcm9wZXJ0eVN0b3JhZ2Ug
PSBuZXcgSlNWYWx1ZVB0cltuZXdTaXplXTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvbGRTaXplOyArK2kpCiAgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlW2ldID0gb2xkUHJvcGVy
dHlTdG9yYWdlW2ldOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEzICszNywxMyBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp+SlNQcm9wZXJ0eU5hbWVJCiB7
CiB9CiAKLUpTVmFsdWUqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlUHRyIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG5v
VmFsdWUoKTsKIH0KIAotYm9vbCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiwgSlNWYWx1ZSomKQorYm9vbCBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiwgSlNWYWx1
ZVB0ciYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSopOworICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIpOwogCiAgICAgICAg
IHZpcnR1YWwgfkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKIAotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSos
IGRvdWJsZSYsIEpTVmFsdWUqJik7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmLCBKU1Zh
bHVlUHRyJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC01
Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CiAKLSAgICAgICAgSlNWYWx1ZSogbmV4dChFeGVjU3RhdGUqKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBuZXh0KEV4ZWNTdGF0ZSopOwogICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAg
IHByaXZhdGU6CkBAIC04Myw3ICs4Myw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OjpKU1Byb3BlcnQKIHsKIH0KIAotaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYpCitp
bmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2KQogewogICAgIGlmICh2LT5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOwpAQCAtOTQsNyArOTQsNyBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
SlNQcm9wZXJ0CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihv
LCBwcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCkpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjo6bmV4dChFeGVjU3RhdGUqIGV4ZWMpCitpbmxpbmUgSlNWYWx1
ZVB0ciBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpuZXh0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBpZiAobV9wb3NpdGlvbiA9PSBtX2VuZCkKICAgICAgICAgcmV0dXJuIG5vVmFsdWUoKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAko
cmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTT2JqZWN0KiBKU1N0
YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNPYmoKICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsVGhpc1Zh
bHVlKCk7CiB9CiAKLXZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpCit2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpCiB7CiAgICAgaWYgKHN5bWJvbFRhYmxlUHV0KHByb3BlcnR5TmFtZSwgdmFsdWUpKQogICAg
ICAgICByZXR1cm47CkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6
cHV0KEV4ZWNTdGF0ZSoKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU1N0
YXRpY1Njb3BlT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQordm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0N7CiAgICAgICAg
IH07CiAgICAgICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1ZhbHVlKiB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKS5zdGF0aWNTY29wZVN0cnVjdHVyZSwgbmV3IEpTU3RhdGljU2NvcGVPYmplY3RE
YXRhKCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGQoKS0+cmVnaXN0ZXJTdG9yZSA9IHZhbHVl
OwpAQCAtNTUsMTAgKzU1LDEwIEBAIG5hbWVzcGFjZSBKU0N7CiAgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dy
aXRlYWJsZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRX
aXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAg
ICAgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
SlNWYWx1ZVB0ciwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBOZWVkc1RoaXND
b252ZXJzaW9uKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
cHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdERhdGEqIGQoKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0RGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6
OmQpOyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1ZhbHVlKiBKU1N0
cmluZzo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3QKK0pTVmFsdWVQdHIgSlNTdHJpbmc6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNTdHJpbmcq
Pih0aGlzKTsKIH0KIAotYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0
ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpCitib29sIEpTU3RyaW5nOjpnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZh
bHVlKQogewogICAgIHZhbHVlID0gdGhpczsKICAgICBudW1iZXIgPSBtX3ZhbHVlLnRvRG91Ymxl
KCk7CkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgSlNTdHJpbmc6OmdldE93blByb3BlcnR5U2xvdChF
eGVjU3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgc2xvdC5zZXRCYXNlKHRoaXMpOwogICAg
IEpTT2JqZWN0KiBvYmplY3Q7Ci0gICAgZm9yIChKU1ZhbHVlKiBwcm90b3R5cGUgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpOyAhcHJvdG90eXBlLT5pc051
bGwoKTsgcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKSkgeworICAgIGZvciAoSlNWYWx1
ZVB0ciBwcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3Rv
dHlwZSgpOyAhcHJvdG90eXBlLT5pc051bGwoKTsgcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5
cGUoKSkgewogICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwogICAgICAgICBp
ZiAob2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3ZhbHVlLnNpemUoKSk7IH0KICAgICAgICAgSlNTdHJpbmcqIGdldEluZGV4KEpT
R2xvYmFsRGF0YSosIHVuc2lnbmVkKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24p
KTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU1ZhbHVlUHRyIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlw
ZUluZm8oU3RyaW5nVHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICBlbnVtIFZQdHJTdGVhbGluZ0hhY2tUeXBlIHsgVlB0clN0ZWFsaW5nSGFjayB9
OwpAQCAtOTksOCArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsK
KyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTExNyw5ICsx
MTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBtX3ZhbHVlOwogICAgIH07
CiAKLSAgICBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZSopOworICAgIEpTU3RyaW5nKiBhc1N0
cmluZyhKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1
ZSogdmFsdWUpCisgICAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlUHRyIHZhbHVl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzQ2VsbCh2YWx1ZSktPmlzU3RyaW5nKCkpOwogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwodmFsdWUpKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMSArMjAsMjQgQEAK
ICAqCiAgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBmb3Igc2l6ZV90CisKICNpZm5kZWYg
SlNWYWx1ZV9oCiAjZGVmaW5lIEpTVmFsdWVfaAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNp
bmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCi0jaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKLSNpbmNs
dWRlICJVU3RyaW5nLmgiCi0jaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBzaXplX3QKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBJ
ZGVudGlmaWVyOworICAgIGNsYXNzIEpTQ2VsbDsKKyAgICBjbGFzcyBKU09iamVjdDsKICAgICBj
bGFzcyBKU1N0cmluZzsKICAgICBjbGFzcyBQcm9wZXJ0eVNsb3Q7CiAgICAgY2xhc3MgUHV0UHJv
cGVydHlTbG90OworICAgIGNsYXNzIFVTdHJpbmc7CiAKICAgICBzdHJ1Y3QgQ2xhc3NJbmZvOwog
ICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKQEAgLTc2LDE1ICs3OSwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIodWludDMyX3QmKSBjb25zdDsKICAg
ICAgICAgCiAgICAgICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgotICAgICAgICBKU1ZhbHVlKiB0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJl
bmNlKSBjb25zdDsKLSAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJik7CisgICAgICAgIEpTVmFsdWVQdHIgdG9QcmltaXRp
dmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29u
c3Q7CisgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYg
bnVtYmVyLCBKU1ZhbHVlUHRyJik7CiAKICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRl
KikgY29uc3Q7CiAKICAgICAgICAgLy8gdG9OdW1iZXIgY29udmVyc2lvbiBpcyBleHBlY3RlZCB0
byBiZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2VwdGlvbiBoYXMKICAgICAgICAgLy8gYmVl
biBzZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgogICAgICAgICBkb3VibGUgdG9OdW1iZXIo
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIHRvSlNOdW1iZXIoRXhlY1N0YXRl
KikgY29uc3Q7IC8vIEZhc3QgcGF0aCBmb3Igd2hlbiB5b3UgZXhwZWN0IHRoYXQgdGhlIHZhbHVl
IGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCisgICAgICAgIEpTVmFsdWVQdHIgdG9KU051bWJlcihF
eGVjU3RhdGUqKSBjb25zdDsgLy8gRmFzdCBwYXRoIGZvciB3aGVuIHlvdSBleHBlY3QgdGhhdCB0
aGUgdmFsdWUgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KIAogICAgICAgICBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0
YXRlKikgY29uc3Q7CkBAIC0xMDUsMTIgKzEwOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtYXJrZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywg
d2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgotICAgICAgICBKU1ZhbHVlKiBn
ZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKLSAg
ICAgICAgSlNWYWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsK
LSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgICAgICBKU1ZhbHVl
UHRyIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0
OworICAgICAgICBKU1ZhbHVlUHRyIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdl
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICBKU1Zh
bHVlUHRyIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpIGNvbnN0OworICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2
b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIpOwog
ICAgICAgICBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lKTsKIApAQCAtMTE5LDkgKzEyMiw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICAgICAgSlNTdHJpbmcqIHRvVGhpc0pTU3RyaW5nKEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIEpT
VmFsdWUqIGdldEpTTnVtYmVyKCk7IC8vIDAgaWYgdGhpcyBpcyBub3QgYSBKU051bWJlciBvciBu
dW1iZXIgb2JqZWN0CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0SlNOdW1iZXIoKTsgLy8gMCBpZiB0
aGlzIGlzIG5vdCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKIAotICAgICAgICBKU1ZhbHVl
KiBhc1ZhbHVlKCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgYXNWYWx1ZSgpIGNvbnN0Owog
CiAgICAgICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAKQEAgLTEzMiwxMDggKzEzNSw4OCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdWludDMyX3QgdG9VSW50MzJTbG93Q2FzZShFeGVj
U3RhdGUqLCBib29sJiBvaykgY29uc3Q7CiAgICAgfTsKIAotICAgIC8vIFRoZXNlIGFyZSBpZGVu
dGljYWwgbG9naWMgdG8gdGhlIEpTVmFsdWUgZnVuY3Rpb25zIGFib3ZlLCBhbmQgZmFzdGVyIHRo
YW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMigpLgotICAgIGludDMyX3QgdG9JbnQzMihkb3Vi
bGUpOwotICAgIHVpbnQzMl90IHRvVUludDMyKGRvdWJsZSk7Ci0gICAgaW50MzJfdCB0b0ludDMy
U2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7Ci0gICAgdWludDMyX3QgdG9VSW50MzJTbG93Q2Fz
ZShkb3VibGUsIGJvb2wmIG9rKTsKKyAgICBjbGFzcyBKU0ltbWVkaWF0ZTsKKyAgICBjbGFzcyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlcjsKIAotICAgIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjph
c1ZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUq
Pih0aGlzKTsKLSAgICB9CisgICAgY2xhc3MgSlNWYWx1ZVB0ciB7CisgICAgICAgIGZyaWVuZCBj
bGFzcyBKU0ltbWVkaWF0ZTsKIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVk
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNVbmRlZmluZWQo
KTsKLSAgICB9CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIG1ha2VJbW1lZGlhdGUoaW50cHRy
X3QgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgIH0KIAotICAgIGlubGluZSBi
b29sIEpTVmFsdWU6OmlzTnVsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNWYWx1
ZSgpID09IGpzTnVsbCgpOwotICAgIH0KKyAgICAgICAgaW50cHRyX3QgaW1tZWRpYXRlVmFsdWUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9wdHIpOworICAgICAgICB9CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgSlNW
YWx1ZVB0cigpCisgICAgICAgICAgICA6IG1fcHRyKDApCisgICAgICAgIHsKKyAgICAgICAgfQog
Ci0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc1VuZGVmaW5lZE9yTnVsbChhc1ZhbHVl
KCkpOwotICAgIH0KKyAgICAgICAgSlNWYWx1ZVB0cihKU1ZhbHVlKiBwdHIpCisgICAgICAgICAg
ICA6IG1fcHRyKHB0cikKKyAgICAgICAgeworICAgICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRp
YXRlOjppc0Jvb2xlYW4oYXNWYWx1ZSgpKTsKLSAgICB9CisgICAgICAgIEpTVmFsdWVQdHIoY29u
c3QgSlNWYWx1ZSogcHRyKQorICAgICAgICAgICAgOiBtX3B0cihjb25zdF9jYXN0PEpTVmFsdWUq
PihwdHIpKQorICAgICAgICB7CisgICAgICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6
OmdldEJvb2xlYW4oYm9vbCYgdikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6aXNCb29sZWFuKGFzVmFsdWUoKSkpIHsKLSAgICAgICAgICAgIHYgPSBKU0ltbWVkaWF0ZTo6
dG9Cb29sZWFuKGFzVmFsdWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
SlNWYWx1ZSogb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3B0cjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmdldEJvb2xlYW4oKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBqc0Jvb2xlYW4odHJ1ZSk7Ci0gICAgfQorICAg
ICAgICBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fcHRyOworICAgICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNWYWx1ZTo6
dG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQzMl90IGk7
Ci0gICAgICAgIGlmIChnZXRUcnVuY2F0ZWRJbnQzMihpKSkKLSAgICAgICAgICAgIHJldHVybiBp
OwotICAgICAgICBib29sIG9rOwotICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKGV4ZWMs
IG9rKTsKLSAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlUHRyIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wdHIgPT0gb3RoZXIu
bV9wdHI7CisgICAgICAgIH0KIAotICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICB1aW50MzJfdCBpOwotICAg
ICAgICBpZiAoZ2V0VHJ1bmNhdGVkVUludDMyKGkpKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0g
ICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9r
KTsKLSAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wdHIgIT0gb3RoZXIubV9w
dHI7CisgICAgICAgIH0KIAotICAgIGlubGluZSBpbnQzMl90IHRvSW50MzIoZG91YmxlIHZhbCkK
LSAgICB7Ci0gICAgICAgIGlmICghKHZhbCA+PSAtMjE0NzQ4MzY0OC4wICYmIHZhbCA8IDIxNDc0
ODM2NDguMCkpIHsKLSAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVkKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBlbmNvZGUoSlNWYWx1ZVB0ciB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
Pih2YWx1ZS5tX3B0cik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHZhbCk7Ci0gICAgfQogCi0gICAgaW5saW5lIHVpbnQzMl90IHRvVUludDMyKGRvdWJs
ZSB2YWwpCi0gICAgewotICAgICAgICBpZiAoISh2YWwgPj0gMC4wICYmIHZhbCA8IDQyOTQ5Njcy
OTYuMCkpIHsKLSAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IGRlY29kZShKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogcHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZVB0cihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihwdHIpKTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbCk7Ci0g
ICAgfQogCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihFeGVjU3RhdGUqIGV4
ZWMsIGJvb2wmIG9rKSBjb25zdAorICAgIHByaXZhdGU6CisgICAgICAgIEpTVmFsdWUqIG1fcHRy
OworICAgIH07CisKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjphc1ZhbHVlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIGludDMyX3QgaTsKLSAgICAgICAgaWYgKGdldFRydW5jYXRlZElu
dDMyKGkpKSB7Ci0gICAgICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVQdHIodGhpcyk7CiAgICAgfQogCi0gICAgaW5saW5lIHVpbnQz
Ml90IEpTVmFsdWU6OnRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0Cisg
ICAgaW5saW5lIEpTVmFsdWVQdHIgbm9WYWx1ZSgpCiAgICAgewotICAgICAgICB1aW50MzJfdCBp
OwotICAgICAgICBpZiAoZ2V0VHJ1bmNhdGVkVUludDMyKGkpKSB7Ci0gICAgICAgICAgICBvayA9
IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9VSW50MzJTbG93Q2FzZShleGVjLCBvayk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyKCk7
CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlUHRyIGEs
IGNvbnN0IEpTVmFsdWUqIGIpIHsgcmV0dXJuIGEgPT0gSlNWYWx1ZVB0cihiKTsgfQorICAgIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSlNWYWx1ZSogYSwgY29uc3QgSlNWYWx1ZVB0ciBi
KSB7IHJldHVybiBKU1ZhbHVlUHRyKGEpID09IGI7IH0KKworICAgIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgSlNWYWx1ZVB0ciBhLCBjb25zdCBKU1ZhbHVlKiBiKSB7IHJldHVybiBhICE9
IEpTVmFsdWVQdHIoYik7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTVmFs
dWUqIGEsIGNvbnN0IEpTVmFsdWVQdHIgYikgeyByZXR1cm4gSlNWYWx1ZVB0cihhKSAhPSBiOyB9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNWYWx1ZV9oCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMzk1OTMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpkLT5zeW1ib2xUYWJs
ZTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSA9IDA7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKQEAgLTkwLDggKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7Ci0gICAgICAgIGJvb2wgc3lt
Ym9sVGFibGVQdXQoY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKTsKLSAgICAgICAgYm9vbCBz
eW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXQoY29uc3Qg
SWRlbnRpZmllciYsIEpTVmFsdWVQdHIpOworICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRhKiBkOwogICAgIH07CkBAIC0x
MTcsNyArMTE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dChj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGlu
ZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0KGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
SGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlz
KSk7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9s
VGFibGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgIGlubGluZSBib29sIEpTVmFy
aWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZh
bHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KFBhc3NS
ZWZQdHI8U3RydWN0dXJlPik7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTVmFsdWUqIGludGVy
bmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsVmFsdWU7IH0KLSAgICAgICAgdm9p
ZCBzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWUqKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBpbnRlcm5h
bFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFZhbHVlOyB9CisgICAgICAgIHZvaWQg
c2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlUHRyKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTVmFsdWUqIG1f
aW50ZXJuYWxWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX2ludGVybmFsVmFsdWU7CiAgICAg
fTsKICAgICAKICAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBKU1dyYXBwZXJPYmpl
Y3Q6OnNldEludGVybmFsVmFsdWUoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIHZvaWQgSlNX
cmFwcGVyT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewog
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhbHVlLT5pc09iamVjdCgp
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIHZvaWQgSGFzaFRhYmxlOjpkZWxldGVUYWJsZSgpIGNvbnN0CiB2b2lkIHNldFVw
U3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaEVudHJ5KiBlbnRy
eSwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVChlbnRyeS0+YXR0cmlidXRlcygpICYgRnVu
Y3Rpb24pOwotICAgIEpTVmFsdWUqKiBsb2NhdGlvbiA9IHRoaXNPYmotPmdldERpcmVjdExvY2F0
aW9uKHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZVB0ciogbG9jYXRpb24gPSB0aGlzT2JqLT5n
ZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOwogCiAgICAgaWYgKCFsb2NhdGlvbikgewog
ICAgICAgICBQcm90b3R5cGVGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGV4ZWMpIFByb3RvdHlw
ZUZ1bmN0aW9uKGV4ZWMsIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVu
dHJ5LT5mdW5jdGlvbigpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkocmV2aXNpb24g
Mzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw5ICs0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICAvLyBGSVhN
RTogVGhlcmUgaXMgbm8gcmVhc29uIHRoaXMgZ2V0IGZ1bmN0aW9uIGNhbid0IGJlIHNpbXBsZXIu
Ci0gICAgLy8gaWUuIHR5cGVkZWYgSlNWYWx1ZSogKCpHZXRGdW5jdGlvbikoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIGJhc2VPYmplY3QpCisgICAgLy8gaWUuIHR5cGVkZWYgSlNWYWx1ZVB0ciAoKkdl
dEZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCkKICAgICB0eXBlZGVm
IFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIEdldEZ1bmN0aW9uOwotICAgIHR5cGVkZWYgdm9p
ZCAoKlB1dEZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZSogdmFsdWUpOworICAgIHR5cGVkZWYgdm9pZCAoKlB1dEZ1bmN0aW9uKShFeGVjU3RhdGUqLCBK
U09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZVB0ciB2YWx1ZSk7CiAKICAgICBjbGFzcyBIYXNo
RW50cnkgewogICAgIHB1YmxpYzoKQEAgLTI0Myw3ICsyNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgKiBpcyBmb3VuZCBpdCBzZXRzIHRoZSB2YWx1ZSBhbmQgcmV0dXJucyB0cnVlLCBlbHNl
IGl0IHJldHVybnMgZmFsc2UuCiAgICAgICovCiAgICAgdGVtcGxhdGUgPGNsYXNzIFRoaXNJbXA+
Ci0gICAgaW5saW5lIGJvb2wgbG9va3VwUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlKiB0YWJs
ZSwgVGhpc0ltcCogdGhpc09iaikKKyAgICBpbmxpbmUgYm9vbCBsb29rdXBQdXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUs
IGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmopCiAgICAgewogICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gdGFibGUtPmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgKiB0aGVuIGl0
IGNhbGxzIHB1dCgpIG9uIHRoZSBQYXJlbnRJbXAgY2xhc3MuCiAgICAgICovCiAgICAgdGVtcGxh
dGUgPGNsYXNzIFRoaXNJbXAsIGNsYXNzIFBhcmVudEltcD4KLSAgICBpbmxpbmUgdm9pZCBsb29r
dXBQdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqIHZhbHVlLCBjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCisgICAgaW5saW5lIHZvaWQgbG9va3VwUHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVl
LCBjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiAgICAgewogICAgICAgICBpZiAoIWxvb2t1cFB1dDxUaGlzSW1wPihleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCB0YWJsZSwgdGhpc09iaikpCiAgICAgICAgICAgICB0aGlzT2Jq
LT5QYXJlbnRJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsgLy8gbm90
IGZvdW5kOiBmb3J3YXJkIHRvIHBhcmVudApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXRoT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhP
YmplY3QuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI0ICszMiwyNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChNYXRoT2JqZWN0KTsKIAotc3RhdGlj
IEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBQ29zKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0NlaWwoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0xvZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
bWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
bWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBt
YXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBt
YXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBVGFuKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVu
Y0NlaWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFBy
b3RvRnVuY0V4cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNQb3coRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVu
Y1JvdW5kKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQ
cm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQogCkBAIC0xMTMsNTcg
KzExMyw1NyBAQCBib29sIE1hdGhPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZh
YnMoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0
aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgYWNvcyhhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihl
eGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1h
dGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBhc2luKGFy
Z3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90
b0Z1bmNBVGFuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIGF0YW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykp
KTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFBy
b3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBhdGFuMihhcmdz
LmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSwgYXJncy5hdChleGVjLCAxKS0+dG9OdW1iZXIo
ZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBt
YXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgY2VpbChh
cmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJv
dG9GdW5jQ29zKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgY29zKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7
CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9G
dW5jRXhwKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBleHAoYXJncy5hdChleGVj
LCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0Zsb29y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051
bWJlcihleGVjLCBmbG9vcihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQog
Ci1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0xv
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbG9nKGFyZ3MuYXQoZXhlYywgMCkt
PnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9
IGFyZ3Muc2l6ZSgpOwogICAgIGRvdWJsZSByZXN1bHQgPSAtSW5mOwpAQCAtMTc5LDcgKzE3OSw3
IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY01pbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgdW5zaWduZWQgYXJnc0Nv
dW50ID0gYXJncy5zaXplKCk7CiAgICAgZG91YmxlIHJlc3VsdCA9ICtJbmY7CkBAIC0xOTUsNyAr
MTk1LDcgQEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqIGV4ZQogICAgIHJl
dHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
UG93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBFQ01BIDE1
LjguMi4xLjEzCiAKQEAgLTIwOSwxMiArMjA5LDEyIEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNQ
b3coRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG93KGFyZywgYXJn
MikpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG1hdGhQcm90
b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBXVEY6OnJhbmRvbU51bWJl
cigpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0
aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGRvdWJsZSBhcmcgPSBhcmdzLmF0KGV4ZWMsIDAp
LT50b051bWJlcihleGVjKTsKICAgICBpZiAoc2lnbmJpdChhcmcpICYmIGFyZyA+PSAtMC41KQpA
QCAtMjIyLDE3ICsyMjIsMTcgQEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JvdW5kKEV4ZWNTdGF0
ZSogZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCBmbG9vcihhcmcgKyAwLjUpKTsKIH0KIAot
SlNWYWx1ZSogbWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNTaW4o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNpbihhcmdzLmF0KGV4ZWMsIDApLT50
b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBzcXJ0KGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUq
IG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCB0YW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIo
ZXhlYykpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCShyZXZpc2lv
biAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgQ29uc3Ry
dWN0VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZQogICAgIHJldHVybiBDb25zdHJ1Y3RU
eXBlSG9zdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE51bWJlckNvbnN0cnVjdG9yKTsKIAotc3RhdGlj
IEpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTmFOVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlckNv
bnN0cnVjdG9yTmVnSW5maW5pdHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yUG9zSW5m
aW5pdHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
Owotc3RhdGljIEpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTWF4VmFsdWUoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUq
IG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0
b3JOYU5WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck5lZ0luZmluaXR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHkoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
bnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rv
ck1pblZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKQEAgLTY4LDI3ICs2OCwyNyBAQCBib29sIE51
bWJlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsCiAgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxOdW1iZXJDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgRXhlY1N0
YXRlOjpudW1iZXJUYWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
SlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBudW1iZXJDb25z
dHJ1Y3Rvck5hTlZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogfQogCi1KU1ZhbHVl
KiBudW1iZXJDb25zdHJ1Y3Rvck5lZ0luZmluaXR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVj
dG9yTmVnSW5maW5pdHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4ZWMsIC1JbmYpOwog
fQogCi1KU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3RvclBvc0luZmluaXR5KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG51
bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4
ZWMsIEluZik7CiB9CiAKLUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTWF4VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFs
dWVQdHIgbnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJlckNl
bGwoZXhlYywgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJD
b25zdHJ1Y3Rvck1pblZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikK
IHsKICAgICByZXR1cm4ganNOdW1iZXJDZWxsKGV4ZWMsIDVFLTMyNCk7CiB9CkBAIC0xMDksNyAr
MTA5LDcgQEAgQ29uc3RydWN0VHlwZSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogfQogCiAv
LyBFQ01BIDE1LjcuMgotc3RhdGljIEpTVmFsdWUqIGNhbGxOdW1iZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitz
dGF0aWMgSlNWYWx1ZVB0ciBjYWxsTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGFyZ3MuaXNFbXB0eSgpID8gMCA6IGFyZ3MuYXQoZXhlYywgMCktPnRv
TnVtYmVyKGV4ZWMpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiwgTnVtYmVyUHJvdG90eXBlKik7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsg
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9i
amVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKICAgICAgICAgfQpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgTnVtYmVyT2JqZWN0OjpOdW1iZXJPYmplY3QoUGFzc1JlZlB0cjxTdAog
ewogfQogCi1KU1ZhbHVlKiBOdW1iZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKK0pTVmFsdWVQdHIg
TnVtYmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiB7CiAgICAgcmV0dXJuIGludGVybmFsVmFsdWUo
KTsKIH0KQEAgLTQ4LDcgKzQ4LDcgQEAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhl
Y1N0YXRlKgogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLU51bWJlck9iamVjdCogY29uc3RydWN0
TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVl
KQorTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRlTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBOdW1iZXJPYmplY3QqIG9iamVj
dCA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZSh2
YWx1ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9u
IDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsK
KyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7CiAgICAgfTsKIAogICAg
IE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSosIEpTTnVtYmVyQ2VsbCop
OwotICAgIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihF
eGVjU3RhdGUqLCBKU1ZhbHVlKik7CisgICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJG
cm9tSW1tZWRpYXRlTnVtYmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIpOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChOdW1iZXJQcm90b3R5cGUpOwogCi1z
dGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNU
b0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVu
Y1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQcm90
b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAK
IC8vIEVDTUEgMTUuNy40CiAKQEAgLTEzMyw5ICsxMzMsOSBAQCBzdGF0aWMgZG91YmxlIGludFBv
dzEwKGludCBlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdCk7CiB9CiAK
LUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiB2
ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOworICAgIEpTVmFsdWVQdHIgdiA9IHRoaXNWYWx1
ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAgLTE5NywzMyArMTk3LDMzIEBAIEpTVmFsdWUqIG51bWJl
clByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGEKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3Rh
cnRPZlJlc3VsdFN0cmluZyk7CiB9CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgogCi0gICAgSlNW
YWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSB0
aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHYt
PnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewotICAg
IEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2
ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHJldHVybiB2OwogfQogCi1KU1Zh
bHVlKiBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG51bWJl
clByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIHYgPSB0aGlz
VmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRK
U051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKIAotICAgIEpTVmFsdWUqIGZyYWN0aW9uRGlnaXRzID0gYXJncy5hdChleGVj
LCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZyYWN0aW9uRGlnaXRzID0gYXJncy5hdChleGVjLCAwKTsK
ICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0cy0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlm
ICghKGRmID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBSYW5nZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4g
MCBhbmQgMjAiKTsKQEAgLTMwMiw5ICszMDIsOSBAQCBzdGF0aWMgdm9pZCBleHBvbmVudGlhbFBh
cnRUb1N0cmluZyhjaGFyCiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBl
eHBvbmVudGlhbCAlIDEwKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVu
dGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFs
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJl
cigpOworICAgIEpTVmFsdWVQdHIgdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBp
ZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKQEAg
LTMxMyw3ICszMTMsNyBAQCBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4
CiAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgVVN0cmluZzo6ZnJvbSh4KSk7CiAKLSAgICBKU1ZhbHVlKiBmcmFjdGlvbmFsRGlnaXRz
VmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnJhY3Rpb25hbERpZ2l0
c1ZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbmFsRGln
aXRzVmFsdWUtPnRvSW50ZWdlcihleGVjKTsKICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIw
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvRXhwb25l
bnRpYWwoKSBhcmd1bWVudCBtdXN0IGJldHdlZW4gMCBhbmQgMjAiKTsKQEAgLTM3Miw5ICszNzIs
OSBAQCBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4CiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIGJ1Zik7CiB9CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvUHJl
Y2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJl
cigpOworICAgIEpTVmFsdWVQdHIgdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBp
ZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIE9iamVjdENvbnN0cnVjdG9yOjpP
YmplY3RDb25zdHJ1Y3RvcihFeGUKIC8vIEVDTUEgMTUuMi4yCiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBhcmcgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpT
VmFsdWVQdHIgYXJnID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpZiAoYXJnLT5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU09iamVjdChleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOwogICAgIHJldHVybiBh
cmctPnRvT2JqZWN0KGV4ZWMpOwpAQCAtNTgsNyArNTgsNyBAQCBDb25zdHJ1Y3RUeXBlIE9iamVj
dENvbnN0cnVjdG9yOjpnZXRDb25zCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQog
Ci1zdGF0aWMgSlNWYWx1ZSogY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVl
UHRyIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gY29uc3RydWN0T2Jq
ZWN0KGV4ZWMsIGFyZ3MpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwxNSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChPYmplY3RQcm90b3R5
cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0lz
UHJvdG90eXBlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNM
b29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY1ZhbHVlT2Yo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1
bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBv
YmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNQ
cm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
OwogCiBPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSkKICAgICA6IEpTT2JqZWN0KHN0dWN0dXJlKQpAQCAtNjAsMzUgKzYwLDM1IEBA
IE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGEKIAogLy8gRUNNQSAxNS4y
LjQuMiwgMTUuMi40LjQsIDE1LjIuNC41LCAxNS4yLjQuNwogCi1KU1ZhbHVlKiBvYmplY3RQcm90
b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgcmV0dXJuIHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogfQog
Ci1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+aGFzT3du
UHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmlu
ZyhleGVjKSkpKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2Jq
ZWN0KGV4ZWMpOwogCiAgICAgaWYgKCFhcmdzLmF0KGV4ZWMsIDApLT5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIAotICAgIEpTVmFsdWUqIHYgPSBhc09iamVj
dChhcmdzLmF0KGV4ZWMsIDApKS0+cHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gYXNP
YmplY3QoYXJncy5hdChleGVjLCAwKSktPnByb3RvdHlwZSgpOwogCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgaWYgKCF2LT5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGpzQm9v
bGVhbihmYWxzZSk7Ci0gICAgICAgIGlmICh0aGlzT2JqID09IHYpCworICAgICAgICBpZiAodiA9
PSB0aGlzT2JqKQsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAg
IHYgPSBhc09iamVjdCh2KS0+cHJvdG90eXBlKCk7CiAgICAgfQogfQogCi1KU1ZhbHVlKiBvYmpl
Y3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgb2JqZWN0UHJv
dG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpID09IENh
bGxUeXBlTm9uZSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVm
aW5lR2V0dGVyKEV4ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBv
YmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgb2JqZWN0
UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpID09
IENhbGxUeXBlTm9uZSkKQEAgLTEwNiwyNyArMTA2LDI3IEBAIEpTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY0RlZmluZVNldHRlcihFeGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBHZXR0ZXIoZXhlYywgSWRlbnRp
ZmllcihleGVjLCBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1Zh
bHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
b2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cFNldHRlcihleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFs
dWUqIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT5w
cm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpKSkpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNKU1N0cmluZyhleGVj
KTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCAiW29iamVjdCAiICsgdGhpc1ZhbHVlLT50b1RoaXNPYmplY3Qo
ZXhlYyktPmNsYXNzTmFtZSgpICsgIl0iKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
KTsKICAgICB9OwogCi0gICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQ
dHIgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIC8vIEVDTUEgMTEuOS4zCi1ib29sIGVxdWFsKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBlcXVhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgaWYgKEpT
SW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQogICAgICAgICByZXR1
cm4gdjEgPT0gdjI7CkBAIC00NCwxMiArNDQsMTIgQEAgYm9vbCBlcXVhbChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHYxLAogICAgIHJldHVybiBlcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIHYx
LCB2Mik7CiB9CiAKLWJvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHYxLCBKU1ZhbHVlKiB2MikKK2Jvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgcmV0dXJuIGVxdWFsU2xvd0Nhc2VJ
bmxpbmUoZXhlYywgdjEsIHYyKTsKIH0KIAotYm9vbCBzdHJpY3RFcXVhbChKU1ZhbHVlKiB2MSwg
SlNWYWx1ZSogdjIpCitib29sIHN0cmljdEVxdWFsKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIg
djIpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlKHYxLCB2MikpCiAg
ICAgICAgIHJldHVybiB2MSA9PSB2MjsKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIHN0cmljdEVx
dWFsKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2CiAgICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nh
c2VJbmxpbmUodjEsIHYyKTsKIH0KIAotYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlKEpTVmFsdWUq
IHYxLCBKU1ZhbHVlKiB2MikKK2Jvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZShKU1ZhbHVlUHRyIHYx
LCBKU1ZhbHVlUHRyIHYyKQogewogICAgIHJldHVybiBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5l
KHYxLCB2Mik7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlKiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKiBleGVjKQorTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU09iamVjdCogZXJyb3IgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk91dCBvZiBtZW1vcnkiKTsKICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyb3IpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICAgLy8gRUNNQSAxMS45LjMKLSAgYm9vbCBlcXVhbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgSlNW
YWx1ZSopOwotICBib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIEpTVmFs
dWUqKTsKKyAgYm9vbCBlcXVhbChFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCBKU1ZhbHVlUHRyKTsK
KyAgYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIsIEpTVmFsdWVQdHIp
OwogCi0gIEFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICBBTFdBWVNfSU5MSU5FIGJvb2wgZXF1
YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQ
dHIgdjIpCiAgIHsKICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzKHYxLCB2MikpOwogCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgIGlmICh2MS0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgICBpZiAodjItPmlzT2Jq
ZWN0KCkpCiAgICAgICAgICAgICAgICAgICByZXR1cm4gdjEgPT0gdjI7Ci0gICAgICAgICAgICAg
IEpTVmFsdWUqIHAxID0gdjEtPnRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICAgICAgICBKU1Zh
bHVlUHRyIHAxID0gdjEtPnRvUHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAgIHYxID0gcDE7CkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgIH0KIAogICAgICAgICAgIGlmICh2Mi0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ICBKU1ZhbHVlKiBwMiA9IHYyLT50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgICAgICAgSlNW
YWx1ZVB0ciBwMiA9IHYyLT50b1ByaW1pdGl2ZShleGVjKTsKICAgICAgICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICB2MiA9IHAyOwpAQCAtMTAwLDEwICsxMDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgIH0KIAogCi0gIGJvb2wgc3RyaWN0RXF1YWwoSlNWYWx1ZSosIEpTVmFsdWUqKTsKLSAgYm9v
bCBzdHJpY3RFcXVhbFNsb3dDYXNlKEpTVmFsdWUqLCBKU1ZhbHVlKik7CisgIGJvb2wgc3RyaWN0
RXF1YWwoSlNWYWx1ZVB0ciwgSlNWYWx1ZVB0cik7CisgIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2Fz
ZShKU1ZhbHVlUHRyLCBKU1ZhbHVlUHRyKTsKIAotICBpbmxpbmUgYm9vbCBzdHJpY3RFcXVhbFNs
b3dDYXNlSW5saW5lKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgaW5saW5lIGJvb2wgc3Ry
aWN0RXF1YWxTbG93Q2FzZUlubGluZShKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICB7
CiAgICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlKHYxLCB2MikpOwog
ICAgICAgCkBAIC0xMzEsNyArMTMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICByZXR1cm4g
djEgPT0gdjI7CiAgIH0KIAotICBKU1ZhbHVlKiB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0
YXRlKik7CisgIEpTVmFsdWVQdHIgdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSopOwog
fQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAJ
KHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1KU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgLy8gUHJldmVudCBnZXR0
ZXIgZnVuY3Rpb25zIGZyb20gb2JzZXJ2aW5nIGV4ZWN1dGlvbiBpZiBhbiBleGNlcHRpb24gaXMg
cGVuZGluZy4KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgZXhwbGljaXQgUHJvcGVydHlTbG90KGNvbnN0IEpTVmFsdWUqIGJhc2UpCi0g
ICAgICAgICAgICA6IG1fc2xvdEJhc2UoY29uc3RfY2FzdDxKU1ZhbHVlKj4oYmFzZSkpCisgICAg
ICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChjb25zdCBKU1ZhbHVlUHRyIGJhc2UpCisgICAgICAg
ICAgICA6IG1fc2xvdEJhc2UoYmFzZSkKICAgICAgICAgICAgICwgbV9vZmZzZXQoV1RGOjpub3RG
b3VuZCkKICAgICAgICAgewogICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgdHlwZWRlZiBKU1ZhbHVlKiAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB0eXBlZGVmIEpT
VmFsdWVQdHIgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICAgICAg
SlNWYWx1ZVB0ciBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fZ2V0VmFsdWUg
PT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgICAgIHJldHVybiAqbV9kYXRh
LnZhbHVlU2xvdDsKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUsICp0aGlzKTsKICAgICAgICAg
fQogCi0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lKSBjb25zdAorICAgICAgICBKU1ZhbHVlUHRyIGdldFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfU0xPVF9NQVJLRVIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwpAQCAtNzgsMTcgKzc4LDE3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgICAgICB9CiAKLSAg
ICAgICAgdm9pZCBwdXRWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkKKyAgICAgICAgdm9pZCBwdXRWYWx1
ZShKU1ZhbHVlUHRyIHZhbHVlKQogICAgICAgICB7IAogICAgICAgICAgICAgaWYgKG1fZ2V0VmFs
dWUgPT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKSB7CiAgICAgICAgICAgICAgICAgKm1fZGF0YS52
YWx1ZVNsb3QgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBBU1NFUlQobV9nZXRWYWx1ZSA9PSBKU0NfUkVHSVNURVJfU0xPVF9NQVJL
RVIpOwotICAgICAgICAgICAgKm1fZGF0YS5yZWdpc3RlclNsb3QgPSB2YWx1ZTsKKyAgICAgICAg
ICAgICptX2RhdGEucmVnaXN0ZXJTbG90ID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlKiogdmFsdWVTbG90KSAKKyAgICAg
ICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZVB0ciogdmFsdWVTbG90KSAKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlU2xvdCk7CiAgICAgICAgICAgICBtX2dldFZhbHVlID0g
SlNDX1ZBTFVFX1NMT1RfTUFSS0VSOwpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqIHNsb3RCYXNlLCBKU1Zh
bHVlKiogdmFsdWVTbG90KQorICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlUHRyIHNs
b3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9TTE9U
X01BUktFUjsKQEAgLTEwNCw3ICsxMDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqIHNsb3RCYXNlLCBKU1ZhbHVlKiogdmFsdWVT
bG90LCBzaXplX3Qgb2Zmc2V0KQorICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlUHRy
IHNsb3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QsIHNpemVfdCBvZmZzZXQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICAgICAgbV9nZXRWYWx1
ZSA9IEpTQ19WQUxVRV9TTE9UX01BUktFUjsKQEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUqIHZhbHVlKQorICAgICAgICB2b2lkIHNl
dFZhbHVlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CiAgICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSOwpA
QCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9kYXRhLnJl
Z2lzdGVyU2xvdCA9IHJlZ2lzdGVyU2xvdDsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0
Q3VzdG9tKEpTVmFsdWUqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgICAg
IHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWVQdHIgc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAgICAgICAg
IEFTU0VSVChnZXRWYWx1ZSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAgICAgICAgIH0KIAotICAgICAgICB2
b2lkIHNldEN1c3RvbUluZGV4KEpTVmFsdWUqIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0
VmFsdWVGdW5jIGdldFZhbHVlKQorICAgICAgICB2b2lkIHNldEN1c3RvbUluZGV4KEpTVmFsdWVQ
dHIgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgICAgICBBU1NFUlQo
Z2V0VmFsdWUpOwpAQCAtMTYwLDEzICsxNjAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBzZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFs
dWUqIHNsb3RCYXNlKCkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBzbG90QmFzZSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKICAgICAgICAgICAg
IHJldHVybiBtX3Nsb3RCYXNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRCYXNlKEpT
VmFsdWUqIGJhc2UpCisgICAgICAgIHZvaWQgc2V0QmFzZShKU1ZhbHVlUHRyIGJhc2UpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKICAgICAgICAgICAgIEFTU0VS
VChiYXNlKTsKQEAgLTE5MCwxOSArMTkwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVQdHIgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIEdldFZhbHVlRnVuYyBtX2dldFZhbHVl
OwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogbV9zbG90QmFzZTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBtX3Nsb3RCYXNlOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBKU09iamVjdCog
Z2V0dGVyRnVuYzsKLSAgICAgICAgICAgIEpTVmFsdWUqKiB2YWx1ZVNsb3Q7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3Q7CiAgICAgICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJT
bG90OwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXg7CiAgICAgICAgIH0gbV9kYXRhOwogCi0g
ICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgbV92YWx1ZTsKIAog
ICAgICAgICBzaXplX3QgbV9vZmZzZXQ7CiAgICAgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
dGVjdC5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyOCArNDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBnY1VucHJvdGVjdCh2YWwpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9p
ZCBnY1Byb3RlY3QoSlNWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoSlNJbW1lZGlh
dGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZ2NQ
cm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIGdjVW5wcm90
ZWN0KEpTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGdjVW5wcm90ZWN0
KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIGdjUHJvdGVjdE51bGxU
b2xlcmFudChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBnY1Byb3RlY3QoSlNWYWx1
ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUgfHwgSlNJbW1lZGlhdGU6Omlz
SW1tZWRpYXRlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZ2NQcm90ZWN0
KGFzQ2VsbCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGdjVW5wcm90ZWN0TnVs
bFRvbGVyYW50KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIGdjVW5wcm90ZWN0KEpT
VmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlIHx8IEpTSW1tZWRpYXRl
Ojppc0ltbWVkaWF0ZSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC04MSw3ICs2Nyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGFuZCB0aGUgaW1wbGljaXQgY29udmVyc2lvbiB0
byByYXcgcG9pbnRlcgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcm90ZWN0ZWRQdHIg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvdGVjdGVkUHRyKCkgOiBtX3B0cigwKSB7IH0KKyAg
ICAgICAgUHJvdGVjdGVkUHRyKCkgOiBtX3B0cigwKSB7fQogICAgICAgICBQcm90ZWN0ZWRQdHIo
VCogcHRyKTsKICAgICAgICAgUHJvdGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0ciYpOwogICAg
ICAgICB+UHJvdGVjdGVkUHRyKCk7CkBAIC05MCw4ICs3NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAg
ICAgIG9wZXJhdG9yIFQqKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAgICAgb3BlcmF0
b3IgSlNWYWx1ZVB0cigpIGNvbnN0IHsgcmV0dXJuIEpTVmFsdWVQdHIobV9wdHIpOyB9CiAgICAg
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogICAgICAgICAKKyAg
ICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CiAKICAgICAgICAgUHJvdGVj
dGVkUHRyJiBvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkUHRyJik7CkBAIC0xMDEsMzAgKzg5LDUz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUKiBtX3B0cjsKICAgICB9OwogCi0gICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKFQqIHB0cikKKyAg
ICBjbGFzcyBQcm90ZWN0ZWRKU1ZhbHVlUHRyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFByb3Rl
Y3RlZEpTVmFsdWVQdHIoKSB7fQorICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRyKEpTVmFsdWVQ
dHIgdmFsdWUpOworICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRyKGNvbnN0IFByb3RlY3RlZEpT
VmFsdWVQdHImKTsKKyAgICAgICAgflByb3RlY3RlZEpTVmFsdWVQdHIoKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVT4gUHJvdGVjdGVkSlNWYWx1ZVB0cihjb25zdCBQcm90ZWN0ZWRQdHI8
VT4mKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgICAgICBvcGVyYXRvciBKU1ZhbHVlUHRyKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZhbHVlOyB9CisKKyAgICAgICAgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgb3BlcmF0b3I9KGNv
bnN0IFByb3RlY3RlZEpTVmFsdWVQdHImKTsKKyAgICAgICAgUHJvdGVjdGVkSlNWYWx1ZVB0ciYg
b3BlcmF0b3I9KEpTVmFsdWVQdHIpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBK
U1ZhbHVlUHRyIG1fdmFsdWU7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp
bmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoVCogcHRyKQogICAgICAgICA6IG1fcHRy
KHB0cikKICAgICB7CiAgICAgICAgIGdjUHJvdGVjdE51bGxUb2xlcmFudChtX3B0cik7CiAgICAg
fQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRy
KGNvbnN0IFByb3RlY3RlZFB0ciYgbykKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFBy
b3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0ciYgbykKICAgICAg
ICAgOiBtX3B0cihvLmdldCgpKQogICAgIHsKICAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50
KG1fcHRyKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gUHJvdGVjdGVkUHRyPFQ+
Ojp+UHJvdGVjdGVkUHRyKCkKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFByb3RlY3Rl
ZFB0cjxUPjo6flByb3RlY3RlZFB0cigpCiAgICAgewogICAgICAgICBnY1VucHJvdGVjdE51bGxU
b2xlcmFudChtX3B0cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHRlbXBsYXRl
IDxjbGFzcyBVPiBQcm90ZWN0ZWRQdHI8VD46OlByb3RlY3RlZFB0cihjb25zdCBQcm90ZWN0ZWRQ
dHI8VT4mIG8pCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHRlbXBsYXRlIDxjbGFzcyBVPiBpbmxp
bmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoY29uc3QgUHJvdGVjdGVkUHRyPFU+JiBv
KQogICAgICAgICA6IG1fcHRyKG8uZ2V0KCkpCiAgICAgewogICAgICAgICBnY1Byb3RlY3ROdWxs
VG9sZXJhbnQobV9wdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBQcm90ZWN0
ZWRQdHI8VD4mIFByb3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZFB0cjxU
PiYgbykgCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQcm90ZWN0ZWRQdHI8VD4mIFBy
b3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYgbykgCiAgICAg
ewogICAgICAgICBUKiBvcHRyID0gby5tX3B0cjsKICAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVy
YW50KG9wdHIpOwpAQCAtMTQxLDYgKzE1Miw0NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIGlubGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpQ
cm90ZWN0ZWRKU1ZhbHVlUHRyKEpTVmFsdWVQdHIgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVjdGVkSlNWYWx1ZVB0cihjb25zdCBQcm90
ZWN0ZWRKU1ZhbHVlUHRyJiBvKQorICAgICAgICA6IG1fdmFsdWUoby5nZXQoKSkKKyAgICB7Cisg
ICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgUHJvdGVjdGVk
SlNWYWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIoKQorICAgIHsKKyAgICAgICAgZ2NVbnBy
b3RlY3QobV92YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFByb3RlY3Rl
ZEpTVmFsdWVQdHI6OlByb3RlY3RlZEpTVmFsdWVQdHIoY29uc3QgUHJvdGVjdGVkUHRyPFU+JiBv
KQorICAgICAgICA6IG1fdmFsdWUoby5nZXQoKSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdCht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgUHJvdGVj
dGVkSlNWYWx1ZVB0cjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIG8pIAor
ICAgIHsKKyAgICAgICAgSlNWYWx1ZVB0ciBvdmFsdWUgPSBvLm1fdmFsdWU7CisgICAgICAgIGdj
UHJvdGVjdChvdmFsdWUpOworICAgICAgICBnY1VucHJvdGVjdChtX3ZhbHVlKTsKKyAgICAgICAg
bV92YWx1ZSA9IG92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGlu
bGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpvcGVyYXRvcj0o
SlNWYWx1ZVB0ciBvdmFsdWUpCisgICAgeworICAgICAgICBnY1Byb3RlY3Qob3ZhbHVlKTsKKyAg
ICAgICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSBvdmFsdWU7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEsIGNvbnN0IFByb3Rl
Y3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9CiAgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+
JiBhLCBjb25zdCBUKiBiKSB7IHJldHVybiBhLmdldCgpID09IGI7IH0KICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUKiBhLCBjb25zdCBQcm90ZWN0
ZWRQdHI8VD4mIGIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQpAQCAtMTQ4LDYgKzE5OSwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEsIGNvbnN0IFByb3RlY3RlZFB0cjxUPiYg
YikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBhLCBjb25zdCBU
KiBiKSB7IHJldHVybiBhLmdldCgpICE9IGI7IH0KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUKiBhLCBjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGIp
IHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBi
KSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IEpTVmFsdWVQdHIgYikgeyBy
ZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgUHJvdGVjdGVk
UHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpID09IEpTVmFsdWVQdHIoYi5nZXQoKSk7IH0KKyAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWVQdHIgYSwgY29uc3QgUHJvdGVj
dGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gYSA9PSBiLmdldCgpOyB9CisgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBh
LCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVybiBKU1ZhbHVlUHRyKGEuZ2V0
KCkpID09IGIuZ2V0KCk7IH0KKworICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJv
dGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1
cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBKU1ZhbHVlUHRyIGIpIHsgcmV0dXJuIGEu
Z2V0KCkgIT0gYjsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IFByb3RlY3RlZFB0cjxUPiYg
YikgeyByZXR1cm4gYS5nZXQoKSAhPSBKU1ZhbHVlUHRyKGIuZ2V0KCkpOyB9CisgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIGEsIGNvbnN0IFByb3RlY3RlZEpTVmFs
dWVQdHImIGIpIHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYgYSwgY29uc3Qg
UHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gSlNWYWx1ZVB0cihhLmdldCgpKSAhPSBi
LmdldCgpOyB9CiAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDI0ICszMywyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTVmFsdWUq
IHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTXVs
dGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVj
dG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjEoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4
cENvbnN0cnVjdG9yRG9sbGFyMihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIz
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4
cENvbnN0cnVjdG9yRG9sbGFyNShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI2
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4
cENvbnN0cnVjdG9yRG9sbGFyOChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI5
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVn
RXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JM
YXN0TWF0Y2goRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4oRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdF
eHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjEoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcjQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI1KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdF
eHBDb25zdHJ1Y3RvckRvbGxhcjcoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xs
YXI4KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOShFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKLXN0YXRpYyB2b2lkIHNl
dFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7
Ci1zdGF0aWMgdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqKTsKK3N0YXRpYyB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5w
dXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKK3N0YXRpYyB2b2lkIHNldFJl
Z0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
cik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkBAIC0xODUsNyArMTg1LDcgQEAgSlNPYmplY3Qq
IFJlZ0V4cENvbnN0cnVjdG9yOjphcnJheU9mTWF0YwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJl
Z0V4cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogUmVnRXhwQ29u
c3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKSBjb25zdAor
SlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVjdG9yICYmIGkgPD0gZC0+
bGFzdE51bVN1YlBhdHRlcm5zKSB7CiAgICAgICAgIGludCBzdGFydCA9IGQtPmxhc3RPdmVjdG9y
WzIgKiBpXTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6
Z2V0QmFja3JlZihFCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUpTVmFs
dWUqIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpID0gZC0+bGFzdE51bVN1YlBhdHRlcm5zOwog
ICAgIGlmIChpID4gMCkgewpAQCAtMjA3LDE0ICsyMDcsMTQgQEAgSlNWYWx1ZSogUmVnRXhwQ29u
c3RydWN0b3I6OmdldExhc3RQYXJlbgogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwog
fQogCi1KU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGVmdENvbnRleHQoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGVmdENvbnRl
eHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmIChkLT5sYXN0T3ZlY3RvcikKICAg
ICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCwgMCwgZC0+bGFzdE92
ZWN0b3JbMF0pOwogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVl
KiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWVQdHIgUmVnRXhwQ29uc3RydWN0b3I6OmdldFJpZ2h0Q29udGV4dChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVjdG9yKQogICAgICAgICByZXR1
cm4ganNTdWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCBkLT5sYXN0T3ZlY3RvclsxXSwgZC0+
bGFzdElucHV0LnNpemUoKSAtIGQtPmxhc3RPdmVjdG9yWzFdKTsKQEAgLTIyNiw5MiArMjI2LDky
IEBAIGJvb2wgUmVnRXhwQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PFJlZ0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihl
eGVjLCBFeGVjU3RhdGU6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIHRoaXMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0
dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVj
LCAxKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdF
eHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDIpOwogfQog
Ci1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdF
eHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVj
dG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgMyk7CiB9CiAKLUpTVmFsdWUq
IHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVj
dG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5z
bG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCA0KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29u
c3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI1
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkp
LT5nZXRCYWNrcmVmKGV4ZWMsIDUpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRv
bGxhcjYoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2ty
ZWYoZXhlYywgNik7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJu
IGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCA3
KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQ
dHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBD
b25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDgpOwogfQogCi1K
U1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBD
b25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9y
KHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgOSk7CiB9CiAKLUpTVmFsdWUqIHJl
Z0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rvcklu
cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYXNSZWdFeHBDb25zdHJ1Y3Rv
cihzbG90LnNsb3RCYXNlKCkpLT5pbnB1dCgpKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3Ry
dWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgp
KS0+bXVsdGlsaW5lKCkpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRj
aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVm
KGV4ZWMsIDApOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1
cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRMYXN0UGFyZW4oZXhl
Yyk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4g
YXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRMZWZ0Q29udGV4dChleGVj
KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJu
IGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0UmlnaHRDb250ZXh0KGV4
ZWMpOwogfQogCi12b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCit2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBsb29rdXBQdXQ8UmVnRXhwQ29uc3RydWN0b3IsIElu
dGVybmFsRnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIEV4ZWNTdGF0ZTo6cmVn
RXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwgdGhpcywgc2xvdCk7CiB9CiAKLXZvaWQgc2V0UmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldElucHV0KHZhbHVlLT50b1N0cmlu
ZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNl
dFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgYXNSZWdFeHBDb25zdHJ1Y3Rvcihi
YXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogfQpAQCAt
MzE5LDggKzMxOSw4IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1MK
IC8vIEVDTUEgMTUuMTAuNAogSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogYXJnMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYXJnMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNW
YWx1ZVB0ciBhcmcwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGFyZzEgPSBh
cmdzLmF0KGV4ZWMsIDEpOwogCiAgICAgaWYgKGFyZzAtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6
OmluZm8pKSB7CiAgICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmluZWQoKSkKQEAgLTM0OSw3ICsz
NDksNyBAQCBDb25zdHJ1Y3RUeXBlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRDb25zCiB9CiAKIC8v
IEVDTUEgMTUuMTAuMwotc3RhdGljIEpTVmFsdWUqIGNhbGxSZWdFeHBDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitz
dGF0aWMgSlNWYWx1ZVB0ciBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IGNvbnN0cnVjdFJlZ0V4cChleGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
MiArMzQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBSZWdFeHBD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFJlZ0V4cFByb3Rv
dHlwZSopOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3Ry
dWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNTMs
MTAgKzUzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE11bHRpbGluZShi
b29sKTsKICAgICAgICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdDsKIAotICAgICAgICBKU1ZhbHVl
KiBnZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25zdDsKLSAgICAgICAgSlNWYWx1
ZSogZ2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXRM
ZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogZ2V0UmlnaHRD
b250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldEJhY2tyZWYo
RXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldExhc3RQ
YXJlbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRMZWZ0Q29udGV4
dChFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRSaWdodENvbnRleHQo
RXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkBAIC02NywxMSArNjcs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxSZWdFeHBDb25zdHJ1Y3RvclBy
aXZhdGU+IGQ7CiAgICAgfTsKIAotICAgIFJlZ0V4cENvbnN0cnVjdG9yKiBhc1JlZ0V4cENvbnN0
cnVjdG9yKEpTVmFsdWUqKTsKKyAgICBSZWdFeHBDb25zdHJ1Y3RvciogYXNSZWdFeHBDb25zdHJ1
Y3RvcihKU1ZhbHVlUHRyKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0
YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCi0gICAgaW5saW5lIFJlZ0V4cENvbnN0cnVjdG9yKiBh
c1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBSZWdFeHBDb25z
dHJ1Y3RvciogYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJlJlZ0V4cENvbnN0cnVjdG9y
OjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+
KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdiwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyIHYsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkKICAgICAgICAgICAgICAgICBmaWxsQXJy
YXlJbnN0YW5jZShleGVjKTsKICAgICAgICAgICAgIEpTQXJyYXk6OnB1dChleGVjLCBwcm9wZXJ0
eU5hbWUsIHYsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdikKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobGF6eUNyZWF0aW9u
RGF0YSgpKQogICAgICAgICAgICAgICAgIGZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDEyICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTVmFsdWUq
IHJlZ0V4cE9iamVjdEdsb2JhbChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0SWdub3JlQ2FzZShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0TXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBPYmpl
Y3RTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgdm9pZCBzZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Citz
dGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RHbG9iYWwoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhw
T2JqZWN0SWdub3JlQ2FzZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RNdWx0aWxpbmUoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cE9iamVj
dExhc3RJbmRleChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CitzdGF0aWMgdm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKQEAgLTcxLDU0
ICs3MSw1NCBAQCBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAg
cmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBF
eGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RHbG9iYWwoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwT2JqZWN0
R2xvYmFsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdChzbG90LnNsb3RC
YXNlKCkpLT5yZWdFeHAoKS0+Z2xvYmFsKCkpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RJ
Z25vcmVDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdElnbm9yZUNhc2UoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1
cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSktPnJlZ0V4cCgpLT5p
Z25vcmVDYXNlKCkpOwogfQogIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0TXVsdGlsaW5lKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIHJlZ0V4cE9iamVjdE11bHRpbGluZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogeyAgICAgICAgICAgIAogICAgIHJldHVybiBq
c0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVnRXhwKCktPm11bHRp
bGluZSgpKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQ
dHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
YXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVnRXhwKCktPnBhdHRlcm4oKSk7CiB9
CiAKLUpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4
cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFzUmVn
RXhwT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSktPmxhc3RJbmRleCgpKTsKIH0KIAotdm9pZCBSZWdF
eHBPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgUmVnRXhw
T2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBsb29r
dXBQdXQ8UmVnRXhwT2JqZWN0LCBKU09iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
RXhlY1N0YXRlOjpyZWdFeHBUYWJsZShleGVjKSwgdGhpcywgc2xvdCk7CiB9CiAKLXZvaWQgc2V0
UmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAg
ICBhc1JlZ0V4cE9iamVjdChiYXNlT2JqZWN0KS0+c2V0TGFzdEluZGV4KHZhbHVlLT50b0ludGVn
ZXIoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBPYmplY3Q6OnRlc3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBSZWdFeHBPYmplY3Q6OnRlc3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc0Jv
b2xlYW4obWF0Y2goZXhlYywgYXJncykpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBPYmplY3Q6OmV4
ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBSZWdF
eHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIGlmIChtYXRjaChleGVjLCBhcmdzKSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKS0+YXJyYXlPZk1hdGNoZXMoZXhlYyk7
CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbFJlZ0V4cE9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUmVnRXhwT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChmdW5jdGlvbiktPmV4ZWMoZXhl
YywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJl
dmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHNldExhc3RJbmRleChkb3VibGUgbGFzdEluZGV4KSB7IGQtPmxhc3RJbmRleCA9IGxh
c3RJbmRleDsgfQogICAgICAgICBkb3VibGUgbGFzdEluZGV4KCkgY29uc3QgeyByZXR1cm4gZC0+
bGFzdEluZGV4OyB9CiAKLSAgICAgICAgSlNWYWx1ZSogdGVzdChFeGVjU3RhdGUqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWMoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlz
dCYpOworICAgICAgICBKU1ZhbHVlUHRyIHRlc3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYp
OworICAgICAgICBKU1ZhbHVlUHRyIGV4ZWMoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1
dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC03MCw5ICs3MCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBPd25QdHI8UmVnRXhwT2JqZWN0RGF0YT4gZDsKICAgICB9OwogCi0g
ICAgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlKik7CisgICAgUmVnRXhwT2Jq
ZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBSZWdFeHBPYmpl
Y3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBSZWdFeHBPYmpl
Y3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NF
UlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSk7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBQcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1
ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4
cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIC8vIEVDTUEgMTUuMTAuNQogCkBAIC01NSwy
OCArNTUsMjggQEAgUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUoRXhlY1N0YQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogICAgIAotSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgcmV0dXJuIGFzUmVnRXhw
T2JqZWN0KHRoaXNWYWx1ZSktPnRlc3QoZXhlYywgYXJncyk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4
cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jRXhl
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZSZWdFeHBP
YmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGFyZ3Mp
OwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4
cDsKLSAgICBKU1ZhbHVlKiBhcmcwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBh
cmcxID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGFyZzAgPSBhcmdzLmF0KGV4
ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYXJnMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgCiAg
ICAgaWYgKGFyZzAtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGlm
ICghYXJnMS0+aXNVbmRlZmluZWQoKSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1ZSogcmVnRXhw
UHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgcmVn
RXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNP
YmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS0+aXNP
YmplY3QoJlJlZ0V4cFByb3RvdHlwZTo6aW5mbykpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIE5FVkVSX0lOTElORSBK
U1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIgc3RyaW5nRnJv
bUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIFVDaGFyKiBidWYgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2MoYXJncy5z
aXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgVUNoYXIqIHAgPSBidWY7CkBAIC0zNyw3ICsz
Nyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogc3RyaW5nRnJvbUMKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhidWYsIHAgLSBidWYsIGZhbHNlKSk7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgc3Ry
aW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChMSUtFTFkoYXJncy5zaXplKCkgPT0gMSkp
CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBhcmdzLmF0KGV4
ZWMsIDApLT50b1VJbnQzMihleGVjKSk7CkBAIC03NCw3ICs3NCw3IEBAIENvbnN0cnVjdFR5cGUg
U3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS41LjEKLXN0YXRpYyBK
U1ZhbHVlKiBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbFN0
cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBib29s
IFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
KTsKIApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU1N0cmlu
ZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3RyaW5nKEpTV3JhcHBlck9iamVj
dDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlw
ZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC01OSw5ICs1OSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTU3RyaW5nKiB0b1RoaXNKU1N0cmlu
ZyhFeGVjU3RhdGUqKTsKICAgfTsKIAotICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3Qo
SlNWYWx1ZSopOworICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3QoSlNWYWx1ZVB0cik7
CiAKLSAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1ZhbHVlKiB2YWx1
ZSkKKyAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1ZhbHVlUHRyIHZh
bHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJlN0
cmluZ09iamVjdDo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RyaW5nT2Jq
ZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90
bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTVmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7IAogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzYgKzM3LDM2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFN0cmluZ1Byb3Rv
dHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQ29k
ZUF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNT
bGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY1N1YnN0cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBl
ckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0JvbGQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJdGFs
aWNzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90
b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNSZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTcGxp
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmlu
Z1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJD
YXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworCitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90
b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQm9sZChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJv
dG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1
cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQW5jaG9y
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQogCkBAIC0yMDUsMTQgKzIwNSwxNCBA
QCBzdGF0aWMgaW5saW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0IFVTCiAgICAgcmV0dXJuIENv
bGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpV
Q2hhcio+KGEuZGF0YSgpKSwgYS5zaXplKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hh
cio+KGIuZGF0YSgpKSwgYi5zaXplKCkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0aGlzVmFsdWUtPnRvVGhp
c0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNvdXJjZVZhbC0+
dmFsdWUoKTsKIAotICAgIEpTVmFsdWUqIHBhdHRlcm4gPSBhcmdzLmF0KGV4ZWMsIDApOworICAg
IEpTVmFsdWVQdHIgcGF0dGVybiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAKLSAgICBKU1ZhbHVlKiBy
ZXBsYWNlbWVudCA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciByZXBsYWNlbWVu
dCA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgVVN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHJlcGxhY2VtZW50
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdAogICAgICAgICArIHNvdXJjZS5zdWJzdHIobWF0
Y2hQb3MgKyBtYXRjaExlbikpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVlT2YuCiAKQEAgLTMyMywxMSArMzIzLDExIEBAIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGEKICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFy
QXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsK
ICAgICB1bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaWYg
KEpTSW1tZWRpYXRlOjppc051bWJlcihhMCkpIHsKICAgICAgICAgdWludDMyX3QgaTsKICAgICAg
ICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoYTAsIGkpICYmIGkgPCBsZW4pCkBAIC0zNDAs
MTEgKzM0MCwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlCiAg
ICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ2hh
ckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1Ro
aXNTdHJpbmcoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5zaXplKCk7Ci0gICAgSlNWYWx1
ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4
ZWMsIDApOwogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYTApKSB7CiAgICAgICAgIHVp
bnQzMl90IGk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKGEwLCBpKSAmJiBp
IDwgbGVuKQpAQCAtMzU3LDcgKzM1Nyw3IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJD
b2RlQXQoRXhlY1MKICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiB9CiAKLUpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmND
b25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlz
U3RyaW5nKGV4ZWMpOwogCkBAIC0zNjcsMTMgKzM2NywxMyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNDb25jYXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQog
Ci1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsK
IAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9
IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgVVN0cmluZyB1MiA9
IGEwLT50b1N0cmluZyhleGVjKTsKICAgICBkb3VibGUgZHBvcyA9IGExLT50b0ludGVnZXIoZXhl
Yyk7CiAgICAgaWYgKGRwb3MgPCAwKQpAQCAtMzgzLDEzICszODMsMTMgQEAgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBz
LmZpbmQodTIsIHN0YXRpY19jYXN0PGludD4oZHBvcykpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpT
VmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQo
ZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNW
YWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKICAgICBVU3RyaW5nIHUyID0gYTAtPnRv
U3RyaW5nKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEtPnRvSW50ZWdlclByZXNlcnZlTmFO
KGV4ZWMpOwpAQCAtNDAwLDExICs0MDAsMTEgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFz
dEluZGV4T2YoRXhlYwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBzLnJmaW5kKHUyLCBzdGF0
aWNfY2FzdDxpbnQ+KGRwb3MpKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKIAot
ICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0g
YXJncy5hdChleGVjLCAwKTsKIAogICAgIFVTdHJpbmcgdSA9IHM7CiAgICAgUmVmUHRyPFJlZ0V4
cD4gcmVnOwpAQCAtNDUxLDExICs0NTEsMTEgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTWF0
Y2goRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBsaXN0KTsKIH0K
IAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3Mu
YXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAKICAg
ICBVU3RyaW5nIHUgPSBzOwogICAgIFJlZlB0cjxSZWdFeHA+IHJlZzsKQEAgLTQ3NiwxMyArNDc2
LDEzIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgcG9zKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2xp
Y2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwog
ICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVj
LCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0
ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhl
YywgMSk7CiAKICAgICAvLyBUaGUgYXJnIHByb2Nlc3NpbmcgaXMgdmVyeSBtdWNoIGxpa2UgQXJy
YXlQcm90b0Z1bmM6OlNsaWNlCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAtPnRvSW50ZWdlcihleGVj
KTsKQEAgLTUwMCwxMiArNTAwLDEyIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NsaWNlKEV4
ZWNTdGF0ZSoKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAotSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9U
aGlzU3RyaW5nKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwot
ICAgIEpTVmFsdWUqIGExID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0g
YXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChleGVjLCAxKTsK
IAogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYyk7CiAgICAg
dW5zaWduZWQgaSA9IDA7CkBAIC01NjIsMTMgKzU2MiwxMyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNTcGxpdChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3Rv
RnVuY1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1
ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0gYXJncy5hdChleGVj
LCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVl
UHRyIGExID0gYXJncy5hdChleGVjLCAxKTsKIAogICAgIGRvdWJsZSBzdGFydCA9IGEwLT50b0lu
dGVnZXIoZXhlYyk7CiAgICAgZG91YmxlIGxlbmd0aCA9IGExLT5pc1VuZGVmaW5lZCgpID8gbGVu
IDogYTEtPnRvSW50ZWdlcihleGVjKTsKQEAgLTU4NCwxMyArNTg0LDEzIEBAIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUKICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhl
Yywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aCkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBp
bnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7
Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdzLmF0KGV4ZWMsIDEpOworICAgIEpTVmFsdWVQdHIgYTAg
PSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTEgPSBhcmdzLmF0KGV4ZWMsIDEp
OwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGRvdWJsZSBl
bmQgPSBhMS0+dG9OdW1iZXIoZXhlYyk7CkBAIC02MTYsNyArNjE2LDcgQEAgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdAogICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVj
LCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZW5kKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCkpOwogfQogCi1KU1ZhbHVlKiBzdHJp
bmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5j
VG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+
dG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVl
KCk7CkBAIC02NTAsNyArNjUwLDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNh
c2UoRXhlYwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNl
QnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
VG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUtPnRvVGhpc0pTU3Ry
aW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZSgpOwpAQCAtNjg0
LDk1ICs2ODQsOTUgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlYwog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCks
IGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29t
cGFyZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIDApOwogCiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNT
dHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpT
VmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBsb2NhbGVDb21wYXJlKHMsIGEwLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JpZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMp
OwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGJpZz4iICsgcyArICI8L2JpZz4iKTsKIH0K
IAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmlu
Z1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c21hbGw+IiAr
IHMgKyAiPC9zbWFsbD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsICI8Ymxpbms+IiArIHMgKyAiPC9ibGluaz4iKTsKIH0KIAotSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQm9sZChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMp
OwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGI+IiArIHMgKyAiPC9iPiIpOwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJv
dG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhp
c1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjx0dD4iICsgcyArICI8
L3R0PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsICI8aT4iICsgcyArICI8L2k+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N0
cmlrZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIgKyBzICsgIjwvc3RyaWtlPiIpOwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3Rv
RnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN1Yj4iICsgcyArICI8L3N1
Yj4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0
ciBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxzdXA+
IiArIHMgKyAiPC9zdXA+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMp
OwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEw
ID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxmb250IGNv
bG9yPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9
CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiArIGEwLT50b1N0cmluZyhl
eGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNBbmNob3Io
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5n
KGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVl
UHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxh
IG5hbWU9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvYT4iKTsKIH0K
IAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhl
YywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsICI8YSBocmVmPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4i
ICsgcyArICI8L2E+Iik7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1
bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU1ZhbHVl
KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKK1N0cnVjdHVyZTo6U3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAg
OiBtX3R5cGVJbmZvKHR5cGVJbmZvKQogICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQogICAg
ICwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbigwKQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OnJlbW92ZVAKICAgICByZXR1cm4gdHJhbnNpdGlvbi5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmNoYW5nZVBy
b3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUqIHByb3RvdHlw
ZSkKK1Bhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWVQdHIgcHJvdG90eXBlKQogewogICAg
IFJlZlB0cjxTdHJ1Y3R1cmU+IHRyYW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBlLCBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkpOwogCkBAIC01MzksNyArNTM5LDcgQEAgU3RydWN0dXJlQ2hhaW4qIFN0
cnVjdHVyZTo6Y3JlYXRlQ2FjaGVkUAogICAgIEFTU0VSVCh0eXBlSW5mbygpLnR5cGUoKSA9PSBP
YmplY3RUeXBlKTsKICAgICBBU1NFUlQoIW1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogCi0gICAg
SlNWYWx1ZSogcHJvdG90eXBlID0gc3RvcmVkUHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBw
cm90b3R5cGUgPSBzdG9yZWRQcm90b3R5cGUoKTsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKHByb3RvdHlwZSkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBTdHJ1Y3R1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHJ1Y3R1
cmU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlKEpTVmFsdWUqIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZShKU1ZhbHVlUHRyIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZv
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cnVjdHVyZShw
cm90b3R5cGUsIHR5cGVJbmZvKSk7CiAgICAgICAgIH0KQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gYWRkUHJvcGVy
dHlUcmFuc2l0aW9uKFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpOwogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUoU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBzaXplX3QmIG9mZnNldCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgc2l6ZV90JiBvZmZzZXQpOwotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiwg
SlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFN0cnVjdHVyZSosIEpTVmFsdWVQdHIgcHJvdG90
eXBlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJU
cmFuc2l0aW9uKFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IHRvRGljdGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gZnJvbURpY3Rpb25hcnlUcmFuc2l0aW9uKFN0cnVjdHVyZSop
OwpAQCAtODAsMTQgKzgwLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGVzZSBz
aG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKICAgICAgICAgc2l6ZV90IGFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgc2l6ZV90IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5z
aXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgdm9pZCBzZXRQ
cm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihKU1ZhbHVlKiBwcm90b3R5cGUpIHsgbV9wcm90b3R5
cGUgPSBwcm90b3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNp
dGlvbihKU1ZhbHVlUHRyIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZSA9IHByb3RvdHlwZTsgfQog
CiAgICAgICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9pc0RpY3Rpb25h
cnk7IH0KIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IHJldHVy
biBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogc3RvcmVkUHJvdG90eXBlKCkgY29u
c3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KLSAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlRm9y
TG9va3VwKEV4ZWNTdGF0ZSopOyAKKyAgICAgICAgSlNWYWx1ZVB0ciBzdG9yZWRQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIHByb3Rv
dHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKTsgCiAKICAgICAgICAgU3RydWN0dXJlKiBwcmV2aW91
c0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsgfQogCkBAIC0xMDksNyArMTA5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydHlUYWJsZSA/ICFtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50IDogbV9vZmZz
ZXQgPT0gbm9PZmZzZXQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJik7CisgICAgICAgIFN0cnVjdHVyZShKU1Zh
bHVlUHRyIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKIAogICAgICAgICBzaXplX3QgcHV0
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAg
ICAgICAgIHNpemVfdCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKQEAg
LTE1Myw3ICsxNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5
cGVJbmZvOwogCi0gICAgICAgIEpTVmFsdWUqIG1fcHJvdG90eXBlOworICAgICAgICBKU1ZhbHVl
UHRyIG1fcHJvdG90eXBlOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlQ2hhaW4+IG1fY2FjaGVk
UHJvdG90eXBlQ2hhaW47CiAKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsK
SW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDEtMDQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBKU1ZhbHVlKiB3
aXRoIG5ldyB3cmFwcGVyIGNsYXNzLCBKU1ZhbHVlUHRyLgorICAgICAgICBTZWUgSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorCisgICAgICAg
ICogSlNPYmplY3QuY3BwOgorICAgICAgICAobmF0aXZlQ2FsbEZ1bmN0aW9uKToKKyAgICAgICAg
KiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9KU09iamVjdCk6CisgICAgICAgIChK
U09iamVjdEtKU1ZhbHVlKToKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbCk6Cisg
ICAgICAgIChLSlNWYWx1ZVRvQ0ZUeXBlKToKKyAgICAgICAgKiBKU1V0aWxzLmg6CisgICAgICAg
ICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpTVmFsdWVX
cmFwcGVyKToKKyAgICAgICAgKEpTVmFsdWVXcmFwcGVyOjpHZXRWYWx1ZSk6CisgICAgICAgIChK
U1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDb3B5UHJvcGVydHkpOgorICAgICAgICAoSlNWYWx1ZVdy
YXBwZXI6OkpTT2JqZWN0U2V0UHJvcGVydHkpOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpT
T2JqZWN0Q2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5oOgorICAgICAg
ICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6Y2FsbEFzRnVu
Y3Rpb24pOgorICAgICAgICAoVXNlck9iamVjdEltcDo6dXNlck9iamVjdEdldHRlcik6CisgICAg
ICAgIChVc2VyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoVXNlck9i
amVjdEltcDo6cHV0KToKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6OnRvUHJpbWl0aXZlKToKKyAg
ICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorCiAyMDA4LTEyLTE1ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDogSmF2YVNj
cmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU1VzZXJPYmplY3Q6OlNldFBy
b3BlcnR5KENGU3RyaW5nUgogCiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiAgbmF0aXZlQ2FsbEZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlKiAg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgIG5hdGl2
ZUNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwg
SlNWYWx1ZVB0ciAgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wKj4oZnVuY3Rpb25PYmplY3QpLT5jYWxsQXNGdW5j
dGlvbihleGVjLCBhc09iamVjdCh0aGlzVmFsdWUpLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBPYmplY3RJbXBMaXN0IHsKICAgICBD
RlR5cGVSZWYgZGF0YTsKIH07CiAKLXN0YXRpYyBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUlu
dGVybmFsKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wTGlzdCog
aW5JbXBzKTsKK3N0YXRpYyBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFs
dWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpOwog
c3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KCk7CiAKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCw3ICsxMDAsNyBAQCBDRlN0cmluZ1JlZiBJZGVudGlm
aWVyVG9DRlN0cmluZyhjb25zdCBJCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBLSlNWYWx1ZVRv
SlNPYmplY3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUpTVXNlck9iamVjdCogS0pTVmFsdWVUb0pT
T2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYykKK0pTVXNlck9iamVjdCog
S0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjKQog
ewogICAgIEpTVXNlck9iamVjdCogcmVzdWx0ID0gMDsKIApAQCAtMTI2LDExICsxMjYsMTEgQEAg
SlNVc2VyT2JqZWN0KiBLSlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1ZQogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogLy8gSlNPYmplY3RLSlNWYWx1ZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSlNWYWx1ZSog
SlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKK0pTVmFsdWVQdHIgSlNPYmplY3RL
SlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKIHsKICAgICBKU0xvY2sgbG9jayh0cnVlKTsKIAot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChwdHIpCiAgICAgewogICAgICAgICBib29sIGhh
bmRsZWQgPSBmYWxzZTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBKU1ZhbHVlKiBKU09iamVjdEtKU1Zh
bHVlKEpTVXNlck9iamVjdCogCiAvLyBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBy
ZXR1cm5lZCBDRlR5cGVSZWYKLUNGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNW
YWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpCitD
RlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpCiB7CiAgICAgaWYgKCFpblZhbHVl
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTM1OCw3ICszNTgsNyBAQCBDRlR5cGVSZWYgS0pTVmFs
dWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAgICAgcmV0dXJuIDA7CiB9CiAKLUNGVHlwZVJlZiBL
SlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYykKK0NGVHlw
ZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVj
KQogewogICAgIHJldHVybiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoaW5WYWx1ZSwgZXhlYywg
MCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdEdsdWUvSlNVdGlscy5oCShyZXZpc2lvbiAzOTU5MykKKysrIEphdmFTY3JpcHRHbHVl
L0pTVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkph
dmFTY3JpcHRHbHVlLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db2xsZWN0b3IuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24u
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2Jq
ZWN0Lmg+CkBAIC01NCw5ICs1NCw5IEBAIFVTdHJpbmcgQ0ZTdHJpbmdUb1VTdHJpbmcoQ0ZTdHJp
bmdSZWYgaW4KIENGU3RyaW5nUmVmIFVTdHJpbmdUb0NGU3RyaW5nKGNvbnN0IFVTdHJpbmcmIGlu
VVN0cmluZyk7CiBJZGVudGlmaWVyIENGU3RyaW5nVG9JZGVudGlmaWVyKENGU3RyaW5nUmVmIGlu
Q0ZTdHJpbmcsIEV4ZWNTdGF0ZSopOwogQ0ZTdHJpbmdSZWYgSWRlbnRpZmllclRvQ0ZTdHJpbmco
Y29uc3QgSWRlbnRpZmllciYgaW5JZGVudGlmaWVyKTsKLUpTVXNlck9iamVjdCAqS0pTVmFsdWVU
b0pTT2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYyk7Ci1DRlR5cGVSZWYg
S0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlKiBpblZhbHVlLCBFeGVjU3RhdGUgKmV4ZWMpOwotSlNW
YWx1ZSogSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cik7CitKU1VzZXJPYmplY3Qg
KktKU1ZhbHVlVG9KU09iamVjdChKU1ZhbHVlUHRyIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYyk7
CitDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlUHRyIGluVmFsdWUsIEV4ZWNTdGF0
ZSAqZXhlYyk7CitKU1ZhbHVlUHRyIEpTT2JqZWN0S0pTVmFsdWUoSlNVc2VyT2JqZWN0KiBwdHIp
OwogQ0ZUeXBlUmVmIEdldENGTnVsbCh2b2lkKTsKIAogaW5saW5lIENGVHlwZVJlZiBSZXRhaW5D
RlR5cGUoQ0ZUeXBlUmVmIHgpIHsgaWYgKHgpIHggPSBDRlJldGFpbih4KTsgcmV0dXJuIHg7IH0K
SW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2
YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KICNp
bmNsdWRlIDxwdGhyZWFkLmg+CiAKLUpTVmFsdWVXcmFwcGVyOjpKU1ZhbHVlV3JhcHBlcihKU1Zh
bHVlKiBpblZhbHVlKQorSlNWYWx1ZVdyYXBwZXI6OkpTVmFsdWVXcmFwcGVyKEpTVmFsdWVQdHIg
aW5WYWx1ZSkKICAgICA6IGZWYWx1ZShpblZhbHVlKQogewogfQpAQCAtNDEsNyArNDEsNyBAQCBK
U1ZhbHVlV3JhcHBlcjo6fkpTVmFsdWVXcmFwcGVyKCkKIHsKIH0KIAotSlNWYWx1ZSogSlNWYWx1
ZVdyYXBwZXI6OkdldFZhbHVlKCkKK0pTVmFsdWVQdHIgSlNWYWx1ZVdyYXBwZXI6OkdldFZhbHVl
KCkKIHsKICAgICByZXR1cm4gZlZhbHVlLmdldCgpOwogfQpAQCAtMTA4LDcgKzEwOCw3IEBAIEpT
T2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHkKICAgICBpZiAocHRyKQogICAg
IHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCk7
Ci0gICAgICAgIEpTVmFsdWUqIHByb3BWYWx1ZSA9IHB0ci0+R2V0VmFsdWUoKS0+dG9PYmplY3Qo
ZXhlYyktPmdldChleGVjLCBDRlN0cmluZ1RvSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUsIGV4ZWMp
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm9wVmFsdWUgPSBwdHItPkdldFZhbHVlKCktPnRvT2Jq
ZWN0KGV4ZWMpLT5nZXQoZXhlYywgQ0ZTdHJpbmdUb0lkZW50aWZpZXIocHJvcGVydHlOYW1lLCBl
eGVjKSk7CiAgICAgICAgIEpTVmFsdWVXcmFwcGVyKiB3cmFwcGVyVmFsdWUgPSBuZXcgSlNWYWx1
ZVdyYXBwZXIocHJvcFZhbHVlKTsKIAogICAgICAgICBKU09iamVjdENhbGxCYWNrcyBjYWxsQmFj
a3M7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RTZXRQ
cm9wZXJ0eQogICAgIGlmIChwdHIpCiAgICAgewogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
ZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKTsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBKU09i
amVjdEtKU1ZhbHVlKChKU1VzZXJPYmplY3QqKWpzVmFsdWUpOworICAgICAgICBKU1ZhbHVlUHRy
IHZhbHVlID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kilqc1ZhbHVlKTsKICAgICAg
ICAgSlNPYmplY3QgKm9ialZhbHVlID0gcHRyLT5HZXRWYWx1ZSgpLT50b09iamVjdChleGVjKTsK
ICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIG9ialZhbHVlLT5wdXQoZXhl
YywgQ0ZTdHJpbmdUb0lkZW50aWZpZXIocHJvcGVydHlOYW1lLCBleGVjKSwgdmFsdWUsIHNsb3Qp
OwpAQCAtMTQ4LDcgKzE0OCw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVj
dENhbGwKICAgICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdldFRocmVhZEdsb2JhbEV4
ZWNTdGF0ZSgpOwogCi0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gSlNPYmplY3RLSlNWYWx1ZSgo
SlNVc2VyT2JqZWN0Kil0aGlzT2JqKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IEpTT2Jq
ZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopdGhpc09iaik7CiAgICAgICAgIEpTT2JqZWN0ICpr
c2pUaGlzT2JqID0gdmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICBKU09iamVjdCAqb2Jq
VmFsdWUgPSBwdHItPkdldFZhbHVlKCktPnRvT2JqZWN0KGV4ZWMpOwogCkBAIC0xNTcsNyArMTU3
LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbAogICAgICAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKQogICAgICAgICB7CiAgICAgICAg
ICAgICBKU09iamVjdFJlZiBqc0FyZyA9IChKU09iamVjdFJlZilDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGFyZ3MsIGkpOwotICAgICAgICAgICAgSlNWYWx1ZSoga2dzQXJnID0gSlNPYmplY3RLSlNW
YWx1ZSgoSlNVc2VyT2JqZWN0Kilqc0FyZyk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIGtnc0Fy
ZyA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopanNBcmcpOwogICAgICAgICAgICAg
bGlzdEFyZ3MuYXBwZW5kKGtnc0FyZyk7CiAgICAgICAgIH0KIApAQCAtMTY1LDcgKzE2NSw3IEBA
IEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENhbGwKICAgICAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBvYmpWYWx1ZS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIEpTVmFsdWUqICByZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywgb2JqVmFsdWUsIGNhbGxUeXBl
LCBjYWxsRGF0YSwga3NqVGhpc09iaiwgbGlzdEFyZ3MpOworICAgICAgICBKU1ZhbHVlUHRyICBy
ZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywgb2JqVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwga3Nq
VGhpc09iaiwgbGlzdEFyZ3MpOwogICAgICAgICBKU1ZhbHVlV3JhcHBlciogd3JhcHBlclZhbHVl
ID0gbmV3IEpTVmFsdWVXcmFwcGVyKHJlc3VsdFZhbHVlKTsKICAgICAgICAgSlNPYmplY3RDYWxs
QmFja3MgY2FsbEJhY2tzOwogICAgICAgICBHZXRKU09iZWN0Q2FsbEJhY2tzKGNhbGxCYWNrcyk7
CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNj
cmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTUgKzM1LDE1
IEBACiAKIGNsYXNzIEpTVmFsdWVXcmFwcGVyIHsKIHB1YmxpYzoKLSAgICBKU1ZhbHVlV3JhcHBl
cihKU1ZhbHVlKik7CisgICAgSlNWYWx1ZVdyYXBwZXIoSlNWYWx1ZVB0cik7CiAgICAgdmlydHVh
bCB+SlNWYWx1ZVdyYXBwZXIoKTsKIAogICAgIHN0YXRpYyB2b2lkIEdldEpTT2JlY3RDYWxsQmFj
a3MoSlNPYmplY3RDYWxsQmFja3MmIGNhbGxCYWNrcyk7CiAKLSAgICBKU1ZhbHVlKiBHZXRWYWx1
ZSgpOworICAgIEpTVmFsdWVQdHIgR2V0VmFsdWUoKTsKIAogcHJpdmF0ZToKLSAgICBQcm90ZWN0
ZWRQdHI8SlNWYWx1ZT4gZlZhbHVlOworICAgIFByb3RlY3RlZEpTVmFsdWVQdHIgZlZhbHVlOwog
ICAgIAogICAgIHN0YXRpYyB2b2lkIEpTT2JqZWN0RGlzcG9zZSh2b2lkICpkYXRhKTsKICAgICBz
dGF0aWMgQ0ZBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKHZvaWQgKmRhdGEpOwpJ
bmRleDogSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgSmF2YVNj
cmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkg
QEAgQ2FsbFR5cGUgVXNlck9iamVjdEltcDo6Z2V0Q2FsbERhdGEoQ2FsbAogICAgIHJldHVybiBm
SlNVc2VyT2JqZWN0ID8gZkpTVXNlck9iamVjdC0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpIDogQ2Fs
bFR5cGVOb25lOwogfQogCi1KU1ZhbHVlKiBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQor
SlNWYWx1ZVB0ciBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQogewotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwogICAgIEpTVXNlck9iamVjdCoganNUaGlzT2JqID0gS0pTVmFsdWVUb0pTT2JqZWN0
KHRoaXNPYmosIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsKICAgICAgICAgQ0ZJbmRleCBh
cmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgVXNlck9iamVj
dEltcDo6Z2V0UHJvcGVydHlOYW1lcyhFeGUKICAgICBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1l
cyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAotSlNWYWx1ZSogIFVzZXJPYmplY3RJbXA6OnVz
ZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFVzZXJPYmplY3RJbXA6OnVz
ZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVXNlck9iamVjdEltcCAqdGhpc09i
aiA9IHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAgKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSk7CiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90IHNob3VsZCBoYXZlIGd1YXJkZWQgYWdhaW5z
dCBhIG51bGwgZkpTVXNlck9iamVjdC4KQEAgLTEyMSw3ICsxMjEsNyBAQCBKU1ZhbHVlKiAgVXNl
ck9iamVjdEltcDo6dXNlck9iamVjdEdldHRlCiAgICAgQ0ZTdHJpbmdSZWYgY2ZQcm9wTmFtZSA9
IElkZW50aWZpZXJUb0NGU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgSlNVc2VyT2JqZWN0ICpq
c1Jlc3VsdCA9IHRoaXNPYmotPmZKU1VzZXJPYmplY3QtPkNvcHlQcm9wZXJ0eShjZlByb3BOYW1l
KTsKICAgICBSZWxlYXNlQ0ZUeXBlKGNmUHJvcE5hbWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IEpTT2JqZWN0S0pTVmFsdWUoanNSZXN1bHQpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gSlNP
YmplY3RLSlNWYWx1ZShqc1Jlc3VsdCk7CiAgICAganNSZXN1bHQtPlJlbGVhc2UoKTsKIAogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBVc2VyT2JqZWN0SW1wOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgICAgICBqc1Jlc3VsdC0+UmVsZWFzZSgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBKU1ZhbHVlKiBranNWYWx1ZSA9
IHRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIGtqc1ZhbHVlID0gdG9Qcmlt
aXRpdmUoZXhlYyk7CiAgICAgICAgIGlmICgha2pzVmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKICAgICAgICAgICAgIEpTT2JqZWN0ICpranNPYmplY3QgPSBranNWYWx1ZS0+dG9PYmplY3Qo
ZXhlYyk7CiAgICAgICAgICAgICBpZiAoa2pzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29sIFVzZXJPYmplY3RJ
bXA6OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBVc2VyT2JqZWN0
SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgVXNlck9iamVjdEltcDo6cHV0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZh
bHVlLCBpbnQgYXR0cikKIHsKICAgICBpZiAoIWZKU1VzZXJPYmplY3QpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2OSw5ICsxNjksOSBAQCBKU1VzZXJPYmplY3QqIFVzZXJPYmplY3RJbXA6OkdldEpT
VXNlck9iCiAgICAgcmV0dXJuIGZKU1VzZXJPYmplY3Q7CiB9CiAKLUpTVmFsdWUqIFVzZXJPYmpl
Y3RJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlKSBjb25zdAorSlNWYWx1
ZVB0ciBVc2VyT2JqZWN0SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVHlwZSkg
Y29uc3QKIHsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICBKU1VzZXJPYmplY3QqIGpzT2JqUHRy
ID0gS0pTVmFsdWVUb0pTT2JqZWN0KHRvT2JqZWN0KGV4ZWMpLCBleGVjKTsKICAgICBDRlR5cGVS
ZWYgY2ZWYWx1ZSA9IGpzT2JqUHRyID8ganNPYmpQdHItPkNvcHlDRlZhbHVlKCkgOiAwOwogICAg
IGlmIChjZlZhbHVlKSB7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCShyZXZpc2lvbiAzOTU5
MykKKysrIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTEgKzQ2LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5h
bWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKLSAgICB2aXJ0dWFsIEpTVmFs
dWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNv
bnN0IEFyZ0xpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdz
KTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKIAotICAgIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpT
VHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBKU1ZhbHVl
UHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVj
aWZpZWRUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVj
KSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJsaWM6CiAKICAgICBKU1VzZXJPYmplY3QgKkdl
dEpTVXNlck9iamVjdCgpIGNvbnN0OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogdXNl
ck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHVzZXJPYmplY3RH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpTVXNlck9iamVjdDsKIH07Cklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDU5NyBAQAorMjAwOS0wMS0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJhY2xvdWdo
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIEpTVmFsdWUqIHdpdGggbmV3IHdyYXBwZXIgY2xhc3Ms
IEpTVmFsdWVQdHIuCisgICAgICAgIFNlZSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgZm9yIG1v
cmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F0dHJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjpzZXRWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjdXN0b21QdXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3Vz
dG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVsQXJyYXk6OmdldEJ5SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNQaXhlbEFycmF5OjppbmRleFNldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxDYW52
YXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpmaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmZpbGxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6dHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDbGlwYm9hcmQ6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBi
b2FyZDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6c2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlND
b25zb2xlOjpwcm9maWxlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tUG9zaXRpb25DYWxsYmFj
azo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFN0
YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENh
bGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5k
bGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b1ZvaWRDYWxsYmFjayk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01B
cHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNo
ZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRk
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6
OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ09yTnVsbCk6CisgICAgICAgIChXZWJD
b3JlOjpqc093bmVkU3RyaW5nT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nT3JV
bmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPckZhbHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29y
ZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydEN1cnJlbnRFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2JqZWN0V3JhcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpnZXRET01Ob2RlV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpTRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5k
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9i
YWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6c2hvd01vZGFsRGlhbG9nKToKKyAgICAgICAgKGpzRE9NV2lu
ZG93QmFzZUNyeXB0byk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VFdmVudCk6CisgICAgICAg
IChqc0RPTVdpbmRvd0Jhc2VJbWFnZSk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VNZXNzYWdl
Q2hhbm5lbCk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VPcHRpb24pOgorICAgICAgICAoanNE
T01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoanNET01XaW5kb3dCYXNlQXVk
aW8pOgorICAgICAgICAoanNET01XaW5kb3dCYXNlV29ya2VyKToKKyAgICAgICAgKGpzRE9NV2lu
ZG93QmFzZVhTTFRQcm9jZXNzb3IpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlRXZlbnQp
OgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlQXVkaW8pOgorICAgICAgICAoc2V0SlNET01X
aW5kb3dCYXNlSW1hZ2UpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5u
ZWwpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlT3B0aW9uKToKKyAgICAgICAgKHNldEpT
RE9NV2luZG93QmFzZVdvcmtlcik6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRw
UmVxdWVzdCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2hpbGRGcmFtZUdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6Y2xlYXIpOgorICAgICAgICAod2luZG93UHJvdG9GdW5jT3Blbik6CisgICAgICAgICh3
aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAod2luZG93UHJvdG9GdW5j
Tm90SW1wbGVtZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpzZXRS
ZXR1cm5WYWx1ZVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjppbnN0
YWxsVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNET01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3c6Omxvb2t1cFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnBvc3RNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRpbWVvdXRPckludGVydmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpjbGVhclRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OnNldEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpjbGVhckludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphdG9iKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvRE9NV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvdzo6Y3VzdG9tUHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpwdXRXaXRoQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6bG9va3VwU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OmxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6
OnNldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVk
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpldmVudFBhcmFtZXRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZl
bnRMaXN0ZW5lcjo6cGFyc2VDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFz
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNH
ZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1M
QWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFwcGxldEVsZW1lbnQ6OmN1
c3RvbVB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
bEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Om5h
bWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6aXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OmFsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxEb2N1bWVudDo6c2V0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3Vt
ZW50OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6d3JpdGVsbik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TEVtYmVkRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1M
Rm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRm9ybUVsZW1l
bnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldFNy
Yyk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
T2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9iamVj
dEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb246OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRpb25zQ29sbGVj
dGlvbjo6aW5kZXhTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb246OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZWxlY3RJbmRleFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQmFja0Z1
bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGb3J3YXJk
RnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0dvRnVu
Y3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpjdXN0b21QdXQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6Ondy
YXApOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjpwcmVwYXJl
SW5jb21pbmdWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RX
cmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6Ondy
YXBPdXRnb2luZ1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxi
YWNrV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxiYWNrV3Jh
cHBlcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
cjo6cHJlcGFyZUluY29taW5nVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yQ2FsbGJhY2tXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxi
YWNrV3JhcHBlcjo6d3JhcE91dGdvaW5nVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFT
Y3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSmF2YVNjcmlw
dENhbGxGcmFtZTo6dGhpc09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpzY29wZUNoYWluKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpjdXN0b21QdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJlZik6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhvc3RuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0
U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xv
Y2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6YXNzaWduKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnRvU3RyaW5nKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2Fn
ZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBv
cnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNaW1lVHlwZUFy
cmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWltZVR5cGVBcnJheTo6bmFtZUdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVNYXA6Om5hbWVHZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU05h
bWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5lZWRzWW91VHVi
ZVF1aXJrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTmF2aWdhdG9yOjphcHBWZXJzaW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNOb2RlOjppbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjpyZXBsYWNl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpKU05vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05v
ZGVGaWx0ZXJDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvTm9kZUZpbHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
bE5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNQbHVnaW5DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW46Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0R2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpy
dW50aW1lT2JqZWN0Q3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxQbHVnaW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpoYXNJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlcjo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0SlNSR0JDb2xvcik6CisgICAgICAgIChqc1JHQkNvbG9yUmVk
KToKKyAgICAgICAgKGpzUkdCQ29sb3JHcmVlbik6CisgICAgICAgIChqc1JHQkNvbG9yQmx1ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNSR0JDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
SlNSR0JDb2xvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxSZXN1
bHRTZXRSb3dMaXN0OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0
aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1
dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjpyZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OmludmVy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR01hdHJpeDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdN
YXRyaXg6OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6
cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjpmbGlwWCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR01hdHJpeDo6ZmxpcFkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6
OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpza2V3WSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0
aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRo
U2VnTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlz
dDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjphcHBl
bmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50TGlzdEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zmlu
aXNoU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0OjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1BvaW50TGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlz
dDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmFwcGVuZEl0ZW0pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5z
Zm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFu
c2Zvcm1MaXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9y
bUxpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0
OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
dG9yYWdlOjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3R5bGVT
aGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVGV4dEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6
Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Omxhc3RDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJl
ZVdhbGtlcjo6bmV4dE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0QmFzZTo6cHV0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29udGV4dDo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRl
eHQ6OnNldFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjphZGRFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNY
TUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0
OjpzZXRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6
OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VI
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVz
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJh
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0Rv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2No
ZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZh
bHVlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmlzTnVsbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNVbmRlZmluZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1
ZTo6U2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmpzVmFsdWUp
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAo
LVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRoQXJndW1lbnRzOl0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2Jq
ZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6
XSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICog
YnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6Cisg
ICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAg
KF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAgICAo
X05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFu
Y2U6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OnZh
bHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlk
Z2UvYy9jX3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1
ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVl
VG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY19ydW50aW1lLmg6CisgICAgICAgICog
YnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRW
YWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuaDoKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OnN0cmlu
Z1ZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAo
SmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjppbnZv
a2VNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUpOgorICAgICAg
ICAoSmF2YUluc3RhbmNlOjp2YWx1ZU9mKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9pbnN0
YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lmg6CisgICAgICAgICog
YnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmNhbGwp
OgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpldmFsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6
Z2V0TWVtYmVyKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Z2V0U2xvdCk6CisgICAgICAgIChK
YXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCk6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfb2Jq
Yy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbCk6CisgICAgICAg
ICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6CisgICAgICAgIChKYXZhQXJyYXk6OmNvbnZl
cnRKT2JqZWN0VG9BcnJheSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9t
SW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAg
ICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKEph
dmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKEphdmFBcnJheTo6c2V0VmFs
dWVBdCk6CisgICAgICAgIChKYXZhQXJyYXk6OnZhbHVlQXQpOgorICAgICAgICAqIGJyaWRnZS9q
bmkvam5pX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUpOgorICAgICAg
ICAqIGJyaWRnZS9qbmkvam5pX3V0aWxpdHkuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9XZWJT
Y3JpcHRPYmplY3QuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmg6CisgICAg
ICAgICogYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Ok9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
aW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAg
ICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNl
OjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFsdWVP
ZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKToKKyAgICAg
ICAgKE9iamNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpu
dW1iZXJWYWx1ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
cnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1w
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5t
bToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNBcnJheTo6c2V0VmFsdWVBdCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpPYmpjQXJyYXk6OnZhbHVlQXQpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Y2FsbE9iakNGYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFs
bGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y191dGlsaXR5Lmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9ydW50
aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpnZXRWYWx1ZU9mRmll
bGQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZCk6
CisgICAgICAgICogYnJpZGdlL3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNs
YXNzOjpmYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6
Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3Rh
bmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
SW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJbnN0
YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAg
ICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6OlJ1
bnRpbWVBcnJheTo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OnB1
dCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UnVu
dGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX21l
dGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcik6Cisg
ICAgICAgIChKU0M6OmNhbGxSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9tZXRob2QuaDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpS
dW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcik6CisgICAgICAgIChKU0M6OlJ1
bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVj
dEltcDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6cHV0
KToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpjYWxsUnVudGltZUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6UnVudGltZU9iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlTm9k
ZS5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorCiAyMDA5LTAxLTA0ICBEYXZpZCBL
aWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgaW5zdGFsbCAqLmlk
bCBhbmQgKi5pbiBmaWxlcyBhcyByZXNvdXJjZXMKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNBdHRyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0
dHJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBKU0F0dHI6OnNl
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTQXR0cjo6c2V0
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEF0dHIqIGlt
cCA9IHN0YXRpY19jYXN0PEF0dHIqPihpbXBsKCkpOwogICAgIFN0cmluZyBhdHRyVmFsdWUgPSB2
YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyAr
NDksNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDU1NSdWxlKiBydWxlKQorSlNWYWx1ZVB0ciB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NTUnVsZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246
OmNhbkdldEl0ZW1zRgogCiAvLyBGSVhNRTogWW91IGNhbiBnZXQgdGhlc2UgcHJvcGVydGllcywg
YW5kIHNldCB0aGVtIChzZWUgY3VzdG9tUHV0IGJlbG93KSwKIC8vIGJ1dCB5b3Ugc2hvdWxkIGFs
c28gYmUgYWJsZSB0byBlbnVtZXJhdGUgdGhlbS4KLUpTVmFsdWUqIEpTQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0NTU1N0eWxl
RGVjbGFyYXRpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NTU1N0
eWxlRGVjbGFyYXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NTU1N0eWxlRGVjbGFyYXRp
b24qPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIEpT
VmFsdWUqIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZUdldHQKIH0KIAogCi1ib29sIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKK2Jv
b2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgaWYgKCFpc0NTU1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1Zh
bHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0
YXRlKiBleGVjLCBDU1NWYWx1ZSogdmFsdWUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlD
dXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxB
cnJheUN1c3RvbS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNQaXhlbEFycmF5Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGlu
bGluZSBKU1ZhbHVlKiBKU0NhbnZhc1BpeGVsQXJyYXk6OmdldEJ5SW5kZXgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCkKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU0NhbnZhc1BpeGVs
QXJyYXk6OmdldEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OwogICAgICAgICBpZiAoIWltcGwoKS0+Z2V0
KGluZGV4LCByZXN1bHQpKQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJvbShyZXN1bHQpOwogICAgIH0KICAgICAKLSAg
ICBpbmxpbmUgdm9pZCBKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIEpT
Q2FudmFzUGl4ZWxBcnJheTo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIGRvdWJsZSBwaXhlbFZhbHVl
ID0gdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2FudmFz
U3R5bGUqIHN0eWxlKQorc3RhdGljIEpTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENh
bnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpCiAg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKQEAgLTQ5
LDcgKzQ5LDcgQEAgc3RhdGljIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYQogICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvSFRNTENhbnZh
c1N0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAodmFs
dWUtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKGFzU3Ry
aW5nKHZhbHVlKS0+dmFsdWUoKSk7CkBAIC02MywyNyArNjMsMjcgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzU3R5bGU+IHRvSFRNTENhbgogICAgIHJldHVybiAwOwogfQogCi1KU1ZhbHVlKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGUo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+
c3Ryb2tlU3R5bGUoKSk7ICAgICAgICAKIH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0U3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3Zv
aWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpbXBsKCktPnNldFN0cm9rZVN0eWxlKHRv
SFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1
ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPmZpbGxTdHlsZSgpKTsK
IH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIGltcGwoKS0+c2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7
CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQg
PSBpbXBsKCk7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9ICAgIAogCi1KU1Zh
bHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBs
KCk7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0
cm9rZVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAgICAgCkBAIC0xNzIs
NyArMTcyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cgogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBKU1Zh
bHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhCiAgICAgLy8gICAgIGRyYXdJbWFn
ZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKICAgICAvLyBDb21wb3NpdGUg
b3BlcmF0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbi4KICAg
ICAvLyBUaGUgaW1nIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVtZW50
LgotICAgIEpTVmFsdWUqIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRy
IHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIEpTT2JqZWN0
KiBvID0gYXNPYmplY3QodmFsdWUpOwpAQCAtMjM3LDExICsyMzcsMTEgQEAgSlNWYWx1ZSogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAg
ICAKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZy
b21SZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZyb21SZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogICAgIAotICAgIEpTVmFsdWUqIHZhbHVlID0gYXJncy5h
dChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKICAg
ICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogICAgIEpTT2JqZWN0KiBvID0gYXNPYmplY3QodmFsdWUpOwpAQCAtMjU3
LDcgKzI1Nyw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmEKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRTaGFkb3coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCkBAIC0zMDMsMTggKzMwMywxOCBAQCBK
U1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y3JlYXRlUGF0dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBhcmdzLmF0
KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAg
IGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CiAKICAgICBp
ZiAoby0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgewogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwotICAgICAgICBKU1ZhbHVlKiBwYXR0ZXJuID0gdG9KUyhleGVjLAor
ICAgICAgICBKU1ZhbHVlUHRyIHBhdHRlcm4gPSB0b0pTKGV4ZWMsCiAgICAgICAgICAgICBjb250
ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihzdGF0aWNf
Y2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhl
YywgMSkpLCBlYykuZ2V0KCkpOwogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpA
QCAtMzIyLDcgKzMyMiw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmUKICAgICB9CiAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2lu
Zm8pKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIEpTVmFsdWUqIHBhdHRl
cm4gPSB0b0pTKGV4ZWMsCisgICAgICAgIEpTVmFsdWVQdHIgcGF0dGVybiA9IHRvSlMoZXhlYywK
ICAgICAgICAgICAgIGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRNTENhbnZh
c0VsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCiAgICAg
ICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgYXJncy5hdChleGVj
LCAxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBA
IC0zMzIsNyArMzMyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdl
RGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gcHV0
SW1hZ2VEYXRhIGhhcyB0d28gdmFyaWFudHMKICAgICAvLyBwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
LCB4LCB5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwdXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZp
bGxUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCkBAIC0zNjgsNyArMzY4
LDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlVGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xp
cGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xp
cGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFs
dWUqIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRy
IEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKQEAgLTYzLDcgKzYzLDcgQEAgSlNWYWx1ZSogSlND
bGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2xpcGJvYXJkOjpj
bGVhckRhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENs
aXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCkBAIC04MSw3ICs4MSw3IEBAIEpTVmFsdWUq
IEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXQKICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgImNsZWFyRGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRz
Iik7CiB9CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDbGlwYm9hcmQ6OmdldERhdGEoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEZJWE1FOiBJdCBk
b2VzIG5vdCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgSlMgYmluZGluZ3MgdG8gdGhyb3cgb24gaW52
YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQpAQCAt
OTcsNyArOTcsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6Z2V0RGF0YShFeGVjU3RhdGUqCiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEpTQ2xpcGJv
YXJkOjpzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCkBAIC0xMDgs
NyArMTA4LDcgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRlKgogICAg
IHJldHVybiBqc0Jvb2xlYW4oY2xpcGJvYXJkLT5zZXREYXRhKGFyZ3MuYXQoZXhlYywgMCktPnRv
U3RyaW5nKGV4ZWMpLCBhcmdzLmF0KGV4ZWMsIDEpLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1K
U1ZhbHVlKiBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDbGlwYm9hcmQ6OnNldERyYWdJbWFnZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBpbXBsKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEpTQzo6UHJvZmlsZT4gPiBQcm9maWxlc0Fy
cmF5OwogCi1KU1ZhbHVlKiBKU0NvbnNvbGU6OnByb2ZpbGVzKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWVQdHIgSlNDb25zb2xlOjpwcm9maWxlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiB7CiAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBpbXBsKCktPnByb2ZpbGVz
KCk7CiAgICAgQXJnTGlzdCBsaXN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2
ZQogICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgIAotICAgIEpTVmFsdWUq
IGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRs
ZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERh
dGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlv
bkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQg
SlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmQKICAgICAKICAgICBKU0M6OkpTTG9j
ayBsb2NrKGZhbHNlKTsKICAgICAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG1fY2FsbGJhY2st
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICBKU1ZhbHVl
UHRyIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhh
bmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
U3RhdGVtZW50Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCB2b2lkIEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJh
Y2s6OmhhbmRsCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICAKLSAg
ICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJoYW5kbGVFdmVudCIpKTsKKworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBtX2NhbGxi
YWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKQEAg
LTcxLDkgKzcxLDkgQEAgdm9pZCBKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbAog
ICAgICAgICB9CiAgICAgICAgIGZ1bmN0aW9uID0gbV9jYWxsYmFjazsKICAgICB9Ci0gICAgICAg
IAorCiAgICAgUmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7Ci0gICAgICAgIAorCiAgICAgQXJnTGlzdCBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMo
ZXhlYywgdHJhbnNhY3Rpb24pKTsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIHJlc3VsdFNl
dCkpOwpAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFj
azo6aGFuZGwKICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7CiAgICAgY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsK
ICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgCisKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihleGVjKTsKLSAgICAgICAgCisKICAgICAgICAgcmFpc2VkRXhjZXB0aW9uID0gdHJ1ZTsKICAg
ICB9Ci0gICAgICAgIAorCiAgICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygp
OwogfQotICAgIAorCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzOTU5MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBib29sIEpTQ3VzdG9tU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjazo6CiAgICAgICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFs
c2UpOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbV9jYWxs
YmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgIEpT
VmFsdWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBoYW5kbGVFdmVudENh
bGxEYXRhOwogICAgIENhbGxUeXBlIGhhbmRsZUV2ZW50Q2FsbFR5cGUgPSBoYW5kbGVFdmVudEZ1
bmN0aW9uLT5nZXRDYWxsRGF0YShoYW5kbGVFdmVudENhbGxEYXRhKTsKICAgICBDYWxsRGF0YSBj
YWxsYmFja0NhbGxEYXRhOwpAQCAtODAsNyArODAsNyBAQCBib29sIEpTQ3VzdG9tU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjazo6CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCB0cmFuc2FjdGlv
bikpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZXJyb3IpKTsKICAgICAgICAgCi0gICAg
SlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIGdsb2JhbE9iamVj
dC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICBpZiAoaGFuZGxlRXZlbnRDYWxsVHlwZSAhPSBD
YWxsVHlwZU5vbmUpCiAgICAgICAgIHJlc3VsdCA9IGNhbGwoZXhlYywgaGFuZGxlRXZlbnRGdW5j
dGlvbiwgaGFuZGxlRXZlbnRDYWxsVHlwZSwgaGFuZGxlRXZlbnRDYWxsRGF0YSwgbV9jYWxsYmFj
aywgYXJncyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rp
b25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrOjpoYW4KICAgICAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAg
IAotICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBtX2RhdGEtPmNhbGxiYWNrKCkt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICBKU1ZhbHVl
UHRyIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBtX2RhdGEtPmNhbGxiYWNrKCktPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBoYW5kbGVFdmVu
dENhbGxEYXRhOwogICAgIENhbGxUeXBlIGhhbmRsZUV2ZW50Q2FsbFR5cGUgPSBoYW5kbGVFdmVu
dEZ1bmN0aW9uLT5nZXRDYWxsRGF0YShoYW5kbGVFdmVudENhbGxEYXRhKTsKICAgICBDYWxsRGF0
YSBjYWxsYmFja0NhbGxEYXRhOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9u
IDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgYm9vbCBKU0N1
c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjawogICAgICAgICAKICAgICBKU0M6OkpTTG9j
ayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBtX2NhbGxi
YWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgSlNW
YWx1ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtNzYsNyArNzYsNyBAQCBib29sIEpTQ3VzdG9tU1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiAgICAgQXJnTGlzdCBhcmdzOwogICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoZXhlYywgZXJyb3IpKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1Zh
bHVlUHRyIHJlc3VsdDsKICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7CiAg
ICAgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2Nh
bGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgSlNDdXN0b21Wb2lkQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KCkKICAgICAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxz
ZSk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgZnVu
Y3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZl
bnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBm
dW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpIHsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxsYmFjazo6
aGFuZGxlRXZlbnQoKQogICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsK
IH0KICAKLVBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiB0b1ZvaWRDYWxsYmFjayhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENh
bGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdmFsdWUtPmdldE9iamVjdCgpOwogICAgIGlmICghb2JqZWN0KQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBS
ZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgfTsKIAotICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiB0b1ZvaWRDYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopOworICAg
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiB0b1ZvaWRDYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZVB0cik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1QYXNzUmVmUHRyPEpTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyPiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlcj4gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNVbmRlZmluZWRP
ck51bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC04MSw3ICs4MSw3IEBAIFN0cmluZyBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKLSAgICBKU1Zh
bHVlKiBmdW5jdGlvbiA9IG1fY3VzdG9tUmVzb2x2ZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJsb29rdXBOYW1lc3BhY2VVUkkiKSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG1f
Y3VzdG9tUmVzb2x2ZXItPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsb29rdXBOYW1lc3Bh
Y2VVUkkiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5vbmUpIHsKQEAgLTEwMCw3ICsxMDAsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhlYywgcHJlZml4
KSk7CiAKICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgSlNWYWx1
ZSogcmV0dmFsID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2N1
c3RvbVJlc29sdmVyLCBhcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHJldHZhbCA9IGNhbGwoZXhlYywg
ZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlciwgYXJncyk7CiAg
ICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBTdHJpbmcgcmVzdWx0
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
aAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIgOiBwdWJsaWMgWFBh
dGhOU1Jlc29sdmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+
IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0cik7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIH5KU0N1c3RvbVhQYXRoTlNSZXNvbHZlcigpOwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNh
Y2hlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEpTRE9N
QXBwbGljYXRpb25DYWNoZTo6bWFyaygpCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU0RPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQpAQCAtOTEsNyArOTEsNyBAQCBKU1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFk
ZChFeGVjCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NQXBw
bGljYXRpb25DYWNoZTo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNET01X
aW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCkBAIC0xMDQsNyArMTA0LDcgQEAgSlNWYWx1ZSogSlNET01BcHBsaWNhdGlv
bkNhY2hlOjpyZW1vdmUoRQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVl
KiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6
OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2Jq
ZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9i
amVjdCkKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6
OmFkZEV2ZW50CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9N
QXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmpl
Y3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0MCw3MCArMzQwLDcwIEBAIHZvaWQgbWFya0RPTU9iamVjdFdyYXBwZXIoSlNHbG9i
YWxEYXRhJiAKICAgICB3cmFwcGVyLT5tYXJrKCk7CiB9CiAKLUpTVmFsdWUqIGpzU3RyaW5nT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQorSlNWYWx1ZVB0ciBqc1N0cmlu
Z09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpzT3duZWRTdHJpbmdPck51bGwoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQogewogICAgIGlmIChzLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywg
cyk7CiB9CiAKLUpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0K
IAotSlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBzKQorSlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oZmFsc2UpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSog
anNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJMJiB1cmwpCitKU1ZhbHVl
UHRyIGpzU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS1VSTCYgdXJsKQogewog
ICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygpKTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdP
clVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtVUkwmIHVybCkKK0pTVmFsdWVQdHIg
anNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtVUkwmIHVybCkKIHsK
ICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygpKTsKIH0KIAotSlNWYWx1ZSoganNT
dHJpbmdPckZhbHNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS1VSTCYgdXJsKQorSlNWYWx1ZVB0
ciBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAg
ICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVybC5zdHJpbmcoKSk7CiB9CiAKLVVTdHJpbmcgdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkK
K1VTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBVU3RyaW5nKCk7CiAgICAgcmV0dXJuIHZhbHVlLT50b1N0cmluZyhleGVjKTsKIH0KIAotVVN0
cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCitVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKICAg
ICByZXR1cm4gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwogfQogCi12b2lkIHJlcG9ydEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZXhjZXB0aW9uKQordm9pZCByZXBvcnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgZXhjZXB0aW9uKQogewog
ICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT50b1N0cmluZyhleGVjKTsKICAg
ICBKU09iamVjdCogZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0aW9uLT50b09iamVjdChleGVjKTsK
QEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSog
ZXhlCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBKU1Zh
bHVlUHRyIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CkBAIC00
MzAsNyArNDMwLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAog
ICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKICAgICBnZXRFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24oZWMsIGRlc2NyaXB0aW9uKTsKIAotICAgIEpTVmFsdWUqIGVycm9y
T2JqZWN0ID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgZXJyb3JPYmplY3QgPSBub1ZhbHVl
KCk7CiAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi50eXBlKSB7CiAgICAgICAgIGNhc2UgRE9NRXhj
ZXB0aW9uVHlwZToKICAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBET01Db3Jl
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKQEAgLTQ4OSw3ICs0ODksNyBAQCB2b2lk
IHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyCiAgICAgICAgIHdpbmRvdy0+cHJp
bnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFRvU3RyaW5nRnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG9iamVjdFRvU3RyaW5nRnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDM5NTkzKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
OTgsNyArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNhY2hlRE9NT2JqZWN0
V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOwogICAgIH0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNs
YXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlKiBnZXRET01PYmplY3RXcmFwcGVyKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogb2JqZWN0KQorICAgIHRlbXBsYXRlPGNsYXNz
IFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWVQdHIgZ2V0
RE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCkK
ICAgICB7CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7CkBAIC0xMTcsNyArMTE3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBj
YWNoZURPTU9iamVjdFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmplY3QsIHdyYXBwZXIp
OwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgV3Jh
cHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSogZ2V0RE9NT2Jq
ZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCwgU1ZHRWxl
bWVudCogY29udGV4dCkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERP
TUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlUHRyIGdldERPTU9iamVjdFdyYXBwZXIoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAg
ICAgewogICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2Fj
aGVET01Ob2RlV3JhcHBlcihub2RlLT5kb2N1bWVudCgpLCBub2RlLCB3cmFwcGVyKTsKICAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFz
cywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUqIGdldERPTU5vZGVXcmFwcGVy
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogbm9kZSkKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlUHRyIGdl
dERPTU5vZGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogbm9kZSkKICAg
ICB7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwpAQCAtMTQ3LDI5ICsxNDcsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY29uc3Qg
SlNDOjpIYXNoVGFibGUqIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpKU0dsb2JhbERh
dGEmLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFibGUpOwogCi0gICAgdm9pZCByZXBv
cnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbik7Cisg
ICAgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIg
ZXhjZXB0aW9uKTsKICAgICB2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqKTsKIAogICAgIC8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9uIGNv
ZGUgaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVjdXRpb24gc3RhdGUuCiAg
ICAgdm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlKTsK
IAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKTsgLy8gbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLSAgICBKU0M6OkpTVmFs
dWUqIGpzU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyBudWxs
IGlmIHRoZSBVUkwgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yTnVsbChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBudWxsIGlmIHRoZSBzdHJpbmcgaXMg
bnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEtVUkwmKTsgLy8gbnVsbCBpZiB0aGUgVVJMIGlzIG51bGwKIAotICAgIEpTQzo6SlNW
YWx1ZSoganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYp
OyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi0gICAgSlNDOjpKU1ZhbHVlKiBq
c1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyB1bmRl
ZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3RyaW5nT3JV
bmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5kZWZpbmVkIGlm
IHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yVW5kZWZp
bmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVS
TCBpcyBudWxsCiAKLSAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JGYWxzZShKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMg
bnVsbAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgS1VSTCYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBVUkwgaXMgbnVsbAorICAgIEpT
Qzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsgLy8gYm9vbGVhbiBmYWxzZSBpZiB0aGUgc3RyaW5nIGlzIG51bGwKKyAgICBKU0M6OkpT
VmFsdWVQdHIganNTdHJpbmdPckZhbHNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAv
LyBib29sZWFuIGZhbHNlIGlmIHRoZSBVUkwgaXMgbnVsbAogCiAgICAgLy8gU2VlIEphdmFTY3Jp
cHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBVU3RyaW5nIHRo
YXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCiAgICAgLy8gb2JqZWN0LCB0byBsZXQgdGhl
IGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxp
a2VseSB0byBzYXZlIG1lbW9yeS4KLSAgICBKU0M6OkpTVmFsdWUqIGpzT3duZWRTdHJpbmdPck51
bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVTdHJpbmcmKTsgCisgICAgSlNDOjpKU1Zh
bHVlUHRyIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVT
dHJpbmcmKTsgCiAKLSAgICBKU0M6OlVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUgaXMg
bnVsbAotICAgIEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKik7IC8vIG51bGwgaWYgdGhlIHZhbHVl
IGlzIG51bGwgb3IgdW5kZWZpbmVkCisgICAgSlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRo
TnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTsgLy8gbnVsbCBpZiB0
aGUgdmFsdWUgaXMgbnVsbAorICAgIEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTsgLy8gbnVs
bCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKIAotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQ
YXNzUmVmUHRyPFQ+IHB0cikgeyByZXR1cm4gdG9KUyhleGVjLCBwdHIuZ2V0KCkpOyB9CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxUPiBwdHIpIHsgcmV0dXJuIHRvSlMoZXhlYywgcHRy
LmdldCgpKTsgfQogCiAgICAgYm9vbCBjaGVja05vZGVTZWN1cml0eShKU0M6OkV4ZWNTdGF0ZSos
IE5vZGUqKTsKIApAQCAtMTc5LDcgKzE3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBi
b29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKik7CiAgICAg
Ym9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFN0cmlu
ZyYgbWVzc2FnZSk7CiAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBKU0M6OkpTVmFsdWUqIG9iamVjdFRvU3RyaW5n
RnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU0M6OkpTVmFsdWVQ
dHIgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoTm9kZSopOwogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjptYXJrKCkKICAg
ICB9CiB9CiAKLUpTRXZlbnRMaXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU0V2ZW50
TGlzdGVuZXIoSlNWYWx1ZSogdmFsLCBib29sIGlzSW5saW5lKQorSlNFdmVudExpc3RlbmVyKiBK
U0RPTUdsb2JhbE9iamVjdDo6ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlUHRyIHZhbCwgYm9v
bCBpc0lubGluZSkKIHsKICAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC05NSw3ICs5NSw3IEBAIEpTRXZlbnRMaXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6
OmZpbmQKICAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmplY3QpOwogfQogCi1QYXNzUmVmUHRy
PEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGluZSkKK1Bh
c3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRl
SlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWwsIGJvb2wgaXNJ
bmxpbmUpCiB7CiAgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNFdmVu
dExpc3RlbmVyKHZhbCwgaXNJbmxpbmUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7CkBAIC0x
MDcsNyArMTA3LDcgQEAgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IEpTRE9NR2xvYmFsTwog
ICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdCh2YWwpLCB0aGlzLCBp
c0lubGluZSkuZ2V0KCk7CiB9CiAKLUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTUds
b2JhbE9iamVjdDo6ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsLCBib29sIGlzSW5saW5lKQorSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAo
IXZhbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTYsNyArMTE2LDcgQEAg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsTwogICAgIHJldHVybiBsaXN0
ZW5lcnMuZ2V0KGFzT2JqZWN0KHZhbCkpOwogfQogCi1QYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxp
bmUpCitQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9i
amVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyKGV4ZWMsIHZhbCwgaXNJbmxpbmUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzOTU5MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTQsMTYgKzU0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qg
PSAwOwogCiAgICAgICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIs
IHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCi0gICAgICAgIEpTRXZlbnRMaXN0ZW5lciog
ZmluZEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFsc2Up
OworICAgICAgICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU1Zh
bHVlUHRyLCBib29sIGlzSW5saW5lID0gZmFsc2UpOwogCiAgICAgICAgIC8vIEZpbmRzIG9yIGNy
ZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBv
YmplY3QgaXMgR0MtcHJvdGVjdGVkLgotICAgICAgICBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5l
cj4gZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50
TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBGaW5k
cyBhIHdyYXBwZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5z
IDAgaWYgbm8gZXhpc3Rpbmcgb25lLgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
ciogZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAv
LyBGaW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2
ZW50TGlzdGVuZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFzc1Jl
ZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5s
aW5lID0gZmFsc2UpOworICAgICAgICBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyPiBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+IExpc3RlbmVy
c01hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDI5ICs2OSwyOSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgSlNWYWx1ZSog
d2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlh
bG9nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlKiBq
c0RPTVdpbmRvd0Jhc2VDcnlwdG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUV2ZW50KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRp
YyB2b2lkIHNldEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSopOworc3RhdGljIEpTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHdpbmRvd1By
b3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworCitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VDcnlw
dG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNET01X
aW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogLy8g
Q29uc3RydWN0b3JzCi1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZv
aWQgc2V0SlNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
Kik7Ci1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1zdGF0
aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
Kik7Ci1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpT
RE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKLXN0
YXRpYyBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwotc3RhdGljIEpT
VmFsdWUqIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwot
c3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0cik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RP
TVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOworc3Rh
dGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9p
ZCBzZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2
b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VYU0xUUHJv
Y2Vzc29yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKK3N0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5s
dXQuaCIKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBwYXJzZU1vZGEKIH0KIAogc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRXhlY1N0YXRlKiBl
eGVjLCBGcmFtZSogb3BlbmVyRnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLAotICAgIGNvbnN0IFN0
cmluZyYgZnJhbWVOYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIEpT
VmFsdWUqIGRpYWxvZ0FyZ3MpCisgICAgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFdp
bmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgSlNWYWx1ZVB0ciBkaWFsb2dBcmdzKQogewog
ICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7CkBA
IC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0
IAogICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKIH0KIAotc3Rh
dGljIEpTVmFsdWUqIHNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIEpTVmFsdWUqIGRpYWxvZ0FyZ3MsIGNvbnN0IFN0cmluZyYg
ZmVhdHVyZUFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRl
KiBleGVjLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBKU1ZhbHVlUHRyIGRpYWxv
Z0FyZ3MsIGNvbnN0IFN0cmluZyYgZmVhdHVyZUFyZ3MpCiB7CiAgICAgaWYgKCFjYW5TaG93TW9k
YWxEaWFsb2dOb3coZnJhbWUpIHx8ICFhbGxvd1BvcFVwKGV4ZWMpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSogc2hvd01v
ZGFsRGlhbG9nKEV4ZWNTdGF0CiAKICAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1ZSBlaXRoZXIg
anVzdCBiZWZvcmUgY2xlYXJpbmcgdGhlIGRpYWxvZyB3aW5kb3cncwogICAgIC8vIHByb3BlcnRp
ZXMgKGluIEpTRE9NV2luZG93QmFzZTo6Y2xlYXIpLCBvciB3aGVuIG9uIHJldHVybiBmcm9tIHJ1
bk1vZGFsLgotICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gbm9WYWx1ZSgpOworICAgIEpTVmFs
dWVQdHIgcmV0dXJuVmFsdWUgPSBub1ZhbHVlKCk7CiAgICAgZGlhbG9nV2luZG93LT5zZXRSZXR1
cm5WYWx1ZVNsb3QoJnJldHVyblZhbHVlKTsKICAgICBkaWFsb2dGcmFtZS0+cGFnZSgpLT5jaHJv
bWUoKS0+cnVuTW9kYWwoKTsKICAgICBkaWFsb2dXaW5kb3ctPnNldFJldHVyblZhbHVlU2xvdCgw
KTsKQEAgLTM1NSwxMiArMzU1LDEyIEBAIHN0YXRpYyBKU1ZhbHVlKiBzaG93TW9kYWxEaWFsb2co
RXhlY1N0YXQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIGpzRE9NV2lu
ZG93QmFzZUNyeXB0byhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JikKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlQ3J5cHRvKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOyAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKIH0KIAotSlNWYWx1ZSoganNET01X
aW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VFdmVudChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90
LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkBAIC0zNjksMTQgKzM2OSwxNCBAQCBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jh
c2VFdmVudChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmN1cnJlbnRFdmVudCgp
KTsKIH0KIAotSlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBq
c0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTSW1hZ2VDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5k
b3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOwogfQogCi1KU1ZhbHVlKiBqc0RP
TVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFz
ZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICNpZiBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCiAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RC
YXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTM4NywyMSArMzg3LDIxIEBAIEpT
VmFsdWUqIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEUKICNlbmRpZgogfQogCi1KU1Zh
bHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jh
c2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U09wdGlvbkNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKSk7CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFz
ZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWE1MSHR0cFJl
cXVlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNP
YmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFz
ZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKIH0KIAotSlNWYWx1ZSoganNET01XaW5k
b3dCYXNlQXVkaW8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBA
IC00MTQsNyArNDE0LDcgQEAgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRl
KgogI2VuZGlmCiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTQyNSw3ICs0MjUsNyBAQCBK
U1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlCiAjZW5kaWYKIH0KIAotSlNW
YWx1ZSoganNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9N
V2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogI2lmIEVOQUJMRShYU0xUKQogICAgIGlm
ICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC00MzYsNyArNDM2LDcgQEAgSlNWYWx1ZSog
anNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeAogI2VuZGlmCiB9CiAKLXZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwg
SlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYg
KCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiAKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkV2ZW50
IiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwg
SlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFz
ZSo+KHRoaXNPYmplY3QpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm47
CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3Rh
dGUqIAogICAgIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5wdXRE
aXJlY3QoSWRlbnRpZmllcihleGVjLCAiQXVkaW8iKSwgdmFsdWUpOwogfQogCi12b2lkIHNldEpT
RE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3Qs
IEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlm
ICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogCiAgICAgc3RhdGljX2Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJJbWFn
ZSIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2
b2lkIHNldEpTRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNf
Y2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVj
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlTWVzc2FnZUNoYW5uZWwoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2Uq
Pih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIk1lc3NhZ2VDaGFubmVs
IiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpT
RE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIHNldEpTRE9NV2luZG93QmFzZU9wdGlvbihFeGVj
U3RhdGUqCiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1
dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJPcHRpb24iKSwgdmFsdWUpOwogfQogCi12b2lkIHNl
dEpTRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dz
QWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZv
aWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSoKICAgICBzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywg
IldvcmtlciIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlWE1MSHR0cFJl
cXVlc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFs
dWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
d0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlhNTEh0dHBS
ZXF1ZXN0IiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vz
c29yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZhbHVl
KQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0
aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTAyLDE3ICs1MDIsMTcgQEAgdm9pZCBzZXRKU0RP
TVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpT
VmFsdWUqIEpTRE9NV2luZG93QmFzZTo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvd0Jhc2U6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
d0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpLT5mcmFtZSgpLT50cmVl
KCktPmNoaWxkKEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKS0+ZG9tV2luZG93KCkpOwogfQog
Ci1KU1ZhbHVlKiBKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
SlNET01XaW5kb3dCYXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90LmluZGV4KCkpLT5kb21XaW5k
b3coKSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7
CiAgICAgRG9jdW1lbnQqIGRvYyA9IHRoaXNPYmotPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KTsKQEAgLTU1Niw3ICs1NTYsNyBAQCBib29sIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90CiAKICAgICAvLyBEbyBwcm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRoYXQgZnVuY3Rp
b25zIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKICAgICAvLyBwcmVj
ZWRlbmNlIG92ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKLSAgICBKU1ZhbHVlKiBw
cm90byA9IHByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBwcm90b3R5cGUoKTsK
ICAgICBpZiAocHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGFzT2JqZWN0KHByb3Rv
KS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAgICAg
ICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTU5NCw3ICs1OTQsNyBAQCBib29s
IEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEpT
RE9NV2luZG93QmFzZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBK
U0RPTVdpbmRvd0Jhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0RPTVdpbmRvd0Jhc2VUYWJsZS5lbnRyeShl
eGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewpAQCAtNzE3LDcgKzcxNyw3IEBA
IEpTR2xvYmFsRGF0YSogSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0cKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKICAgICBpZiAoIXdp
bmRvdykKQEAgLTc4OCw3ICs3ODgsNyBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4
ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygpKTsgLy8g
Z2xvYmFsIG9iamVjdAogfQogCi1KU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFs
b2coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRv
dyh0aGlzVmFsdWUpOwogICAgIGlmICghd2luZG93KQpAQCAtODAzLDcgKzgwMyw3IEBAIEpTVmFs
dWUqIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZygKICAgICByZXR1cm4gc2hvd01vZGFs
RGlhbG9nKGV4ZWMsIGZyYW1lLCB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkpLCBhcmdzLmF0KGV4ZWMsIDEpLCB2YWx1ZVRvU3RyaW5n
V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMikpKTsKIH0KIAot
SlNWYWx1ZSogd2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRy
IHdpbmRvd1Byb3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0b0pT
RE9NV2luZG93KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CkBAIC04MTIsNyArODEyLDcgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jTm90
SW1wbGVtZW50ZWQoRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01XaW5kb3dC
YXNlOjpzZXRSZXR1cm5WYWx1ZVNsb3QoSlNWYWx1ZSoqIHNsb3QpCit2b2lkIEpTRE9NV2luZG93
QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90KEpTVmFsdWVQdHIqIHNsb3QpCiB7CiAgICAgZCgpLT5y
ZXR1cm5WYWx1ZVNsb3QgPSBzbG90OwogfQpAQCAtODI5LDcgKzgyOSw3IEBAIGludCBKU0RPTVdp
bmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KGNvbnMKICAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQo
bmV3IFNjaGVkdWxlZEFjdGlvbihoYW5kbGVyKSwgdCwgc2luZ2xlU2hvdCk7CiB9CiAKLWludCBK
U0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
ZnVuYywgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2ludCBK
U0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0
ciBmdW5jLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewog
ICAgIHJldHVybiBpbnN0YWxsVGltZW91dChuZXcgU2NoZWR1bGVkQWN0aW9uKGV4ZWMsIGZ1bmMs
IGFyZ3MpLCB0LCBzaW5nbGVTaG90KTsKIH0KQEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6ZGlzY29ubmVjdEZyYW1lKCkKIHsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUq
LCBET01XaW5kb3cqIGRvbVdpbmRvdykKIHsKICAgICBpZiAoIWRvbVdpbmRvdykKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwpAQCAtODYwLDcgKzg2MCw3IEBAIEpTRE9NV2luZG93KiB0b0pTRE9N
V2luZG93KEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dT
aGVsbCgpLT53aW5kb3coKTsKIH0KIAotSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNWYWx1
ZSogdmFsdWUpCitKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU1ZhbHVlUHRyIHZhbHVlKQog
ewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDE2ICs2MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlzY29ubmVj
dEZyYW1lKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJv
cGVydHlTbG90Jik7CiAKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KGNvbnN0IEpTQzo6VVN0
cmluZyYgaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgICAgIGludCBpbnN0
YWxsVGltZW91dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAgIGlu
dCBpbnN0YWxsVGltZW91dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciBmdW5jdGlv
biwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAg
ICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCiAgICAgICAgIHZvaWQg
Y2xlYXIoKTsKIAogICAgICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJu
IHZhbHVlIHdoZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgotICAgICAgICB2b2lkIHNldFJldHVy
blZhbHVlU2xvdChKU0M6OkpTVmFsdWUqKiBzbG90KTsKKyAgICAgICAgdm9pZCBzZXRSZXR1cm5W
YWx1ZVNsb3QoSlNDOjpKU1ZhbHVlUHRyKiBzbG90KTsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkBAIC0xMDEsMTMgKzEw
MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIFJlZlB0cjxET01XaW5k
b3c+IGltcGw7CiAKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsK
KyAgICAgICAgICAgIEpTQzo6SlNWYWx1ZVB0ciogcmV0dXJuVmFsdWVTbG90OwogICAgICAgICAg
ICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGw7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZVB0ciBjaGlsZEZyYW1lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWVQdHIgbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICB2b2lk
IGNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpOwogICAgICAgICBpbnQgaW5zdGFsbFRpbWVv
dXQoU2NoZWR1bGVkQWN0aW9uKiwgaW50IGludGVydmFsLCBib29sIHNpbmdsZVNob3QpOwpAQCAt
MTE5LDExICsxMTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBS
ZXR1cm5zIGEgSlNET01XaW5kb3cgb3IganNOdWxsKCkKLSAgICBKU0M6OkpTVmFsdWUqIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyopOwogCiAgICAgLy8gUmV0dXJucyBKU0RPTVdpbmRv
dyBvciAwCiAgICAgSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJhbWUqKTsKLSAgICBKU0RP
TVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU0M6OkpTVmFsdWUqKTsKKyAgICBKU0RPTVdpbmRvdyog
dG9KU0RPTVdpbmRvdyhKU0M6OkpTVmFsdWVQdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6ZGVm
aW5lU2V0dGVyKEV4ZWNTdGF0ZQogICAgIEJhc2U6OmRlZmluZVNldHRlcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHNldHRlckZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6Omxvb2t1
cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
K0pTVmFsdWVQdHIgSlNET01XaW5kb3c6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBPbmx5IGFsbG93IGxvb2tp
bmctdXAgZ2V0dGVycyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgogICAgIGlmICghYWxs
b3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU0RPTVdp
bmRvdzo6bG9va3VwR2V0dGVyKEV4ZWNTCiAgICAgcmV0dXJuIEJhc2U6Omxvb2t1cEdldHRlcihl
eGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6bG9va3VwU2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorSlNW
YWx1ZVB0ciBKU0RPTVdpbmRvdzo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIC8vIE9ubHkgYWxsb3cgbG9va2luZy11
cCBzZXR0ZXJzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCiAgICAgaWYgKCFhbGxvd3NB
Y2Nlc3NGcm9tKGV4ZWMpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93
Ojpsb29rdXBTZXR0ZXIoRXhlY1MKICAgICByZXR1cm4gQmFzZTo6bG9va3VwU2V0dGVyKGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGFjdGl2
ZUZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBs
KCktPmZyYW1lKCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQogfQogCi1KU1Zh
bHVlKiBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIERPTVdpbmRvdyogd2luZG93ID0g
aW1wbCgpOwogCkBAIC0xNzUsOSArMTc1LDkgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OnBvc3RN
ZXNzYWdlKEV4ZWNTdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNW
YWx1ZSogc2V0VGltZW91dE9ySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBKU0RPTVdpbmRvdyog
d2luZG93LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBib29sIHRpbWVvdXQpCitzdGF0aWMgSlNWYWx1
ZVB0ciBzZXRUaW1lb3V0T3JJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NV2luZG93KiB3
aW5kb3csIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGJvb2wgdGltZW91dCkKIHsKLSAgICBKU1ZhbHVl
KiB2ID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMs
IDApOwogICAgIGludCBkZWxheSA9IGFyZ3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYyk7CiAg
ICAgaWYgKHYtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5k
b3ctPmluc3RhbGxUaW1lb3V0KGFzU3RyaW5nKHYpLT52YWx1ZSgpLCBkZWxheSwgdGltZW91dCkp
OwpAQCAtMTg5LDM0ICsxODksMzQgQEAgc3RhdGljIEpTVmFsdWUqIHNldFRpbWVvdXRPckludGVy
dmFsKEV4ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1lb3V0
KGV4ZWMsIHYsIGFyZ3NUYWlsLCBkZWxheSwgdGltZW91dCkpOwogfQogCi1KU1ZhbHVlKiBKU0RP
TVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gc2V0VGltZW91dE9ySW50ZXJ2YWwoZXhl
YywgdGhpcywgYXJncywgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVhclRp
bWVvdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0RPTVdpbmRvdzo6Y2xlYXJUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICByZW1vdmVUaW1lb3V0KGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRv
dzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBzZXRUaW1lb3V0T3JJbnRlcnZhbChleGVjLCB0
aGlzLCBhcmdzLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVhckludGVy
dmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNE
T01XaW5kb3c6OmNsZWFySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIHJlbW92ZVRpbWVvdXQoYXJncy5hdChleGVjLCAwKS0+dG9JbnQzMihleGVj
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93
OjphdG9iKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNET01XaW5kb3c6OmF0b2IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIEpTVmFsdWUq
IHYgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdiA9IGFyZ3MuYXQoZXhlYywg
MCk7CiAgICAgaWYgKHYtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhl
eGVjKTsKIApAQCAtMjM3LDEyICsyMzcsMTIgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OmF0b2Io
RXhlY1N0YXRlKiBleAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRhdGEo
KSwgb3V0LnNpemUoKSkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93Ojpi
dG9hKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJn
cy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBKU1ZhbHVlKiB2ID0gYXJncy5hdChl
eGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmICh2
LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAKQEAgLTI2
Miw3ICsyNjIsNyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVjU3RhdGUqIGV4CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSk7
CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6OmFkZEV2
ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjc2
LDcgKzI3Niw3IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEUKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0yOTAsNyArMjkwLDcgQEAgSlNWYWx1ZSogSlNET01X
aW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1ET01XaW5kb3cqIHRvRE9NV2luZG93KEpTVmFsdWUqIHZhbHVlKQorRE9NV2luZG93KiB0b0RP
TVdpbmRvdyhKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMzAyLDIyICszMDIsMjIgQEAgRE9NV2luZG93KiB0b0RP
TVdpbmRvdyhKU1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogbm9u
Q2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWVQdHIgbm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBw
cm9wZXJ0eU5hbWUsIGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSk7CiB9CiAKLUpT
VmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIDAsIHByb3BlcnR5TmFtZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkJsdXIpOwog
fQogCi1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlv
bkZvY3VzKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1Bv
c3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4g
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAyLCBwcm9wZXJ0eU5hbWUsIGpzRE9N
V2luZG93UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk7CiB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAg
KzM1LDEwIEBAIGlubGluZSBjb25zdCBKU0RPTVdpbmRvdyogYXNKU0RPTVdpbmRvdygKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3cqPihnbG9iYWxPYmplY3QpOwogfQog
Ci1KU0M6OkpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci1KU0M6OkpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNGb2N1c0Z1bmN0aW9uR2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdl
RnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBj
b25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworSlNDOjpKU1ZhbHVlUHRyIG5vbkNhY2hpbmdTdGF0
aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKK0pTQzo6SlNWYWx1ZVB0ciBub25DYWNo
aW5nU3RhdGljQmx1ckZ1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKK0pTQzo6SlNWYWx1ZVB0ciBu
b25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CitKU0M6OkpTVmFs
dWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNET01XaW5kb3c6OmN1c3RvbUdldE93blByb3BlcnR5
U2xvdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90JiBzbG90KQogewpAQCAtMTIzLDcgKzEyMyw3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU0RPTVdpbmRvdzo6Y3VzdG9tR2UKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWlubGluZSBib29sIEpTRE9NV2luZG93OjpjdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUq
IHZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2lubGluZSBib29sIEpTRE9NV2lu
ZG93OjpjdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIGlmICghaW1wbCgpLT5mcmFtZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTIgQEAgYm9vbCBKU0RPTVdpbmRvd1NoZWxs
OjpnZXRPd25Qcm9wZXJ0eVNsbwogICAgIHJldHVybiBtX3dpbmRvdy0+Z2V0T3duUHJvcGVydHlT
bG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dTaGVs
bDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0RPTVdpbmRvd1No
ZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBtX3dpbmRv
dy0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTRE9N
V2luZG93U2hlbGw6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgbV93aW5kb3ctPnB1dFdpdGhBdHRyaWJ1dGVzKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogfQpAQCAtMTE3LDEyICsxMTcs
MTIgQEAgdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpkZWZpbmVTZXR0ZXIoRXhlYwogICAgIG1fd2lu
ZG93LT5kZWZpbmVTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBzZXR0ZXJGdW5jdGlvbik7CiB9
CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93U2hlbGw6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pTVmFsdWVQdHIgSlNET01XaW5k
b3dTaGVsbDo6bG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBtX3dpbmRvdy0+bG9va3VwR2V0dGVyKGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93U2hlbGw6Omxvb2t1cFNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pT
VmFsdWVQdHIgSlNET01XaW5kb3dTaGVsbDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBtX3dpbmRvdy0+
bG9va3VwU2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CkBAIC0xNjAsNyArMTYwLDcgQEAg
dm9pZCogSlNET01XaW5kb3dTaGVsbDo6b3BlcmF0b3IgbmV3KHNpegogLy8gQ29udmVyc2lvbiBt
ZXRob2RzCiAvLyAtLS0tCiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgRnJhbWUqIGZyYW1l
KQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSosIEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7
CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTVmFsdWUqIHByb3RvdHlwZSkgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlw
ZSkgCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
KHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUpKTsgCiAgICAgICAgIH0K
QEAgLTY5LDIyICs2OSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CiAgICAgICAgIHZpcnR1YWwgSlNDOjpVU3RyaW5nIGNsYXNzTmFtZSgpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHB1dFdpdGhBdHRyaWJ1dGVzKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0ciwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGdl
dFByb3BlcnR5TmFtZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eUF0dHJpYnV0ZXMoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJp
YnV0ZXMpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lR2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNPYmpl
Y3QqIGdldHRlckZ1bmN0aW9uKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlZmluZVNldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6
OkpTT2JqZWN0KiBzZXR0ZXJGdW5jdGlvbik7Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVl
KiBsb29rdXBHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBsb29rdXBTZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIGxvb2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdmlydHVh
bCBKU0M6OkpTVmFsdWVQdHIgbG9va3VwU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmpl
Y3QqIHVud3JhcHBlZE9iamVjdCgpOwogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAKICAgICAgICAgSlNE
T01XaW5kb3cqIG1fd2luZG93OwogICAgIH07CiAKLSAgICBKU0M6OkpTVmFsdWUqIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBGcmFtZSopOworICAgIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgRnJhbWUqKTsKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB0b0pTRE9NV2luZG93U2hl
bGwoRnJhbWUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1K
U1ZhbHVlKiBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgU3RyaW5nIG9sZFZlcnNp
b24gPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKICAgICBTdHJpbmcgbmV3VmVy
c2lvbiA9IGFyZ3MuYXQoZXhlYywgMSktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtODYsNyArODYsNyBA
QCBKU1ZhbHVlKiBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNTCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNEYXRhYmFzZTo6
dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEpTT2JqZWN0KiBvYmplY3Q7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lk
IEpTRG9jdW1lbnQ6Om1hcmsoKQogICAgIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgqSGVh
cDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBpbXBsKCkpOwogfQogCi1KU1ZhbHVlKiBKU0Rv
Y3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTRG9j
dW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwoKSktPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNWYWx1ZSogSlNEb2N1bWVudDo6bG9jYXRpb24oRXhl
Y1N0YXRlKgogICAgIHJldHVybiB0b0pTKGV4ZWMsIGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYXRp
b24oKSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oaW1wbCgpKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAg
ZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHN0ciwgYWN0aXZlRnJhbWUt
PmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiB9CiAK
LUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCitKU1Zh
bHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAg
aWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0dGluZ1NyY1RvSmF2YQogICAgIHJl
dHVybiB0cnVlOwogfSAKIAotSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0VsZW1lbnQ6OnNl
dEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXRvbWljU3RyaW5nIG5hbWUgPSBhcmdzLmF0KGV4
ZWMsIDApLT50b1N0cmluZyhleGVjKTsKQEAgLTc2LDcgKzc2LDcgQEAgSlNWYWx1ZSogSlNFbGVt
ZW50OjpzZXRBdHRyaWJ1dGUoRXhlY1N0YQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5v
ZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIEF0dHIqIG5ld0F0dHIgPSB0b0F0dHIoYXJncy5hdChleGVjLCAw
KSk7CkBAIC04OSwxMiArODksMTIgQEAgSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVO
b2RlKEV4ZQogICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGV4ZWMsIGlt
cCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0
UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBlYykpKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlKG5l
d0F0dHIsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRWxlbWVudDo6c2V0
QXR0cmlidXRlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkgPSB2
YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKTsKQEAgLTEx
MCw3ICsxMTAsNyBAQCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKEV4ZWNTCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIEF0dHIq
IG5ld0F0dHIgPSB0b0F0dHIoYXJncy5hdChleGVjLCAwKSk7CkBAIC0xMjMsMTIgKzEyMywxMiBA
QCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhFCiAgICAgaWYgKCFhbGxv
d1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZXhlYywgaW1wLCBuZXdBdHRyLT5uYW1lKCksIG5l
d0F0dHItPnZhbHVlKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVO
b2RlTlMobmV3QXR0ciwgZWMpKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMs
IFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZU5TKG5ld0F0dHIsIGVjKSkpOwogICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMsIEVsZW1lbnQqIGVsZW1lbnQp
CitKU1ZhbHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBFbGVtZW50KiBl
bGVtZW50KQogewogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDEyICs3MiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUpTVmFsdWUqIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAorSlNWYWx1ZVB0ciBKU0V2ZW50OjpjbGlwYm9hcmREYXRhKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICByZXR1cm4gaW1wbCgpLT5pc0NsaXBib2FyZEV2ZW50KCkgPyB0b0pT
KGV4ZWMsIGltcGwoKS0+Y2xpcGJvYXJkRGF0YSgpKSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQpCitKU1ZhbHVlUHRyIHRv
SlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQpCiB7CiAgICAgSlNMb2NrIGxvY2soZmFs
c2UpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVuCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKIAotICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBsaXN0ZW5l
ci0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgIEpTVmFs
dWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGxpc3RlbmVyLT5nZXQoZXhlYywgSWRlbnRpZmll
cihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBoYW5kbGVFdmVudEZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtMTAxLDEyICsxMDEs
MTIgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKTsKICAg
ICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGV4ZWMsIGds
b2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QgPyBnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFs
T2JqZWN0IDogZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBKU1ZhbHVlKiByZXR2YWw7CisgICAg
ICAgIEpTVmFsdWVQdHIgcmV0dmFsOwogICAgICAgICBpZiAoaGFuZGxlRXZlbnRGdW5jdGlvbikg
ewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwogICAgICAg
ICAgICAgcmV0dmFsID0gY2FsbChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGxpc3RlbmVyLCBhcmdzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHRoaXNWYWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgdGhpc1ZhbHVlOwog
ICAgICAgICAgICAgaWYgKGlzV2luZG93RXZlbnQpCiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVl
ID0gZ2xvYmFsT2JqZWN0LT50b1RoaXNPYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBlbHNlCkBA
IC0yNjMsNyArMjYzLDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omxpc3RlbmVy
TwogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLWlubGluZSBKU1ZhbHVlKiBldmVudFBhcmFtZXRl
ck5hbWUoSlNMYXp5RXZlbnRMaXN0ZW5lcjo6TGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5cGUsIEV4
ZWNTdGF0ZSogZXhlYykKK2lubGluZSBKU1ZhbHVlUHRyIGV2ZW50UGFyYW1ldGVyTmFtZShKU0xh
enlFdmVudExpc3RlbmVyOjpMYXp5RXZlbnRMaXN0ZW5lclR5cGUgdHlwZSwgRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6SFRNTExhenlFdmVudExpc3RlbmVyOgpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KICAgICAgICAgLy8gKGFuZCB0aGUgZG9jdW1l
bnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBKU0hUTUxFbGVtZW50OjpldmVudEhhbmRsZXJTY29wZSkK
ICAgICAgICAgU2NvcGVDaGFpbiBzY29wZSA9IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKTsK
IAotICAgICAgICBKU1ZhbHVlKiB0aGlzT2JqID0gdG9KUyhleGVjLCBtX29yaWdpbmFsTm9kZSk7
CisgICAgICAgIEpTVmFsdWVQdHIgdGhpc09iaiA9IHRvSlMoZXhlYywgbV9vcmlnaW5hbE5vZGUp
OwogICAgICAgICBpZiAodGhpc09iai0+aXNPYmplY3QoKSkgewogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SlNFdmVudFRhcmdldE5vZGUqPihhc09iamVjdCh0aGlzT2JqKSktPnB1c2hFdmVudEhh
bmRsZXJTY29wZShleGVjLCBzY29wZSk7CiAgICAgICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24t
PnNldFNjb3BlKHNjb3BlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEV2ZW50VGFyZ2V0KiB0YXJnZXQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBF
dmVudFRhcmdldCogdGFyZ2V0KQogewogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaAkocmV2aXNpb24g
Mzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBF
dmVudFRhcmdldDsKIAotICAgIEpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEV2
ZW50VGFyZ2V0Kik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBF
dmVudFRhcmdldCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwx
MyArNzQsMTMgQEAKICAgICBtYWNybyhzcGVjaWZpY0V2ZW50VGFyZ2V0LCBPblVubG9hZCwgdW5s
b2FkRXZlbnQpIFwKIAogI2RlZmluZSBFVkVOVF9MSVNURU5FUl9HRVRURVIoc3BlY2lmaWNFdmVu
dFRhcmdldCwgbmFtZSwgZXZlbnQpIFwKLUpTQzo6SlNWYWx1ZSoganMjI3NwZWNpZmljRXZlbnRU
YXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25z
dCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCkgXAorSlNDOjpKU1ZhbHVlUHRyIGpzIyNzcGVjaWZp
Y0V2ZW50VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmIHNsb3QpIFwKIHsgXAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKUyMjc3BlY2lmaWNFdmVudFRhcmdldCo+KHNsb3Quc2xvdEJhc2UoKSktPmdldExp
c3RlbmVyKGV2ZW50KTsgXAogfSBcCiAKICNkZWZpbmUgRVZFTlRfTElTVEVORVJfU0VUVEVSKHNw
ZWNpZmljRXZlbnRUYXJnZXQsIG5hbWUsIGV2ZW50KSBcCi12b2lkIHNldEpTIyNzcGVjaWZpY0V2
ZW50VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBKU0M6OkpTVmFsdWUqIHZhbHVlKSBcCit2b2lkIHNldEpTIyNzcGVjaWZpY0V2ZW50
VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUpIFwKIHsgXAogICAgIHN0YXRpY19jYXN0PEpTIyNz
cGVjaWZpY0V2ZW50VGFyZ2V0Kj4oYmFzZU9iamVjdCktPnNldExpc3RlbmVyKGV4ZWMsIGV2ZW50
LCB2YWx1ZSk7IFwKIH0gXApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1K
U1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRXZlbnRUYXJnZXROb2RlOjph
ZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVj
dChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmpl
Y3QpCkBAIC01Miw3ICs1Miw3IEBAIEpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlOjphZGRFdmVu
dExpc3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNFdmVudFRh
cmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0V2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDIxICszOSwyMSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4g
Y3JlYXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCitz
dGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS0+aXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QodmFsdWUpOwogCi0gICAgSlNWYWx1ZSogZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUgPSBv
YmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJlbmFibGVIaWdoQWNjdXJhY3kiKSk7
CisgICAgSlNWYWx1ZVB0ciBlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgImVuYWJsZUhpZ2hBY2N1cmFjeSIpKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJvb2wgZW5hYmxlSGln
aEFjY3VyYWN5ID0gZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUtPnRvQm9vbGVhbihleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNW
YWx1ZSogdGltZW91dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
dGltZW91dCIpKTsKKyAgICBKU1ZhbHVlUHRyIHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgInRpbWVvdXQiKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICB1bnNpZ25lZCB0aW1lb3V0ID0gdGltZW91
dFZhbHVlLT50b1VJbnQzMihleGVjKTsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdAogICAgIHJldHVybiBQb3NpdGlvbk9wdGlvbnM6OmNy
ZWF0ZShlbmFibGVIaWdoQWNjdXJhY3ksIHRpbWVvdXQpOwogfQogCi1KU1ZhbHVlKiBKU0dlb2xv
Y2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEFyZ3VtZW50czog
UG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlv
bmFsKVBvc2l0aW9uT3B0aW9ucwogICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlv
bkNhbGxiYWNrOwpAQCAtMTAyLDcgKzEwMiw3IEBAIEpTVmFsdWUqIEpTR2VvbG9jYXRpb246Omdl
dEN1cnJlbnRQb3NpdGkKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSog
SlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEFyZ3VtZW50czogUG9z
aXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFs
KVBvc2l0aW9uT3B0aW9ucwogICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNh
bGxiYWNrOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6
OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG8pIAorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6
SlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsgCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIEpT
Qzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOyAKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBKU0hUTUxBcHBsZXRF
bGVtZW50OjpjdXN0b21HZXRPd25QcgogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9CiAKLWJv
b2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBsKCksIHNsb3QpOwogfQpAQCAtNTMsNyAr
NTMsNyBAQCBib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yCiAgICAgcmV0
dXJuIHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCI7CiB9CiAKLUpTVmFs
dWUqIEpTSFRNTEFwcGxldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWVQdHIgSlNIVE1MQXBwbGV0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBKU1Zh
bHVlKiBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSFRNTENvbGxlY3Rpb24qIGltcGws
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGdldE5h
bWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBIVE1MQ29sbGVjdGlvbiogaW1wbCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBuYW1l
ZEl0ZW1zOwogICAgIGltcGwtPm5hbWVkSXRlbXMocHJvcGVydHlOYW1lLCBuYW1lZEl0ZW1zKTsK
QEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIEpTVmFsdWUqIGdldE5hbWVkSXRlbXMoRXhlY1N0YXRl
KgogCiAvLyBIVE1MQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0
IGJvdGggZ2V0IGFuZCBjYWxsLAogLy8gc28gdGhhdCBkb2N1bWVudC5mb3Jtcy5pdGVtKDApIGFu
ZCBkb2N1bWVudC5mb3JtcygwKSBib3RoIHdvcmsuCi1zdGF0aWMgSlNWYWx1ZSogY2FsbEhUTUxD
b2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxIVE1MQ29sbGVjdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTEwMiwxMyArMTAyLDEzIEBAIGJvb2wgSlNIVE1MQ29sbGVj
dGlvbjo6Y2FuR2V0SXRlbXNGb3JOYW0KICAgICByZXR1cm4gIWdldE5hbWVkSXRlbXMoZXhlYywg
dGhpc09iaiwgcHJvcGVydHlOYW1lKS0+aXNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNI
VE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBK
U0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNI
VE1MQ29sbGVjdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTENvbGxlY3Rpb24qPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVj
LCB0aGlzT2JqLT5pbXBsKCksIHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTENv
bGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBib29sIG9rOwogICAgIHVpbnQzMl90IGluZGV4ID0gYXJncy5h
dChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rLCBmYWxzZSk7CkBAIC0xMTcs
MTIgKzExNywxMiBAQCBKU1ZhbHVlKiBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0CiAg
ICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgaW1wbCgpLCBJZGVudGlmaWVyKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTENv
bGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywg
aW1wbCgpLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBIVE1MQ29sbGVjdGlvbiog
Y29sbGVjdGlvbikKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xsZWN0
aW9uKiBjb2xsZWN0aW9uKQogewogICAgIGlmICghY29sbGVjdGlvbikKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxE
b2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgYm9vbCBK
U0hUTUxEb2N1bWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKAogICAgIHJldHVybiBhdG9taWNQcm9w
ZXJ0eU5hbWUgJiYgKGRvY3VtZW50LT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8
fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSk7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNIVE1MRG9jdW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxEb2N1bWVu
dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAtNzgs
MTYgKzc4LDE3IEBAIEpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWMKIAog
Ly8gQ3VzdG9tIGF0dHJpYnV0ZXMKIAotSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OmFsbChFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50OjphbGwoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIElmICJhbGwiIGhhcyBiZWVuIG92ZXJ3cml0dGVu
LCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRE
aXJlY3QoSWRlbnRpZmllcihleGVjLCAiYWxsIikpKQorICAgIEpTVmFsdWVQdHIgdiA9IGdldERp
cmVjdChJZGVudGlmaWVyKGV4ZWMsICJhbGwiKSk7CisgICAgaWYgKHYpCiAgICAgICAgIHJldHVy
biB2OwogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
aW1wbCgpKS0+YWxsKCkuZ2V0KCkpOwogfQogCi12b2lkIEpTSFRNTERvY3VtZW50OjpzZXRBbGwo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNl
dEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgLy8gQWRkICJh
bGwiIHRvIHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywg
ImFsbCIpLCB2YWx1ZSk7CkBAIC05NSw3ICs5Niw3IEBAIHZvaWQgSlNIVE1MRG9jdW1lbnQ6OnNl
dEFsbChFeGVjU3RhdGUqIGUKIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwogCi1KU1ZhbHVlKiBKU0hU
TUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGJyb3dz
ZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBwYXJhbWV0ZXJzIHRvIHRoZSB3
aW5kb3cuCiAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgewpAQCAtMTAzLDcgKzEwNCw3IEBAIEpT
VmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSoKICAgICAgICAgaWYgKGZyYW1l
KSB7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3cmFwcGVyID0gdG9KU0RPTVdpbmRv
d1NoZWxsKGZyYW1lKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSogZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAib3BlbiIpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gd3JhcHBl
ci0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIm9wZW4iKSk7CiAgICAgICAgICAgICAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBm
dW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgICAgICAgICAgICAgIGlmIChjYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xMzgsMTQgKzEzOSwxNCBAQCBzdGF0aWMgU3RyaW5n
IHdyaXRlSGVscGVyKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVz
dWx0KTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6OndyaXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6OndyaXRl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBEb2N1bWVudCog
YWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihp
bXBsKCkpLT53cml0ZSh3cml0ZUhlbHBlcihleGVjLCBhcmdzKSwgYWN0aXZlRG9jdW1lbnQpOwog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6
d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKICAgICBzdGF0
aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT53cml0ZSh3cml0ZUhlbHBlcihleGVjLCBh
cmdzKSArICJcbiIsIGFjdGl2ZURvY3VtZW50KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpjdXN0b21H
ZXRPd25Qcm8KICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xv
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQogCi1ib29sIEpTSFRNTEVtYmVk
RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBK
U0hUTUxFbWJlZEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIGltcGwoKSwgc2xvdCk7CiB9CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgSlNI
VE1MRW1iZWRFbGVtZW50OjpjYW5HZXRJdGVtc0Zvck4KICAgICByZXR1cm4gcHJvcGVydHlOYW1l
ID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IjsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRW1iZWRF
bGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTEVt
YmVkRWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBy
dW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBib29sIEpTSFRNTEZvcm1F
bGVtZW50OjpjYW5HZXRJdGVtc0Zvck5hCiAgICAgcmV0dXJuIG5hbWVkSXRlbXMuc2l6ZSgpOwog
fQogCi1KU1ZhbHVlKiBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+aW1wbCgpKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvd1NldHRpbmdKYXZh
c2NyaXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNl
dFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxGcmFtZUVs
ZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAg
SFRNTEZyYW1lRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGlt
cGwoKSk7CiAgICAgU3RyaW5nIHNyY1ZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
ZXhlYywgdmFsdWUpOwpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6
c2V0U3JjKEV4ZWNTdGF0CiAgICAgcmV0dXJuOwogfQogCi12b2lkIEpTSFRNTEZyYW1lRWxlbWVu
dDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNI
VE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
dmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lRWxlbWVudCo+KGltcGwoKSk7CiAgICAgU3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBib29sIEpTSFRNTEZyYW1lU2V0
RWxlbWVudDo6Y2FuR2V0SXRlbXNGCiAgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5oYXNUYWdO
YW1lKGZyYW1lVGFnKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTEZyYW1lU2V0RWxlbWVu
dDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KHRoaXNPYmotPmltcGwoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElG
cmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgSFRNTElGcmFtZUVsZW1lbnQq
IGltcCA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgYm9vbCBKU0hUTUxJ
bnB1dEVsZW1lbnQ6OmN1c3RvbUdldE93blBybwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNW
YWx1ZSogSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydChFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGltcGwoKSk7CiAgICAgaWYgKCFpbnB1dC0+Y2Fu
SGF2ZVNlbGVjdGlvbigpKQpAQCAtNjAsNyArNjAsNyBAQCBKU1ZhbHVlKiBKU0hUTUxJbnB1dEVs
ZW1lbnQ6OnNlbGVjdGlvblN0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGlucHV0LT5zZWxl
Y3Rpb25TdGFydCgpKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rp
b25FbmQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0hUTUxJbnB1dEVsZW1l
bnQ6OnNlbGVjdGlvbkVuZChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW1wbCgpKTsK
ICAgICBpZiAoIWlucHV0LT5jYW5IYXZlU2VsZWN0aW9uKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBib29sIEpTSFRNTE9iamVjdEVsZW1l
bnQ6OmN1c3RvbUdldE93blByCiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCB0aGlzKTsKIH0KIAotYm9vbCBK
U0hUTUxPYmplY3RFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCitib29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcGwoKSwgc2xvdCk7CiB9CkBAIC01Myw3ICs1Myw3
IEBAIGJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Y2FuR2V0SXRlbXNGb3IKICAgICByZXR1cm4g
cHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IjsKIH0KIAotSlNWYWx1ZSog
SlNIVE1MT2JqZWN0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZVB0ciBKU0hUTUxPYmplY3RFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMyArMzUsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6bGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBp
bXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihpbXBsKCkpOwogICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBpbXAtPmxlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1wID0g
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgpKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKQEAgLTYwLDE0ICs2MCwxNCBAQCB2b2lkIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjpzZXRMZW5ndGgoCiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIH0KIAot
dm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjppbmRleFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlUHRyIHZhbHVlKQogewogICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1wID0gc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgpKTsKICAgICBIVE1MU2VsZWN0RWxl
bWVudCogYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oaW1wLT5iYXNlKCkp
OwogICAgIHNlbGVjdEluZGV4U2V0dGVyKGJhc2UsIGV4ZWMsIGluZGV4LCB2YWx1ZSk7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjphZGQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6
YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+
KGltcGwoKSk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHRvSFRNTE9wdGlvbkVs
ZW1lbnQoYXJncy5hdChleGVjLCAwKSk7CkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUqIEpTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uOjphZGQoRXgKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotSlNWYWx1ZSogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnJlbW92ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xs
ZWN0aW9uKj4oaW1wbCgpKTsKICAgICBKU0hUTUxTZWxlY3RFbGVtZW50KiBiYXNlID0gc3RhdGlj
X2Nhc3Q8SlNIVE1MU2VsZWN0RWxlbWVudCo+KGFzT2JqZWN0KHRvSlMoZXhlYywgaW1wLT5iYXNl
KCkpKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxl
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAotSlNWYWx1ZSogSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3Zl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1M
U2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Kj4oaW1wbCgpKTsKIApAQCAtNDYsNyArNDYsNyBAQCBKU1ZhbHVlKiBKU0hU
TUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLXZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUqIHZhbHVlKQor
dm9pZCBzZWxlY3RJbmRleFNldHRlcihIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0LCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSkKIHsK
ICAgICBpZiAodmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHNlbGVjdC0+cmVt
b3ZlKGluZGV4KTsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBzZWxlY3RJbmRleFNldHRlcihIVE1M
U2VsZWN0RWxlbWVudAogICAgIH0KIH0KIAotdm9pZCBKU0hUTUxTZWxlY3RFbGVtZW50OjppbmRl
eFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1
ZSogdmFsdWUpCit2b2lkIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OmluZGV4U2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIHNlbGVjdEluZGV4U2V0dGVyKHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oaW1w
bCgpKSwgZXhlYywgaW5kZXgsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZWxl
Y3RJbmRleFNldHRlcihIVE1MU2VsZWN0RWxlbWVudCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSopOwordm9pZCBzZWxlY3RJbmRleFNldHRlcihIVE1MU2Vs
ZWN0RWxlbWVudCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1
ZVB0cik7CiAKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywxNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNC
YWNrRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgbm9uQ2FjaGlu
Z1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVy
biBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNI
aXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0
YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBu
b25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVy
dHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOwogfQogCi1KU1ZhbHVl
KiBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVB0ciBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDEsIHBy
b3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CiB9CkBAIC05Miw3ICs5
Miw3IEBAIGJvb2wgSlNIaXN0b3J5OjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU0hpc3Rvcnk6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpCitib29sIEpTSGlzdG9yeTo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKQogewogICAgIC8vIE9ubHkgYWxsb3cgcHV0dGluZyBieSBmcmFtZXMgaW4gdGhlIHNh
bWUgb3JpZ2luLgogICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIGltcGwoKS0+
ZnJhbWUoKSkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBJbWFnZURhdGEqIGltYWdlRGF0YSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEltYWdlRGF0YSogaW1hZ2VEYXRhKQogewogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVk
T2JqZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBzdGF0aWMgR2xvYmFsT2JqZWN0V3JhcHBlck1hcCYgd3JhcHBlcnMoCiAK
IGNvbnN0IENsYXNzSW5mbyBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OnNfaW5mbyA9IHsgIkpT
SW5zcGVjdGVkT2JqZWN0V3JhcHBlciIsICZKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6c19p
bmZvLCAwLCAwIH07CiAKLUpTVmFsdWUqIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChF
eGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKQorSlNWYWx1
ZVB0ciBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoRXhlY1N0YXRlKiB1bndyYXBwZWRF
eGVjLCBKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKQogewogICAgIGlmICghdW53cmFwcGVkVmFs
dWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB1bndyYXBwZWRWYWx1ZTsKQEAgLTYxLDcg
KzYxLDcgQEAgSlNWYWx1ZSogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKAogICAgICAg
ICBpZiAoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gd3JhcHBlck1hcC0+Z2V0
KHVud3JhcHBlZE9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAotICAgIEpT
VmFsdWUqIHByb3RvdHlwZSA9IHVud3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgSlNW
YWx1ZVB0ciBwcm90b3R5cGUgPSB1bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOwogICAgIEFT
U0VSVChwcm90b3R5cGUtPmlzTnVsbCgpIHx8IHByb3RvdHlwZS0+aXNPYmplY3QoKSk7CiAKICAg
ICBpZiAocHJvdG90eXBlLT5pc051bGwoKSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNJbnNwZWN0ZWRP
YmplY3RXcmFwcGVyOjp+SlNJbnNwZWN0ZWRPYgogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdWYWx1ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlKiB2YWx1ZSkgY29uc3QKK0pTVmFsdWVQdHIgSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjpw
cmVwYXJlSW5jb21pbmdWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHZhbHVlKSBjb25zdAog
ewogICAgIC8vIFRoZSBJbnNwZWN0b3IgaXMgb25seSBhbGxvd2VkIHRvIHBhc3MgcHJpbWl0aXZl
IHZhbHVlcyBhbmQgd3JhcHBlZCBvYmplY3RzIHRvIG9iamVjdHMgZnJvbSB0aGUgaW5zcGVjdGVk
IHBhZ2UuCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFw
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5z
cGVjdGVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlciA6
IHB1YmxpYyBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiB3cmFwKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVj
LCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZVB0ciB3cmFwKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQ
dHIgdW53cmFwcGVkVmFsdWUpOwogICAgICAgICB2aXJ0dWFsIH5KU0luc3BlY3RlZE9iamVjdFdy
YXBwZXIoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpA
QCAtNDgsOCArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBhbGxvd3NDYWxsQXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAg
dmlydHVhbCBib29sIGFsbG93c0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJbmNvbWluZ1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZh
bHVlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1Zh
bHVlKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBl
ZFZhbHVlKSBjb25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVl
KTsgfQorICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBwcmVwYXJlSW5jb21pbmdWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBl
ZFZhbHVlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgd3JhcE91dGdv
aW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1
bndyYXBwZWRWYWx1ZSkgY29uc3QgeyByZXR1cm4gd3JhcCh1bndyYXBwZWRFeGVjLCB1bndyYXBw
ZWRWYWx1ZSk7IH0KIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBTdHJ1Y3R1
cmUqIGxlYWtJbnNwZWN0b3JDYWxsYmFja1cKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1K
U1ZhbHVlKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3Jh
cHBlZEV4ZWMsIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKQorSlNWYWx1ZVB0ciBKU0luc3BlY3Rv
ckNhbGxiYWNrV3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWVQ
dHIgdW53cmFwcGVkVmFsdWUpCiB7CiAgICAgaWYgKCF1bndyYXBwZWRWYWx1ZS0+aXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIHVud3JhcHBlZFZhbHVlOwpAQCAtNjYsNyArNjYsNyBAQCBKU1Zh
bHVlKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhCiAgICAgaWYgKEpTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyKiB3cmFwcGVyID0gd3JhcHBlcnMoKS5nZXQodW53cmFwcGVkT2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSB1
bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0g
dW53cmFwcGVkT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBBU1NFUlQocHJvdG90eXBlLT5pc051
bGwoKSB8fCBwcm90b3R5cGUtPmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKHByb3RvdHlwZS0+aXNO
dWxsKCkpIHsKQEAgLTg4LDcgKzg4LDcgQEAgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6On5K
U0luc3BlY3RvcgogICAgIHdyYXBwZXJzKCkucmVtb3ZlKHVud3JhcHBlZE9iamVjdCgpKTsKIH0K
IAotSlNWYWx1ZSogSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OnByZXBhcmVJbmNvbWluZ1Zh
bHVlKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNv
bnN0CitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjpwcmVwYXJlSW5jb21p
bmdWYWx1ZShFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWVQdHIgdW53cmFwcGVkVmFs
dWUpIGNvbnN0CiB7CiAgICAgaWYgKEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVy
ID0gYXNXcmFwcGVyKHVud3JhcHBlZFZhbHVlKSkgewogICAgICAgICAvLyBUaGUgb25seSB0aW1l
IGEgd3JhcHBlciBzaG91bGQgYmUgcGFzc2VkIGludG8gYSBKU0luc3BlY3RvckNhbGxiYWNrV3Jh
cHBlciBpcyB3aGVuIGEgY2xpZW50LXNpZGUgc3RvcmFnZSBjYWxsYmFjawpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFw
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIgOiBwdWJsaWMgSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSogd3JhcChKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVl
KiB1bndyYXBwZWRWYWx1ZSk7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgd3JhcChK
U0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZh
bHVlKTsKIAogICAgICAgICB2aXJ0dWFsIH5KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcigpOwog
CkBAIC00NCw4ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzQ2FsbEFzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBj
b25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsgfQorICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBwcmVwYXJlSW5jb21pbmdWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgd3JhcE91dGdvaW5nVmFsdWUo
SlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1bndyYXBwZWRW
YWx1ZSkgY29uc3QgeyByZXR1cm4gd3JhcCh1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRWYWx1ZSk7
IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IG5vVmFs
dWUoKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOworICAgIEpTVmFsdWVQdHIgZXhjZXB0
aW9uID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0
ZShhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKIAogICAgIGlm
IChleGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwpAQCAt
NDQsMTIgKzQ0LDEyIEBAIEpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6
OnRoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OnRoaXNPYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJl
dHVybiBpbXBsKCktPnRoaXNPYmplY3QoKSA/IGltcGwoKS0+dGhpc09iamVjdCgpIDoganNOdWxs
KCk7CiB9CiAKLUpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChpbXBsKCktPnR5cGUoKSkgewogICAg
ICAgICBjYXNlIERlYnVnZ2VyQ2FsbEZyYW1lOjpGdW5jdGlvblR5cGU6CkBAIC02Miw3ICs2Miw3
IEBAIEpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZShFeGUKICAgICByZXR1cm4g
anNOdWxsKCk7CiB9CiAKLUpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFp
bihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6c2NvcGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKCkt
PnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE3ICszNywxNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlw
ZUZ1bmN0aW9uKGV4ZWMsIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0
aW9uUmVwbGFjZSk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlv
bkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljUmVs
b2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gbmV3IChl
eGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Q
cm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNB
c3NpZ25GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBub25DYWNo
aW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBy
ZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9wZXJ0eU5hbWUs
IGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CiB9CkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBKU0xvY2F0aW9uOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCitib29sIEpTTG9jYXRpb246OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIG5hdmlnYXRlSWZB
bGxvd2VkKEV4ZWNTdGF0ZSoKICAgICB9CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SHJlZihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVm
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTE1Nyw3ICsxNTcsNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdhdGVJ
ZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRpb246
OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9j
YXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsK
QEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFByb3RvY29sKEV4ZWNTdGF0
ZSogCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQog
Ci12b2lkIEpTTG9jYXRpb246OnNldEhvc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
dmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VS
VChmcmFtZSk7CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4
ZWNTdGF0ZSogZXhlYwogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZh
bHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5m
cmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBKU0xv
Y2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3RhdGUqIAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4
ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9jYXRpb246OnNldFBvcnQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9
IGltcGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMjA2LDcgKzIwNiw3IEBA
IHZvaWQgSlNMb2NhdGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMKICAgICBuYXZpZ2F0ZUlm
QWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6
c2V0UGF0aG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2Nh
dGlvbjo6c2V0UGF0aG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpA
QCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUoRXhlY1N0YXRl
KiAKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAK
LXZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFs
dWUpCit2b2lkIEpTTG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFT
U0VSVChmcmFtZSk7CkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFy
Y2goRXhlY1N0YXRlKiBleAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmws
IGZhbHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUo
KTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSlNMb2NhdGlv
bjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4ZWMKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBm
cmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEpTTG9jYXRpb246OnJlcGxhY2UoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0xvY2F0aW9u
OjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBG
cmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTI2MSw3
ICsyNjEsNyBAQCBKU1ZhbHVlKiBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTTG9jYXRpb246OnJlbG9hZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTG9jYXRp
b246OnJlbG9hZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0yNzgs
NyArMjc4LDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZQogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9uOjphc3NpZ24o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0xvY2F0
aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjk1
LDcgKzI5NSw3IEBAIEpTVmFsdWUqIEpTTG9jYXRpb246OmFzc2lnbihFeGVjU3RhdGUqIGUKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNMb2NhdGlvbjo6dG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNMb2NhdGlv
bjo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2NvbnRleHRX
cmFwcGVyOworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgbV9jb250ZXh0V3JhcHBlcjsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSog
SlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBjb25zdCBVU3RyaW5nJiBtZXNzYWdl
ID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CkBAIC03Myw3ICs3Myw3IEBAIEpT
VmFsdWUqIEpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW8KICAgICByZXR1cm4gdG9KUyhl
eGVjLCBpbXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTWVzc2FnZVBv
cnQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFs
dWUqIEpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTWVzc2Fn
ZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9N
R2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
IGJvb2wgSlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUKICAgICByZXR1cm4gbWlt
ZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFs
dWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZVB0ciBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU01pbWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU01pbWVUeXBlQXJyYXkq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlz
T2JqLT5pbXBsKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNOYW1lZE5vZGVNYXA6OmNhbkdldEl0ZW1zRm9y
TmFtZSgKICAgICByZXR1cm4gaW1wbC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CiB9CiAK
LUpTVmFsdWUqIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNOYW1lZE5vZGVNYXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZU1h
cCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRo
aXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAz
OTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBKU05hbWVkTm9kZXNDb2xsZWN0aW9u
OjpKU05hbWVkTm9kZXNDb2xsCiB7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rp
b246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU05hbWVkTm9k
ZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05h
bWVkTm9kZXNDb2xsZWN0aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5vZGVzQ29s
bGVjdGlvbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiBqc051bWJl
cihleGVjLCB0aGlzT2JqLT5tX25vZGVzLT5zaXplKCkpOwogfQogCi1KU1ZhbHVlKiBKU05hbWVk
Tm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05h
bWVkTm9kZXNDb2xsZWN0aW9uKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0
dXJuIHRvSlMoZXhlYywgKCp0aGlzT2JqLT5tX25vZGVzKVtzbG90LmluZGV4KCldLmdldCgpKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5oCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2Jq
ZWN0UHJvdG90eXBlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG90eXBlKQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlUHRyIGxlbmd0aEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWVQdHIgaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
LCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIE93blB0cjxWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gPiBtX25vZGVzOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQCBzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqCiAgICAgaWYgKCF0
aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBJZGVudGlmaWVyLCBpc1NhZmFyaUZ1bmN0aW9uLCAoZXhlYywgImlzU2FmYXJpIikp
OwotICAgIEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXREaXJlY3Qo
aXNTYWZhcmlGdW5jdGlvbk5hbWUpOworICAgIEpTVmFsdWVQdHIgaXNTYWZhcmlGdW5jdGlvbiA9
IHRoaXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9uTmFtZSk7CiAgICAgaWYgKGlz
U2FmYXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVj
U3RhdGUqCiAKICNlbmRpZgogCi1KU1ZhbHVlKiBKU05hdmlnYXRvcjo6YXBwVmVyc2lvbihFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTTmF2aWdhdG9yOjphcHBWZXJzaW9uKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBOYXZpZ2F0b3IqIGltcCA9IHN0YXRpY19jYXN0
PE5hdmlnYXRvcio+KGltcGwoKSk7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGludCBFeHBlY3Rp
b25Db2RlOwogCi1KU1ZhbHVlKiBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBib29sIG9rID0gaW1wbCgpLT5pbnNlcnRCZWZvcmUodG9Ob2RlKGFyZ3Mu
YXQoZXhlYywgMCkpLCB0b05vZGUoYXJncy5hdChleGVjLCAxKSksIGVjLCB0cnVlKTsKQEAgLTc2
LDcgKzc2LDcgQEAgSlNWYWx1ZSogSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhlY1N0YXRlKgogICAg
IHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlOjpyZXBsYWNlQ2hpbGQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU05vZGU6OnJl
cGxhY2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBvayA9IGltcGwoKS0+cmVwbGFjZUNoaWxk
KHRvTm9kZShhcmdzLmF0KGV4ZWMsIDApKSwgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMSkpLCBlYywg
dHJ1ZSk7CkBAIC04Niw3ICs4Niw3IEBAIEpTVmFsdWUqIEpTTm9kZTo6cmVwbGFjZUNoaWxkKEV4
ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLUpTVmFsdWUqIEpTTm9kZTo6cmVt
b3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIG9rID0gaW1wbCgpLT5y
ZW1vdmVDaGlsZCh0b05vZGUoYXJncy5hdChleGVjLCAwKSksIGVjKTsKQEAgLTk2LDcgKzk2LDcg
QEAgSlNWYWx1ZSogSlNOb2RlOjpyZW1vdmVDaGlsZChFeGVjU3RhdGUqIAogICAgIHJldHVybiBq
c051bGwoKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlOjphcHBlbmRDaGlsZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZTo6YXBwZW5kQ2hpbGQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGJvb2wgb2sgPSBpbXBsKCktPmFwcGVuZENoaWxkKHRvTm9kZShhcmdz
LmF0KGV4ZWMsIDApKSwgZWMsIHRydWUpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSlNOb2Rl
OjptYXJrKCkKICAgICBBU1NFUlQobWFya2VkKCkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBjcmVhdGVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkKK3N0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgY3JlYXRlV3JhcHBlcihFeGVjU3RhdGUqIGV4
ZWMsIE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVCghZ2V0Q2Fj
aGVkRE9NTm9kZVdyYXBwZXIobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZSkpOwpAQCAtMjE4LDcgKzIx
OCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNyZWF0ZVdyYXAKICAgICByZXR1
cm4gd3JhcHBlcjsgICAgCiB9CiAgICAgCi1KU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNT
dGF0ZSogZXhlYywgTm9kZSogbm9kZSkKK0pTVmFsdWVQdHIgdG9KU05ld2x5Q3JlYXRlZChFeGVj
U3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgSlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRl
ZChFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKGV4ZWMsIG5vZGUpOwog
fQogICAgIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCitKU1Zh
bHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogQVNTRVJUX0NMQVNTX0ZJVFNf
SU5fQ0VMTChKU05vZGVGaWx0ZXJDb25kaXRpb24pCiAKLUpTTm9kZUZpbHRlckNvbmRpdGlvbjo6
SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTVmFsdWUqIGZpbHRlcikKK0pTTm9kZUZpbHRlckNvbmRp
dGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTVmFsdWVQdHIgZmlsdGVyKQogICAgIDogbV9m
aWx0ZXIoZmlsdGVyKQogewogfQpAQCAtNjUsNyArNjUsNyBAQCBzaG9ydCBKU05vZGVGaWx0ZXJD
b25kaXRpb246OmFjY2VwdE5vZGUoCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIAotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGNhbGwoZXhlYywgbV9maWx0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9maWx0ZXIs
IGFyZ3MpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2FsbChleGVjLCBtX2ZpbHRlciwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBtX2ZpbHRlciwgYXJncyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBKU05vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRlckNvbmRp
dGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05vZGVGaWx0
ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6OkpTVmFsdWUqIGZpbHRlcikKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SlNOb2RlRmlsdGVyQ29uZGl0aW9uPiBjcmVhdGUoSlNDOjpKU1ZhbHVlUHRy
IGZpbHRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU05v
ZGVGaWx0ZXJDb25kaXRpb24oZmlsdGVyKSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRlcik7CisgICAg
ICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWVQdHIgZmlsdGVyKTsKIAogICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2RlKikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKLSAgICAgICAgSlNDOjpKU1ZhbHVlKiBt
X2ZpbHRlcjsKKyAgICAgICAgSlNDOjpKU1ZhbHVlUHRyIG1fZmlsdGVyOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTIgQEAg
dm9pZCBKU05vZGVGaWx0ZXI6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygpOwogfQogCi1K
U1ZhbHVlKiBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoZXhlYywgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpKSk7
CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTVmFsdWUqIHZhbHVl
KQorUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNWYWx1ZVB0ciB2YWx1ZSkK
IHsKICAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCZKU05vZGVGaWx0ZXI6OnNfaW5mbykpCiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU05vZGVGaWx0ZXIqPihhc09iamVjdCh2YWx1ZSkpLT5p
bXBsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJh
dG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIEpTTm9k
ZUl0ZXJhdG9yOjptYXJrKCkKICAgICBET01PYmplY3Q6Om1hcmsoKTsKIH0KIAotSlNWYWx1ZSog
SlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYywgZWMpOwpAQCAtNTIs
NyArNTIsNyBAQCBKU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTm9kZUl0ZXJh
dG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMsIGVjKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIE5lZWQgdG8gc3VwcG9ydCBjYWxsIHNvIHRoYXQgbGlzdCgwKSB3b3Jrcy4K
LXN0YXRpYyBKU1ZhbHVlKiBjYWxsTm9kZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
ZnVuY3Rpb24sIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQ
dHIgY2FsbE5vZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2sp
OwpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTTm9kZUxpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShF
eGVjCiAgICAgcmV0dXJuIGltcGwtPml0ZW1XaXRoTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1K
U1ZhbHVlKiBKU05vZGVMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
UHRyIEpTTm9kZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05v
ZGVMaXN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOb2RlTGlzdCo+KGFzT2JqZWN0KHNsb3Qu
c2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+aXRl
bVdpdGhOYW1lKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bs
dWdpbkFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGx1Z2luQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAgYm9vbCBKU1BsdWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRQogICAgIHJldHVy
biBwbHVnaW5BcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpT
VmFsdWUqIEpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWVQdHIgSlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTUGx1Z2luQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5Kj4oYXNP
YmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+
aW1wbCgpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGx1Z2luQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBi
b29sIEpTUGx1Z2luOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0CiAgICAgcmV0dXJuIHBsdWdp
bi0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1
Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTUGx1Z2luOjpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBz
dGF0aWNfY2FzdDxKU1BsdWdpbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rp
b25zLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3Rh
dGljIFJ1bnRpbWVPYmplY3RJbXAqIGdldFJ1bnRpbWVPYmplYwogICAgIHJldHVybiBKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCBpbnN0YW5jZSk7CiB9
CiAKLUpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWVQdHIgcnVudGltZU9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTSFRN
TEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkBAIC02OSw3ICs2OSw3IEBAIEpTVmFs
dWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gcnVudGltZU9i
amVjdCA/IHJ1bnRpbWVPYmplY3QgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBydW50
aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcnVu
dGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1M
RWxlbWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBy
dW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBIVE1MRWxlbWVudCogZWxlbWVu
dCwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIFJ1bnRpbWVPYmplY3RJbXAqIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4
ZWMsIGVsZW1lbnQpOwogICAgIGlmICghcnVudGltZU9iamVjdCkKQEAgLTEwMSwxMSArMTAxLDEx
IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbVB1dChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IEpTVmFsdWVQdHIgY2FsbFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlv
biwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBJbnN0YW5jZSogaW5z
dGFuY2UgPSBwbHVnaW5JbnN0YW5jZShzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4oZnVuY3Rp
b24pLT5pbXBsKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOworICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7
CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHJldmlzaW9u
IDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIC8vIFJ1bnRpbWUgb2JqZWN0IHN1cHBvcnQgY29kZSBmb3IgSlNIVE1MQXBwbGV0RWxl
bWVudCwgSlNIVE1MRW1iZWRFbGVtZW50IGFuZCBKU0hUTUxPYmplY3RFbGVtZW50LgogCi0gICAg
SlNDOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU0M6OkpT
VmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgSlNDOjpK
U1ZhbHVlUHRyIHJ1bnRpbWVPYmplY3RHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIEpTQzo6SlNWYWx1
ZVB0ciBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgcnVu
dGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90JiwgSlNIVE1MRWxlbWVudCopOwot
ICAgIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIEpTQzo6SlNWYWx1ZSosIEhUTUxFbGVtZW50KiwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFsdWVQdHIsIEhUTUxFbGVtZW50
KiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU0M6OkNhbGxUeXBlIHJ1bnRpbWVPYmpl
Y3RHZXRDYWxsRGF0YShIVE1MRWxlbWVudCosIEpTQzo6Q2FsbERhdGEmKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1F1YXJhbnRpbmVkTwog
CiBjb25zdCBDbGFzc0luZm8gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OnNfaW5mbyA9IHsg
IkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyIiwgMCwgMCwgMCB9OwogCi1KU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlciogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihKU1Zh
bHVlKiB2YWx1ZSkKK0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6YXNXcmFwcGVyKEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1
ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00OSw5ICs0OSw5IEBAIEpTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyKiBKU1F1YXJhbnRpbmUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqPihvYmplY3QpOwogfQogCi1KU1ZhbHVlKiBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgSlNW
YWx1ZSogdiA9IHNsb3Quc2xvdEJhc2UoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBzbG90LnNsb3RC
YXNlKCk7CiAgICAgQVNTRVJUKHYpOwogICAgIHJldHVybiB2OwogfQpAQCAtMTExLDcgKzExMSw3
IEBAIGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldE93blAKICAgICBQcm9wZXJ0
eVNsb3QgdW53cmFwcGVkU2xvdChtX3Vud3JhcHBlZE9iamVjdCk7CiAgICAgYm9vbCByZXN1bHQg
PSBtX3Vud3JhcHBlZE9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KHVud3JhcHBlZEV4ZWNTdGF0
ZSgpLCBpZGVudGlmaWVyLCB1bndyYXBwZWRTbG90KTsKICAgICBpZiAocmVzdWx0KSB7Ci0gICAg
ICAgIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndy
YXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllcik7CisgICAgICAgIEpTVmFsdWVQdHIgdW53cmFw
cGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBp
ZGVudGlmaWVyKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b20od3JhcE91dGdvaW5nVmFsdWUodW53
cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZhbHVlKSwgY2FjaGVkVmFsdWVHZXR0ZXIpOwog
ICAgIH0KIApAQCAtMTMwLDcgKzEzMCw3IEBAIGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6OmdldE93blAKICAgICBQcm9wZXJ0eVNsb3QgdW53cmFwcGVkU2xvdChtX3Vud3JhcHBlZE9i
amVjdCk7CiAgICAgYm9vbCByZXN1bHQgPSBtX3Vud3JhcHBlZE9iamVjdC0+Z2V0T3duUHJvcGVy
dHlTbG90KHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBpZGVudGlmaWVyLCB1bndyYXBwZWRTbG90KTsK
ICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlID0gdW53
cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllcik7Cisg
ICAgICAgIEpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVl
KHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBpZGVudGlmaWVyKTsKICAgICAgICAgc2xvdC5zZXRDdXN0
b20od3JhcE91dGdvaW5nVmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFZhbHVl
KSwgY2FjaGVkVmFsdWVHZXR0ZXIpOwogICAgIH0KIApAQCAtMTM5LDcgKzEzOSw3IEBAIGJvb2wg
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmdldE93blAKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQordm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZVB0ciB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghYWxsb3dzU2V0UHJvcGVydHko
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXI6OnB1dChFeGUKICAgICB0cmFuc2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRl
KGV4ZWMpOwogfQogCi12b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFhbGxvd3NTZXRQcm9wZXJ0
eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xOTcsOSArMTk3LDkgQEAgSlNPYmplY3QqIEpTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyOjpjbwogICAgIENvbnN0cnVjdFR5cGUgdW53cmFwcGVkQ29u
c3RydWN0VHlwZSA9IHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LT5nZXRDb25zdHJ1Y3REYXRh
KHVud3JhcHBlZENvbnN0cnVjdERhdGEpOwogICAgIEFTU0VSVCh1bndyYXBwZWRDb25zdHJ1Y3RU
eXBlICE9IENvbnN0cnVjdFR5cGVOb25lKTsKIAotICAgIEpTVmFsdWUqIHVud3JhcHBlZFJlc3Vs
dCA9IEpTQzo6Y29uc3RydWN0KHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB3cmFwcGVy
LT5tX3Vud3JhcHBlZE9iamVjdCwgdW53cmFwcGVkQ29uc3RydWN0VHlwZSwgdW53cmFwcGVkQ29u
c3RydWN0RGF0YSwgcHJlcGFyZWRBcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHVud3JhcHBlZFJlc3Vs
dCA9IEpTQzo6Y29uc3RydWN0KHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB3cmFwcGVy
LT5tX3Vud3JhcHBlZE9iamVjdCwgdW53cmFwcGVkQ29uc3RydWN0VHlwZSwgdW53cmFwcGVkQ29u
c3RydWN0RGF0YSwgcHJlcGFyZWRBcmdzKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlID0g
d3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCks
IHVud3JhcHBlZFJlc3VsdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZSA9IHdyYXBwZXIt
PndyYXBPdXRnb2luZ1ZhbHVlKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBw
ZWRSZXN1bHQpOwogICAgIEFTU0VSVChyZXN1bHRWYWx1ZS0+aXNPYmplY3QoKSk7CiAgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGFzT2JqZWN0KHJlc3VsdFZhbHVlKTsKIApAQCAtMjE5LDcgKzIxOSw3
IEBAIENvbnN0cnVjdFR5cGUgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIKICAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKLWJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHBy
b3RvKQorYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6aGFzSW5zdGFuY2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBKU1ZhbHVlUHRyIHByb3RvKQogewogICAgIGlm
ICghYWxsb3dzSGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjMxLDEx
ICsyMzEsMTEgQEAgYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6aGFzSW5zdAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IHN0YXRpY19jYXN0PEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyKj4oZnVuY3Rpb24pOwogCi0gICAgSlNWYWx1ZSogcHJlcGFyZWRUaGlzVmFsdWUg
PSB3cmFwcGVyLT5wcmVwYXJlSW5jb21pbmdWYWx1ZShleGVjLCB0aGlzVmFsdWUpOworICAgIEpT
VmFsdWVQdHIgcHJlcGFyZWRUaGlzVmFsdWUgPSB3cmFwcGVyLT5wcmVwYXJlSW5jb21pbmdWYWx1
ZShleGVjLCB0aGlzVmFsdWUpOwogCiAgICAgQXJnTGlzdCBwcmVwYXJlZEFyZ3M7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQpAQCAtMjQ3LDkgKzI0Nyw5IEBA
IEpTVmFsdWUqIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjYWwKICAgICBDYWxsVHlwZSB1
bndyYXBwZWRDYWxsVHlwZSA9IHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LT5nZXRDYWxsRGF0
YSh1bndyYXBwZWRDYWxsRGF0YSk7CiAgICAgQVNTRVJUKHVud3JhcHBlZENhbGxUeXBlICE9IENh
bGxUeXBlTm9uZSk7CiAKLSAgICBKU1ZhbHVlKiB1bndyYXBwZWRSZXN1bHQgPSBKU0M6OmNhbGwo
d3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0
LCB1bndyYXBwZWRDYWxsVHlwZSwgdW53cmFwcGVkQ2FsbERhdGEsIHByZXBhcmVkVGhpc1ZhbHVl
LCBwcmVwYXJlZEFyZ3MpOworICAgIEpTVmFsdWVQdHIgdW53cmFwcGVkUmVzdWx0ID0gSlNDOjpj
YWxsKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB3cmFwcGVyLT5tX3Vud3JhcHBlZE9i
amVjdCwgdW53cmFwcGVkQ2FsbFR5cGUsIHVud3JhcHBlZENhbGxEYXRhLCBwcmVwYXJlZFRoaXNW
YWx1ZSwgcHJlcGFyZWRBcmdzKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHdyYXBwZXItPndy
YXBPdXRnb2luZ1ZhbHVlKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRS
ZXN1bHQpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFs
dWUod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CiAKICAg
ICB3cmFwcGVyLT50cmFuc2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciA6IHB1YmxpYyBK
U0M6OkpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBKU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlciogYXNXcmFwcGVyKEpTQzo6SlNWYWx1ZSopOworICAgICAgICBzdGF0aWMg
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIGFzV3JhcHBlcihKU0M6OkpTVmFsdWVQdHIpOwog
CiAgICAgICAgIHZpcnR1YWwgfkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKCk7CiAKQEAgLTQ1
LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpT
dHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUqIHByb3RvKSAKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
VmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG8sIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBKU0M6
OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6T3ZlcnJpZGVzSGFzSW5zdGFuY2UpKTsgCiAg
ICAgICAgIH0KQEAgLTU5LDggKzU5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQs
IEpTQzo6SlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgdW5z
aWduZWQsIEpTQzo6SlNWYWx1ZVB0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsK
QEAgLTY4LDcgKzY4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEpT
Qzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDOjpDYWxsRGF0YSYpOwogICAgICAgICB2aXJ0dWFs
IEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYp
OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSosIEpTQzo6SlNWYWx1ZSogcHJvdG8pOworICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFzSW5zdGFuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6SlNWYWx1
ZVB0ciBwcm90byk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiAKQEAgLTgyLDE0ICs4Miwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NDYWxs
QXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBhbGxvd3NHZXRQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogcHJlcGFyZUluY29taW5nVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVl
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIHByZXBhcmVJbmNv
bWluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIg
dW53cmFwcGVkVmFsdWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQ
dHIgd3JhcE91dGdvaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6
SlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1ZSkgY29uc3QgPSAwOwogCi0gICAgICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUqIGNhY2hlZFZhbHVlR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZVB0ciBjYWNoZWRWYWx1ZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAg
dm9pZCB0cmFuc2ZlckV4Y2VwdGlvblRvRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7
CiAKLSAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSogY2FsbChKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgSlND
OjpBcmdMaXN0Jik7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgY2FsbChKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0M6OkpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKICAgICAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBjb25zdCBKU0M6OkFy
Z0xpc3QmKTsKIAogICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBtX3Vud3JhcHBlZEdsb2Jh
bE9iamVjdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcAkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw5ICsyOCw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXN0YXRpYyBKU1Zh
bHVlKiBqc1JHQkNvbG9yUmVkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBqc1JHQkNvbG9yR3JlZW4oRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFs
dWUqIGpzUkdCQ29sb3JCbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzUkdCQ29sb3JSZWQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFs
dWVQdHIganNSR0JDb2xvckdyZWVuKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzUkdCQ29sb3JCbHVlKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogLyoKIEBi
ZWdpbiBKU1JHQkNvbG9yVGFibGUKQEAgLTU5LDcgKzU5LDcgQEAgYm9vbCBKU1JHQkNvbG9yOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlYwogICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNS
R0JDb2xvciwgRE9NT2JqZWN0PihleGVjLCAmSlNSR0JDb2xvclRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlKiBnZXRKU1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgY29sb3IpCitKU1ZhbHVlUHRyIGdldEpTUkdCQ29sb3IoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBjb2xvcikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBKU1JHQkNvbG9y
KGV4ZWMsIGNvbG9yKTsKIH0KQEAgLTY4LDE3ICs2OCwxNyBAQCBKU1ZhbHVlKiBnZXRKU1JHQkNv
bG9yKEV4ZWNTdGF0ZSogZXhlYywgCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1KU1Zh
bHVlKiBqc1JHQkNvbG9yUmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNSR0JDb2xvclJlZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgoc3RhdGlj
X2Nhc3Q8SlNSR0JDb2xvcio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkgPj4g
MTYpICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKIH0KIAotSlNWYWx1
ZSoganNSR0JDb2xvckdyZWVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNSR0JDb2xvckdyZWVuKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKChzdGF0
aWNfY2FzdDxKU1JHQkNvbG9yKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSA+
PiA4KSAmIDB4RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiB9CiAKLUpTVmFs
dWUqIGpzUkdCQ29sb3JCbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNSR0JDb2xvckJsdWUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIHJldHVybiB0b0pTKGV4ZWMsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8SlNSR0JDb2xvcio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkgJiAw
eEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JHQkNvbG9yLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JHQkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG90eXBl
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUpKTsKICAgICAgICAgfQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHVuc2lnbmVkIG1fY29sb3I7CiAgICAgfTsKIAotICAgIEpTQzo6SlNW
YWx1ZSogZ2V0SlNSR0JDb2xvcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvbG9yKTsKKyAg
ICBKU0M6OkpTVmFsdWVQdHIgZ2V0SlNSR0JDb2xvcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGNvbG9yKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTU1FMUmVzdWx0U2V0Um93
TGlzdDo6aXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgYm9vbCBpbmRleE9rOwogICAgIGludCBpbmRleCA9IGFyZ3Mu
YXQoZXhlYywgMCktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC01Niw3ICs1Niw3IEBAIEpT
VmFsdWUqIEpTU1FMUmVzdWx0U2V0Um93TGlzdDo6aXRlbShFeGUKICAgICB1bnNpZ25lZCB2YWx1
ZXNJbmRleCA9IGluZGV4ICogbnVtQ29sdW1uczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtQ29sdW1uczsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFNRTFZhbHVlJiB2YWx1ZSA9IG1f
aW1wbC0+dmFsdWVzKClbdmFsdWVzSW5kZXggKyBpXTsKLSAgICAgICAgSlNWYWx1ZSoganNWYWx1
ZSA9IG5vVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gbm9WYWx1ZSgpOwog
CiAgICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFNRTFZh
bHVlOjpTdHJpbmdWYWx1ZToKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
LUpTVmFsdWUqIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBTdHJpbmcg
c3FsU3RhdGVtZW50ID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNTUsNyArNTUsNyBAQCBKU1ZhbHVlKiBKU1NRTFRy
YW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgICAgIEpTVmFsdWVQ
dHIgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZh
bHVlLT50b1VJbnQzMihleGVjKTsKQEAgLTYzLDcgKzYzLDcgQEAgSlNWYWx1ZSogSlNTUUxUcmFu
c2FjdGlvbjo6ZXhlY3V0ZVNxbChFeAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwogICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNTVkdFbGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTQ4LDcgKzQ4LDcgQEAgSlNWYWx1
ZSogSlNTVkdFbGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50TAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
U1ZHRWxlbWVudEluc3RhbmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEz
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSogSlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIg
SlNTVkdMZW5ndGg6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBTVkdMZW5n
dGggaW1wKCppbXBsKCkpOwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbXAudmFsdWUoY29u
dGV4dCgpKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRV
bml0cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
U1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+KiB3
cmFwcGVyID0gaW1wbCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTWF0cml4
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
TWF0cml4Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTU1ZHTWF0
cml4OjptdWx0aXBseShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtMzcs
MTAgKzM3LDEwIEBAIEpTVmFsdWUqIEpTU1ZHTWF0cml4OjptdWx0aXBseShFeGVjU3RhdGUKICAg
ICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5z
Zm9ybT46OmNyZWF0ZShpbXAubXVsdGlwbHkoc2Vjb25kTWF0cml4KSkuZ2V0KCksIG1fY29udGV4
dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGlt
cCgqaW1wbCgpKTsKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgSlNTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLmludmVyc2Uo
KSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9
IHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+Ojpj
cmVhdGUoaW1wLmludmVyc2UoKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiAKICAgICBpZiAo
IWltcC5pc0ludmVydGlibGUoKSkKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNWR0V4
Y2VwdGlvbjo6U1ZHX01BVFJJWF9OT1RfSU5WRVJUQUJMRSk7CkBAIC00OCw3ICs0OCw3IEBAIEpT
VmFsdWUqIEpTU1ZHTWF0cml4OjppbnZlcnNlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6dHJhbnNsYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnRyYW5zbGF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGltcCgqaW1wbCgpKTsKIApAQCAtNTgsNyArNTgsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJp
eDo6dHJhbnNsYXRlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnRyYW5zbGF0ZSh4LCB5
KSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpz
Y2FsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
U1ZHTWF0cml4OjpzY2FsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtNjYsNyArNjYsNyBAQCBK
U1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUo
aW1wLnNjYWxlKHNjYWxlRmFjdG9yKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpT
VmFsdWUqIEpTU1ZHTWF0cml4OjpzY2FsZU5vblVuaWZvcm0oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3Jt
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gaW1wKCppbXBsKCkpOwogCkBAIC03Niw3ICs3Niw3IEBAIEpTVmFsdWUqIEpTU1ZHTWF0
cml4OjpzY2FsZU5vblVuaWZvcm0oRXgKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuc2NhbGVOb25Vbmlm
b3JtKHNjYWxlRmFjdG9yWCwgc2NhbGVGYWN0b3JZKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7
CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6cm90YXRlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1w
KCppbXBsKCkpOwogCkBAIC04NCwxNCArODQsMTQgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJv
dGF0ZShFeGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlw
ZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGUoYW5nbGUpKS5nZXQo
KSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZUZy
b21WZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKICAKICAg
ICBmbG9hdCB4ID0gYXJncy5hdChleGVjLCAwKS0+dG9GbG9hdChleGVjKTsKICAgICBmbG9hdCB5
ID0gYXJncy5hdChleGVjLCAxKS0+dG9GbG9hdChleGVjKTsKIAotICAgIEpTQzo6SlNWYWx1ZSog
cmVzdWx0ID0gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5z
Zm9ybT46OmNyZWF0ZShpbXAucm90YXRlRnJvbVZlY3Rvcih4LCB5KSkuZ2V0KCksIG1fY29udGV4
dC5nZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgSlNTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnJvdGF0ZUZy
b21WZWN0b3IoeCwgeSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKHggPT0g
MC4wIHx8IHkgPT0gMC4wKQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0
aW9uOjpTVkdfSU5WQUxJRF9WQUxVRV9FUlIpOwpAQCAtOTksMTkgKzk5LDE5IEBAIEpTVmFsdWUq
IEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6ZmxpcFgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OmZsaXBYKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9y
bT46OmNyZWF0ZShpbXAuZmxpcFgoKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpT
VmFsdWUqIEpTU1ZHTWF0cml4OjpmbGlwWShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6ZmxpcFkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogICAgIHJldHVy
biB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6
Y3JlYXRlKGltcC5mbGlwWSgpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1
ZSogSlNTVkdNYXRyaXg6OnNrZXdYKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnNrZXdYKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCkBA
IC0xMTksNyArMTE5LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNrZXdYKEV4ZWNTdGF0ZSog
ZQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5l
VHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5za2V3WChhbmdsZSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0
KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2tld1koRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6c2tld1koRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBp
bXAoKmltcGwoKSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1Bh
dGhTZWdDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIFNWR1BhdGhTZWcqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKK0pT
VmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFNWR1BhdGhTZWcqIG9iamVjdCwgU1ZHRWxl
bWVudCogY29udGV4dCkKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRo
U2VnTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NWR1Bh
dGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTU1ZHUGF0aFNlZ0xpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIApAQCAtNDgsNyAr
NDgsNyBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRp
YWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2VnKiBu
ZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtNTcsMTQgKzU3LDE0
IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXgKIAogICAgIFNWR1Bh
dGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGltcC0+aW5pdGlhbGl6ZShuZXdJdGVtLCBlYykpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0Lmdl
dCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29u
dGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkp
OyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0
OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKQEAgLTc4LDEyICs3OCwx
MiBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTCiAgICAgU1ZHUGF0
aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4oaW1wbCgpKTsKICAg
ICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmdldEl0ZW0oaW5kZXgsIGVjKSk7
CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQu
Z2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9j
b250ZXh0LmdldCgpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZv
cmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NW
R1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2Vn
KiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtOTcsMTQgKzk3
LDE0IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWYKIAogICAgIFNW
R1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7
CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1w
LT5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2NvbnRleHQuZ2V0KCkp
OworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGlt
cC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgp
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9jb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNT
VkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BhdGhTZWcqIG5l
d0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdChleGVjLCAwKSk7CkBAIC0xMTgsMTQgKzExOCwx
NCBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbShFCiAKICAgICBTVkdQ
YXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+
cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAg
SlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5yZXBs
YWNlSXRlbShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgpKTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFu
Z2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1BhdGhTZWdMaXN0
OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKQEAgLTE0MCwyMSArMTQwLDIxIEBAIEpTVmFs
dWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXgKIAogICAgIFJlZlB0cjxTVkdQYXRo
U2VnPiBvYmooaW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOwogCi0gICAgSlNDOjpKU1ZhbHVl
KiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iai5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBK
U0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBvYmouZ2V0KCksIG1fY29udGV4dC5n
ZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29udGV4dC0+
c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjphcHBl
bmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNTVkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUGF0aFNlZyog
bmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KGV4ZWMsIDApKTsKIAogICAgIFNWR1BhdGhT
ZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7CiAKLSAg
ICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5hcHBl
bmRJdGVtKG5ld0l0ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVl
UHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5hcHBlbmRJdGVtKG5ld0l0
ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKIAogICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRB
dHRyaWJ1dGVOYW1lKCkpOyAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQb2lu
dExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2lu
dD4gUE9ETGlzdEl0ZW07CiB0eXBlZGVmIFNWR0xpc3Q8UmVmUHRyPFBPRExpc3RJdGVtPiA+IFNW
R1BvaW50TGlzdEJhc2U7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRM
aXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVl
UHRyIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdF
bGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0
ZW0gPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoR2V0dGVyKEV4
ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGUoaXRlbS5nZXQoKSwgbGlzdC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSog
ZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1l
bnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbSA+
IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRMaXN0KiBsaXN0
LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIEpT
VmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFs
dWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9u
Q29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1Jl
ZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGZpbmlzaFNldHRlclJl
YWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1l
bnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4g
aXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5
UmVzdQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8Rmxv
YXRQb2ludD46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1KU1ZhbHVlKiBK
U1NWR1BvaW50TGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgSlNTVkdQb2ludExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5jbGVhcihl
Yyk7CkBAIC03Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpjbGVhcihFeGVj
U3RhdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2lu
dExpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZH
UG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcgKzgwLDcgQEAgSlNWYWx1
ZSogSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlYwogICAgICAgICBsaXN0SW1wLT5pbml0
aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdChleGVjLCAwKSkpLCBl
YykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHUG9pbnRMaXN0OjpnZXRJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIGlu
ZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihl
eGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6
OmdldEl0ZW0oRXhlY1N0YQogICAgICAgICBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwog
fQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHUG9pbnRMaXN0Ojpp
bnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDEp
LT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBKU1ZhbHVlKiBK
U1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yCiAgICAgICAgIGxpc3RJbXAtPmluc2VydEl0
ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KGV4ZWMsIDApKSks
IGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1Bv
aW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhl
YywgMSktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xMjUsNyArMTI1LDcgQEAgSlNWYWx1
ZSogSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZQogICAgICAgICBsaXN0SW1wLT5yZXBs
YWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoZXhlYywgMCkpKSwg
aW5kZXgsIGVjKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZW1vdmVJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdQb2lu
dExpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywg
MCktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xNDAsNyArMTQwLDcgQEAgSlNWYWx1ZSog
SlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlYwogICAgICAgICBsaXN0SW1wLT5yZW1vdmVJ
dGVtKGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRl
bShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZH
UG9pbnRMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNlKiBs
aXN0SW1wID0gaW1wbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9y
bUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdU
cmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBTVkdQT0RMaXN0SXRlbTxT
VkdUcmFuc2Zvcm0+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJlZlB0cjxQT0RMaXN0
SXRlbT4gPiBTVkdUcmFuc2Zvcm1MaXN0QmFzZTsKIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250
ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVt
KQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3Qs
IFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC00Miw3ICs0Miw3IEBAIHN0YXRpYyBKU1Zh
bHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsK
IH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0
LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNo
U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNv
bnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0
ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRl
KiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxp
c3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgp
LCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVz
dWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRl
eHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0p
CitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zv
cm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewogICAgIGlmIChl
YykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtNjMsNyArNjMsNyBA
QCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1CiAgICAgcmV0dXJuIHRv
SlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUo
Kml0ZW0pLmdldCgpLCBjb250ZXh0KTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1NW
R1RyYW5zZm9ybUxpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5jbGVhcihlYyk7CkBAIC03
Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1MKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdU
cmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcgKzgwLDcgQEAgSlNW
YWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKAogICAgICAgICBsaXN0SW1wLT5p
bml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoZXhlYywg
MCkpKSwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFu
c2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMs
IDApLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSog
SlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZQogICAgICAgICBsaXN0SW1wLT5nZXRJdGVt
KGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0
ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBp
bmRleCA9IGFyZ3MuYXQoZXhlYywgMSktPnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTEw
LDcgKzExMCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRlbUIKICAg
ICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9yZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1Ry
YW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBK
U1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgYm9vbCBpbmRleE9r
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdChleGVjLCAxKS0+dG9VSW50MzIoZXhlYywg
aW5kZXhPayk7CkBAIC0xMjUsNyArMTI1LDcgQEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjpyZXBsYWNlSXRlbQogICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShQT0RMaXN0SXRlbTo6
Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQog
Ci1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJl
bW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJv
b2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywgMCktPnRvVUlu
dDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJh
bnNmb3JtTGlzdDo6cmVtb3ZlSXRlbSgKICAgICAgICAgbGlzdEltcC0+cmVtb3ZlSXRlbShpbmRl
eCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFu
c2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3Jh
Z2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNTdG9y
YWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1MKICAgICByZXR1cm4gaW1wbC0+Y29udGFpbnMo
cHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNTdG9yYWdlOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTU3RvcmFnZSogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3RvcmFn
ZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiBqc1N0cmluZ09yTnVs
bChleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1lKSk7CkBAIC01Niw3
ICs1Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICBp
ZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTU3RvcmFnZSwgQmFzZT4oZXhlYywgc19pbmZvLnByb3BI
YXNoVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gdGhpcy0+cHJvdG90
eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUoKTsKICAg
ICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NzQsNyArNzQsNyBAQCBib29sIEpTU3RvcmFnZTo6Y3VzdG9tR2V0UHJvcGVydHlOYW1lcyhFCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3RvcmFnZTo6Y3VzdG9tUHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JikKK2Jvb2wgSlNTdG9yYWdlOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlm
IHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4K
ICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0
ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKQEAgLTgzLDcgKzgz
LDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZQogICAgIGlmIChn
ZXRTdGF0aWNWYWx1ZVNsb3Q8SlNTdG9yYWdlLCBCYXNlPihleGVjLCBzX2luZm8ucHJvcEhhc2hU
YWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUo
KTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHRoaXMtPnByb3RvdHlwZSgpOwogICAgIGlm
IChwcm90b3R5cGUtPmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVT
aGVldCogc3R5bGVTaGVldCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFN0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBib29sIEpTU3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtCiAgICAgcmV0dXJuIHN0
eWxlU2hlZXRMaXN0LT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSog
SlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciBKU1N0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3Qq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MU3R5bGVFbGVtZW50KiBlbGVt
ZW50ID0gdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMsIFRleHQqIHRleHQpCitK
U1ZhbHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBUZXh0KiB0ZXh0KQog
ewogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmsoKQogICAgIERPTU9i
amVjdDo6bWFyaygpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNUcmVl
V2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wYXJlbnROb2RlKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTQ1LDcgKzQ1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fs
a2VyOjpwYXJlbnROb2RlKEV4ZWNTdAogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQog
ICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBOb2RlKiBub2Rl
ID0gaW1wbCgpLT5maXJzdENoaWxkKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKQEAgLTUzLDcgKzUzLDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4
ZWNTdAogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogSlNU
cmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bGFzdENoaWxk
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTYxLDcgKzYxLDcgQEAg
SlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YQogICAgIHJldHVybiB0b0pT
KGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTVHJl
ZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHRTaWJsaW5nKGV4ZWMpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTY5LDcgKzY5LDcgQEAgSlNWYWx1ZSogSlNUcmVl
V2Fsa2VyOjpuZXh0U2libGluZyhFeGVjUwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwog
fQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6OnBy
ZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cHJldmlvdXNTaWJsaW5nKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTc3LDcgKzc3LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fs
a2VyOjpwcmV2aW91c1NpYmxpbmcoRQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQog
ICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6OnByZXZpb3Vz
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgTm9kZSog
bm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91
c05vZGUoRXhlYwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1
ZSogSlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIEpTVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHRO
b2RlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMzk1OTMpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTV29ya2Vy
Q29udGUKIAogY29uc3QgQ2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dEJhc2U6OnNfaW5mbyA9IHsg
IldvcmtlckNvbnRleHQiLCAwLCAwLCBnZXRKU1dvcmtlckNvbnRleHRCYXNlVGFibGUgfTsKIAot
dm9pZCBKU1dvcmtlckNvbnRleHRCYXNlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit2b2lkIEpTV29ya2VyQ29udGV4dEJhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxKU1dvcmtlckNvbnRleHRCYXNlLCBCYXNlPihl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBnZXRKU1dvcmtlckNvbnRleHRCYXNlVGFibGUoZXhl
YyksIHRoaXMsIHNsb3QpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRCYXNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckNvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBKU1dvcmtlckNvbnRleHRCYXNlKFBhc3NSZWZQdHI8SlND
OjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+KTsKICAgICAgICAgdmlydHVh
bCB+SlNXb3JrZXJDb250ZXh0QmFzZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1
dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE3ICs2NSwxNyBAQCB2b2lkIEpTV29ya2VyQ29udGV4
dDo6bWFyaygpCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBhc1ZhbHVlKCk7CiB9CiAKLXZvaWQg
SlNXb3JrZXJDb250ZXh0OjpzZXRTZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIEpTV29ya2VyQ29udGV4dDo6c2V0U2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgInNlbGYiKSwgdmFs
dWUpOwogfQogCi1KU1ZhbHVlKiBKU1dvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1dvcmtlckNv
bnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0KGV4
ZWMsIDEpKTsKICAgICBpZiAoIWxpc3RlbmVyKQpAQCAtODQsNyArODQsNyBAQCBKU1ZhbHVlKiBK
U1dvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIEpTV29ya2VyQ29udGV4dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTV29ya2VyQ29u
dGV4dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmlu
ZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkpOwogICAg
IGlmICghbGlzdGVuZXIpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIEpTV29ya2VyOjptYXJr
KCkKICAgICB9CiB9CiAKLUpTVmFsdWUqIEpTV29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNXb3JrZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0
KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVj
dCkKQEAgLTcwLDcgKzcwLDcgQEAgSlNWYWx1ZSogSlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlYwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1dvcmtlcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTV29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksNyArODksNyBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6Om1hcmsoKQogfQogCiAv
LyBDdXN0b20gZnVuY3Rpb25zCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVx
dWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwpAQCAtMTE2LDcgKzExNiw3IEBAIEpT
VmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXQKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1M
SHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKQEAg
LTEyNywxMyArMTI3LDEzIEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RI
ZWEKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVx
dWVzdDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChhcmdzLmlzRW1w
dHkoKSkKICAgICAgICAgaW1wbCgpLT5zZW5kKGVjKTsKICAgICBlbHNlIHsKLSAgICAgICAgSlNW
YWx1ZSogdmFsID0gYXJncy5hdChleGVjLCAwKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWwgPSBh
cmdzLmF0KGV4ZWMsIDApOwogICAgICAgICBpZiAodmFsLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICAgICAgaW1wbCgpLT5zZW5kKGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLT5pc09i
amVjdCgmSlNEb2N1bWVudDo6c19pbmZvKSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBKU1ZhbHVlKiBK
U1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0CiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7
CiAgICAgaW50cHRyX3Qgc291cmNlSUQ7CiAgICAgVVN0cmluZyBzb3VyY2VVUkw7Ci0gICAgSlNW
YWx1ZSogZnVuY3Rpb247CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbjsKICAgICBleGVjLT5pbnRl
cnByZXRlcigpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291
cmNlSUQsIHNvdXJjZVVSTCwgZnVuY3Rpb24pOwogICAgIGltcGwoKS0+c2V0TGFzdFNlbmRMaW5l
TnVtYmVyKHNpZ25lZExpbmVOdW1iZXIgPj0gMCA/IHNpZ25lZExpbmVOdW1iZXIgOiAwKTsKICAg
ICBpbXBsKCktPnNldExhc3RTZW5kVVJMKHNvdXJjZVVSTCk7CkBAIC0xNTYsMTggKzE1NiwxOCBA
QCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNl
SGVhZGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMi
KTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUqIGhlYWRlciA9IGpz
U3RyaW5nT3JOdWxsKGV4ZWMsIGltcGwoKS0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJncy5hdChleGVj
LCAwKS0+dG9TdHJpbmcoZXhlYyksIGVjKSk7CisgICAgSlNWYWx1ZVB0ciBoZWFkZXIgPSBqc1N0
cmluZ09yTnVsbChleGVjLCBpbXBsKCktPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpLCBlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CiAgICAgcmV0dXJuIGhlYWRlcjsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b3Zl
cnJpZGVNaW1lVHlwZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5cGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0Ojpv
dmVycmlkZU1pbWVUCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpT
WE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC0xODgs
NyArMTg4LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZQogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtMjAwLDcgKzIwMCw3IEBA
IEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGkKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdDo6cmVz
cG9uc2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4ganNPd25lZFN0
cmluZ09yTnVsbChleGVjLCBpbXBsKCktPnJlc3BvbnNlVGV4dCgpKTsKIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RVcGxvYWRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQg
SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6bWFyaygpCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU1hN
TEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRk
RXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qo
aW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0
KQpAQCAtODksNyArODksNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRF
dmVuCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChp
bXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nv
cjo6aW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGVldChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogbm9kZVZhbCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBub2RlVmFsID0gYXJncy5hdChleGVjLCAw
KTsKICAgICBpZiAobm9kZVZhbC0+aXNPYmplY3QoJkpTTm9kZTo6c19pbmZvKSkgewogICAgICAg
ICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChub2RlVmFsKSk7
CiAgICAgICAgIGltcGwoKS0+aW1wb3J0U3R5bGVzaGVldChub2RlLT5pbXBsKCkpOwpAQCAtNTgs
MTAgKzU4LDEwIEBAIEpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6aW1wb3J0U3R5bGVzaGUKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjp0
cmFuc2Zvcm1Ub0ZyYWdtZW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0ZyYWdtZW50KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBub2RlVmFsID0g
YXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBkb2NWYWwgPSBhcmdzLmF0KGV4ZWMsIDEp
OworICAgIEpTVmFsdWVQdHIgbm9kZVZhbCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1
ZVB0ciBkb2NWYWwgPSBhcmdzLmF0KGV4ZWMsIDEpOwogICAgIGlmIChub2RlVmFsLT5pc09iamVj
dCgmSlNOb2RlOjpzX2luZm8pICYmIGRvY1ZhbC0+aXNPYmplY3QoJkpTRG9jdW1lbnQ6OnNfaW5m
bykpIHsKICAgICAgICAgV2ViQ29yZTo6Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+
KGFzT2JqZWN0KG5vZGVWYWwpKS0+aW1wbCgpOwogICAgICAgICBEb2N1bWVudCogZG9jID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oYXNPYmplY3QoZG9j
VmFsKSktPmltcGwoKSk7CkBAIC03MSw5ICs3MSw5IEBAIEpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nv
cjo6dHJhbnNmb3JtVG9GcmEKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zv
cm1Ub0RvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICBKU1ZhbHVlKiBub2RlVmFsID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIG5v
ZGVWYWwgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChub2RlVmFsLT5pc09iamVjdCgmSlNO
b2RlOjpzX2luZm8pKSB7CiAgICAgICAgIEpTTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9k
ZSo+KGFzT2JqZWN0KG5vZGVWYWwpKTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHRE
b2N1bWVudCA9IGltcGwoKS0+dHJhbnNmb3JtVG9Eb2N1bWVudChub2RlLT5pbXBsKCkpOwpAQCAt
ODUsNyArODUsNyBAQCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6
c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5l
ZE9yTnVsbCgpIHx8IGFyZ3MuYXQoZXhlYywgMiktPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAvLyBUaHJvdyBleGNlcHRpb24/CkBAIC05Niw3ICs5
Niw3IEBAIEpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEUKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuYXQoZXhlYywgMSktPmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIEpT
VmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEUKICAgICByZXR1cm4ganNTdHJp
bmdPclVuZGVmaW5lZChleGVjLCB2YWx1ZSk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nv
cjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDM5NTkzKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMiArMzksMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIGZ1bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorU2NoZWR1bGVkQWN0
aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGZ1bmN0aW9u
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKIHsKICAg
ICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOwotICAgIGZvciAoQXJn
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgbV9hcmdzLmFwcGVuZCgoKml0KS5qc1ZhbHVlKGV4ZWMp
KTsKKyAgICB9CiB9CiAKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0
aW9uLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgKi8KICAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb24gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgU2NoZWR1bGVkQWN0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUq
IGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgU2NoZWR1bGVkQWN0aW9u
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWVQdHIgZnVuY3Rpb24sIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpOwogICAgICAgICBTY2hlZHVsZWRBY3Rpb24oY29uc3QgU3RyaW5nJiBjb2Rl
KQogICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAgICAgICAgewpAQCAtNDYsOCArNDYsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBleGVjdXRl
KEpTRE9NV2luZG93U2hlbGwqKTsKIAotICAgICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0M6OkpT
VmFsdWU+IG1fZnVuY3Rpb247Ci0gICAgICAgIFZlY3RvcjxKU0M6OlByb3RlY3RlZFB0cjxKU0M6
OkpTVmFsdWU+ID4gbV9hcmdzOworICAgICAgICBKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHIgbV9m
dW5jdGlvbjsKKyAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cj4gbV9hcmdz
OwogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIFNjcmlwdENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNrKEV4ZWNTdGEKICAgICBpbnQgc2ln
bmVkTGluZU51bWJlcjsKICAgICBpbnRwdHJfdCBzb3VyY2VJRDsKICAgICBVU3RyaW5nIHVybFN0
cmluZzsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbjsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uOwog
CiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25l
ZExpbmVOdW1iZXIsIHNvdXJjZUlELCB1cmxTdHJpbmcsIGZ1bmN0aW9uKTsKIApAQCAtOTAsNyAr
OTAsNyBAQCB2b2lkIFNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFtX2Nh
bGxlciB8fCBtX2luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU1ZhbHVlKiBm
dW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIG1fY2Fs
bGVyKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmMgPSBtX2V4ZWMtPmludGVycHJldGVyKCktPnJldHJp
ZXZlQ2FsbGVyKG1fZXhlYywgbV9jYWxsZXIpOwogICAgIHdoaWxlICghZnVuYy0+aXNOdWxsKCkp
IHsKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlvbiA9IGFzSW50ZXJu
YWxGdW5jdGlvbihmdW5jKTsKICAgICAgICAgQXJnTGlzdCBlbXB0eUFyZ0xpc3Q7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM5NTkzKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjk2LDcgKzI5Niw3IEBAIE5QT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVT
Y3JpcHQKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKICAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlKiBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZXhl
YywgcGx1Z2luKTsKKyAgICBKU1ZhbHVlUHRyIGpzRWxlbWVudFZhbHVlID0gdG9KUyhleGVjLCBw
bHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVudFZhbHVlLT5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOwogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTUgKzM5
LDE1IEBAIGNsYXNzIFN0cmluZzsKIAogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgotICAg
IFNjcmlwdFZhbHVlKEpTQzo6SlNWYWx1ZSogdmFsdWUgPSBKU0M6Om5vVmFsdWUoKSkgOiBtX3Zh
bHVlKHZhbHVlKSB7fQorICAgIFNjcmlwdFZhbHVlKEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSA9IEpT
Qzo6bm9WYWx1ZSgpKSA6IG1fdmFsdWUodmFsdWUpIHt9CiAKLSAgICBKU0M6OkpTVmFsdWUqIGpz
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisgICAgSlNDOjpKU1ZhbHVl
UHRyIGpzVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAgICAgYm9vbCBn
ZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEpTQzo6UHJv
dGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gbV92YWx1ZTsKKyAgICBKU0M6OlByb3RlY3RlZEpTVmFs
dWVQdHIgbV92YWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMzk1OTMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yODYsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0
ZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAot
ICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsIFN0cmluZyhuYW1lKSkpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBbc2VsZiBf
aW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUpKSk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0y
OTksNyArMjk5LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQog
ICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdMaXN0KTsK
KyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QpOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+
Z2xvYmFsT2JqZWN0KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsKIAogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewpAQCAtMzI0LDcgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9t
TlNBcnJheShFeGVjU3RhdGUKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVj
dF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQ7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0
XS0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7CkBAIC0zODgsNyArMzg4LDcg
QEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgICAgICAvLyBs
ZWF2aW5nIHRoZSBsb2NrIHBlcm1hbmVudGx5IGhlbGQKICAgICAgICAgSlNMb2NrIGxvY2soZmFs
c2UpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdl
dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhrZXkpKSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmlu
ZyhrZXkpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
ICAgICAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTQ1NSw3ICs0NTUs
NyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7CisgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKIAogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
ZXhlYyk7CkBAIC01MDQsNyArNTA0LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5
KEV4ZWNTdGF0ZQogICAgIHJldHVybiB0b1JlZihbc2VsZiBfaW1wXSk7CiB9CiAKLSsgKGlkKV9j
b252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSopdmFsdWUgb3JpZ2luUm9vdE9iamVjdDoo
Um9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCByb290T2JqZWN0OihSb290T2JqZWN0Kilyb290
T2JqZWN0CisrIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWVQdHIpdmFsdWUg
b3JpZ2luUm9vdE9iamVjdDooUm9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCByb290T2JqZWN0
OihSb290T2JqZWN0Kilyb290T2JqZWN0CiB7CiAgICAgaWYgKHZhbHVlLT5pc09iamVjdCgpKSB7
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CkBAIC01MTIsNyAr
NTEyLDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgICAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAob2JqZWN0LT5jbGFz
c0luZm8oKSAhPSAmUnVudGltZU9iamVjdEltcDo6c19pbmZvKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiBydW50aW1lT2JqZWN0ID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
X19hcHBsZV9ydW50aW1lX29iamVjdCIpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcnVudGlt
ZU9iamVjdCA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVu
dGltZV9vYmplY3QiKSk7CiAgICAgICAgICAgICBpZiAocnVudGltZU9iamVjdCAmJiBydW50aW1l
T2JqZWN0LT5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHJ1
bnRpbWVPYmplY3QpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2Vi
U2NyaXB0T2JqZWN0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAKIEBpbnRlcmZhY2UgV2ViU2Ny
aXB0T2JqZWN0IChQcml2YXRlKQotKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6
OkpTVmFsdWUqKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVj
dCopcm9vdE9iamVjdDsKKysgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNDOjpKU1Zh
bHVlUHRyKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Qq
KW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCop
cm9vdE9iamVjdDsKICsgKGlkKXNjcmlwdE9iamVjdEZvckpTT2JqZWN0OihKU09iamVjdFJlZilq
c09iamVjdCBvcmlnaW5Sb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilvcmln
aW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RP
YmplY3Q7CiAtIChpZClfaW5pdDsKIC0gKGlkKV9pbml0V2l0aEpTT2JqZWN0OihKU0M6OkpTT2Jq
ZWN0KilpbXAgb3JpZ2luUm9vdE9iamVjdDooUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290
T2JqZWN0PilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8SlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdD4pcm9vdE9iamVjdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNzks
NyArMjc5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgIG15IEBn
ZXRPd25Qcm9wZXJ0eVNsb3RJbXBsID0gKCk7CiAKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
Ik5hbWVkTm9kZU1hcCIgb3IgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxDb2xsZWN0aW9uIikgewot
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICR7bmFtZXNwYWNlTWF5
YmV9SlNWYWx1ZSogcHJvdG8gPSBwcm90b3R5cGUoKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRP
d25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICR7bmFtZXNwYWNlTWF5YmV9SlNWYWx1ZVB0ciBwcm90
byA9IHByb3RvdHlwZSgpO1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdElt
cGwsICIgICAgaWYgKHByb3RvLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PCR7bmFtZXNwYWNl
TWF5YmV9SlNPYmplY3QqPihhc09iamVjdChwcm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eU5hbWUpKVxuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIg
ICAgICAgIHJldHVybiBmYWxzZTtcblxuIik7CiAgICAgfQpAQCAtNDcxLDkgKzQ3MSw5IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRoYXNTZXR0ZXIpIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSosIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn07Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgYm9vbCBjdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBKU0M6OkpTVmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIikg
aWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0cik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9OworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIGJvb2wgY3VzdG9tUHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
O1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rp
b24ifTsKICAgICB9CiAKICAgICAjIENsYXNzIGluZm8KQEAgLTQ4MywxMyArNDgzLDEzIEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICMgU3RydWN0dXJlIElECiAgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAg
ICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpKU1ZhbHVlKiBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAgICAgICIgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFs
dWVQdHIgcHJvdG90eXBlKVxuIiAuCiAgICAgICAgICAgICAiICAgIHtcbiIgLgogICAgICAgICAg
ICAgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBK
U0M6Ok5lZWRzVGhpc0NvbnZlcnNpb24pKTtcbiIgLgogICAgICAgICAgICAgIiAgICB9XG5cbiIp
OwogICAgIH0gZWxzaWYgKCRoYXNHZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwKLSAgICAgICAgICAgICIgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUqIHByb3RvdHlwZSlcbiIgLgorICAgICAgICAgICAg
IiAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpXG4iIC4KICAgICAgICAgICAgICIgICAge1xuIiAuCiAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlKSk7XG4iIC4KICAgICAgICAgICAgICIg
ICAgfVxuXG4iKTsKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIGRlZmluZVNldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpT
T2JqZWN0KiBzZXR0ZXJGdW5jdGlvbik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21EZWZpbmVTZXR0ZXIifTsKIAogICAgICMgQ3VzdG9tIGxvb2t1cEdldHRl
ciBmdW5jdGlvbgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWUqIGxvb2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUxvb2t1cEdldHRlciJ9OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmly
dHVhbCBKU0M6OkpTVmFsdWVQdHIgbG9va3VwR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTG9va3VwR2V0dGVyIn07CiAKICAgICAjIEN1c3RvbSBsb29r
dXBTZXR0ZXIgZnVuY3Rpb24KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwg
SlNDOjpKU1ZhbHVlKiBsb29rdXBTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21Mb29rdXBTZXR0ZXIifTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIGxvb2t1cFNldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUxvb2t1cFNldHRlciJ9OwogCiAgICAgIyBDb25z
dHJ1Y3RvciBvYmplY3QgZ2V0dGVyCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlKiBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopO1xuIikgaWYg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVDb25zdHJ1Y3RvciJ9Owor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZVB0ciBnZXRD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSopO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiR2VuZXJhdGVDb25zdHJ1Y3RvciJ9OwogCiAgICAgbXkgJG51bUN1c3RvbUZ1
bmN0aW9ucyA9IDA7CiAgICAgbXkgJG51bUN1c3RvbUF0dHJpYnV0ZXMgPSAwOwpAQCAtNTQ3LDE1
ICs1NDcsMTUgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAgICAgZm9yZWFjaCBteSAkYXR0
cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiAiIC4g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAu
ICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlUHRyICIgLiAkY29kZUdlbmVyYXRvci0+V0tf
bGNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSop
IGNvbnN0O1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15y
ZWFkb25seS8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB2b2lkIHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4g
JGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAu
ICIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSogIiAuICRjb2RlR2VuZXJhdG9yLT5XS19s
Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKikg
Y29uc3Q7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpT
Qzo6SlNWYWx1ZVB0ciAiIC4gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIpOwogICAgICAg
ICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tU2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+dHlw
ZSAhfiAvXnJlYWRvbmx5LykgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKik7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lk
IHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
Pm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU3MCw3ICs1NzAsNyBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRh
dGFOb2RlLT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSkgewogICAgICAgICAgICAgICAgIG15
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9IHx8ICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSogIiAuICRmdW5jdGlv
bkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xp
c3QmKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlND
OjpKU1ZhbHVlUHRyICIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTYwMiwyMSArNjAyLDIxIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAg
ICAgIyBJbmRleCBnZXR0ZXIKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSGFzSW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgaW5kZXhH
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6
OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgfQogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleEdldHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiBnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgSlNDOjpKU1ZhbHVlUHRyIGdldEJ5SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBp
bmRleCk7XG4iKTsKICAgICB9CiAgICAgCiAgICAgIyBJbmRleCBzZXR0ZXIKICAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifSkgewot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKik7XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICB9CiAgICAgIyBO
YW1lIGdldHRlcgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNO
YW1lR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJp
ZGluZ05hbWVHZXR0ZXIifSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0
ZTpcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGNh
bkdldEl0ZW1zRm9yTmFtZShKU0M6OkV4ZWNTdGF0ZSosICRpbXBsQ2xhc3NOYW1lKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBuYW1lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgbmFtZUdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6
UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
fTtcblxuIik7CkBAIC02MzAsMjggKzYzMCwyOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAg
IGlmICghJGhhc1BhcmVudCB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5l
cmF0ZVRvSlMifSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU1NW
R1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiosIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiosIFNWR0VsZW1lbnQq
IGNvbnRleHQpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosICRpbXBsVHlwZSosIFNW
R0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqLCBTVkdF
bGVtZW50KiBjb250ZXh0KTtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosICRp
bXBsVHlwZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqKTtcbiIpOwogICAgICAg
ICB9CiAKICAgICAgICAgIyBSZXNvbHZlIGFtYmlndWl0eSB3aXRoIEV2ZW50VGFyZ2V0IHRoYXQg
b3RoZXJ3aXNlIGV4aXN0cy4KICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOb2RlIikg
ewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImlubGluZSBKU0M6OkpTVmFsdWUq
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSkgeyByZXR1
cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxOb2RlKj4obm9kZSkpOyB9XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSkgeyByZXR1cm4gdG9KUyhl
eGVjLCBzdGF0aWNfY2FzdDxOb2RlKj4obm9kZSkpOyB9XG4iKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoISRoYXNQYXJlbnQgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
R2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIkcG9kVHlwZSB0byR7aW50ZXJmYWNlTmFt
ZX0oSlNDOjpKU1ZhbHVlKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIkcG9kVHlwZSB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAg
ICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZUZpbHRlciIpIHsKLSAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZp
bHRlcihKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTQzo6SlNWYWx1ZVB0cik7
XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSopO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJGltcGxDbGFzc05hbWUqIHRvJHtp
bnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOb2RlIiBvciAkaW50ZXJmYWNlTmFtZSBlcSAiRWxlbWVu
dCIgb3IgJGludGVyZmFjZU5hbWUgZXEgIlRleHQiKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgJGludGVyZmFjZU5hbWUqKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgJGlu
dGVyZmFjZU5hbWUqKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJcbiIpOwpAQCAtNjcxLDcgKzY3MSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAg
IGlmICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRzID4gMCkgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xv
dCYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAgICAgICAgICAiICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U1ZhbHVlKiBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAgICAgICIgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQdHIgcHJvdG90
eXBlKVxuIiAuCiAgICAgICAgICAgICAiICAgIHtcbiIgLgogICAgICAgICAgICAgIiAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSkpO1xuIiAuCiAgICAgICAgICAgICAiICAgIH1cbiIpOwpAQCAtNjg0LDcg
KzY4NCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRk
YXRhTm9kZS0+ZnVuY3Rpb25zfSkgewogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRj
b2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9u
IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
KTsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUqICR7ZnVu
Y3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUq
LCBjb25zdCBKU0M6OkFyZ0xpc3QmKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZVB0ciAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlUHRyLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTtcbiIp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC02OTIsMTYgKzY5MiwxNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gQXR0cmlidXRlc1xuXG4iKTsK
ICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30p
IHsKICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29k
ZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3Rv
ciIgOiAiIik7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVl
KiAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25z
dCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiSlNDOjpKU1ZhbHVlUHRyICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAg
ICAgIHVubGVzcyAoJGF0dHJpYnV0ZS0+dHlwZSA9fiAvcmVhZG9ubHkvKSB7CiAgICAgICAgICAg
ICAgICAgbXkgJHNldHRlciA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8gIkNvbnN0cnVjdG9yIiA6ICIi
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAidm9pZCAke3NldHRlcn0o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKik7XG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAidm9pZCAke3NldHRlcn0oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVDb25zdHJ1Y3RvciJ9KSB7CiAgICAgICAgICAgICBt
eSAkZ2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKLSAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUqICR7Z2V0dGVyfShKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlT
bG90Jik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFs
dWVQdHIgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwg
Y29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03
MDksNyArNzA5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsIi8vIENvbnN0YW50c1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkY29uc3RhbnQg
KEB7JGRhdGFOb2RlLT5jb25zdGFudHN9KSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0gImpz
IiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGNvbnN0YW50
LT5uYW1lKTsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUq
ICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0
IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJKU0M6OkpTVmFsdWVQdHIgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSAianMiIC4gJGludGVyZmFj
ZU5hbWUgLiAgJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5uYW1lKSAuICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8g
PyAiQ29uc3RydWN0b3IiIDogIiIpOwogICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVu
Y3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJG5hbWUpOwogCi0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2dldEZ1bmN0aW9uTmFtZX0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlUHRy
ICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwogCiAgICAgICAgICAgICAgICAgbXkgJGltcGxDbGFzc05hbWVGb3JW
YWx1ZUNvbnZlcnNpb24gPSAiIjsKQEAgLTExMjQsMTAgKzExMjQsMTAgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgICAgICBpZiAoJHBvZFR5cGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRwb2RUeXBlIGlt
cCgqc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5p
bXBsKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgIiIsICJpbXAuJGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoZWMpIiwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgIiIsICJpbXAuJGlt
cGxHZXR0ZXJGdW5jdGlvbk5hbWUoZWMpIiwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09i
amVjdChzbG90LnNsb3RCYXNlKCkpKSIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JGltcGxDbGFzc05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oc3RhdGlj
X2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0M6
OkpTVmFsdWUqIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgJGltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24s
ICJpbXAtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVjKSIsICJzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkiKSAuICI7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxD
bGFzc05hbWUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uLCAiaW1wLT4kaW1wbEdl
dHRlckZ1bmN0aW9uTmFtZShlYykiLCAic3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0
KHNsb3Quc2xvdEJhc2UoKSkpIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpO1xuIik7CkBAIC0xMTQwLDcgKzExNDAsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkdlbmVyYXRlQ29uc3RydWN0b3IifSkgewogICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1
Y3RvckZ1bmN0aW9uTmFtZSA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7
CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7Y29uc3Ry
dWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiSlNWYWx1ZVB0ciAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzdGF0aWNfY2FzdDwkY2xhc3NOYW1l
Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmdldENvbnN0cnVjdG9yKGV4ZWMpO1xuIik7
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKQEAgLTExNTgsNyAr
MTE1OCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRl
ciJ9OwogCiAgICAgICAgIGlmICgkaGFzU2V0dGVyKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNz
TmFtZX06OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBib29sIG9rO1xuIik7CkBAIC0xMTgx
LDcgKzExODEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpXG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUp
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGluZGV4U2V0dGVyKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuO1xuIik7CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHB1dEZ1bmN0aW9uTmFtZSA9
ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgk
bmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8g
IkNvbnN0cnVjdG9yIiA6ICIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsU2V0
dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtwdXRGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUq
IHZhbHVlKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InZvaWQgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNlY3VyaXR5In0gJiYg
ISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tE
b21haW5TZWN1cml0eSJ9KSB7CkBAIC0xMjg0LDcgKzEyODQsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgIH0KIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU1ZhbHVlKiAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYylc
bntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtjbGFzc05h
bWV9OjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpXG57XG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPCR7Y2xhc3NOYW1l
fUNvbnN0cnVjdG9yPihleGVjKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CiAgICAgfQpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tf
bGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRv
ci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAgICAgICAgICAgICBt
eSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVy
YXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZVB0ciAke2Z1
bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogCiAgICAgICAgICAgICAkaW1wbEtKU0luY2x1ZGV7IkVycm9yLmgifSA9
IDE7CkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRjb25zdGFudC0+bmFtZSk7CiAKICAgICAgICAgICAgICMgRklYTUU6
IHRoaXMgY2FzdHMgaW50byBpbnQgdG8gbWF0Y2ggb3VyIHByZXZpb3VzIGJlaGF2aW9yIHdoaWNo
IHR1cm5lZCAweEZGRkZGRkZGIGluIC0xIGZvciBOb2RlRmlsdGVyLlNIT1dfQUxMCi0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7Z2V0dGVyfShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKVxuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtnZXR0ZXJ9KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50PigiIC4g
JGNvbnN0YW50LT52YWx1ZSAuICIpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzSW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuSlNWYWx1
ZSogJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5KU1ZhbHVlUHRyICR7Y2xhc3NOYW1lfTo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSk7XG4iKTsKICAgICAgICAgaWYgKEluZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxDbGFz
c05hbWUpKSB7CkBAIC0xNDQ0LDExICsxNDQ0LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAKICAgICBpZiAoKCEkaGFzUGFyZW50IG9yICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkdlbmVyYXRlVG9KUyJ9KSBhbmQgIVVzZXNNYW51YWxUb0pTSW1wbGVtZW50YXRpb24o
JGltcGxDbGFzc05hbWUpKSB7CiAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNv
bnRleHQpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVl
UHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5
cGU+KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsKICAgICAgICAgfSBlbHNpZiAo
SXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGltcGxDbGFzc05hbWUpKSB7Ci0gICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsICRpbXBsVHlwZSogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7
CisgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgJGltcGxUeXBlKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRl
eHQpXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAkaW1wbFR5cGUqIG9i
amVjdClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWVQ
dHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgJGltcGxUeXBlKiBvYmplY3QpXG4iKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBAIC0xNDY0LDkg
KzE0NjQsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgaWYgKCghJGhhc1Bh
cmVudCBvciAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNv
bnZlcnRlciJ9KSBhbmQgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5h
dGl2ZUNvbnZlcnRlciJ9KSB7CiAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIkcG9kVHlwZSB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1Zh
bHVlKiB2YWx1ZSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkcG9kVHlw
ZSB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVlUHRyIHZhbHVlKVxuIik7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1l
KiB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVlKiB2YWx1ZSlcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9
KEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSlcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTE1MTUsNyArMTUxNSw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCkKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
JGluZGVudCAuICJyZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJKU0M6OkpTVmFsdWUqIHJl
c3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsIDEsICRpbXBs
Q2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpc09iaiIpIC4gIjtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1Zh
bHVlUHRyIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUs
IDEsICRpbXBsQ2xhc3NOYW1lLCAiIiwgJGZ1bmN0aW9uU3RyaW5nLCAiY2FzdGVkVGhpc09iaiIp
IC4gIjtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9
OwogCiAgICAgICAgIGlmICgkcG9kVHlwZSkgewpAQCAtMTk3Miw3ICsxOTcyLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmc19pbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90
bykgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNW
YWx1ZVB0ciBwcm90bykgCiAgICAgeyAKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsgCiAg
ICAgfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9u
IG9iamVjdC4KLSAgICAgICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBvYmotPmltcDsKKyAgICAgICAg
SlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG9iai0+aW1wOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2Fs
bERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMTIyLDcg
KzEyMiw3IEBAIGJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8KICAgICAg
ICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCwgcm9vdE9iamVj
dCwgYXJnTGlzdCk7CiAgICAgICAgIFByb3RlY3RlZFB0cjxKU0dsb2JhbE9iamVjdD4gZ2xvYmFs
T2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIGdsb2JhbE9iamVj
dC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ViA9IGNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZnVuY3Rpb24sIGFyZ0xpc3QpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdFYgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGZ1bmN0aW9uLCBhcmdMaXN0KTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5z
dG9wVGltZW91dENoZWNrKCk7CiAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBfTlBO
X0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIEpTVmFs
dWUqIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG9i
ai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3Ry
aW5nKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xNzIsNyArMTcyLDcgQEAgYm9vbCBfTlBOX0ludm9r
ZShOUFAgbnBwLCBOUE9iamVjdCogbywgTgogICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdz
KGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAgUHJv
dGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHRWID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBvYmotPmltcCwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0
ViA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFy
Z0xpc3QpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKIAogICAg
ICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2Fs
bC4KQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCog
bywgTlBTCiAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAgICAg
ICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRpb24uY29tcGxUeXBlKCk7CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgICAg
ICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBsZXRpb24u
dmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJv
b2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgUHJpdmF0ZUlk
ZW50aWZpZXIqIGkgPSBzdGF0aWNfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIAogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIEpTVmFs
dWUqIHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5p
c1N0cmluZykKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRp
ZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIGVsc2UKQEAg
LTM2NCw3ICszNjQsNyBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBKU1Zh
bHVlKiBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihpLT52YWx1ZS5zdHJpbmcpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBmdW5jID0gb2JqLT5pbXAt
PmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsK
ICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuICFmdW5jLT5p
c1VuZGVmaW5lZCgpOwogICAgIH0KQEAgLTQzMiw3ICs0MzIsNyBAQCBib29sIF9OUE5fQ29uc3Ry
dWN0KE5QUCBucHAsIE5QT2JqZWN0KiBvCiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9yIG9iamVjdC4KLSAgICAgICAg
SlNWYWx1ZSogY29uc3RydWN0b3IgPSBvYmotPmltcDsKKyAgICAgICAgSlNWYWx1ZVB0ciBjb25z
dHJ1Y3RvciA9IG9iai0+aW1wOwogICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7
CiAgICAgICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGNvbnN0cnVjdG9yLT5nZXRD
b25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwogICAgICAgICBpZiAoY29uc3RydWN0VHlwZSA9
PSBDb25zdHJ1Y3RUeXBlTm9uZSkKQEAgLTQ0Miw3ICs0NDIsNyBAQCBib29sIF9OUE5fQ29uc3Ry
dWN0KE5QUCBucHAsIE5QT2JqZWN0KiBvCiAgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3Mo
ZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICBQcm90
ZWN0ZWRQdHI8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0g
ICAgICAgIEpTVmFsdWUqIHJlc3VsdFYgPSBjb25zdHJ1Y3QoZXhlYywgY29uc3RydWN0b3IsIGNv
bnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOworICAgICAgICBKU1ZhbHVlUHRy
IHJlc3VsdFYgPSBjb25zdHJ1Y3QoZXhlYywgY29uc3RydWN0b3IsIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEsIGFyZ0xpc3QpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0
Q2hlY2soKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVz
dWx0LgpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlk
Z2UvcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEyICs3OCwxMiBAQCB2b2lkIElu
c3RhbmNlOjplbmQoKQogICAgIHZpcnR1YWxFbmQoKTsKIH0KIAotSlNWYWx1ZSogSW5zdGFuY2U6
OmdldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZpZWxkKiBhRmllbGQpIGNv
bnN0CitKU1ZhbHVlUHRyIEluc3RhbmNlOjpnZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBGaWVsZCogYUZpZWxkKSBjb25zdAogewogICAgIHJldHVybiBhRmllbGQtPnZhbHVl
RnJvbUluc3RhbmNlKGV4ZWMsIHRoaXMpOwogfQogCi12b2lkIEluc3RhbmNlOjpzZXRWYWx1ZU9m
RmllbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVsZCogYUZpZWxkLCBKU1ZhbHVlKiBhVmFs
dWUpIGNvbnN0Cit2b2lkIEluc3RhbmNlOjpzZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBGaWVsZCogYUZpZWxkLCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3QKIHsKICAgICBh
RmllbGQtPnNldFZhbHVlVG9JbnN0YW5jZShleGVjLCB0aGlzLCBhVmFsdWUpOwogfQpJbmRleDog
V2ViQ29yZS9icmlkZ2UvcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWUuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgdHlwZWRlZiBWZWN0b3I8TWV0aG9kKj4gTWV0
aG9kTGlzdDsKIGNsYXNzIEZpZWxkIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IG5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUZyb21JbnN0YW5j
ZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1
ZSopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVGcm9tSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWVQ
dHIpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgfkZpZWxkKCkgeyB9CiB9OwpAQCAtNjksNyAr
NjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmllciYs
IEluc3RhbmNlKikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRmllbGQqIGZpZWxkTmFtZWQoY29u
c3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSlNWYWx1
ZSogZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVy
JikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBmYWxs
YmFja09iamVjdChFeGVjU3RhdGUqLCBJbnN0YW5jZSosIGNvbnN0IElkZW50aWZpZXImKSB7IHJl
dHVybiBqc1VuZGVmaW5lZCgpOyB9CiAKICAgICB2aXJ0dWFsIH5DbGFzcygpIHsgfQogfTsKQEAg
LTEwNywyNSArMTA3LDI1IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIENsYXNzICpnZXRD
bGFzcygpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGdldFZhbHVlT2ZG
aWVsZChFeGVjU3RhdGUqLCBjb25zdCBGaWVsZCopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1
ZSogZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
KSBjb25zdCB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlT2ZGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBGaWVsZCosIEpTVmFsdWUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWVQdHIgZ2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IEZp
ZWxkKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4ganNVbmRl
ZmluZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiwg
Y29uc3QgRmllbGQqLCBKU1ZhbHVlUHRyKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIEpTVmFsdWUqKSB7fQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZpbmVk
RmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIpIHt9CiAKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RM
aXN0JiwgY29uc3QgQXJnTGlzdCYgYXJncykgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBp
bnZva2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9rZURlZmF1bHRNZXRo
b2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tl
RGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikgeyByZXR1cm4ganNVbmRl
ZmluZWQoKTsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZva2VEZWZhdWx0TWV0aG9kKEV4
ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CiAgICAg
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZUNvbnN0cnVjdChFeGVjU3RhdGUqLCBj
b25zdCBBcmdMaXN0JikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZv
a2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJuIG5vVmFsdWUo
KTsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JikgeyB9CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRW
YWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBKU1ZhbHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKSBjb25zdCA9IDA7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZU9m
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgeyByZXR1cm4ganNTdHJpbmcoZXhlYywgZ2V0Q2xhc3Mo
KS0+bmFtZSgpKTsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZU9mKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QgeyByZXR1cm4ganNTdHJpbmcoZXhlYywgZ2V0Q2xhc3MoKS0+bmFtZSgpKTsg
fQogICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QoKSBjb25zdDsKICAgICAKQEAgLTE0
NSw4ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgQXJyYXkoUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7
CiAgICAgdmlydHVhbCB+QXJyYXkoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVB
dChFeGVjU3RhdGUgKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25lZCBpbmRleCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZVB0cikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2
YWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgpJbmRl
eDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0MiwxMyBA
QCBSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4CiB7CiB9CiAKLUpTVmFs
dWUqIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgUnVudGltZUFy
cmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iaiA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAg
IHJldHVybiBqc051bWJlcihleGVjLCB0aGlzT2JqLT5nZXRMZW5ndGgoKSk7CiB9CiAKLUpTVmFs
dWUqIFJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBSdW50aW1lQXJy
YXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmogPSBzdGF0
aWNfY2FzdDxSdW50aW1lQXJyYXkqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBy
ZXR1cm4gdGhpc09iai0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIHNsb3QuaW5k
ZXgoKSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXgKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBp
bmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit2b2lkIFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvcik7
CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBSdW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4
ZWMsIAogICAgIEpTT2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
CiB9CiAKLXZvaWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKGluZGV4
ID49IGdldExlbmd0aCgpKSB7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvcik7
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyKTsKICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CkBAIC01NiwxNCArNTYsMTQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5h
cnJheVByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUqIGxl
bmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIE93blB0cjxC
aW5kaW5nczo6QXJyYXk+IF9hcnJheTsKIH07CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2Qu
Y3BwCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBSdW50aW1lTWV0aG9kOjpSdW50aW1l
TWV0aG9kKEV4ZWNTdGF0ZSogCiB7CiB9CiAKLUpTVmFsdWUqIFJ1bnRpbWVNZXRob2Q6Omxlbmd0
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgUnVudGltZU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVNZXRo
b2QqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKIApAQCAtNzAsNyArNzAsNyBAQCBib29s
IFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgcmV0dXJuIEludGVybmFs
RnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2FzdDxSdW50aW1l
TWV0aG9kKj4oZnVuY3Rpb24pOwogCkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBj
YWxsUnVudGltZU1ldGhvZChFeGVjU3QKICAgICB9IGVsc2UgewogICAgICAgICAvLyBJZiB0aGlz
T2JqIGlzIHRoZSBET00gb2JqZWN0IGZvciBhIHBsdWdpbiwgZ2V0IHRoZSBjb3JyZXNwb25kaW5n
CiAgICAgICAgIC8vIHJ1bnRpbWUgb2JqZWN0IGZyb20gdGhlIERPTSBvYmplY3QuCi0gICAgICAg
IEpTVmFsdWUqIHZhbHVlID0gdGhpc1ZhbHVlLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
X19hcHBsZV9ydW50aW1lX29iamVjdCIpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IHRo
aXNWYWx1ZS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmpl
Y3QiKSk7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoJlJ1bnRpbWVPYmplY3RJbXA6OnNf
aW5mbykpICAgIAogICAgICAgICAgICAgaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdElt
cCo+KGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgICAgIGVsc2UKQEAgLTk2LDcgKzk2LDcgQEAgc3Rh
dGljIEpTVmFsdWUqIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdAogICAgICAgICByZXR1cm4gUnVu
dGltZU9iamVjdEltcDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAgICAgICAgIAog
ICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGluc3RhbmNlLT5p
bnZva2VNZXRob2QoZXhlYywgKm1ldGhvZC0+bWV0aG9kcygpLCBhcmdzKTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgKm1ldGhvZC0+bWV0aG9k
cygpLCBhcmdzKTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTMg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBs
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIApJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9v
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNw
cAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBSdW50aW1lT2JqZWN0SW1wOjpp
bnZhbGlkYXRlKCkKICAgICBpbnN0YW5jZSA9IDA7CiB9CiAKLUpTVmFsdWUqIFJ1bnRpbWVPYmpl
Y3RJbXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IFJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgUnVudGltZU9iamVjdEltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVP
YmplY3RJbXAqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBAIC03NywxNCArNzcsMTQgQEAgSlNW
YWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplYwogICAgIGluc3RhbmNlLT5iZWdp
bigpOwogCiAgICAgQ2xhc3MgKmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5zdGFuY2UuZ2V0
KCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBhQ2xhc3MtPmZhbGxi
YWNrT2JqZWN0KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaW5z
dGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWVQdHIgUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsgICAgCiAgICAgUnVudGltZU9iamVjdEltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVPYmplY3RJbXAqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBSZWZQdHI8SW5z
dGFuY2U+IGluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBAIC05NiwxNCArOTYsMTQgQEAg
SlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRQogCiAgICAgQ2xhc3MgKmFD
bGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwogICAgIEZpZWxkKiBhRmllbGQgPSBhQ2xhc3Mt
PmZpZWxkTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQoKSk7Ci0gICAgSlNWYWx1ZSog
cmVzdWx0ID0gaW5zdGFuY2UtPmdldFZhbHVlT2ZGaWVsZChleGVjLCBhRmllbGQpOyAKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5nZXRWYWx1ZU9mRmllbGQoZXhlYywgYUZpZWxk
KTsgCiAgICAgCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVPYmplY3RJbXAqIHRoaXNPYmogPSBz
dGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7
CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAt
MTE1LDcgKzExNSw3IEBAIEpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcigK
IAogICAgIENsYXNzICphQ2xhc3MgPSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKTsKICAgICBNZXRob2RM
aXN0IG1ldGhvZExpc3QgPSBhQ2xhc3MtPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIGluc3Rh
bmNlLmdldCgpKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRo
b2QoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IG5ldyAoZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExp
c3QpOwogCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgCkBAIC0xNzIsNyArMTcy
LDcgQEAgYm9vbCBSdW50aW1lT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsbwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSdW50aW1lT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit2b2lkIFJ1bnRpbWVPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICAgdGhy
b3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CkBAIC0yMDIsMjMgKzIwMiwyMyBAQCBib29sIFJ1
bnRpbWVPYmplY3RJbXA6OmRlbGV0ZVByb3BlcnR5KEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1KU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIFJ1bnRpbWVP
YmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoIWluc3RhbmNlKQogICAgICAgICByZXR1cm4g
dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAgICAgCiAgICAgUmVmUHRyPEluc3RhbmNl
PiBwcm90ZWN0b3IoaW5zdGFuY2UpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGluc3RhbmNlLT5kZWZhdWx0VmFsdWUoZXhlYywgaGludCk7CisgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBpbnN0YW5jZS0+ZGVmYXVsdFZhbHVlKGV4ZWMsIGhpbnQpOwogICAg
IGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgSlNWYWx1
ZSogY2FsbFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24s
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbFJ1
bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5j
ZShzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4oZnVuY3Rpb24pLT5nZXRJbnRlcm5hbElu
c3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CiAg
ICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzUsMTEgKzIz
NSwxMSBAQCBKU09iamVjdCogY2FsbFJ1bnRpbWVDb25zdHJ1Y3RvcihFeGVjU3RhCiB7CiAgICAg
UmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZShzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4o
Y29uc3RydWN0b3IpLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdp
bigpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VDb25zdHJ1Y3QoZXhl
YywgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlQ29uc3Ry
dWN0KGV4ZWMsIGFyZ3MpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAKICAgICBBU1NFUlQo
cmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LT5pc09iamVjdCgpID8gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihyZXN1bHQpIDogY29uc3RydWN0b3I7CisgICAgcmV0dXJuIHJlc3VsdC0+aXNPYmpl
Y3QoKSA/IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocmVzdWx0LT5hc0NlbGwoKSkgOiBjb25zdHJ1
Y3RvcjsKIH0KIAogQ29uc3RydWN0VHlwZSBSdW50aW1lT2JqZWN0SW1wOjpnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
UnVudGltZU9iamVjdEltcCgpOwogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0
eShFeGVjU3RhdGUqICwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0
dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAgCkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJv
dG90eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSkpOwogICAgIH0KQEAgLTcwLDkgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAg
ICAgCi0gICAgc3RhdGljIEpTVmFsdWUqIGZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBtZXRob2RHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlUHRyIGZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmaWVsZEdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIEpTVmFsdWVQdHIgbWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIFJlZlB0cjxCaW5kaW5nczo6
SW5zdGFuY2U+IGluc3RhbmNlOwogfTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgQ0luc3RhbmNlOjpzdXBwb3J0c0ludm9rZURl
ZmF1bHRNZXQKICAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0OwogfQog
Ci1KU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IE1ldGhvZExpc3QmIG1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlz
dCYgbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBPdmVybG9hZGlu
ZyBtZXRob2RzIGFyZSBub3QgYWxsb3dlZCBieSBOUE9iamVjdHMuICBTaG91bGQgb25seSBiZSBv
bmUKICAgICAvLyBuYW1lIG1hdGNoIGZvciBhIHBhcnRpY3VsYXIgbWV0aG9kLgpAQCAtMTAxLDEz
ICsxMDEsMTMgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YQogICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlID0gY29udmVydE5Q
VmFyaWFudFRvVmFsdWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsK
KyAgICBKU1ZhbHVlUHRyIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhl
YywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsKICAgICBfTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwogICAgIHJldHVybiByZXN1bHRWYWx1ZTsKIH0K
IAogCi1KU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBDSW5zdGFuY2U6Omludm9rZURl
ZmF1bHRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IGlmICghX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9r
ZURlZmF1bHRNZXRob2QoCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAg
IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmY0FyZ3NbaV0pOwogCi0gICAgSlNWYWx1ZSogcmVz
dWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwg
X3Jvb3RPYmplY3QuZ2V0KCkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0VmFsdWUgPSBjb252ZXJ0
TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkp
OwogICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7CiAgICAgcmV0
dXJuIHJlc3VsdFZhbHVlOwogfQpAQCAtMTQwLDcgKzE0MCw3IEBAIGJvb2wgQ0luc3RhbmNlOjpz
dXBwb3J0c0NvbnN0cnVjdCgpIGNvbnMKICAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5jb25z
dHJ1Y3Q7CiB9CiAgICAgCi1KU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIENJbnN0YW5jZTo6
aW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTE2MywxMiArMTYzLDEyIEBAIEpTVmFsdWUqIENJbnN0YW5jZTo6aW52
b2tlQ29uc3RydWN0KEV4ZWMKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAg
ICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7CiAKLSAgICBKU1ZhbHVlKiBy
ZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50
LCBfcm9vdE9iamVjdC5nZXQoKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZSA9IGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5nZXQo
KSk7CiAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKICAgICBy
ZXR1cm4gcmVzdWx0VmFsdWU7CiB9CiAKLUpTVmFsdWUqIENJbnN0YW5jZTo6ZGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAorSlNW
YWx1ZVB0ciBDSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJp
bmcpCiAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKQEAgLTE3NywyNiArMTc3LDI2
IEBAIEpTVmFsdWUqIENJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGEKICAgICByZXR1cm4g
dmFsdWVPZihleGVjKTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIENJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGNoYXIgYnVmWzEwMjRdOwogICAgIHNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICJOUE9iamVjdCAlcCwgTlBDbGFzcyAlcCIsIF9vYmplY3QsIF9v
YmplY3QtPl9jbGFzcyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGJ1Zik7CiB9CiAKLUpT
VmFsdWUqIENJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNW
YWx1ZVB0ciBDSW5zdGFuY2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZS4KICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgMCk7CiB9CiAKLUpTVmFsdWUqIENJbnN0YW5jZTo6Ym9vbGVhblZhbHVl
KCkgY29uc3QKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgogICAgIHJldHVybiBq
c0Jvb2xlYW4oZmFsc2UpOwogfQogCi1KU1ZhbHVlKiBDSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0
YXRlKiBleGVjKSBjb25zdCAKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwogfQpJbmRl
eDogV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2UvYy9jX2luc3RhbmNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDIxICs1MCwyMSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFs
dWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlTWV0
aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0Jik7CisgICAg
dmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RM
aXN0JiwgY29uc3QgQXJnTGlzdCYpOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9rZURl
ZmF1bHRNZXRob2QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZURlZmF1bHRN
ZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0
ciBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEpTVmFsdWUqIGludm9rZUNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZUNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBB
cmdMaXN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCi0gICAgSlNWYWx1ZSogc3RyaW5nVmFsdWUoRXhlY1N0
YXRlKikgY29uc3Q7Ci0gICAgSlNWYWx1ZSogbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7
Ci0gICAgSlNWYWx1ZSogYm9vbGVhblZhbHVlKCkgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBzdHJp
bmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIG51bWJlclZhbHVlKEV4
ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWVQdHIgYm9vbGVhblZhbHVlKCkgY29uc3Q7CiAg
ICAgCiAgICAgTlBPYmplY3QgKmdldE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIF9vYmplY3Q7IH0K
IApJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
Y29uc3QgY2hhciogQ0ZpZWxkOjpuYW1lKCkgY29uc3QKICAgICByZXR1cm4gaS0+aXNTdHJpbmcg
PyBpLT52YWx1ZS5zdHJpbmcgOiAwOwogfQogCi1KU1ZhbHVlKiBDRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0CitKU1Zh
bHVlUHRyIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnN0YW5jZSogaW5zdCkgY29uc3QKIHsKICAgICBjb25zdCBDSW5zdGFuY2UqIGluc3RhbmNlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4oaW5zdCk7CiAgICAgTlBPYmplY3QqIG9iaiA9
IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKQEAgLTY3LDcgKzY3LDcgQEAgSlNWYWx1ZSogQ0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZShFeGVjUwogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xh
c3MtPmdldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnByb3BlcnR5KTsKICAgICAg
ICAgfQogICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcHJvcGVydHksIGluc3RhbmNlLT5yb290
T2JqZWN0KCkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjb252ZXJ0TlBWYXJp
YW50VG9WYWx1ZShleGVjLCAmcHJvcGVydHksIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAg
ICAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZwcm9wZXJ0eSk7CiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC03NSw3ICs3NSw3IEBAIEpTVmFsdWUqIENG
aWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1MKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEluc3RhbmNlICppbnN0LCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0Cit2b2lkIENGaWVsZDo6
c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3Qs
IEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFu
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKICAgICBOUE9iamVjdCog
b2JqID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX3J1
bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDggKzM4LDggQEAgY2xhc3MgQ0ZpZWxkIDogcHVibGljIEZpZWxkIHsKIHB1Ymxp
YzoKICAgICBDRmllbGQoTlBJZGVudGlmaWVyIGlkZW50KSA6IF9maWVsZElkZW50aWZpZXIoaWRl
bnQpIHsgfQogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKikgY29uc3Q7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0
IEluc3RhbmNlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShF
eGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWVQdHIpIGNvbnN0OwogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0OwogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY191
dGlsaXR5LmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIFN0cmluZyBjb252
ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aQogfQogCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVs
ZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQotdm9pZCBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBOUFZhcmlhbnQqIHJlc3Vs
dCkKK3ZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
UHRyIHZhbHVlLCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7
CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNT
dGF0ZSogCiAgICAgfQogfQogCi1KU1ZhbHVlKiBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9i
amVjdCkKK0pTVmFsdWVQdHIgY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7CiAg
ICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIApJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX3V0
aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDggKzU3LDggQEAgZW51bSBOUF9WYWx1ZVR5cGUgewogfTsKIAogV2ViQ29yZTo6
U3RyaW5nIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdHJpbmcgKnN0cmluZyk7Ci12
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBOUFZhcmlh
bnQqIHJlc3VsdCk7Ci1KU1ZhbHVlKiBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUq
LCBjb25zdCBOUFZhcmlhbnQqLCBSb290T2JqZWN0Kik7Cit2b2lkIGNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIsIE5QVmFyaWFudCogcmVzdWx0KTsKK0pTVmFs
dWVQdHIgY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgTlBWYXJpYW50
KiwgUm9vdE9iamVjdCopOwogSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihj
b25zdCBOUFVURjgqIG5hbWUpOwogCiBzdHJ1Y3QgUHJpdmF0ZUlkZW50aWZpZXIgewpJbmRleDog
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29y
ZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgw
LDcgQEAgQ2xhc3MgKkphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdCAKICAgICByZXR1cm4g
X2NsYXNzOwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIApAQCAt
OTIsMjMgKzkyLDIzIEBAIEpTVmFsdWUqIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1MK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdSk7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5j
ZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKYXZhSW5z
dGFuY2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBqZG91Ymxl
IGRvdWJsZVZhbHVlID0gY2FsbEpOSU1ldGhvZDxqZG91YmxlPihfaW5zdGFuY2UtPl9pbnN0YW5j
ZSwgImRvdWJsZVZhbHVlIiwgIigpRCIpOwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBkb3Vi
bGVWYWx1ZSk7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29u
c3QKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAogewogICAg
IGpib29sZWFuIGJvb2xlYW5WYWx1ZSA9IGNhbGxKTklNZXRob2Q8amJvb2xlYW4+KF9pbnN0YW5j
ZS0+X2luc3RhbmNlLCAiYm9vbGVhblZhbHVlIiwgIigpWiIpOwogICAgIHJldHVybiBqc0Jvb2xl
YW4oYm9vbGVhblZhbHVlKTsKIH0KIAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjppbnZva2VNZXRo
b2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3Qg
QXJnTGlzdCAmYXJncykKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlz
dCAmYXJncykKIHsKICAgICBpbnQgaSwgY291bnQgPSBhcmdzLnNpemUoKTsKICAgICBqdmFsdWUg
KmpBcmdzOwotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlOworICAgIEpTVmFsdWVQdHIgcmVzdWx0
VmFsdWU7CiAgICAgTWV0aG9kICptZXRob2QgPSAwOwogICAgIHNpemVfdCBudW1NZXRob2RzID0g
bWV0aG9kTGlzdC5zaXplKCk7CiAgICAgCkBAIC0xNTcsNyArMTU3LDcgQEAgSlNWYWx1ZSogSmF2
YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4ZQogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwog
ICAgIGlmIChyb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewogICAgICAgICBqb2JqZWN0IG9i
aiA9IF9pbnN0YW5jZS0+X2luc3RhbmNlOwotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25EZXNj
cmlwdGlvbiA9IG5vVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGNlcHRpb25EZXNjcmlw
dGlvbiA9IG5vVmFsdWUoKTsKICAgICAgICAgY29uc3QgY2hhciAqY2FsbGluZ1VSTCA9IDA7ICAv
LyBGSVhNRSwgbmVlZCB0byBwcm9wYWdhdGUgY2FsbGluZyBVUkwgdG8gSmF2YQogICAgICAgICBo
YW5kbGVkID0gZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgp
LCBvYmosIGpNZXRob2QtPmlzU3RhdGljKCksIGpNZXRob2QtPkpOSVJldHVyblR5cGUoKSwgak1l
dGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MsIHJlc3VsdCwgY2FsbGluZ1VSTCwgZXhjZXB0aW9u
RGVzY3JpcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pIHsKQEAgLTI4
Myw3ICsyODMsNyBAQCBKU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlCiAg
ICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6OmRlZmF1
bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29u
c3QKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgaWYgKGhpbnQgPT0g
UHJlZmVyU3RyaW5nKQogICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CkBAIC0yOTks
NyArMjk5LDcgQEAgSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlYwogICAg
IHJldHVybiB2YWx1ZU9mKGV4ZWMpOwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6OnZhbHVl
T2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdCAKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjp2YWx1
ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4
ZWMpOwogfQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaAkocmV2aXNpb24gMzk1OTMp
CisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDE2ICs3NywxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xh
c3MoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlT2YoRXhlY1N0YXRl
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZh
bHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGRlZmF1bHRW
YWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgSlNWYWx1ZSogaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9k
TGlzdCYgbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQ
dHIgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9k
LCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKIAogICAgIGpvYmplY3QgamF2YUluc3RhbmNlKCkgY29u
c3QgeyByZXR1cm4gX2luc3RhbmNlLT5faW5zdGFuY2U7IH0KICAgICAKLSAgICBKU1ZhbHVlKiBz
dHJpbmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBudW1iZXJWYWx1ZShF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBib29sZWFuVmFsdWUoKSBjb25zdDsKKyAg
ICBKU1ZhbHVlUHRyIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWVQ
dHIgbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBib29sZWFu
VmFsdWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgQmluZGluZ0xhbmd1YWdlIGdldEJpbmRpbmdM
YW5ndWFnZSgpIGNvbnN0IHsgcmV0dXJuIEphdmFMYW5ndWFnZTsgfQogCkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
am5pL2puaV9qc29iamVjdC5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgc3RhdGljIGp2YWx1ZSBpbnZva2UoSlNPYmplY3RDYWxsQ29udGV4dCopOwog
Ci0gICAgam9iamVjdCBjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSopIGNvbnN0OwotICAg
IEpTVmFsdWUqIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVjU3RhdGUqLCBqb2JqZWN0KSBjb25z
dDsKKyAgICBqb2JqZWN0IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChKU1ZhbHVlUHRyKSBjb25zdDsK
KyAgICBKU1ZhbHVlUHRyIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVjU3RhdGUqLCBqb2JqZWN0
KSBjb25zdDsKICAgICB2b2lkIGdldExpc3RGcm9tSkFycmF5KEV4ZWNTdGF0ZSosIGpvYmplY3RB
cnJheSwgQXJnTGlzdCYpIGNvbnN0OwogICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3Qo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNpb24gMzk1
OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTMsNyArMjkzLDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmNhbGwoanN0cmluZyBt
ZXRobwogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZXRob2ROYW1lKSk7Ci0gICAgSlNWYWx1ZSogZnVuY3Rp
b24gPSBfaW1wLT5nZXQoZXhlYywgaWRlbnRpZmllcik7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlv
biA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTMwMyw3ICszMDMsNyBAQCBq
b2JqZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvCiAgICAgQXJnTGlzdCBhcmdM
aXN0OwogICAgIGdldExpc3RGcm9tSkFycmF5KGV4ZWMsIGFyZ3MsIGFyZ0xpc3QpOwogICAgIHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBfaW1wLCBhcmdMaXN0KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBfaW1wLCBhcmdMaXN0KTsKICAgICByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgcmV0dXJu
IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtMzEzLDcgKzMxMyw3IEBAIGpvYmpl
Y3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXAKIHsKICAgICBKU19MT0cgKCJzY3Jp
cHQgPSAlc1xuIiwgSmF2YVN0cmluZyhzY3JpcHQpLlVURjhTdHJpbmcoKSk7CiAgICAgCi0gICAg
SlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogCiAgICAgSlNMb2NrIGxv
Y2soZmFsc2UpOwogICAgIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0
OjpnZXRNZW1iZXIoanN0cmluZyAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIAogICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBfaW1w
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpKSk7CiAK
ICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CiB9CkBAIC0zOTcsNyAr
Mzk3LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldFNsb3QoamludCBpbmRleAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gX2ltcC0+
Z2V0KGV4ZWMsIGluZGV4KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IF9pbXAtPmdldChleGVj
LCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CiB9
CkBAIC00ODUsNyArNDg1LDcgQEAgamxvbmcgSmF2YUpTT2JqZWN0OjpjcmVhdGVOYXRpdmUoamxv
bmcgbgogICAgIHJldHVybiBuYXRpdmVIYW5kbGU7CiB9CiAKLWpvYmplY3QgSmF2YUpTT2JqZWN0
Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSogdmFsdWUpIGNvbnN0Citqb2JqZWN0IEph
dmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpIGNvbnN0
CiB7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIApAQCAtNTcxLDcgKzU3MSw3IEBAIGpv
YmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1KU1ZhbHVlKiBKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIGpvYmplY3QgdGhlT2JqZWN0KSBjb25zdAorSlNWYWx1ZVB0ciBKYXZhSlNP
YmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgdGhl
T2JqZWN0KSBjb25zdAogewogICAgIC8vIEluc3RhbmNlcyBvZiBuZXRzY2FwZS5qYXZhc2NyaXB0
LkpTT2JqZWN0IGdldCBjb252ZXJ0ZWQgYmFjayB0bwogICAgIC8vIEphdmFTY3JpcHQgb2JqZWN0
cy4gIEFsbCBvdGhlciBvYmplY3RzIGFyZSB3cmFwcGVkLiAgSXQncyBub3QKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9q
bmkvam5pX29iamMubW0JKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9vYmpjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M6OkJpbmRpbmdzOwogICAgICAgIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOihOU1N0cmluZyAq
KilleGNlcHRpb25TdHJpbmc7CiBAZW5kCiAKLWJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hK
TklDYWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qgdm9pZCogdGFyZ2V0QXBwbGV0Vmlldywgam9i
amVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1l
dGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSAmcmVzdWx0LCBjb25zdCBjaGFyKiwgSlNWYWx1
ZSomIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQorYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpO
SUNhbGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2Jq
ZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlICZyZXN1bHQsIGNvbnN0IGNoYXIqLCBKU1ZhbHVl
UHRyJiBleGNlcHRpb25EZXNjcmlwdGlvbikKIHsKICAgICBpZCB2aWV3ID0gKGlkKXRhcmdldEFw
cGxldFZpZXc7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHJldmlz
aW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBKYXZhRmllbGQ6OkphdmFGaWVsZCAoSk5JRW52ICpl
bnYsIGpvYmplCiAgICAgX2ZpZWxkID0gbmV3IEpPYmplY3RXcmFwcGVyKGFGaWVsZCk7CiB9CiAK
LUpTVmFsdWUqIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSogZXhl
Yywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqZWN0KQorSlNWYWx1ZVB0ciBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9B
cnJheShFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUs
IFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKIHsKICAgICBpZiAodHlwZVswXSAh
PSAnWycpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtOTMsNyArOTMsNyBAQCBq
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOwog
ICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25EZXNjcmlwdGlvbiA9IG5vVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0g
bm9WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzFdOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGFyZ3NbMF0ubCA9IGppbnN0YW5jZTsKQEAgLTEwNiwxMSAr
MTA2LDExIEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGkpIGNvbnN0IAorSlNWYWx1ZVB0ciBK
YXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFu
Y2UqIGkpIGNvbnN0IAogewogICAgIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UgKj4oaSk7CiAKLSAgICBKU1ZhbHVlKiBqc3Jlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciBqc3Jlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgCiAgICAgc3dpdGNoIChfSk5JVHlwZSkgewogICAgICAgICBjYXNlIGFycmF5X3R5
cGU6CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbgogICAgICAgICB7CiAgICAgICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0g
aW5zdGFuY2UtPnJvb3RPYmplY3QoKTsKICAgICAgICAgICAgIGlmIChyb290T2JqZWN0ICYmIHJv
b3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogZXhj
ZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0
ciBleGNlcHRpb25EZXNjcmlwdGlvbiA9IG5vVmFsdWUoKTsKICAgICAgICAgICAgICAgICBqdmFs
dWUgYXJnc1syXTsKICAgICAgICAgICAgICAgICBqdmFsdWUgcmVzdWx0OwogICAgICAgICAgICAg
ICAgIApAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW4KICAgICB9CiB9CiAKLXZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSogYVZhbHVlKSBjb25z
dAordm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEluc3RhbmNlKiBpLCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3QKIHsKICAgICBjb25zdCBK
YXZhSW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+
KGkpOwogICAgIGp2YWx1ZSBqYXZhVmFsdWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywg
YVZhbHVlLCBfSk5JVHlwZSwgdHlwZSgpKTsKQEAgLTM4Niw3ICszODYsNyBAQCBSb290T2JqZWN0
KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zCiAgICAgcmV0dXJuIF9yb290T2JqZWN0ICYm
IF9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBfcm9vdE9iamVjdC5nZXQoKSA6IDA7CiB9CiAKLXZv
aWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUqIGFWYWx1ZSkgY29uc3QKK3ZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewog
ICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAgY2hhciAqamF2YUNsYXNzTmFtZSA9
IDA7CkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBKYXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0
YXRlKiBleAogfQogCiAKLUpTVmFsdWUqIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4KSBjb25zdAorSlNWYWx1ZVB0ciBKYXZhQXJyYXk6OnZhbHVlQXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBKTklFbnYgKmVu
diA9IGdldEpOSUVudigpOwogICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21Qcmlt
aXRpdmVUeXBlKF90eXBlWzFdKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGlt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCShyZXZp
c2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIsOCArMTEyLDggQEAgY2xhc3MgSmF2YUZpZWxkIDogcHVibGljIEZpZWxk
CiBwdWJsaWM6CiAgICAgSmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9iamVjdCBhRmllbGQpOwog
Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwg
SlNWYWx1ZSogYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVGcm9t
SW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdDsKICAgICAK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdCB7IHJldHVybiBfbmFtZS5VVEY4
U3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBfdHlwZS5VVEY4U3RyaW5nKCk7IH0KQEAgLTE2OCwxMyArMTY4LDEzIEBAIHB1YmxpYzoKIAog
ICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlKiBh
VmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWVQdHIgYVZhbHVl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMs
IHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
TGVuZ3RoKCkgY29uc3Q7CiAgICAgCiAgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBfYXJyYXktPl9pbnN0YW5jZTsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUqIGNvbnZlcnRK
T2JqZWN0VG9BcnJheSAoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25zdCBj
aGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBjb252ZXJ0Sk9iamVjdFRvQXJyYXkgKEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCBhbk9iamVj
dCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7CiAKIHByaXZhdGU6
CiAgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBfYXJyYXk7CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV91dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBAIHN0YXRpYyBq
b2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgICAgICAgICBlbnYtPkZp
bmRDbGFzcygiamF2YS9sYW5nL1N0cmluZyIpLAogICAgICAgICAgICAgICAgIGVudi0+TmV3U3Ry
aW5nVVRGKCIiKSk7CiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBpdGVtID0ganNBcnJheS0+Z2V0KGV4
ZWMsIGkpOwogICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLT50b1N0
cmluZyhleGVjKTsKICAgICAgICAgICAgICAgICBlbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChq
YXJyYXksaSwKICAgICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhl
bnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgp
KSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFu
Y2VUb0phdgogICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewogICAgICAgICAgICAgamFycmF5
ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0Jvb2xlYW5BcnJheShsZW5ndGgpOwogICAgICAgICAg
ICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAg
IEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAg
ICBqYm9vbGVhbiB2YWx1ZSA9IChqYm9vbGVhbilpdGVtLT50b051bWJlcihleGVjKTsKICAgICAg
ICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbigoamJvb2xlYW5BcnJheSlqYXJy
YXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTM4Nyw3
ICszODcsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAg
ICAgIGNhc2UgYnl0ZV90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3Qnl0ZUFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBpdGVtID0g
anNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpieXRlIHZhbHVlID0gKGpi
eXRlKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0Qnl0ZUFy
cmF5UmVnaW9uKChqYnl0ZUFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUp
OwogICAgICAgICAgICAgfQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZl
cnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKICAgICAgICAg
ICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKICAg
ICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0tPnRvU3RyaW5nKGV4ZWMpOwogICAg
ICAgICAgICAgICAgIGpjaGFyIHZhbHVlID0gMDsKICAgICAgICAgICAgICAgICBpZiAoc3RyaW5n
VmFsdWUuc2l6ZSgpID4gMCkKQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgam9iamVjdCBjb252
ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewogICAgICAg
ICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld1Nob3J0QXJyYXkobGVuZ3RoKTsK
ICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAg
ICAgICAgICAgICAganNob3J0IHZhbHVlID0gKGpzaG9ydClpdGVtLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgICAgICAgICBlbnYtPlNldFNob3J0QXJyYXlSZWdpb24oKGpzaG9ydEFycmF5KWph
cnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtNDIw
LDcgKzQyMCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAg
ICAgICAgY2FzZSBpbnRfdHlwZTogewogICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJh
eSllbnYtPk5ld0ludEFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBpdGVtID0g
anNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGppbnQgdmFsdWUgPSAoamlu
dClpdGVtLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgICAgICBlbnYtPlNldEludEFycmF5
UmVnaW9uKChqaW50QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAg
ICAgICAgICAgICB9CkBAIC00MzAsNyArNDMwLDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFy
cmF5SW5zdGFuY2VUb0phdgogICAgICAgICBjYXNlIGxvbmdfdHlwZTogewogICAgICAgICAgICAg
amFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0xvbmdBcnJheShsZW5ndGgpOwogICAgICAg
ICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAg
ICAgICBqbG9uZyB2YWx1ZSA9IChqbG9uZylpdGVtLT50b051bWJlcihleGVjKTsKICAgICAgICAg
ICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbigoamxvbmdBcnJheSlqYXJyYXksIChqc2l6
ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTQ0MCw3ICs0NDAsNyBA
QCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAgICAgIGNhc2Ug
ZmxvYXRfdHlwZTogewogICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5l
d0Zsb2F0QXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXkt
PmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5
LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamZsb2F0IHZhbHVlID0gKGpmbG9hdClp
dGVtLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgICAgICBlbnYtPlNldEZsb2F0QXJyYXlS
ZWdpb24oKGpmbG9hdEFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwog
ICAgICAgICAgICAgfQpAQCAtNDUwLDcgKzQ1MCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRB
cnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewogICAgICAgICAg
ICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0RvdWJsZUFycmF5KGxlbmd0aCk7CiAg
ICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIEpTVmFsdWUqIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZVB0ciBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAg
ICAgICAgICAgIGpkb3VibGUgdmFsdWUgPSAoamRvdWJsZSlpdGVtLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgICAgICAgICBlbnYtPlNldERvdWJsZUFycmF5UmVnaW9uKChqZG91YmxlQXJyYXkp
amFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9CkBAIC00
NjgsNyArNDY4LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgog
fQogCiAKLWp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlLCBKTklUeXBlIF9KTklUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQor
anZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2
YWx1ZSwgSk5JVHlwZSBfSk5JVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKIHsKICAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5p
X3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHku
aAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBKTklUeXBlIEpOSVR5cGVGcm9tQ2xhc3NO
YW1lKGNvbnN0IGNoYXIgCiBKTklUeXBlIEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShjaGFyIHR5
cGUpOwogY29uc3QgY2hhciAqc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUoSk5JVHlwZSB0eXBl
KTsKIAotanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBK
TklUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKTsKK2p2YWx1ZSBjb252ZXJ0VmFsdWVU
b0pWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCBKTklUeXBlLCBjb25zdCBjaGFyKiBqYXZh
Q2xhc3NOYW1lKTsKIAoganZhbHVlIGdldEpOSUZpZWxkKGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5
cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSk7CiAKQEAgLTI3Nyw3
ICsyNzcsNyBAQCBUIGNhbGxKTklTdGF0aWNNZXRob2QoamNsYXNzIGNscywgY29uc3QgCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLWJvb2wgZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSos
IGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGlj
LCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBq
dmFsdWUmIHJlc3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZSomIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKTsKK2Jvb2wgZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSosIGNvbnN0IHZv
aWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGljLCBKTklUeXBl
IHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBqdmFsdWUmIHJl
c3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uRGVzY3Jp
cHRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29i
amMvV2ViU2NyaXB0T2JqZWN0LmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uv
b2JqYy9XZWJTY3JpcHRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
KyAoTlNTdHJpbmcgKil3ZWJTY3JpcHROYW1lRm9yS2V5Oihjb25zdCBjaGFyICopbmFtZTsKICsg
KEJPT0wpaXNLZXlFeGNsdWRlZEZyb21XZWJTY3JpcHQ6KGNvbnN0IGNoYXIgKiluYW1lOwogCi0r
IChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1ZSopdmFsdWUgb3JpZ2lu
Um9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCBy
b290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0OworKyAoaWQp
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVmFsdWVQdHIpdmFsdWUgb3JpZ2luUm9v
dE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCByb290
T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0OwogLSBfaW5pdFdp
dGhKU09iamVjdDooSlNDOjpKU09iamVjdCopaW1wIG9yaWdpblJvb3RPYmplY3Q6KFBhc3NSZWZQ
dHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4pb3JpZ2luUm9vdE9iamVjdCByb290T2JqZWN0
OihQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+KXJvb3RPYmplY3Q7CiAtIChK
U0M6OkpTT2JqZWN0ICopX2ltcDsKIEBlbmQKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19jbGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5o
CShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE1ldGhv
ZExpc3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSAqaW5zdGFuY2Up
IGNvbnN0OwogICAgIHZpcnR1YWwgRmllbGQgKmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYs
IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGZhbGxi
YWNrT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBmYWxsYmFja09i
amVjdChFeGVjU3RhdGUgKmV4ZWMsIEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBDbGFzc1N0cnVjdFB0ciBpc2EoKSB7IHJldHVy
biBfaXNhOyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCShyZXZpc2lv
biAzOTU5MykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBAIEZpZWxkKiBPYmpjQ2xhc3M6OmZpZWxkTmFtZWQoY29u
c3QgSWRlbnQKICAgICByZXR1cm4gYUZpZWxkOwogfQogCi1KU1ZhbHVlKiBPYmpjQ2xhc3M6OmZh
bGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlUHRyIE9iamNDbGFzczo6ZmFsbGJhY2tP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSkKIHsKICAgICBPYmpjSW5zdGFuY2UqIG9iamNJbnN0YW5jZSA9IHN0
YXRpY19jYXN0PE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKTsKICAgICBpZCB0YXJnZXRPYmplY3Qg
PSBvYmpjSW5zdGFuY2UtPmdldE9iamVjdCgpOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2lu
c3RhbmNlLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2lu
c3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIzICs0OCwyMyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdDsKICAgICAgICAgCi0gICAgdmly
dHVhbCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNW
YWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNv
bnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VN
ZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhv
ZExpc3QmLCBjb25zdCBBcmdMaXN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tl
RGVmYXVsdE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlRGVmYXVs
dE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVl
UHRyIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZp
bmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIpOwogICAg
IAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KSBjb25zdDsKIAogICAgIE9iamVjdFN0cnVjdFB0ciBnZXRPYmplY3QoKSBj
b25zdCB7IHJldHVybiBfaW5zdGFuY2UuZ2V0KCk7IH0KICAgICAKLSAgICBKU1ZhbHVlKiBzdHJp
bmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBudW1iZXJWYWx1ZShFeGVj
U3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBib29sZWFuVmFsdWUoKSBjb25zdDsKKyAgICBK
U1ZhbHVlUHRyIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWVQdHIg
bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBib29sZWFuVmFs
dWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgQmluZGluZ0xhbmd1YWdlIGdldEJpbmRpbmdMYW5n
dWFnZSgpIGNvbnN0IHsgcmV0dXJuIE9iamVjdGl2ZUNMYW5ndWFnZTsgfQogCkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI0LDkgKzEy
NCw5IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHQKICAgICByZXR1
cm4gW19pbnN0YW5jZS5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZURl
ZmF1bHRNZXRob2RXaXRoQXJndW1lbnRzOildOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6
Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExp
c3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29u
c3QgQXJnTGlzdCAmYXJncykKIHsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5lZCgp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOyAvLyBDYW4ndCBwdXQgdGhpcyBp
bnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCkBA
IC0yNDYsMTIgKzI0NiwxMiBAQCBKU1ZhbHVlKiBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChF
eGVjCiAKICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0ND
IHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBo
YW5kbGUgY29weWluZyBmcm9tIGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgotICAgIHJldHVy
biBjb25zdF9jYXN0PEpTVmFsdWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxK
U1ZhbHVlUHRyJj4ocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjppbnZva2VE
ZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCAmYXJncykKK0pTVmFs
dWVQdHIgT2JqY0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCAmYXJncykKIHsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5l
ZCgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAogICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0IHB1dCB0aGlzIGlu
c2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAgICAg
c2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CkBAIC0yOTcsNyArMjk3LDcgQEAgSlNWYWx1ZSogT2Jq
Y0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aAogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxl
bSBpbiBzb21lIHZlcnNpb25zIG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRp
bGUgYW5kCiAgICAgLy8gaXQgY2FuJ3QgaGFuZGxlIGNvcHlpbmcgZnJvbSBhIHZvbGF0aWxlIHRv
IG5vbi12b2xhdGlsZS4KLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlKiY+KHJlc3VsdCk7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNWYWx1ZVB0ciY+KHJlc3VsdCk7CiB9CiAKIGJvb2wg
T2JqY0luc3RhbmNlOjpzdXBwb3J0c1NldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCgpCkBAIC0zMDgs
NyArMzA4LDcgQEAgYm9vbCBPYmpjSW5zdGFuY2U6OnN1cHBvcnRzU2V0VmFsdWVPZlVuZAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmlu
ZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBKU1Zh
bHVlKiBhVmFsdWUpCit2b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIEpTVmFsdWVQdHIg
YVZhbHVlKQogewogICAgIGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVjdCgpOwogCkBAIC0zMzIs
OSArMzMyLDkgQEAgdm9pZCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaQogICAg
IH0KIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkgY29uc3QKK0pTVmFs
dWVQdHIgT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkgY29uc3QKIHsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSBnZXRPYmplY3QoKTsKIApAQCAtMzU4
LDEwICszNTgsMTAgQEAgSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbgog
CiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21lIHZlcnNpb25zIG9mIEdDQyB3aGVy
ZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCiAgICAgLy8gaXQgY2FuJ3QgaGFuZGxl
IGNvcHlpbmcgZnJvbSBhIHZvbGF0aWxlIHRvIG5vbi12b2xhdGlsZS4KLSAgICByZXR1cm4gY29u
c3RfY2FzdDxKU1ZhbHVlKiY+KHJlc3VsdCk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNWYWx1
ZVB0ciY+KHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAorSlNW
YWx1ZVB0ciBPYmpjSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaGludCA9PSBQcmVmZXJT
dHJpbmcpCiAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKQEAgLTM3NCwyNCArMzc0
LDI0IEBAIEpTVmFsdWUqIE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWMKICAgICByZXR1
cm4gdmFsdWVPZihleGVjKTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpzdHJpbmdWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6c3RyaW5n
VmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBjb252ZXJ0TlNTdHJp
bmdUb1N0cmluZyhleGVjLCBbZ2V0T2JqZWN0KCkgZGVzY3JpcHRpb25dKTsKIH0KIAotSlNWYWx1
ZSogT2JqY0luc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1Zh
bHVlUHRyIE9iamNJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ewogICAgIC8vIEZJWE1FOiAgSW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZQogICAgIHJldHVy
biBqc051bWJlcihleGVjLCAwKTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpib29sZWFu
VmFsdWUoKSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlCiAgICAg
cmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6dmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IAorSlNWYWx1ZVB0ciBPYmpjSW5zdGFuY2U6OnZh
bHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdCAKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWUo
ZXhlYyk7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHJldmlzaW9uIDM5
NTkzKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsOCArNDQsOCBAQCBwdWJsaWM6CiAgICAgT2JqY0ZpZWxkKEl2YXJTdHJ1Y3RQdHIp
OwogICAgIE9iamNGaWVsZChDRlN0cmluZ1JlZiBuYW1lKTsKICAgICAKLSAgICB2aXJ0dWFsIEpT
VmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKikgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25z
dCBJbnN0YW5jZSosIEpTVmFsdWUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFs
dWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNl
KiwgSlNWYWx1ZVB0cikgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpuYW1l
KCkgY29uc3Q7CiAgICAgICAgIApAQCAtNzksMTMgKzc5LDEzIEBAIGNsYXNzIE9iamNBcnJheSA6
IHB1YmxpYyBBcnJheSB7CiBwdWJsaWM6CiAgICAgT2JqY0FycmF5KE9iamVjdFN0cnVjdFB0ciwg
UGFzc1JlZlB0cjxSb290T2JqZWN0Pik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSogYVZhbHVlKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBp
bnQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNv
bnN0OwogICAgIAogICAgIE9iamVjdFN0cnVjdFB0ciBnZXRPYmpjQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBfYXJyYXkuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBjb252ZXJ0T2JqY0Fy
cmF5VG9BcnJheShFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFN0cnVjdFB0ciBhbk9iamVjdCk7Cisg
ICAgc3RhdGljIEpTVmFsdWVQdHIgY29udmVydE9iamNBcnJheVRvQXJyYXkoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RTdHJ1Y3RQdHIgYW5PYmplY3QpOwogCiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxPYmplY3RTdHJ1Y3RQdHI+IF9hcnJheTsKQEAgLTEwNCwxNyArMTA0LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRh
Jik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVh
bCBKU1ZhbHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29u
c3Q7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsOSArMTA4LDkgQEAgY29uc3QgY2hhciogT2JqY0ZpZWxkOjpuYW1lKCkgY29uc3Qg
CiAgICAgcmV0dXJuIFsoTlNTdHJpbmcqKV9uYW1lLmdldCgpIFVURjhTdHJpbmddOwogfQogCi1K
U1ZhbHVlKiBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjRmllbGQ6OnZhbHVl
RnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNlKSBj
b25zdAogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIGlkIHRhcmdldE9iamVjdCA9
IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3Qo
KTsKIApAQCAtMTI4LDEwICsxMjgsMTAgQEAgSlNWYWx1ZSogT2JqY0ZpZWxkOjp2YWx1ZUZyb21J
bnN0YW5jZShFeAogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21lIHZlcnNpb25z
IG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCiAgICAgLy8gaXQg
Y2FuJ3QgaGFuZGxlIGNvcHlpbmcgZnJvbSBhIHZvbGF0aWxlIHRvIG5vbi12b2xhdGlsZS4KLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlKiY+KHJlc3VsdCk7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8SlNWYWx1ZVB0ciY+KHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpZCBjb252ZXJ0VmFsdWVU
b09iamNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpZCBj
b252ZXJ0VmFsdWVUb09iamNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVl
KQogewogICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gZmluZFJvb3RPYmplY3Qo
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCkBAIC0x
MzksNyArMTM5LDcgQEAgc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChFeGVjUwog
ICAgIHJldHVybiBbd2ViU2NyaXB0T2JqZWN0Q2xhc3MoKSBfY29udmVydFZhbHVlVG9PYmpjVmFs
dWU6dmFsdWUgb3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0LmdldCgpIHJvb3RPYmplY3Q6cm9v
dE9iamVjdC5nZXQoKV07CiB9CiAKLXZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UsIEpTVmFsdWUqIGFWYWx1
ZSkgY29uc3QKK3ZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAog
ewogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2Uq
PihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRv
T2JqY09iamVjdChleGVjLCBhVmFsdWUpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIE9iamNBcnJheTo6
T2JqY0FycmF5KE9iamVjdFN0cnVjdFB0ciBhLCAKIHsKIH0KIAotdm9pZCBPYmpjQXJyYXk6OnNl
dFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUqIGFW
YWx1ZSkgY29uc3QKK3ZvaWQgT2JqY0FycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAo
IVtfYXJyYXkuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNlcnRPYmplY3Q6
YXRJbmRleDopXSkgewogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkFycmF5
IGlzIG5vdCBtdXRhYmxlLiIpOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgT2JqY0FycmF5Ojpz
ZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXgKICAgICB9CiB9CiAKLUpTVmFsdWUqIE9iamNBcnJheTo6
dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKK0pTVmFs
dWVQdHIgT2JqY0FycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGlu
ZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA+IFtfYXJyYXkuZ2V0KCkgY291bnRdKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAiSW5kZXggZXhjZWVkcyBh
cnJheSBzaXplLiIpOwpAQCAtMjIyLDE2ICsyMjIsMTYgQEAgYm9vbCBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OmdldE93blByb3BlcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE9iamNGYWxs
YmFja09iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVl
KiwgUHV0UHJvcGVydHlTbG90JikKK3ZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYp
CiB7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJ1
bnRpbWVPYmplY3RJbXA6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAogICAgIFJ1bnRpbWVPYmplY3RJ
bXAqIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKICAgICBJbnN0YW5jZSogaW5zdGFuY2UgPSBpbXAtPmdldEludGVybmFsSW5zdGFuY2Uo
KTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVsZXRl
UHJvcGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU1ZhbHVlKiBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gX2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywgX2l0ZW0pOwog
fQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5oCShyZXZpc2lvbiAzOTU5MykKKysr
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDkgKzczLDkgQEAgdHlwZWRlZiBlbnVtIHsKIAogY2xhc3MgUm9vdE9iamVjdDsKIAotT2JqY1Zh
bHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBPYmpjVmFs
dWVUeXBlKTsKLUpTVmFsdWUqIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgTlNTdHJpbmcgKm5zc3RyaW5nKTsKLUpTVmFsdWUqIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KEV4ZWNTdGF0ZSosIHZvaWQqIGJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSwgUm9vdE9iamVjdCopOwor
T2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIs
IE9iamNWYWx1ZVR5cGUpOworSlNWYWx1ZVB0ciBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZyk7CitKU1ZhbHVlUHRyIGNvbnZlcnRPYmpj
VmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSosIHZvaWQqIGJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSwgUm9v
dE9iamVjdCopOwogT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZShjb25zdCBjaGFy
ICp0eXBlKTsKIAogYm9vbCBjb252ZXJ0SlNNZXRob2ROYW1lVG9PYmpjKGNvbnN0IGNoYXIgKkpT
TmFtZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfdXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIGJv
b2wgY29udmVydEpTTWV0aG9kTmFtZVRvT2JqYyhjb25zdCBjaGEKICAgICBbXSwgb3RoZXIgICAg
ICAgZXhjZXB0aW9uCiAKICovCi1PYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgT2JqY1ZhbHVlVHlwZSB0eXBlKQorT2JqY1Zh
bHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2
YWx1ZSwgT2JqY1ZhbHVlVHlwZSB0eXBlKQogewogICAgIE9iamNWYWx1ZSByZXN1bHQ7CiAgICAg
ZG91YmxlIGQgPSAwOwpAQCAtMTk0LDcgKzE5NCw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFsdWVU
b09iamNWYWx1ZShFeGVjU3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZykK
K0pTVmFsdWVQdHIgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0
cmluZyAqbnNzdHJpbmcpCiB7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIApAQCAtMjAz
LDcgKzIwMyw3IEBAIEpTVmFsdWUqIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGEKICAg
ICBjaGFycyA9ICh1bmljaGFyICopbWFsbG9jKHNpemVvZih1bmljaGFyKSpsZW5ndGgpOwogICAg
IFtuc3N0cmluZyBnZXRDaGFyYWN0ZXJzOmNoYXJzXTsKICAgICBVU3RyaW5nIHUoKGNvbnN0IFVD
aGFyKiljaGFycywgbGVuZ3RoKTsKLSAgICBKU1ZhbHVlKiBhVmFsdWUgPSBqc1N0cmluZyhleGVj
LCB1KTsKKyAgICBKU1ZhbHVlUHRyIGFWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHUpOwogICAgIGZy
ZWUoKHZvaWQgKiljaGFycyk7CiAgICAgcmV0dXJuIGFWYWx1ZTsKIH0KQEAgLTIyNiw3ICsyMjYs
NyBAQCBKU1ZhbHVlKiBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhCiAgICAgaWQgICAg
ICAgICAgICAgIG9iamVjdCB3cmFwcGVyCiAgICAgb3RoZXIgICAgICAgICAgIHNob3VsZCBub3Qg
aGFwcGVuCiAqLwotSlNWYWx1ZSogY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9vdE9iamVjdCogcm9vdE9i
amVjdCkKK0pTVmFsdWVQdHIgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9vdE9iamVjdCogcm9vdE9iamVj
dCkKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMx
LDcgKzIzMSw3IEBAIHN0cnVjdCBDb25zb2xlTWVzc2FnZSB7CiAgICAgTWVzc2FnZVNvdXJjZSBz
b3VyY2U7CiAgICAgTWVzc2FnZUxldmVsIGxldmVsOwogICAgIFN0cmluZyBtZXNzYWdlOwotICAg
IFZlY3RvcjxQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gPiB3cmFwcGVkQXJndW1lbnRzOworICAgIFZl
Y3RvcjxQcm90ZWN0ZWRKU1ZhbHVlUHRyPiB3cmFwcGVkQXJndW1lbnRzOwogICAgIFZlY3RvcjxT
Y3JpcHRTdHJpbmc+IGZyYW1lczsKICAgICB1bnNpZ25lZCBsaW5lOwogICAgIFN0cmluZyB1cmw7
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gMzk1OTMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU09iamVjdCogSmF2YVNjcmlwdENhbGxG
cmFtZTo6dGhpc09iamVjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGlu
IHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25z
dAorSlNWYWx1ZVB0ciBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBVU3RyaW5n
JiBzY3JpcHQsIEpTVmFsdWVQdHImIGV4Y2VwdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQobV9p
c1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0ph
dmFTY3JpcHRDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZh
U2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
SmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgSlNDOjpTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbigpIGNvbnN0OwogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIHRoaXNPYmplY3QoKSBj
b25zdDsKLSAgICAgICAgSlNDOjpKU1ZhbHVlKiBldmFsdWF0ZShjb25zdCBKU0M6OlVTdHJpbmcm
IHNjcmlwdCwgSlNDOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgSlNDOjpK
U1ZhbHVlUHRyIGV2YWx1YXRlKGNvbnN0IEpTQzo6VVN0cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFs
dWVQdHImIGV4Y2VwdGlvbikgY29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAg
IEphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIFBhc3NS
ZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50
IGxpbmUpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkocmV2
aXNpb24gMzk1OTMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBKU0NsYXNzUmVmIFByb2ZpbGVDbGFz
cygpCiAgICAgcmV0dXJuIHByb2ZpbGVDbGFzczsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3Rh
dGUqIGV4ZWMsIFByb2ZpbGUqIHByb2ZpbGUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBQcm9maWxlKiBwcm9maWxlKQogewogICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oCShy
ZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIEpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvZmlsZSopOworICAgIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9maWxlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwCShyZXZpc2lvbiAzOTU5
MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBKU0NsYXNzUmVmIFByb2ZpbGVOb2RlQ2xhc3Mo
KQogICAgIHJldHVybiBwcm9maWxlTm9kZUNsYXNzOwogfQogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgUHJvZmlsZU5vZGUqIHByb2ZpbGVOb2RlKQorSlNWYWx1ZVB0ciB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgUHJvZmlsZU5vZGUqIHByb2ZpbGVOb2RlKQogewogICAgIGlmICghcHJv
ZmlsZU5vZGUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5oCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgSlND
bGFzc1JlZiBQcm9maWxlTm9kZUNsYXNzKCk7Ci0gICAgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9maWxlTm9kZSopOworICAgIEpTQzo6SlNWYWx1ZVB0ciB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9maWxlTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTQsNyAr
OTU0LDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgIAogICAgIC8v
IHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50LgogCiAgICAgaWYgKEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGRvY3VtZW50KCktPmZyYW1lKCkpKSB7Ci0gICAg
ICAgIGlmIChKU0M6OkpTVmFsdWUqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVy
KCp3aW5kb3ctPmdsb2JhbERhdGEoKSwgdGhpcykpCisgICAgICAgIEpTQzo6SlNWYWx1ZVB0ciB3
cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqd2luZG93LT5nbG9iYWxEYXRhKCks
IHRoaXMpOworICAgICAgICBpZiAod3JhcHBlcikKICAgICAgICAgICAgIEpTQzo6SGVhcDo6aGVh
cCh3cmFwcGVyKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VUZXh0LnNpemUoKSAq
IDIpOwogICAgIH0KICNlbmRpZgpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTkzKQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wMS0wNCAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIEpT
VmFsdWUqIHdpdGggbmV3IHdyYXBwZXIgY2xhc3MsIEpTVmFsdWVQdHIuCisgICAgICAgIFNlZSBK
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06CisgICAgICAgICgt
W1dlYlNjcmlwdENhbGxGcmFtZSBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdENhbGxGcmFtZSBleGNlcHRpb25dKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
Q2FsbEZyYW1lIGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKGFlRGVzY0Zyb21KU1ZhbHVlKToKKyAgICAgICAgKC1bV2ViVmlldyBh
ZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpdKToKKwogMjAwOS0wMS0wMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDM5NTkzKQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4
Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL21hcmt1cC5oPgogI2ltcG9ydCA8V2ViQ29yZS92aXNp
YmxlX3VuaXRzLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgorI2ltcG9ydCA8cnVudGlt
ZS9KU1ZhbHVlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTg5LDcgKzkwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogdXNp
bmcgSlNDOjpKU0dsb2JhbE9iamVjdDsKIHVzaW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpK
U1ZhbHVlOwordXNpbmcgSlNDOjpKU1ZhbHVlUHRyOwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVu
dCBiZWhhdmlvciBtYXRyaXggZm9yIGZvdXIgdHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC02NTYs
NyArNjU3LDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKAogewog
ICAgIEFTU0VSVChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAKLSAgICBK
U1ZhbHVlKiByZXN1bHQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNj
cmlwdChzdHJpbmcsIGZvcmNlVXNlckdlc3R1cmUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KHN0
cmluZywgZm9yY2VVc2VyR2VzdHVyZSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+
Y29yZUZyYW1lKSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0
aGUgcGFnZS4KICAgICAgICAgcmV0dXJuIEAiIjsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAzOTU5MykKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIE5TU3RyaW5nICogY29uc3QgV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmUKIAog
QGludGVyZmFjZSBXZWJTY3JpcHRDYWxsRnJhbWUgKFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbnRl
cm5hbCkKIAotLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKil2YWx1ZTsK
Ky0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZVB0cil2YWx1ZTsKIAogQGVu
ZAogCkBAIC0xMDksNyArMTA5LDcgQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRFcnJvckxp
bmVOdW1iZQogICAgIF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSA9IDA7CiB9CiAKLS0gKGlk
KV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSopdmFsdWUKKy0gKGlkKV9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZVB0cil2YWx1ZQogewogICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiBuaWw7CkBAIC0yMDQsNyArMjA0LDcgQEAgTlNTdHJpbmcgKiBjb25zdCBX
ZWJTY3JpcHRFcnJvckxpbmVOdW1iZQogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZy
YW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gX3By
aXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5leGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlUHRyIGV4
Y2VwdGlvbiA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXhjZXB0aW9uKCk7CiAgICAg
cmV0dXJuIGV4Y2VwdGlvbiA/IFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpleGNlcHRp
b25dIDogbmlsOwogfQogCkBAIC0yMjEsOCArMjIxLDggQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJT
Y3JpcHRFcnJvckxpbmVOdW1iZQogCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogCi0gICAgSlNW
YWx1ZSogZXhjZXB0aW9uID0gbm9WYWx1ZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IF9wcml2
YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoU3RyaW5nKHNjcmlwdCksIGV4Y2VwdGlv
bik7CisgICAgSlNWYWx1ZVB0ciBleGNlcHRpb24gPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKFN0cmluZyhz
Y3JpcHQpLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBb
c2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVz
dWx0ID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3VsdF0gOiBuaWw7CkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMzk1OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBACiAjaW1wb3J0
IDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgorI2ltcG9ydCA8cnVudGltZS9K
U1ZhbHVlLmg+CiAjaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgogI2ltcG9ydCA8b2JqYy9vYmpjLWF1
dG8uaD4KICNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CkBAIC0zNjIzLDcgKzM2MjQsNyBA
QCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAgICAgcmV0dXJuIGNv
cmVGcmFtZS0+c2hvdWxkQ2xvc2UoKTsKIH0KIAotc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0
b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSoganNWYWx1ZSkK
K3N0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVQdHIganNWYWx1ZSkKIHsKICAgICBOU0FwcGxlRXZlbnREZXNjcmlw
dG9yKiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLT5pc0Jvb2xlYW4oKSkKQEAgLTM2NjUs
NyArMzY2Niw3IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAg
ICAgICAgICAgICAgICByZXR1cm4gYWVEZXNjOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYyk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlw
dG9yIG51bGxEZXNjcmlwdG9yXTsKQEAgLTM2ODUsNyArMzY4Niw3IEBAIHN0YXRpYyBOU0FwcGxl
RXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBpZiAo
IWNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1
ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY29yZUZyYW1lLT5sb2FkZXIo
KS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3Vs
dCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAwOwogICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26443</attachid>
            <date>2009-01-05 14:58:58 -0800</date>
            <delta_ts>2009-01-05 17:06:51 -0800</delta_ts>
            <desc>With added &apos;doze jsc build fix goodness</desc>
            <filename>patch.JSValuePtr.phase2615.txt</filename>
            <type>text/plain</type>
            <size>920321</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODgyIEBACisyMDA5LTAxLTA1ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSog
d2l0aCBhIG5ldyBzbWFydCBwb2ludGVyIHR5cGUsIEpTVmFsdWVQdHIuCisgICAgICAgIAorICAg
ICAgICBBIEphdmFTY3JpcHQgdmFsdWUgbWF5IGJlIGEgaGVhcCBvYmplY3Qgb3IgYm94ZWQgcHJp
bWl0aXZlLCByZXByZXNlbnRlZCBieSBhCisgICAgICAgIHBvaW50ZXIsIG9yIG1heSBiZSBhbiB1
bmJveGVkIGltbWVkaWF0ZSB2YWx1ZSwgc3VjaCBhcyBhbiBpbnRlZ2VyLiAgU2luY2UgYQorICAg
ICAgICB2YWx1ZSBtYXkgZHluYW1pY2FsbHkgbmVlZCB0byBjb250YWluIGVpdGhlciBhIHBvaW50
ZXIgdmFsdWUgb3IgYW4gaW1tZWRpYXRlLAorICAgICAgICB3ZSBlbmNvZGUgaW1tZWRpYXRlcyBh
cyBwb2ludGVyIHZhbHVlcyAoc2luY2UgYWxsIHZhbGlkIEpTQ2VsbCBwb2ludGVycyBhcmUKKyAg
ICAgICAgYWxsb2NhdGVkIGF0IGFsbGlnbmVkIGFkZGVzc2VzLCB1bmFsaWduZWQgYWRkcmVzc2Vz
IGFyZSBhdmFpbGFibGUgdG8gZW5jb2RlCisgICAgICAgIGltbWVkaWF0ZXMpLiAgQXMgc3VjaCBh
bGwgSmF2YVNjcmlwdCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIHVzaW5nIGEgSlNWYWx1ZSouCisK
KyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbmN1bWJlcmVkIGJ5IGEgbnVtYmVyIG9m
IGNvbnRzdHJhaW50cy4gIEl0IHRpZXMgdGhlCisgICAgICAgIEpTVmFsdWUgcmVwcmVzZW50YXRp
b24gdG8gdGhlIHNpemUgb2YgcG9pbnRlciBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoLCBmb3IKKyAg
ICAgICAgZXhhbXBsZSwgbWVhbnMgdGhhdCB3ZSBjdXJyZW50bHkgY2FuIHJlcHJlc2VudCBkaWZm
ZXJlbnQgcmFuZ2VzIG9mIGludGVnZXJzCisgICAgICAgIGFzIGltbWVkaWF0ZXMgb24geDg2IGFu
ZCB4ODYtNjQuICBJdCBhbHNvIHByZXZlbnRzIHVzIGZyb20gb3ZlcmxvYWRpbmcgdGhlCisgICAg
ICAgIHRvLWJvb2xlYW4gY29udmVyc2lvbiB1c2VkIHRvIHRlc3QgZm9yIG5vVmFsdWUoKSAtIGVm
ZmVjdGl2ZWx5IGZvcmNpbmcgdXMKKyAgICAgICAgdG8gcmVwcmVzZW50IG5vVmFsdWUoKSBhcyAw
LiAgVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBiZSBwcm9ibGVtYXRpYyB3ZXJlIHdlCisgICAgICAg
IHRvIHdpc2ggdG8gZW5jb2RlIGludGVnZXIgdmFsdWVzIGRpZmZlcmVudGx5IChlLmcuIHdlcmUg
d2UgdG8gdXNlIHRoZSB2OAorICAgICAgICBlbmNvZGluZywgd2hlcmUgcG9pbnRlcnMgYXJlIHRh
Z2dlZCB3aXRoIDEgYW5kIGludGVnZXJzIHdpdGggMCwgdGhlbiB0aGUKKyAgICAgICAgaW1tZWRp
YXRlIGludGVnZXIgMCB3b3VsZCBjb25mbGljdCB3aXRoIG5vVmFsdWUoKSkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXBsYWNlcyBhbGwgdXNhZ2Ugb2YgSlNWYWx1ZSogd2l0aCBhIG5ldyBjbGFz
cywgSlNWYWx1ZVB0ciwKKyAgICAgICAgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBwb2ludGVyLiAg
SlNWYWx1ZVB0ciBtYWludGFpbnMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzCisgICAgICAgIEpTVmFs
dWUqLCBvdmVybG9hZGluZyBvcGVyYXRvci0+IGFuZCBvcGVyYXRvciBib29sIHN1Y2ggdGhhdCBw
cmV2aW91cworICAgICAgICBvcGVyYXRpb25zIGluIHRoZSBjb2RlIG9uIHZhcmlhYmxlcyBvZiB0
eXBlIEpTVmFsdWUqIGFyZSBzdGlsbCBzdXBwb3J0ZWQuCisKKyAgICAgICAgSW4gb3JkZXIgdG8g
cHJvdmlkZSBhIFByb3RlY3RQdHI8PiB0eXBlIHdpdGggc3VwcG9ydCBmb3IgdGhlIG5ldyB2YWx1
ZQorICAgICAgICByZXByZXNlbnRhdGlvbiAod2l0aG91dCB1c2luZyB0aGUgaW50ZXJuYWwgSlNW
YWx1ZSB0eXBlIGRpcmVjdGx5KSwgYSBuZXcKKyAgICAgICAgUHJvdGVjdEpTVmFsdWVQdHIgdHlw
ZSBoYXMgYmVlbiBhZGRlZCwgZXF1aXZhbGVudCB0byB0aGUgcHJldmlvdXMgdHlwZQorICAgICAg
ICBQcm90ZWN0UHRyPEpTVmFsdWU+LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbGlrZWx5IHRo
ZSBmaXJzdCBpbiBhIHNlcXVlbmNlIG9mIHRocmVlIGNoYW5nZXMuICBXaXRoIHRoZQorICAgICAg
ICB2YWx1ZSBub3cgZW5jYXBzdWxhZWQgaXQgd2lsbCBsaWtlbHkgbWFrZSBzZW5zZSB0byBtaWdy
YXRlIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZyb20gSlNWYWx1ZSBpbnRvIEpTVmFsdWVQ
dHIsIHN1Y2ggdGhhdCB0aGUgaW50ZXJuYWwgcG9pbnRlciByZXByZXNlbnRhdGlvbgorICAgICAg
ICBuZWVkIG5vdCBiZSBleHBvc2VkLiAgVGhyb3VnaCBtaWdyYXRpbmcgdGhlIGZ1bmN0aW9uYWxp
dHkgdG8gdGhlIHdyYXBwZXIKKyAgICAgICAgY2xhc3MgdGhlIGV4aXN0aW5nIEpTVmFsdWUgc2hv
dWxkIGJlIHJlbmRlcmVkIHJlZHVuZGFudCwgYW5kIHRoZSBjbGFzcyBpcworICAgICAgICBsaWtl
bHkgdG8gYmUgcmVtb3ZlZCAodGhlIEpTVmFsdWVQdHIgbm93IHdyYXBwaW5nIGEgcG9pbnRlciB0
byBhIEpTQ2VsbCkuCisgICAgICAgIEF0IHRoaXMgc3RhZ2UgaXQgd2lsbCBsaWtlbHkgbWFrZSBz
ZW5zZSB0byByZW5hbWUgSlNWYWx1ZVB0ciB0byBKU1ZhbHVlLgorCisgICAgICAgICogQVBJL0FQ
SUNhc3QuaDoKKyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQ
SS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdCk6CisgICAgICAgICogQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6
OmFzQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6
Ojo6aGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjo6OmNhbGwpOgorICAgICAgICAoSlNDOjo6
OnN0YXRpY1ZhbHVlR2V0dGVyKToKKyAgICAgICAgKEpTQzo6OjpzdGF0aWNGdW5jdGlvbkdldHRl
cik6CisgICAgICAgIChKU0M6Ojo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0Nv
bnRleHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChK
U09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU09iamVjdFNldFByb3RvdHlwZSk6
CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJv
cGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAo
SlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNw
cDoKKyAgICAgICAgKEpTVmFsdWVHZXRUeXBlKToKKyAgICAgICAgKEpTVmFsdWVJc1VuZGVmaW5l
ZCk6CisgICAgICAgIChKU1ZhbHVlSXNOdWxsKToKKyAgICAgICAgKEpTVmFsdWVJc0Jvb2xlYW4p
OgorICAgICAgICAoSlNWYWx1ZUlzTnVtYmVyKToKKyAgICAgICAgKEpTVmFsdWVJc1N0cmluZyk6
CisgICAgICAgIChKU1ZhbHVlSXNPYmplY3QpOgorICAgICAgICAoSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyk6CisgICAgICAgIChKU1ZhbHVlSXNFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNTdHJp
Y3RFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNWYWx1ZVRvQm9vbGVhbik6CisgICAgICAgIChKU1ZhbHVlVG9OdW1iZXIpOgorICAg
ICAgICAoSlNWYWx1ZVRvU3RyaW5nQ29weSk6CisgICAgICAgIChKU1ZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAoSlNWYWx1ZVByb3RlY3QpOgorICAgICAgICAoSlNWYWx1ZVVucHJvdGVjdCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OnZhbHVlVG9Tb3VyY2VTdHJpbmcpOgorICAgICAgICAoSlND
Ojpjb25zdGFudE5hbWUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVuZXhwZWN0ZWRDb25zdGFudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUNhY2hl
OjpnZXQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWRKU1YpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFNjb3BlZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHV0U2NvcGVkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdF
cnJvcik6CisgICAgICAgIChKU0M6OmtleUZvckltbWVkaWF0ZVN3aXRjaCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpKU1ZhbHVlSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkpTVmFsdWVIYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpEZWJ1Z2dlckNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpl
eGNlcHRpb24pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6dGhpc1ZhbHVlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxs
RnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
ZXhjZXB0aW9uU2xvdCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFkRXhjZXB0aW9uKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmZh
c3RJc051bWJlcik6CisgICAgICAgIChKU0M6OmZhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
ZmFzdFRvVUludDMyKToKKyAgICAgICAgKEpTQzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNM
ZXNzRXEpOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6anNB
ZGQpOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6
OmpzSXNPYmplY3RUeXBlKToKKyAgICAgICAgKEpTQzo6anNJc0Z1bmN0aW9uVHlwZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnJlc29sdmVTa2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9i
YWwpOgorICAgICAgICAoSlNDOjppbmxpbmVSZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpyZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXNv
bHZlQmFzZUFuZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVC
YXNlQW5kRnVuYyk6CisgICAgICAgIChKU0M6OmlzTm90T2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2lu
ZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmNoZWNrVGltZW91dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjcmVh
dGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6OmNhY2hlUHJvdG90eXBlQ2hhaW4pOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6Y291bnRQcm90b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJl
dHJpZXZlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2Fs
bGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcik6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjp0cnlDVElDYWNoZVB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2NvbnZlcnRfdGhpcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYWRkKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfaW5jKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfc2Vjb25kKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfc2VsZl9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3RfZnVsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9hcnJheV9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
Y3RpX29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2Rl
bF9ieV9pZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9zdWIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl90cnVlKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfYmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2
ZV9za2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2Jh
bCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZGl2KToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y3RpX29wX2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hp
ZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9t
b2QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfcG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Vy
c2hpZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhvcik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYml0b3IpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpj
dGlfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5h
bWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2lzX3N0cmluZyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfb2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19mdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6Y3RpX29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfdG9fanNudW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2luKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfbmV3X2Vycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90
aHJvdyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpp
c0pTU3RyaW5nKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAo
SlNDOjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6OlJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXI6OmpzVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6
Z2V0SlNWYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9yc2hpZnQpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjp1bmxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1l
dGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50MzFCaXRJbW1lZGlhdGVJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVzaXplUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SklU
OjpwYXRjaEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6SklUOjpwYXRjaFB1dEJ5SWRSZXBs
YWNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
UHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25EZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToK
KyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAg
ICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAoZnVuY3Rpb25SZWFkbGluZSk6CisgICAgICAg
IChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChK
U0M6Ok51bGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcnJheU5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OlZvaWROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6CisgICAgICAgIChKU0M6OlJldHVy
bk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OnByb2Nlc3NDbGF1c2VMaXN0KToK
KyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zb2xlU3Rh
cnQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OmRpZEV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOgorICAgICAg
ICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9BcmdMaXN0LmNwcDoK
KyAgICAgICAgKEpTQzo6QXJnTGlzdDo6c2xvd0FwcGVuZCk6CisgICAgICAgICogcnVudGltZS9B
cmdMaXN0Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6QXJn
TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OmFzQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6cHV0UHJvcGVydHkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
Q29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVy
c2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29ydCk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZvckVhY2gpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OmFzQm9vbGVhbk9iamVjdCk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
Ojpwcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5o
OgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpDb21wbGV0aW9uKToKKyAgICAgICAgKEpTQzo6
Q29tcGxldGlvbjo6dmFsdWUpOgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpzZXRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkNvbXBsZXRpb246OmlzVmFsdWVDb21wbGV0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RGF0ZSk6CisgICAgICAg
IChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OmFzRGF0ZUluc3RhbmNlKToKKyAgICAgICAg
KiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToK
KyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENI
b3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jU2V0VGltZSk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToK
KyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1NldFVUQ01pbGxpc2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0
VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxs
WWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxF
cnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRF
eGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcik6CisgICAgICAgIChKU0M6
OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUZ1
bmN0aW9uRXJyb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNh
bGxGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
UHJvdG9GdW5jQXBwbHkpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0NhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OmFzR2V0dGVyU2V0dGVy
KToKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0ludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRp
b246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0FjdGl2YXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OnN0b3JhZ2VTaXplKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnB1dFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6Om1hcmspOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0M6OmFzQ2VsbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6Z2V0SlNOdW1i
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjphc0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnJlc2V0UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvOjpHbG9iYWxQcm9w
ZXJ0eUluZm8pOgorICAgICAgICAoSlNDOjphc0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVV
UklDb21wb25lbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1By
aW50KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAg
ICAgICogcnVudGltZS9KU0ltbWVkaWF0ZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRl
Ojp0b1RoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6dG9PYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTSW1tZWRpYXRlLmg6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpT
SW1tZWRpYXRlOjppc051bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1Bvc2l0
aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1VuZGVmaW5lZE9yTnVsbCk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omlz
RWl0aGVySW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQW55SW1tZWRp
YXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUpOgorICAg
ICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1l
ZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpy
aWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6
YWRkSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpzdWJJbW1l
ZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51
bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om1ha2VJbnQpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZUJvb2wp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVVuZGVmaW5lZCk6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjptYWtlTnVsbCk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpp
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp1aW50VmFsdWUpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6Ym9vbFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUpOgorICAgICAgICAo
SlNDOjpKU0ltbWVkaWF0ZTo6dW5kZWZpbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om51bGxJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKToKKyAgICAgICAgKEpT
Qzo6SlNJbW1lZGlhdGU6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRVSW50MzIpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZnJvbSk6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMik6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRVSW50MzIpOgorICAgICAgICAoSlNDOjpqc051bGwpOgorICAgICAgICAoSlNDOjpqc0Jvb2xl
YW4pOgorICAgICAgICAoSlNDOjpqc1VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwpOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojppc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvVUlu
dDMyKToKKyAgICAgICAgKEpTQzo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OnRvVUludDMyKToK
KyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU05v
dEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6Omdl
dFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OnB1dCk6Cisg
ICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTTm90QW5P
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU051bWJlckNlbGwu
Y3BwOgorICAgICAgICAoSlNDOjpKU051bWJlckNlbGw6OnRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNOdW1iZXJDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpK
U051bWJlckNlbGw6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXJDZWxsKToK
KyAgICAgICAgKEpTQzo6anNOYU4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTTnVtYmVyQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6YXNOdW1iZXJDZWxsKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXIpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0pTTnVtYmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om1hcmspOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6Y2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZh
dWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bG9va3VwU2V0dGVyKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RMb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb2NhdGlvbkZvck9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5saW5l
R2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEZvcldyaXRlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xv
dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvUHJpbWl0aXZlKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpT
UHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgICogcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6Om5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
U3RhdGljU2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVj
dDo6SlNTdGF0aWNTY29wZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc1N0cmluZyk6
CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
Om1ha2VJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjppbW1lZGlhdGVWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OkpTVmFsdWVQdHIpOgorICAgICAgICAoSlND
OjpKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6aGFz
VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZVB0cjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OmRlY29kZSk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpub1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yIT0pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2Jq
ZWN0OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjptYXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0pTV3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJP
YmplY3Q6OmludGVybmFsVmFsdWUpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNl
dEludGVybmFsVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAgICAgICAg
KEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3Vw
Lmg6CisgICAgICAgIChKU0M6Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNBVGFuMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHAp
OgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAg
IChKU0M6Om1hdGhQcm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUG93
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW4pOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU3FydCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNUYW4pOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpN
YXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6bnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZSk6CisgICAgICAgIChKU0M6Om51bWJlckNv
bnN0cnVjdG9yTmVnSW5maW5pdHkpOgorICAgICAgICAoSlNDOjpudW1iZXJDb25zdHJ1Y3RvclBv
c0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6bnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZSk6Cisg
ICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUpOgorICAgICAgICAoSlNDOjpj
YWxsTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1i
ZXJPYmplY3Q6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVyRnJv
bUltbWVkaWF0ZU51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om51bWJl
clByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAg
ICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChKU0M6Om51bWJlclBy
b3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1By
ZWNpc2lvbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgIChKU0M6OmNhbGxPYmplY3RDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNJc1By
b3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKToK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6b2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jTG9va3VwU2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jUHJvcGVy
dHlJc0VudW1lcmFibGUpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6ZXF1YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OnN0cmljdEVxdWFsKToKKyAgICAgICAgKEpTQzo6c3RyaWN0RXF1
YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OnRocm93T3V0T2ZNZW1vcnlFcnJvcik6CisgICAg
ICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmVxdWFsU2xvd0Nhc2VJ
bmxpbmUpOgorICAgICAgICAoSlNDOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6ZnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlTbG90OjpnZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6cHV0
VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldFZhbHVlU2xvdCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eVNsb3Q6OnNldEN1c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9t
SW5kZXgpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNsb3RCYXNlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTbG90OjpzZXRCYXNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90
OjopOgorICAgICAgICAqIHJ1bnRpbWUvUHJvdGVjdC5oOgorICAgICAgICAoSlNDOjpnY1Byb3Rl
Y3QpOgorICAgICAgICAoSlNDOjpnY1VucHJvdGVjdCk6CisgICAgICAgIChKU0M6OlByb3RlY3Rl
ZFB0cjo6UHJvdGVjdGVkUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkUHRyOjpvcGVyYXRv
ciBKU1ZhbHVlUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVj
dGVkSlNWYWx1ZVB0cik6CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6OmdldCk6
CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6Om9wZXJhdG9yIEpTVmFsdWVQdHIp
OgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKEpTQzo6OjpQcm90ZWN0ZWRQdHIpOgorICAgICAgICAoSlNDOjo6On5Qcm90ZWN0ZWRQdHIp
OgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNW
YWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRK
U1ZhbHVlUHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbik6CisgICAgICAgIChK
U0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMZWZ0Q29udGV4dCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cENvbnN0cnVjdG9yOjpnZXRSaWdodENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdFeHBD
b25zdHJ1Y3RvckRvbGxhcjEpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxh
cjIpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMpOgorICAgICAgICAo
SlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcjUpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYp
OgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcpOgorICAgICAgICAoSlND
OjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjgpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1
Y3RvckRvbGxhcjkpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAg
ICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVj
dG9yTGFzdFBhcmVuKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OnB1dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4
cENvbnN0cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11
bHRpbGluZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgIChKU0M6
OmNhbGxSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5oOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6YXNSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5
OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6cmVnRXhwT2JqZWN0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0SWdub3Jl
Q2FzZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdE11bHRpbGluZSk6CisgICAgICAgIChK
U0M6OnJlZ0V4cE9iamVjdFNvdXJjZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdExhc3RJ
bmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6
c2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojp0
ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAgICAgKEpTQzo6
Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
Ojphc1JlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUZXN0KToKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUp
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21DaGFy
Q29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzU3RyaW5nT2JqZWN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmg6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0lu
ZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQmlnKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JvbGQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdHJpa2Up
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250Y29sb3Ip
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xp
bmspOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZUNhY2hlZFBy
b3RvdHlwZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJv
dG90eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0b3Jl
ZFByb3RvdHlwZSk6CisKIDIwMDktMDEtMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsOSBAQCBfX1pO
M0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185CiBfX1pOM0pTQzEwdGhyb3dFcnJv
ckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVBLYwogX19aTjNKU0MxMHRocm93RXJyb3JF
UE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0MxMUpT
SW1tZWRpYXRlMTJub25JbmxpbmVOYU5FdgotX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0
RVBOU183SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b1N0
cmluZ0VQTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRVBOU183
SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b09iamVjdEVO
U18xMEpTVmFsdWVQdHJFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzExSlNJbW1lZGlhdGU4dG9T
dHJpbmdFTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNKU0MxMUpTSW1tZWRpYXRlOXByb3RvdHlwZUVO
U18xMEpTVmFsdWVQdHJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzExUHJvZmlsZU5vZGU0c29y
dEVQRmJSS04zV1RGNlJlZlB0cklTMF9FRVM1X0UKIF9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUUKIF9fWk4zSlNDMTJEYXRlSW5zdGFuY2U0aW5m
b0UKQEAgLTEyMCw3ICsxMjAsNyBAQCBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MTR0b1RoaXNKU1N0
cmluZ0VQCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhl
Y1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE4
Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxOGdldE93blByb3BlcnR5U2xv
dEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0MxMlN0cmluZ09i
amVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRVJO
U18xNVB1dFByb3BlcnR5U2xvdEUKK19fWk4zSlNDMTJTdHJpbmdPYmplY3QzcHV0RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0NGluZm9FCiBfX1pOM0pTQzEyU3RyaW5nT2Jq
ZWN0QzJFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRVJL
TlNfN1VTdHJpbmdFCiBfX1pOM0pTQzEyanNOdW1iZXJDZWxsRVBOU185RXhlY1N0YXRlRWQKQEAg
LTEzMSw5ICsxMzEsOSBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZUdldHRlckVQ
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTRzZXRUaW1lb3V0VGltZUVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNnN0b3BUaW1lb3V0
Q2hlY2tFdgotX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagorX19aTjNKU0MxNEpT
R2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVOU18xMEpTVmFsdWVQdHJFagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdzdGFy
dFRpbWVvdXRDaGVja0V2Ci1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RF
CitfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2Jq
ZWN0NG1hcmtFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgpAQCAtMTUyLDEzICsxNTIs
MTMgQEAgX19aTjNKU0MxNlBhcnNlclJlZkNvdW50ZWQzcmVmRXYKIF9fWk4zSlNDMTZQYXJzZXJS
ZWZDb3VudGVkNWRlcmVmRXYKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjIxc2V0RHVtcHNH
ZW5lcmF0ZWRDb2RlRWIKIF9fWk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheTNhZGRFUE5TXzdVU3Ry
aW5nM1JlcEUKLV9fWk4zSlNDMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNf
N0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVTQl9SS05TXzdBcmdMaXN0RUUKLV9fWk4zSlNDMTdQ
cm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRWlSS05TXzEwSWRlbnRpZmllckVQRlBO
U183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVM3X1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0Mx
N1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
OVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzEwSlNWYWx1ZVB0ckVTMl9QTlNf
OEpTT2JqZWN0RVNBX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9u
QzFFUE5TXzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGTlNfMTBKU1ZhbHVlUHRyRVMy
X1BOU184SlNPYmplY3RFUzZfUktOU183QXJnTGlzdEVFCiBfX1pOM0pTQzE3Y29uc3RydWN0RnVu
Y3Rpb25FUE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05T
XzdVU3RyaW5nRWkKIF9fWk4zSlNDMTljb25zdHJ1Y3RFbXB0eUFycmF5RVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0MxOWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyMGNvbnN0cnVjdEVt
cHR5T2JqZWN0RVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MyM29iamVjdFByb3RvRnVuY1RvU3Ry
aW5nRVBOU185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFUE5TXzdKU1ZhbHVlRVJLTlNfN0FyZ0xp
c3RFCitfX1pOM0pTQzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFUE5T
XzhKU09iamVjdEVOU18xMEpTVmFsdWVQdHJFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDMjNzZXRV
cFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhK
U09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzRI
ZWFwMTFvYmplY3RDb3VudEV2CiBfX1pOM0pTQzRIZWFwMTRhbGxvY2F0ZU51bWJlckVtCkBAIC0x
NzAsMTQgKzE3MCwxNCBAQCBfX1pOM0pTQzRIZWFwMjBwcm90ZWN0ZWRPYmplY3RDb3VudEV2CiBf
X1pOM0pTQzRIZWFwMjRzZXRHQ1Byb3RlY3ROZWVkc0xvY2tpbmdFdgogX19aTjNKU0M0SGVhcDI1
cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c0V2CiBfX1pOM0pTQzRIZWFwMjZwcm90ZWN0ZWRHbG9i
YWxPYmplY3RDb3VudEV2Ci1fX1pOM0pTQzRIZWFwNGhlYXBFUE5TXzdKU1ZhbHVlRQorX19aTjNK
U0M0SGVhcDRoZWFwRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDNEhlYXA2aXNCdXN5RXYKIF9f
Wk4zSlNDNEhlYXA3Y29sbGVjdEV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgotX19aTjNKU0M0
SGVhcDdwcm90ZWN0RVBOU183SlNWYWx1ZUUKK19fWk4zSlNDNEhlYXA3cHJvdGVjdEVOU18xMEpT
VmFsdWVQdHJFCiBfX1pOM0pTQzRIZWFwOGFsbG9jYXRlRW0KLV9fWk4zSlNDNEhlYXA5dW5wcm90
ZWN0RVBOU183SlNWYWx1ZUUKLV9fWk4zSlNDNGNhbGxFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1Zh
bHVlRU5TXzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0YUVTM19SS05TXzdBcmdMaXN0RQorX19aTjNK
U0M0SGVhcDl1bnByb3RlY3RFTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNKU0M0Y2FsbEVQTlNfOUV4
ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJFTlNfOENhbGxUeXBlRVJLTlNfOENhbGxEYXRhRVMyX1JL
TlNfN0FyZ0xpc3RFCiBfX1pOM0pTQzVlcXVhbEVQS05TXzdVU3RyaW5nM1JlcEVTM18KIF9fWk4z
SlNDNkpTQ2VsbDExZ2V0Q2FsbERhdGFFUk5TXzhDYWxsRGF0YUUKIF9fWk4zSlNDNkpTQ2VsbDEx
Z2V0SlNOdW1iZXJFdgpAQCAtMTg3LDggKzE4Nyw4IEBAIF9fWk4zSlNDNkpTQ2VsbDE0dG9UaGlz
SlNTdHJpbmdFUE5TXzlFeGUKIF9fWk4zSlNDNkpTQ2VsbDE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0M2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNK
U0M2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3Bl
cnR5U2xvdEUKLV9fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKLV9fWk4zSlNDNkpTQ2Vs
bDNwdXRFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKK19fWk4zSlNDNkpTQ2VsbDNwdXRF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1
dFByb3BlcnR5U2xvdEUKK19fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzEw
SlNWYWx1ZVB0ckUKIF9fWk4zSlNDNkpTQ2VsbDlnZXRPYmplY3RFdgogX19aTjNKU0M2SlNDZWxs
bndFbVBOU185RXhlY1N0YXRlRQogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUVQTlNf
OUV4ZWNTdGF0ZUUKQEAgLTE5OSw3ICsxOTksNyBAQCBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRWIK
IF9fWk4zSlNDNkpTTG9jazlsb2NrQ291bnRFdgogX19aTjNKU0M2SlNMb2NrQzFFUE5TXzlFeGVj
U3RhdGVFCiBfX1pOM0pTQzZQYXJzZXI1cGFyc2VFUE5TXzEySlNHbG9iYWxEYXRhRVBpUE5TXzdV
U3RyaW5nRQotX19aTjNKU0M3QXJnTGlzdDEwc2xvd0FwcGVuZEVQTlNfN0pTVmFsdWVFCitfX1pO
M0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDN0NTdHJp
bmdEMUV2CiBfX1pOM0pTQzdDU3RyaW5nYVNFUktTMF8KIF9fWk4zSlNDN0pTQXJyYXk0aW5mb0UK
QEAgLTIyMSw3ICsyMjEsNyBAQCBfX1pOM0pTQzhEZWJ1Z2dlcjZhdHRhY2hFUE5TXzE0SlNHbG9i
YWxPCiBfX1pOM0pTQzhEZWJ1Z2dlcjZkZXRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pO
M0pTQzhEZWJ1Z2dlckMyRXYKIF9fWk4zSlNDOERlYnVnZ2VyRDJFdgotX19aTjNKU0M4SlNPYmpl
Y3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUVTNF8KK19fWk4zSlND
OEpTT2JqZWN0MTFoYXNJbnN0YW5jZUVQTlNfOUV4ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJFUzNf
CiBfX1pOM0pTQzhKU09iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRVBTMF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmxvb2t1cEdl
dHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKQEAgLTIzMiwxOSArMjMyLDE5
IEBAIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RFdgogX19aTjNKU0M4SlNPYmpl
Y3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJy
YXlFCiBfX1pOM0pTQzhKU09iamVjdDE3Y3JlYXRlSW5oZXJpdG9ySURFdgogX19aTjNKU0M4SlNP
YmplY3QxN3B1dERpcmVjdEZ1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBOU18xNkludGVybmFsRnVu
Y3Rpb25FagotX19aTjNKU0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqCi1fX1pOM0pTQzhKU09iamVjdDE3
cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUVqCitfX1pOM0pT
QzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRWoKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXRXaXRoQXR0cmli
dXRlc0VQTlNfOUV4ZWNTdGF0ZUVqTlNfMTBKU1ZhbHVlUHRyRWoKIF9fWk4zSlNDOEpTT2JqZWN0
MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUK
LV9fWk4zSlNDOEpTT2JqZWN0MThnZXRQcmltaXRpdmVOdW1iZXJFUE5TXzlFeGVjU3RhdGVFUmRS
UE5TXzdKU1ZhbHVlRQotX19aTjNKU0M4SlNPYmplY3QyMmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3RF
Uk5TXzEyUHJvcGVydHlTbG90RVBQTlNfN0pTVmFsdWVFCitfX1pOM0pTQzhKU09iamVjdDE4Z2V0
UHJpbWl0aXZlTnVtYmVyRVBOU185RXhlY1N0YXRlRVJkUk5TXzEwSlNWYWx1ZVB0ckUKK19fWk4z
SlNDOEpTT2JqZWN0MjJmaWxsR2V0dGVyUHJvcGVydHlTbG90RVJOU18xMlByb3BlcnR5U2xvdEVQ
TlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M4SlNPYmplY3QyM2FsbG9jYXRlUHJvcGVydHlTdG9y
YWdlRW1tCi1fX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKLV9fWk4zSlNDOEpTT2Jq
ZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M4SlNPYmplY3Qz
cHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNf
MTVQdXRQcm9wZXJ0eVNsb3RFCitfX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVF
ak5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOEpTT2JqZWN0NG1hcmtFdgogX19aTjNKU0M4UHJv
ZmlsZXIxM3N0b3BQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4z
SlNDOFByb2ZpbGVyMTRzdGFydFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5n
RQogX19aTjNKU0M4UHJvZmlsZXI4cHJvZmlsZXJFdgotX19aTjNKU0M4ZXZhbHVhdGVFUE5TXzlF
eGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFpbkVSS05TXzEwU291cmNlQ29kZUVQTlNfN0pTVmFsdWVF
CitfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNf
MTBTb3VyY2VDb2RlRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOGpzU3RyaW5nRVBOU18xMkpT
R2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNK
U0M5Q29kZUJsb2NrRDJFdgpAQCAtMjUyLDEzICsyNTIsMTMgQEAgX19aTjNKU0M5U3RydWN0dXJl
MTdzdG9wSWdub3JpbmdMZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUxOHN0YXJ0SWdub3JpbmdM
ZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQUzBfUktO
U18xMElkZW50aWZpZXJFalJtCiBfX1pOM0pTQzlTdHJ1Y3R1cmUyMm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBFdgotX19aTjNKU0M5U3RydWN0dXJlMjVjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uRVBT
MF9QTlNfN0pTVmFsdWVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb25FUFMwX05TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOVN0cnVjdHVyZTI4YWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbkVSS05TXzEwSWRlbnRpZmllckVqCiBfX1pOM0pTQzlTdHJ1Y3R1
cmUzZ2V0RVJLTlNfMTBJZGVudGlmaWVyRVJqCiBfX1pOM0pTQzlTdHJ1Y3R1cmU0MGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVFUFMwX1JLTlNfMTBJZGVudGlmaWVyRWpS
bQotX19aTjNKU0M5U3RydWN0dXJlQzFFUE5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRQorX19a
TjNKU0M5U3RydWN0dXJlQzFFTlNfMTBKU1ZhbHVlUHRyRVJLTlNfOFR5cGVJbmZvRQogX19aTjNK
U0M5U3RydWN0dXJlRDFFdgotX19aTjNKU0M5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVBOU183
SlNWYWx1ZUVOU18xM0NvbnN0cnVjdFR5cGVFUktOU18xM0NvbnN0cnVjdERhdGFFUktOU183QXJn
TGlzdEUKK19fWk4zSlNDOWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJF
TlNfMTNDb25zdHJ1Y3RUeXBlRVJLTlNfMTNDb25zdHJ1Y3REYXRhRVJLTlNfN0FyZ0xpc3RFCiBf
X1pOM0pTQ2VxRVJLTlNfN1VTdHJpbmdFUEtjCiBfX1pOM0pTQ2VxRVJLTlNfN1VTdHJpbmdFUzJf
CiBfX1pOM0pTQ2d0RVJLTlNfN1VTdHJpbmdFUzJfCkBAIC0zMDUsNyArMzA1LDcgQEAgX19aTjNX
VEY4Q29sbGF0b3JDMUVQS2MKIF9fWk4zV1RGOENvbGxhdG9yRDFFdgogX19aTjNXVEY4ZmFzdEZy
ZWVFUHYKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxNHJldHJpZXZlQ2FsbGVyRVBOU185RXhlY1N0
YXRlRVBOU18xNkludGVybmFsRnVuY3Rpb25FCi1fX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRy
aWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSUE5TXzdKU1Zh
bHVlRQorX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0cmlldmVMYXN0Q2FsbGVyRVBOU185RXhl
Y1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzEwSlNWYWx1ZVB0ckUKIF9fWk5LM0pTQzEyRGF0
ZUluc3RhbmNlN2dldFRpbWVFUmRSaQogX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMnRvVGhpc1N0
cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0OHRvU3RyaW5nRVBO
U185RXhlY1N0YXRlRQpAQCAtMzE2LDcgKzMxNiw3IEBAIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9i
amVjdDIxZ2V0UHJvcGVydHkKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWUxMHRoaXNPYmpl
Y3RFdgogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEyZnVuY3Rpb25OYW1lRXYKIF9fWk5L
M0pTQzE3RGVidWdnZXJDYWxsRnJhbWU0dHlwZUV2Ci1fX1pOSzNKU0MxN0RlYnVnZ2VyQ2FsbEZy
YW1lOGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFUlBOU183SlNWYWx1ZUUKK19fWk5LM0pTQzE3RGVi
dWdnZXJDYWxsRnJhbWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSTlNfMTBKU1ZhbHVlUHRyRQog
X19aTkszSlNDNEhlYXAxMHN0YXRpc3RpY3NFdgogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzT2Jq
ZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzU3RyaW5nRVBOU185
RXhlY1N0YXRlRQpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3Jl
L2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE0ICs2NywxNCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogc3RhdGljIHZvaWQgY2xlYW51cEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CiBz
dGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcmIGZp
bGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlv
blByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdDKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5j
dGlvbkxvYWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUXVp
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25EZWJ1ZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblZlcnNpb24oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBmdW5jdGlvblJ1bihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIHN0cnVjdCBP
cHRpb25zIHsKICAgICBPcHRpb25zKCkKQEAgLTE3NCw3ICsxNzQsNyBAQCBHbG9iYWxPYmplY3Q6
Okdsb2JhbE9iamVjdChjb25zdCBWZWN0b3I8CiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Q
cmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGkgIT0gMCkKQEAg
LTE4OCwyNyArMTg4LDI3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVj
LCAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZnByaW50ZihzdGRlcnIs
ICItLT4gJXNcbiIsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5jX3N0cigpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVu
Y3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAg
ICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgLy8gV2Ug
bmVlZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1vemlsbGEgSlMg
dGVzdHMgYnV0IGZvciBub3cKICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSBkbyBhbnkgdmVyc2lv
bi1zcGVjaWZpYyBoYW5kbGluZwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFN0
b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgVVN0cmluZyBmaWxlTmFtZSA9IGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMjI1LDcgKzIyNSw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9u
UnVuKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICByZXR1cm4ganNOdW1iZXIoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CiB9CiAKLUpTVmFsdWUq
IGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3Ry
aW5nIGZpbGVOYW1lID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgVmVj
dG9yPGNoYXI+IHNjcmlwdDsKQEAgLTIzOCw3ICsyMzgsNyBAQCBKU1ZhbHVlKiBmdW5jdGlvbkxv
YWQoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZnVuY3Rpb25SZWFkbGluZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
VmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKICAgICBpbnQgYzsKQEAgLTI1Miw3ICsyNTIsNyBAQCBK
U1ZhbHVlKiBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIGxpbmUuZGF0YSgpKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25RdWl0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgY2xlYW51cEdsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERh
dGEoKSk7CiAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDEyICsyNiwxNSBAQAogI2lmbmRlZiBBUElDYXN0X2gKICNkZWZpbmUgQVBJ
Q2FzdF9oCiAKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKICAgICBjbGFzcyBK
U0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAg
ICBjbGFzcyBKU1ZhbHVlUHRyOwogfQogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0Nv
bnRleHRHcm91cCogSlNDb250ZXh0R3JvdXBSZWY7CkBAIC01Myw5ICs1Niw5IEBAIGlubGluZSBK
U0M6OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnQKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxKU0M6OkV4ZWNTdGF0ZSo+KGMpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pT
KEpTVmFsdWVSZWYgdikKK2lubGluZSBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU1ZhbHVlUmVmIHYp
CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpKU1ZhbHVlKj4oY29uc3RfY2Fz
dDxPcGFxdWVKU1ZhbHVlKj4odikpOworICAgIHJldHVybiBKU0M6OkpTVmFsdWVQdHI6OmRlY29k
ZShyZWludGVycHJldF9jYXN0PEpTQzo6SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihjb25zdF9j
YXN0PE9wYXF1ZUpTVmFsdWUqPih2KSkpOwogfQogCiBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9K
UyhKU09iamVjdFJlZiBvKQpAQCAtNzMsMTQgKzc2LDE0IEBAIGlubGluZSBKU0M6OkpTR2xvYmFs
RGF0YSogdG9KUyhKU0NvbnRleHQKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpT
R2xvYmFsRGF0YSo+KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAK
LWlubGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6SlNWYWx1ZSogdikKK2lubGluZSBKU1ZhbHVl
UmVmIHRvUmVmKEpTQzo6SlNWYWx1ZVB0ciB2KQogewotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEpTVmFsdWVSZWY+KHYpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVS
ZWY+KEpTQzo6SlNWYWx1ZVB0cjo6ZW5jb2RlKHYpKTsKIH0KIAotaW5saW5lIEpTVmFsdWVSZWYq
IHRvUmVmKEpTQzo6SlNWYWx1ZSoqIHYpCitpbmxpbmUgSlNWYWx1ZVJlZiogdG9SZWYoSlNDOjpK
U1ZhbHVlUHRyKiB2KQogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWYq
Pihjb25zdF9jYXN0PGNvbnN0IEpTQzo6SlNWYWx1ZSoqPih2KSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZio+KHYpOwogfQogCiBpbmxpbmUgSlNPYmplY3RSZWYgdG9S
ZWYoSlNDOjpKU09iamVjdCogbykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1
YmxpYzoKICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBj
b25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNy
ZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7IAogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNI
YXNJbnN0YW5jZSB8IEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7IAogICAgIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEpTQ2FsbGJhY2tGdW5jdGlvbjo6SlNDYWxsYmFj
a0Z1bmN0aW9uKEUKIHsKIH0KIAotSlNWYWx1ZSogSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FsbGJhY2tGdW5jdGlvbjo6
Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiBmdW5jdGlvblJlZiA9IHRvUmVm
KGZ1bmN0aW9uT2JqZWN0KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5j
dGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCiAgICAgLy8gcmVmYWN0b3IgdGhlIGNvZGUgc28g
dGhpcyBvdmVycmlkZSBpc24ndCBuZWNlc3NhcnkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAg
eyAKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICB9CkBAIC00OCw3
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxs
RGF0YSYpOwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUqIGNhbGwoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVl
UHRyIGNhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CiAKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3REYXRhLT5qc0NsYXNzOyB9CiAgICAgYm9vbCBp
bmhlcml0cyhKU0NsYXNzUmVmKSBjb25zdDsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7
IAogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVj
dFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNlKSk7IAog
ICAgIH0KQEAgLTU5LDEyICs1OSwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVl
UHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0
ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNJ
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90byk7
CisgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0
ciB2YWx1ZSwgSlNWYWx1ZVB0ciBwcm90byk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCkBAIC03NywxNCArNzcs
MTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdChFeGVjU3RhdGUqKTsKICAKLSAgICBzdGF0
aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1ZhbHVlKik7CisgICAgc3Rh
dGljIEpTQ2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoSlNWYWx1ZVB0cik7CiAgCi0g
ICAgc3RhdGljIEpTVmFsdWUqIGNhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGZ1bmN0aW9uT2Jq
ZWN0LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIGNv
bnN0cnVjdChFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3Qm
KTsKICAgIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpT
VmFsdWUqIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbGJhY2tHZXR0
ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgY2FsbGJhY2tHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAg
ICAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIHsKICAgICAgICAgSlNDYWxsYmFja09iamVj
dERhdGEodm9pZCogcHJpdmF0ZURhdGEsIEpTQ2xhc3NSZWYganNDbGFzcykKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGUgPGNsYXNzIEJhc2U+Ci1pbmxpbmUgSlNDYWxsYmFja09iamVjdDxCYXNlPiogSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6YXNDYWxsYmFja09iamVjdChKU1ZhbHVlKiB2YWx1ZSkKK2lubGlu
ZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+KiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojphc0NhbGxi
YWNrT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVl
KS0+aW5oZXJpdHMoJmluZm8pKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09i
amVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpnZXRPd25Qcm9wZQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4K
LXZvaWQgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZXhlYyk7
CiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXMpOwpAQCAtMjc3LDcgKzI3Nyw3
IEBAIEpTT2JqZWN0KiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojpjb25zdHIKIH0KIAogdGVtcGxh
dGUgPGNsYXNzIEJhc2U+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46Omhhc0luc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqKQorYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
dmFsdWUsIEpTVmFsdWVQdHIpCiB7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihl
eGVjKTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpcyk7CkBAIC0zMDQsNyAr
MzA0LDcgQEAgQ2FsbFR5cGUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Z2V0Q2FsbAogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNh
bGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYWxsYmFja09iamVj
dDxCYXNlPjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNDb250
ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiBmdW5jdGlvblJl
ZiA9IHRvUmVmKGZ1bmN0aW9uT2JqZWN0KTsKQEAgLTQyNyw3ICs0MjcsNyBAQCBib29sIEpTQ2Fs
bGJhY2tPYmplY3Q8QmFzZT46OmluaGVyaXRzKEpTCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNl
PgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVmFsdWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGlj
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0
aGlzT2JqID0gYXNDYWxsYmFja09iamVjdChzbG90LnNsb3RCYXNlKCkpOwogICAgIApAQCAtNDQ5
LDcgKzQ0OSw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1YKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+
OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0Nh
bGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBhc0NhbGxiYWNrT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSk7CiAgICAgCkBAIC00NzQsNyArNDc0LDcgQEAgSlNWYWx1ZSogSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6c3RhdGljRgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpT
VmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IGFz
Q2FsbGJhY2tPYmplY3Qoc2xvdC5zbG90QmFzZSgpKTsKICAgICAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTR2xv
YmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+KGdsb2JhbE9iamVjdENsYXNzKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBn
bG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOworICAgIEpTVmFsdWVQdHIgcHJvdG90
eXBlID0gZ2xvYmFsT2JqZWN0Q2xhc3MtPnByb3RvdHlwZShleGVjKTsKICAgICBpZiAoIXByb3Rv
dHlwZSkKICAgICAgICAgcHJvdG90eXBlID0ganNOdWxsKCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5y
ZXNldFByb3RvdHlwZShwcm90b3R5cGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
ZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU09iamVjdFJlZiBKU09iamVj
dE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0
ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUqIGpzUHJv
dG90eXBlID0ganNDbGFzcyAKKyAgICBKU1ZhbHVlUHRyIGpzUHJvdG90eXBlID0ganNDbGFzcyAK
ICAgICAgICAgPyBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykKICAgICAgICAgOiBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIApAQCAtMjMzLDcgKzIz
Myw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm90b3R5cGUoSlNDb250ZXgKIHZvaWQgSlNP
YmplY3RTZXRQcm90b3R5cGUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwot
ICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFs
dWUgPSB0b0pTKHZhbHVlKTsKIAogICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGUoanNWYWx1ZS0+
aXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CiB9CkBAIC0yNTcsNyArMjU3LDcgQEAg
SlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29udGV4dAogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IGpzT2Jq
ZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYy0+ZXhjZXB0aW9uKCkpOwpAQCAtMjc0LDcgKzI3NCw3IEBA
IHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3QKIAogICAgIEpTT2JqZWN0
KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlO
YW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKLSAgICBKU1ZhbHVlKiBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7
CiAKICAgICBpZiAoYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIG5h
bWUpKQogICAgICAgICBqc09iamVjdC0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgbmFtZSwganNW
YWx1ZSwgYXR0cmlidXRlcyk7CkBAIC0yOTgsNyArMjk4LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChKUwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJv
cGVydHlJbmRleCk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eUluZGV4KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLT5l
eGNlcHRpb24oKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChKU0NvbnRleAogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZh
bHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBq
c09iamVjdC0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIGpzVmFsdWUpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogSlNUeXBlIEpTVmFsdWVHZXRUeXBlKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU0M6OkpTVmFsdWUqIGpzVmFsdWUg
PSB0b0pTKHZhbHVlKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIGlmIChqc1ZhbHVlLT5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4ga0pTVHlw
ZVVuZGVmaW5lZDsKICAgICBpZiAoanNWYWx1ZS0+aXNOdWxsKCkpCkBAIC02Miw0MyArNjIsNDMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsgLy8gcGxhY2VkIGhlcmUgdG8gYQogCiBib29sIEpTVmFs
dWVJc1VuZGVmaW5lZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc1VuZGVmaW5lZCgpOwogfQogCiBib29s
IEpTVmFsdWVJc051bGwoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNOdWxsKCk7CiB9CiAKIGJvb2wgSlNW
YWx1ZUlzQm9vbGVhbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc0Jvb2xlYW4oKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNOdW1iZXIoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNOdW1iZXIoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNTdHJpbmcoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNPYmplY3QoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNPYmplY3QoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNPYmplY3RPZkNsYXNzKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlND
bGFzc1JlZiBqc0NsYXNzKQogewotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsK
KyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBpZiAoSlNP
YmplY3QqIG8gPSBqc1ZhbHVlLT5nZXRPYmplY3QoKSkgewogICAgICAgICBpZiAoby0+aW5oZXJp
dHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKSkKQEAgLTExNSw4ICsx
MTUsOCBAQCBib29sIEpTVmFsdWVJc0VxdWFsKEpTQ29udGV4dFJlZiBjdHgsIEpTCiAgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhl
eGVjKTsKIAotICAgIEpTVmFsdWUqIGpzQSA9IHRvSlMoYSk7Ci0gICAgSlNWYWx1ZSoganNCID0g
dG9KUyhiKTsKKyAgICBKU1ZhbHVlUHRyIGpzQSA9IHRvSlMoYSk7CisgICAgSlNWYWx1ZVB0ciBq
c0IgPSB0b0pTKGIpOwogCiAgICAgYm9vbCByZXN1bHQgPSBlcXVhbChleGVjLCBqc0EsIGpzQik7
IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKQEAgLTEyOSw4ICsxMjksOCBAQCBib29sIEpTVmFsdWVJc0VxdWFsKEpTQ29u
dGV4dFJlZiBjdHgsIEpTCiAKIGJvb2wgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoSlNDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmIGEsIEpTVmFsdWVSZWYgYikKIHsKLSAgICBKU1ZhbHVlKiBqc0EgPSB0b0pT
KGEpOwotICAgIEpTVmFsdWUqIGpzQiA9IHRvSlMoYik7CisgICAgSlNWYWx1ZVB0ciBqc0EgPSB0
b0pTKGEpOworICAgIEpTVmFsdWVQdHIganNCID0gdG9KUyhiKTsKICAgICAKICAgICBib29sIHJl
c3VsdCA9IHN0cmljdEVxdWFsKGpzQSwganNCKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQy
LDcgKzE0Miw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBs
b2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpT
VmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIEpTT2JqZWN0KiBqc0NvbnN0cnVj
dG9yID0gdG9KUyhjb25zdHJ1Y3Rvcik7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yLT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTkxLDcgKzE5MSw3IEBAIEpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmco
SlNDb250ZXh0UmUKIGJvb2wgSlNWYWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY3R4LCBKU1Zh
bHVlUmVmIHZhbHVlKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBK
U1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0g
dG9KUyh2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVmFsdWUtPnRvQm9vbGVhbihleGVjKTsKIH0KIApA
QCAtMjAxLDcgKzIwMSw3IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0
eCwKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpT
TG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOwor
ICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogCiAgICAgZG91YmxlIG51bWJl
ciA9IGpzVmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewpAQCAtMjE5LDcgKzIxOSw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVUb1N0cmluZ0NvcHko
SlNDb250ZXgKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwog
ICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFs
dWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIFJl
ZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNW
YWx1ZS0+dG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
QEAgLTIzNyw3ICsyMzcsNyBAQCBKU09iamVjdFJlZiBKU1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0
UmVmCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBK
U0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsK
KyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBKU09iamVj
dFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLT50b09iamVjdChleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBKU1ZhbHVl
UHJvdGVjdChKU0NvbnRleHRSZWYgY3R4LCBKUwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFw
LnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVl
KiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2
YWx1ZSk7CiAgICAgZ2NQcm90ZWN0KGpzVmFsdWUpOwogfQogCkBAIC0yNjUsNiArMjY1LDYgQEAg
dm9pZCBKU1ZhbHVlVW5wcm90ZWN0KEpTQ29udGV4dFJlZiBjdHgsIAogICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAK
LSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgZ2NVbnByb3RlY3QoanNWYWx1ZSk7CiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBzdGF0aWMgVVN0cmluZyBlc2NhcGVRdW90ZXMoY29uc3QgVVN0cmluCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbCkKK3N0YXRpYyBVU3RyaW5nIHZhbHVlVG9Tb3Vy
Y2VTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbCkKIHsKICAgICBpZiAodmFs
LT5pc1N0cmluZygpKSB7CiAgICAgICAgIFVTdHJpbmcgcmVzdWx0KCJcIiIpOwpAQCAtNzQsNyAr
NzQsNyBAQCBzdGF0aWMgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpCiAgICAgcmV0dXJuIChV
U3RyaW5nKCJyIikgKyBVU3RyaW5nOjpmcm9tKHIpKS5VVEY4U3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBDU3RyaW5nIGNvbnN0YW50TmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCBrLCBKU1ZhbHVlKiB2
YWx1ZSkKK3N0YXRpYyBDU3RyaW5nIGNvbnN0YW50TmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCBr
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIHJldHVybiAodmFsdWVUb1NvdXJjZVN0cmluZyhl
eGVjLCB2YWx1ZSkgKyAiKEBrIiArIFVTdHJpbmc6OmZyb20oaykgKyAiKSIpLlVURjhTdHJpbmco
KTsKIH0KQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogewog
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUqPigoKytpdCktPnUuanNDZWxsKTsKKyAg
ICAgICAgICAgIEpTVmFsdWVQdHIgc2NvcGUgPSBKU1ZhbHVlUHRyKCgrK2l0KS0+dS5qc0NlbGwp
OwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
cHJpbnRmKCJbJTRkXSByZXNvbHZlX2dsb2JhbFx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCBy
ZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgc2NvcGUp
LmFzY2lpKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuY19zdHIoKSk7CiAgICAg
ICAgICAgICBpdCArPSAyOwpAQCAtNzI1LDEzICs3MjUsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2ds
b2JhbF92YXI6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgSlNWYWx1ZSogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oKCsraXQpLT51
LmpzQ2VsbCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHNjb3BlID0gSlNWYWx1ZVB0cigoKytp
dCktPnUuanNDZWxsKTsKICAgICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBnZXRfZ2xvYmFsX3Zhclx0ICVzLCAlcywgJWRc
biIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHZhbHVlVG9Tb3VyY2VTdHJp
bmcoZXhlYywgc2NvcGUpLmFzY2lpKCksIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KCgrK2l0KS0+dS5qc0NlbGwpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciBzY29wZSA9IEpTVmFsdWVQdHIoKCsraXQpLT51LmpzQ2Vs
bCk7CiAgICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRk
XSBwdXRfZ2xvYmFsX3Zhclx0ICVzLCAlZCwgJXNcbiIsIGxvY2F0aW9uLCB2YWx1ZVRvU291cmNl
U3RyaW5nKGV4ZWMsIHNjb3BlKS5hc2NpaSgpLCBpbmRleCwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0
cigpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAzOTYx
NikKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTIsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzICYmIGluZGV4IDwgbV9udW1WYXJzICsgbV9udW1Db25zdGFudHM7
CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGdldENvbnN0YW50
KGludCBpbmRleCkKKyAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGdldENvbnN0YW50
KGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbaW5kZXggLSBtX251bVZhcnNdLmdldEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzg4
LDggKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bihGdW5jRGVjbE5vZGUqIG4pIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1bnNpZ25l
ZCBzaXplID0gbV9yYXJlRGF0YS0+bV9mdW5jdGlvbnMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX2Z1
bmN0aW9ucy5hcHBlbmQobik7IHJldHVybiBzaXplOyB9CiAgICAgICAgIEZ1bmNEZWNsTm9kZSog
ZnVuY3Rpb24oaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fZnVuY3Rpb25zW2luZGV4XS5nZXQoKTsgfQogCi0gICAgICAgIHVuc2lnbmVk
IGFkZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlKiB2KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50
cy5zaXplKCk7IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5hcHBlbmQodik7IHJl
dHVybiBzaXplOyB9Ci0gICAgICAgIEpTVmFsdWUqIHVuZXhwZWN0ZWRDb25zdGFudChpbnQgaW5k
ZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV91bmV4
cGVjdGVkQ29uc3RhbnRzW2luZGV4XTsgfQorICAgICAgICB1bnNpZ25lZCBhZGRVbmV4cGVjdGVk
Q29uc3RhbnQoSlNWYWx1ZVB0ciB2KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgdW5z
aWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5zaXplKCk7IG1f
cmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5hcHBlbmQodik7IHJldHVybiBzaXplOyB9
CisgICAgICAgIEpTVmFsdWVQdHIgdW5leHBlY3RlZENvbnN0YW50KGludCBpbmRleCkgY29uc3Qg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3VuZXhwZWN0ZWRDb25z
dGFudHNbaW5kZXhdOyB9CiAKICAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikg
eyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRh
LT5tX3JlZ2V4cHMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKHIpOyByZXR1
cm4gc2l6ZTsgfQogICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNT
RVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQo
KTsgfQpAQCAtNDkzLDcgKzQ5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICAv
LyBSYXJlIENvbnN0YW50cwogICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxGdW5jRGVjbE5vZGU+
ID4gbV9mdW5jdGlvbnM7Ci0gICAgICAgICAgICBWZWN0b3I8SlNWYWx1ZSo+IG1fdW5leHBlY3Rl
ZENvbnN0YW50czsKKyAgICAgICAgICAgIFZlY3RvcjxKU1ZhbHVlUHRyPiBtX3VuZXhwZWN0ZWRD
b25zdGFudHM7CiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7
CiAKICAgICAgICAgICAgIC8vIEp1bXAgVGFibGVzCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxDb2RlQ2FjaGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4sIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY1LDcgKzI2NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihQcm8KICAgICAgICAgYWxsb2NhdGVDb25zdGFudHMocHJvZ3JhbU5vZGUt
Pm5lZWRlZENvbnN0YW50cygpKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5l
d1ZhcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBlbWl0TG9hZChuZXdWYXJzW2ldLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIGVtaXRMb2FkSlNWKG5ld1ZhcnNbaV0sIGpzVW5kZWZp
bmVkKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVu
Y3Rpb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgRnVuY0RlY2xOb2RlKiBmdW5j
RGVjbCA9IGZ1bmN0aW9uU3RhY2tbaV0uZ2V0KCk7CkBAIC03MDUsMjIgKzcwNSwyMiBAQCB1bnNp
Z25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoCiAgICAgcmV0dXJuIHJlc3VsdC5m
aXJzdC0+c2Vjb25kOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29u
c3RhbnQoSlNWYWx1ZSogdikKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25z
dGFudChKU1ZhbHVlUHRyIHYpCiB7Ci0gICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwgYm9v
bD4gcmVzdWx0ID0gbV9qc1ZhbHVlTWFwLmFkZCh2LCBtX25leHRDb25zdGFudEluZGV4KTsKKyAg
ICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2pzVmFsdWVNYXAu
YWRkKEpTVmFsdWVQdHI6OmVuY29kZSh2KSwgbV9uZXh0Q29uc3RhbnRJbmRleCk7CiAgICAgaWYg
KHJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUmVnaXN0ZXJJRCYgY29uc3RhbnQgPSBtX2NhbGxl
ZVJlZ2lzdGVyc1ttX25leHRDb25zdGFudEluZGV4XTsKICAgICAgICAgCiAgICAgICAgICsrbV9u
ZXh0Q29uc3RhbnRJbmRleDsKIAotICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRSZWdp
c3Rlcih2KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50UmVnaXN0ZXIoSlNWYWx1
ZVB0cih2KSk7CiAgICAgICAgIHJldHVybiAmY29uc3RhbnQ7CiAgICAgfQogCiAgICAgcmV0dXJu
ICZyZWdpc3RlckZvcihyZXN1bHQuZmlyc3QtPnNlY29uZCk7CiB9CiAKLXVuc2lnbmVkIEJ5dGVj
b2RlR2VuZXJhdG9yOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZSogdikKK3Vuc2lnbmVk
IEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZVB0ciB2KQog
ewogICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkVW5leHBlY3RlZENvbnN0YW50KHYpOwogfQpA
QCAtODU4LDcgKzg1OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1
YWwKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgYm9vbCBiKQogewotICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzQm9vbGVhbihiKSk7
CisgICAgcmV0dXJuIGVtaXRMb2FkSlNWKGRzdCwganNCb29sZWFuKGIpKTsKIH0KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgZG91Ymxl
IG51bWJlcikKQEAgLTg2NiwxMSArODY2LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TG9hZCgKICAgICAvLyBGSVhNRTogT3VyIGhhc2ggdGFibGVzIHdvbid0IGhvbGQg
aW5maW5pdHksIHNvIHdlIG1ha2UgYSBuZXcgSlNOdW1iZXJDZWxsIGVhY2ggdGltZS4KICAgICAv
LyBMYXRlciB3ZSBjYW4gZG8gdGhlIGV4dHJhIHdvcmsgdG8gaGFuZGxlIHRoYXQgbGlrZSB0aGUg
b3RoZXIgY2FzZXMuCiAgICAgaWYgKG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5
VmFsdWUoKSB8fCBIYXNoVHJhaXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCi0g
ICAgICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVy
KSk7Ci0gICAgSlNWYWx1ZSomIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBu
b1ZhbHVlKCkpLmZpcnN0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBlbWl0TG9hZEpTVihkc3Qs
IGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVyKSk7CisgICAgSlNWYWx1ZVB0ciYgdmFsdWVJ
bk1hcCA9IG1fbnVtYmVyTWFwLmFkZChudW1iZXIsIG5vVmFsdWUoKSkuZmlyc3QtPnNlY29uZDsK
ICAgICBpZiAoIXZhbHVlSW5NYXApCiAgICAgICAgIHZhbHVlSW5NYXAgPSBqc051bWJlcihnbG9i
YWxEYXRhKCksIG51bWJlcik7Ci0gICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7
CisgICAgcmV0dXJuIGVtaXRMb2FkSlNWKGRzdCwgdmFsdWVJbk1hcCk7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCkBAIC04NzgsMTAgKzg3OCwxMCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoCiAgICAgSlNTdHJpbmcqJiB2YWx1ZUluTWFwID0g
bV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIudXN0cmluZygpLnJlcCgpLCAwKS5maXJzdC0+c2Vj
b25kOwogICAgIGlmICghdmFsdWVJbk1hcCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpzT3duZWRT
dHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLnVzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGVt
aXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CisgICAgcmV0dXJuIGVtaXRMb2FkSlNWKGRzdCwgdmFs
dWVJbk1hcCk7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChS
ZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUqIHYpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWRKU1YoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlUHRyIHYpCiB7CiAgICAgUmVn
aXN0ZXJJRCogY29uc3RhbnRJRCA9IGFkZENvbnN0YW50KHYpOwogICAgIGlmIChkc3QpCkBAIC04
ODksMTIgKzg4OSw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCgK
ICAgICByZXR1cm4gY29uc3RhbnRJRDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNDZWxsKiBjZWxsKQotewotICAgIEpTVmFs
dWUqIHZhbHVlID0gY2VsbDsKLSAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZSk7Ci19Ci0K
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5leHBlY3RlZExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBib29sIGIpCiB7CiAgICAgZW1pdE9wY29kZShvcF91bmV4cGVjdGVkX2xvYWQp
OwpAQCAtMTAxNyw3ICsxMDExLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXNvbAogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IGRlcHRoLCBpbnQg
aW5kZXgsIEpTVmFsdWUqIGdsb2JhbE9iamVjdCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IGRlcHRoLCBpbnQg
aW5kZXgsIEpTVmFsdWVQdHIgZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChnbG9iYWxPYmplY3Qp
IHsKICAgICAgICAgZW1pdE9wY29kZShvcF9nZXRfZ2xvYmFsX3Zhcik7CkBAIC0xMDM0LDcgKzEw
MjgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFNjCiAgICAgcmV0
dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTY29w
ZWRWYXIoc2l6ZV90IGRlcHRoLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVl
KiBnbG9iYWxPYmplY3QpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNj
b3BlZFZhcihzaXplX3QgZGVwdGgsIGludCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFs
dWVQdHIgZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAg
ZW1pdE9wY29kZShvcF9wdXRfZ2xvYmFsX3Zhcik7CkBAIC0xNjAyLDcgKzE1OTYsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoCiAgICAgcmV0dXJuIHRhcmdldFJl
Z2lzdGVyOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Vycm9y
KFJlZ2lzdGVySUQqIGRzdCwgRXJyb3JUeXBlIHR5cGUsIEpTVmFsdWUqIG1lc3NhZ2UpCitSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRzdCwg
RXJyb3JUeXBlIHR5cGUsIEpTVmFsdWVQdHIgbWVzc2FnZSkKIHsKICAgICBlbWl0T3Bjb2RlKG9w
X25ld19lcnJvcik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDggKzI0MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJv
b2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJs
ZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIEpTVmFsdWUqKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCog
ZHN0LCBKU0NlbGwqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWRKU1YoUmVnaXN0ZXJJ
RCogZHN0LCBKU1ZhbHVlUHRyKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuZXhwZWN0ZWRM
b2FkKFJlZ2lzdGVySUQqIGRzdCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmV4
cGVjdGVkTG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSk7CiAKQEAgLTI3MCw4ICsyNjksOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEluKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGJhc2UpIHsgcmV0dXJuIGVt
aXRCaW5hcnlPcChvcF9pbiwgZHN0LCBwcm9wZXJ0eSwgYmFzZSwgT3BlcmFuZFR5cGVzKCkpOyB9
CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmUoUmVnaXN0ZXJJRCogZHN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTY29w
ZWRWYXIoUmVnaXN0ZXJJRCogZHN0LCBzaXplX3Qgc2tpcCwgaW50IGluZGV4LCBKU1ZhbHVlKiBn
bG9iYWxPYmplY3QpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0U2NvcGVkVmFyKHNpemVf
dCBza2lwLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVlKiBnbG9iYWxPYmpl
Y3QpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRz
dCwgc2l6ZV90IHNraXAsIGludCBpbmRleCwgSlNWYWx1ZVB0ciBnbG9iYWxPYmplY3QpOworICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UHV0U2NvcGVkVmFyKHNpemVfdCBza2lwLCBpbnQgaW5kZXgs
IFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVlUHRyIGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFJlc29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHkpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVdpdGhCYXNl
KFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5KTsKQEAgLTMwOSw3ICszMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0Q2F0Y2goUmVnaXN0ZXJJRCosIExhYmVsKiBzdGFydCwgTGFi
ZWwqIGVuZCk7CiAgICAgICAgIHZvaWQgZW1pdFRocm93KFJlZ2lzdGVySUQqIGV4YykgeyBlbWl0
VW5hcnlOb0RzdE9wKG9wX3Rocm93LCBleGMpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRO
ZXdFcnJvcihSZWdpc3RlcklEKiBkc3QsIEVycm9yVHlwZSB0eXBlLCBKU1ZhbHVlKiBtZXNzYWdl
KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRzdCwgRXJy
b3JUeXBlIHR5cGUsIEpTVmFsdWVQdHIgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgZW1pdFB1c2hO
ZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklE
KiB2YWx1ZSk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1c2hTY29wZShSZWdpc3RlcklE
KiBzY29wZSk7CkBAIC0zMzksMTIgKzMzOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwqIHRhcmdldCwg
Q29udHJvbEZsb3dDb250ZXh0KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0KiBib3R0b21T
Y29wZSk7CiAKLSAgICAgICAgc3RydWN0IEpTVmFsdWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxK
U1ZhbHVlKj4gewotICAgICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVl
KEpTVmFsdWUqJiBzbG90KSB7IHNsb3QgPSBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCk7
IH0KLSAgICAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEpTVmFsdWUqIHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA9PSBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCk7IH0KKyAg
ICAgICAgc3RydWN0IEpTVmFsdWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlcio+IHsKKyAgICAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciomIHNsb3QpIHsgc2xvdCA9IEpTVmFsdWVQdHI6
OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOyB9CisgICAgICAgICAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogdmFsdWUp
IHsgcmV0dXJuIHZhbHVlID09IEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3Nz
aWJsZVZhbHVlKCkpOyB9CiAgICAgICAgIH07CiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpT
VmFsdWUqLCB1bnNpZ25lZCwgUHRySGFzaDxKU1ZhbHVlKj4sIEpTVmFsdWVIYXNoVHJhaXRzPiBK
U1ZhbHVlTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqLCB1bnNpZ25lZCwgUHRySGFzaDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+LCBKU1ZhbHVl
SGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKIAogICAgICAgICBzdHJ1Y3QgSWRlbnRpZmllck1hcElu
ZGV4SGFzaFRyYWl0cyB7CiAgICAgICAgICAgICB0eXBlZGVmIGludCBUcmFpdFR5cGU7CkBAIC0z
NTYsNyArMzU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAKICAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxVU3RyaW5nOjpSZXA+LCBpbnQsIElkZW50aWZpZXJSZXBIYXNo
LCBIYXNoVHJhaXRzPFJlZlB0cjxVU3RyaW5nOjpSZXA+ID4sIElkZW50aWZpZXJNYXBJbmRleEhh
c2hUcmFpdHM+IElkZW50aWZpZXJNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUs
IEpTVmFsdWUqPiBOdW1iZXJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpT
VmFsdWVQdHI+IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFVTdHJpbmc6OlJl
cCosIEpTU3RyaW5nKiwgSWRlbnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJpbmdNYXA7CiAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBBcmd1bWVudHNOb2Rl
KiwgdW5zaWduZWQgZGl2b3QsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpOwpAQCAtNDA2LDggKzQwNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25l
ZCBhZGRDb25zdGFudChGdW5jRGVjbE5vZGUqKTsKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3Rh
bnQoRnVuY0V4cHJOb2RlKik7CiAgICAgICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KGNvbnN0IElk
ZW50aWZpZXImKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkQ29uc3RhbnQoSlNWYWx1ZSopOwot
ICAgICAgICB1bnNpZ25lZCBhZGRVbmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZSopOworICAgICAg
ICBSZWdpc3RlcklEKiBhZGRDb25zdGFudChKU1ZhbHVlUHRyKTsKKyAgICAgICAgdW5zaWduZWQg
YWRkVW5leHBlY3RlZENvbnN0YW50KEpTVmFsdWVQdHIpOwogICAgICAgICB1bnNpZ25lZCBhZGRS
ZWdFeHAoUmVnRXhwKik7CiAKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rp
b25zKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOyB9CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBKU09iamVjdCogRGVidWdnZXJDYWxsRnJh
bWU6OnRoaXNPYmplY3QoCiAgICAgcmV0dXJuIGFzT2JqZWN0KG1fY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CiB9CiAKLUpTVmFsdWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBV
U3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0CitKU1ZhbHVlUHRyIERl
YnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWVQ
dHImIGV4Y2VwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSkKICAgICAgICAgcmV0dXJuIG5vVmFsdWUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAg
ICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogZXhjZXB0
aW9uKQorICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZVB0ciBleGNlcHRpb24pCiAgICAgICAgICAgICA6IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkK
ICAgICAgICAgICAgICwgbV9leGNlcHRpb24oZXhjZXB0aW9uKQogICAgICAgICB7CkBAIC01NCwx
MiArNTQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFVTdHJpbmcqIGZ1bmN0
aW9uTmFtZSgpIGNvbnN0OwogICAgICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QoKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoY29u
c3QgVVN0cmluZyYsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OwotICAgICAgICBKU1ZhbHVl
KiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgICAgICBKU1Zh
bHVlUHRyIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmLCBKU1ZhbHVlUHRyJiBleGNlcHRpb24pIGNv
bnN0OworICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhj
ZXB0aW9uOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1l
OwotICAgICAgICBKU1ZhbHVlKiBtX2V4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX2V4
Y2VwdGlvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1ZhbHVlKiBDYWxsRnJhbWU6OnRoaXNW
YWx1ZSgpCitKU1ZhbHVlUHRyIENhbGxGcmFtZTo6dGhpc1ZhbHVlKCkKIHsKICAgICByZXR1cm4g
dGhpc1tjb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCldLmpzVmFsdWUodGhpcyk7CiB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uUmVn
aXN0ZXI6OmNvZGVCbG9jaygpOyB9CiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
KCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLlJlZ2lzdGVy
OjpzY29wZUNoYWluKCk7IH0KIAotICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUoKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciB0aGlzVmFsdWUoKTsKIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGlu
IHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNH
bG9iYWxPYmplY3QoKTsKQEAgLTczLDExICs3MywxMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIC8vIHBvaW50ZXIsIHNvIHRoZXNlIGFyZSBpbmVmZmljaWVudCwgYW5kIHNob3VsZCBiZSB1
c2VkIHNwYXJpbmdseSBpbiBuZXcgY29kZS4KICAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBp
biBtYW55IHBsYWNlcyBpbiBsZWdhY3kgY29kZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBh
bnkgdGltZSBzb29uLgogCi0gICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGV4Y2Vw
dGlvbikgeyBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CisgICAgICAgIHZv
aWQgc2V0RXhjZXB0aW9uKEpTVmFsdWVQdHIgZXhjZXB0aW9uKSB7IGdsb2JhbERhdGEoKS5leGNl
cHRpb24gPSBleGNlcHRpb247IH0KICAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgZ2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsgfQotICAgICAgICBKU1ZhbHVlKiBleGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9Ci0gICAgICAg
IEpTVmFsdWUqKiBleGNlcHRpb25TbG90KCkgeyByZXR1cm4gJmdsb2JhbERhdGEoKS5leGNlcHRp
b247IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhIWdsb2Jh
bERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgSlNWYWx1ZVB0ciBleGNlcHRpb24oKSBjb25z
dCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9CisgICAgICAgIEpTVmFsdWVQdHIq
IGV4Y2VwdGlvblNsb3QoKSB7IHJldHVybiAmZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQorICAg
ICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNl
cHRpb247IH0KIAogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1l
cygpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQogICAgICAg
ICBjb25zdCBBcmdMaXN0JiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgp
LmVtcHR5TGlzdDsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMg
aW50IGRlcHRoKENvZGVCbG9jayogY29kZUJsb2NrLCBTCiAKIC8vIEZJWE1FOiBUaGlzIG9wZXJh
dGlvbiBzaG91bGQgYmUgY2FsbGVkICJnZXROdW1iZXIiLCBub3QgImlzTnVtYmVyIiAoYXMgaXQg
aXMgaW4gSlNWYWx1ZS5oKS4KIC8vIEZJWE1FOiBUaGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSBhICJz
bG93IiB2ZXJzaW9uIG9mIHRoaXMuIEFsbCB2ZXJzaW9ucyBzaG91bGQgYmUgZmFzdC4KLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdElzTnVtYmVyKEpTVmFsdWUqIHZhbHVlLCBkb3VibGUm
IGFyZykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdElzTnVtYmVyKEpTVmFsdWVQdHIg
dmFsdWUsIGRvdWJsZSYgYXJnKQogewogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFs
dWUpKQogICAgICAgICBhcmcgPSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsdWUp
OwpAQCAtMTE4LDggKzExOCw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdElzTnVt
YmVyKEoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gRklYTUU6IFdoeSBkb2Vzbid0IEpTVmFs
dWUqOjp0b0ludDMyIGhhdmUgdGhlIEhlYXA6OmlzTnVtYmVyIG9wdGltaXphdGlvbj8KLXN0YXRp
YyBib29sIGZhc3RUb0ludDMyKEpTVmFsdWUqIHZhbHVlLCBpbnQzMl90JiBhcmcpCisvLyBGSVhN
RTogV2h5IGRvZXNuJ3QgSlNWYWx1ZVB0cjo6dG9JbnQzMiBoYXZlIHRoZSBIZWFwOjppc051bWJl
ciBvcHRpbWl6YXRpb24/CitzdGF0aWMgYm9vbCBmYXN0VG9JbnQzMihKU1ZhbHVlUHRyIHZhbHVl
LCBpbnQzMl90JiBhcmcpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkp
CiAgICAgICAgIGFyZyA9IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWx1ZSk7CkBA
IC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIGJvb2wgZmFzdFRvSW50MzIoSlNWYWx1ZSogdmFsdWUs
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RU
b1VJbnQzMihKU1ZhbHVlKiB2YWx1ZSwgdWludDMyX3QmIGFyZykKK3N0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgZmFzdFRvVUludDMyKEpTVmFsdWVQdHIgdmFsdWUsIHVpbnQzMl90JiBhcmcpCiB7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkpIHsKICAgICAgICAgaWYgKEpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIodmFsdWUsIGFyZykpCkBAIC0xNDUsNyArMTQ1
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBmYXN0VG9VSW50MzIoSgogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wganNMZXNzKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitzdGF0aWMgaW5saW5lIGJvb2wganNMZXNz
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewog
ICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAg
ICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2MSkgPCBKU0ltbWVk
aWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodjIpOwpAQCAtMTU5LDggKzE1OSw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBqc0xlc3MoQ2FsbEZyYW1lKiBjYWwKICAgICBpZiAoaW50ZXJwcmV0ZXItPmlz
SlNTdHJpbmcodjEpICYmIGludGVycHJldGVyLT5pc0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0
dXJuIGFzU3RyaW5nKHYxKS0+dmFsdWUoKSA8IGFzU3RyaW5nKHYyKS0+dmFsdWUoKTsKIAotICAg
IEpTVmFsdWUqIHAxOwotICAgIEpTVmFsdWUqIHAyOworICAgIEpTVmFsdWVQdHIgcDE7CisgICAg
SlNWYWx1ZVB0ciBwMjsKICAgICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZl
TnVtYmVyKGNhbGxGcmFtZSwgbjEsIHAxKTsKICAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+
Z2V0UHJpbWl0aXZlTnVtYmVyKGNhbGxGcmFtZSwgbjIsIHAyKTsKIApAQCAtMTcwLDcgKzE3MCw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3MoQ2FsbEZyYW1lKiBjYWwKICAgICByZXR1cm4g
YXNTdHJpbmcocDEpLT52YWx1ZSgpIDwgYXNTdHJpbmcocDIpLT52YWx1ZSgpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wganNMZXNzRXEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIHYx
LCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBpZiAoSlNJbW1l
ZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCiAgICAgICAgIHJldHVybiBK
U0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodjEpIDw9IEpTSW1tZWRpYXRlOjpnZXRUcnVu
Y2F0ZWRJbnQzMih2Mik7CkBAIC0xODQsOCArMTg0LDggQEAgc3RhdGljIGlubGluZSBib29sIGpz
TGVzc0VxKENhbGxGcmFtZSogYwogICAgIGlmIChpbnRlcnByZXRlci0+aXNKU1N0cmluZyh2MSkg
JiYgaW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcodjIpKQogICAgICAgICByZXR1cm4gIShhc1N0cmlu
Zyh2MiktPnZhbHVlKCkgPCBhc1N0cmluZyh2MSktPnZhbHVlKCkpOwogCi0gICAgSlNWYWx1ZSog
cDE7Ci0gICAgSlNWYWx1ZSogcDI7CisgICAgSlNWYWx1ZVB0ciBwMTsKKyAgICBKU1ZhbHVlUHRy
IHAyOwogICAgIGJvb2wgd2FzTm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoY2Fs
bEZyYW1lLCBuMSwgcDEpOwogICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRp
dmVOdW1iZXIoY2FsbEZyYW1lLCBuMiwgcDIpOwogCkBAIC0xOTUsMTEgKzE5NSwxMSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wganNMZXNzRXEoQ2FsbEZyYW1lKiBjCiAgICAgcmV0dXJuICEoYXNTdHJp
bmcocDIpLT52YWx1ZSgpIDwgYXNTdHJpbmcocDEpLT52YWx1ZSgpKTsKIH0KIAotc3RhdGljIE5F
VkVSX0lOTElORSBKU1ZhbHVlKiBqc0FkZFNsb3dDYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIg
anNBZGRTbG93Q2FzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1
ZVB0ciB2MikKIHsKICAgICAvLyBleGNlcHRpb24gZm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBpbiBk
ZWZhdWx0VmFsdWUoKQotICAgIEpTVmFsdWUqIHAxID0gdjEtPnRvUHJpbWl0aXZlKGNhbGxGcmFt
ZSk7Ci0gICAgSlNWYWx1ZSogcDIgPSB2Mi0+dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKKyAgICBK
U1ZhbHVlUHRyIHAxID0gdjEtPnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0
ciBwMiA9IHYyLT50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOwogCiAgICAgaWYgKHAxLT5pc1N0cmlu
ZygpIHx8IHAyLT5pc1N0cmluZygpKSB7CiAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZh
bHVlID0gY29uY2F0ZW5hdGUocDEtPnRvU3RyaW5nKGNhbGxGcmFtZSkucmVwKCksIHAyLT50b1N0
cmluZyhjYWxsRnJhbWUpLnJlcCgpKTsKQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgTkVWRVJf
SU5MSU5FIEpTVmFsdWUqIGpzQWRkU2xvd0NhCiAvLyAgICAxMzk2MiAgIEFkZCBjYXNlOiA1IDMK
IC8vICAgIDQwMDAgICAgQWRkIGNhc2U6IDMgNQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlKiBqc0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYy
KQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc0FkZChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBkb3VibGUgbGVmdDsK
ICAgICBkb3VibGUgcmlnaHQgPSAwLjA7CkBAIC0yNTEsNyArMjUxLDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSoganNBZGQoQ2FsbAogICAgIHJldHVybiBqc0FkZFNsb3dDYXNlKGNh
bGxGcmFtZSwgdjEsIHYyKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGpzVHlwZVN0cmluZ0ZvclZh
bHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2KQorc3RhdGljIEpTVmFsdWVQdHIg
anNUeXBlU3RyaW5nRm9yVmFsdWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgdikK
IHsKICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhjYWxsRnJhbWUsICJ1bmRlZmluZWQiKTsKQEAgLTI3Myw3ICsyNzMsNyBAQCBzdGF0
aWMgSlNWYWx1ZSoganNUeXBlU3RyaW5nRm9yVmFsdWUoQ2FsCiAgICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyhjYWxsRnJhbWUsICJvYmplY3QiKTsKIH0KIAotc3RhdGljIGJvb2wganNJc09i
amVjdFR5cGUoSlNWYWx1ZSogdikKK3N0YXRpYyBib29sIGpzSXNPYmplY3RUeXBlKEpTVmFsdWVQ
dHIgdikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpKQogICAgICAgICBy
ZXR1cm4gdi0+aXNOdWxsKCk7CkBAIC0yOTEsNyArMjkxLDcgQEAgc3RhdGljIGJvb2wganNJc09i
amVjdFR5cGUoSlNWYWx1ZSogdikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wg
anNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlKiB2KQorc3RhdGljIGJvb2wganNJc0Z1bmN0aW9uVHlw
ZShKU1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYgKHYtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIGJvb2wganNJc0Z1bmN0
aW9uVHlwZShKU1ZhbHVlKiB2KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5F
IGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0
aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIElu
dGVycHJldGVyOjpyZXNvbHZlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBD
LCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBpbnQgZHN0ID0gKHZQQyArIDEp
LT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7CkBA
IC0zMTcsMTEgKzMxNywxMSBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2
ZShDCiAgICAgICAgIEpTT2JqZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG8pOwogICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQs
IHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNh
bGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90Lmdl
dFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhjZXB0
aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFs
dWVQdHIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CkBAIC0zMjksNyArMzI5LDcgQEAgTkVWRVJfSU5MSU5F
IGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmUoQwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVW
RVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVTa2lwKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9J
TkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIApAQCAtMzUwLDEx
ICszNTAsMTEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVTawogICAg
ICAgICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsK
ICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkg
ewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUs
IGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShj
YWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gd2hpbGUg
KCsraXRlciAhPSBlbmQpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIE5FVkVSX0lOTElORSBib29sIElu
dGVycHJldGVyOjpyZXNvbHZlU2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElO
RSBib29sIEludGVycHJldGVyOjpyZXNvbHZlR2xvYmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJ
bnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUg
Ym9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsb2JhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5z
dHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGRz
dCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KCh2UEMgKyAyKS0+dS5qc0NlbGwpOwpA
QCAtMzcyLDcgKzM3Miw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZl
R2wKICAgICBpbnQgb2Zmc2V0ID0gKHZQQyArIDUpLT51Lm9wZXJhbmQ7CiAKICAgICBpZiAoc3Ry
dWN0dXJlID09IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBnbG9iYWxPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzgwLDIxICszODAs
MjEgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbAogICAgIElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFBy
b3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzRGlj
dGlvbmFyeSgpKSB7CiAgICAgICAgICAgICBpZiAodlBDWzRdLnUuc3RydWN0dXJlKQogICAgICAg
ICAgICAgICAgIHZQQ1s0XS51LnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c3RydWN0dXJlKCktPnJlZigpOwogICAgICAgICAgICAgdlBDWzRdID0gZ2xvYmFs
T2JqZWN0LT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsK
KyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtNDAyLDcgKzQwMiw3IEBAIE5FVkVSX0lOTElORSBib29s
IEludGVycHJldGVyOjpyZXNvbHZlR2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIGlubGluZVJlc29sdmVCYXNlKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCitz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGlubGluZVJlc29sdmVCYXNlKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4pCiB7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdp
bigpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBuZXh0ID0gaXRlcjsKQEAgLTQyOSwxMCArNDI5
LDEwIEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpyZXNvbHZlQmEKIHsKICAgICBp
bnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyAr
IDIpLT51Lm9wZXJhbmQ7Ci0gICAgY2FsbEZyYW1lW2RzdF0gPSBpbmxpbmVSZXNvbHZlQmFzZShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpLCBj
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CisgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRy
KGlubGluZVJlc29sdmVCYXNlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcihwcm9wZXJ0eSksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKSk7CiB9CiAKLU5FVkVS
X0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmFzZUFuZFByb3BlcnR5KENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUp
CitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYgZXhjZXB0
aW9uVmFsdWUpCiB7CiAgICAgaW50IGJhc2VEc3QgPSAodlBDICsgMSktPnUub3BlcmFuZDsKICAg
ICBpbnQgcHJvcERzdCA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwpAQCAtNDUzLDEyICs0NTMsMTIg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgICAgICBiYXNl
ID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwogICAgICAgICBpZiAo
YmFzZS0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FsbEZyYW1lW3Byb3BEc3RdID0g
cmVzdWx0OwotICAgICAgICAgICAgY2FsbEZyYW1lW2Jhc2VEc3RdID0gYmFzZTsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZVtwcm9wRHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZVtiYXNlRHN0XSA9IEpTVmFsdWVQdHIoYmFzZSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICArK2l0ZXI7CkBAIC00NjgsNyArNDY4LDcgQEAg
TkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5kRnVu
YyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2Vw
dGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5k
RnVuYyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYg
ZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGJhc2VEc3QgPSAodlBDICsgMSktPnUub3BlcmFu
ZDsKICAgICBpbnQgZnVuY0RzdCA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwpAQCAtNDk3LDEzICs0
OTcsMTMgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgICAg
ICAgICAgLy8gdGhhdCBpbiBob3N0IG9iamVjdHMgeW91IGFsd2F5cyBnZXQgYSB2YWxpZCBvYmpl
Y3QgZm9yIHRoaXMuCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGhhbmRsZSB3cmFwcGVyIHN1YnN0
aXR1dGlvbiBmb3IgdGhlIGdsb2JhbCBvYmplY3QgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAg
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRl
bnQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxG
cmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjYWxsRnJhbWVbYmFz
ZURzdF0gPSB0aGlzT2JqOwotICAgICAgICAgICAgY2FsbEZyYW1lW2Z1bmNEc3RdID0gcmVzdWx0
OworICAgICAgICAgICAgY2FsbEZyYW1lW2Jhc2VEc3RdID0gSlNWYWx1ZVB0cih0aGlzT2JqKTsK
KyAgICAgICAgICAgIGNhbGxGcmFtZVtmdW5jRHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKQEAgLTU1
MCw3ICs1NTAsNyBAQCBBTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsCiAg
ICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKHIpOwogfQogCi1zdGF0aWMgTkVWRVJfSU5MSU5F
IGJvb2wgaXNOb3RPYmplY3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGJvb2wgZm9ySW5zdGFuY2VP
ZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUq
IHZhbHVlLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGF0YSkKK3N0YXRpYyBORVZFUl9JTkxJTkUgYm9v
bCBpc05vdE9iamVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgYm9vbCBmb3JJbnN0YW5jZU9mLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciB2
YWx1ZSwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uRGF0YSkKIHsKICAgICBpZiAodmFsdWUtPmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1OCwxMiArNTU4LDEyIEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgYm9vbCBpc05vdE9iamVjdChDYWwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBhcmd2LCBp
bnQgYXJnYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitO
RVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6Y2FsbEV2YWwoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogYXJndiwgaW50
IGFyZ2MsIGludCByZWdpc3Rlck9mZnNldCwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7
CiAgICAgaWYgKGFyZ2MgPCAyKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTVmFsdWUqIHByb2dyYW0gPSBhcmd2WzFdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICBKU1Zh
bHVlUHRyIHByb2dyYW0gPSBhcmd2WzFdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgIGlmICgh
cHJvZ3JhbS0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHByb2dyYW07CkBAIC01NzQsNyAr
NTc0LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIEludGVycHJldGVyOjpjYWxsRQogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBSZWZQdHI8
RXZhbE5vZGU+IGV2YWxOb2RlID0gY29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0KGNhbGxG
cmFtZSwgcHJvZ3JhbVNvdXJjZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOwogCi0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKGV2YWxOb2RlKQogICAgICAgICByZXN1bHQgPSBjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwg
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLT50b1RoaXNPYmplY3QoY2FsbEZyYW1l
KSwgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIHJlZ2lz
dGVyT2Zmc2V0LCBzY29wZUNoYWluLCAmZXhjZXB0aW9uVmFsdWUpOwogCkBAIC03MjgsNyArNzI4
LDcgQEAgYm9vbCBJbnRlcnByZXRlcjo6aXNPcGNvZGUoT3Bjb2RlIG9wY29kZQogI2VuZGlmCiB9
CiAKLU5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWxsRnJhbWUoQ2FsbEZy
YW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQmIGJ5dGVj
b2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjb2RlQmxvY2spCitORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZVB0
ciBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBj
b2RlQmxvY2spCiB7CiAgICAgQ29kZUJsb2NrKiBvbGRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAg
ICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsK
QEAgLTc3MSw3ICs3NzEsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5k
Q2FsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50
ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCBleHBsaWNpdFRo
cm93KQorTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dGhyb3dFeGNlcHRp
b24oQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wgZXhwbGljaXRUaHJvdykKIHsKICAgICAvLyBTZXQg
dXAgdGhlIGV4Y2VwdGlvbiBvYmplY3QKIApAQCAtODU1LDcgKzg1NSw3IEBAIE5FVkVSX0lOTElO
RSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICByZXR1cm4gaGFuZGxlcjsKIH0KIAot
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTT2JqZWN0
KiB0aGlzT2JqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNPYmplY3QqIHRoaXNPYmosIEpTVmFsdWVQdHIq
IGV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2Vw
dGlvbik7CiAKQEAgLTg4MCw3ICs4ODAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShQcm9ncmFtTm9kCiAgICAgZ2xvYmFsT2JqZWN0LT5jb3B5R2xvYmFsc1RvKG1fcmVnaXN0ZXJG
aWxlKTsKIAogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUo
b2xkRW5kICsgY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUpOwotICAgIG5ld0NhbGxGcmFtZVtjb2RlQmxvY2stPnRoaXNSZWdpc3Rl
cigpXSA9IHRoaXNPYmo7CisgICAgbmV3Q2FsbEZyYW1lW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVy
KCldID0gSlNWYWx1ZVB0cih0aGlzT2JqKTsKICAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJs
b2NrLCAwLCBzY29wZUNoYWluLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIDAsIDAsIDApOwogCiAg
ICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKQpAQCAtODkwLDcgKzg5MCw3
IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1Ob2QKICAgICBpZiAoKnBy
b2ZpbGVyKQogICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBw
cm9ncmFtTm9kZS0+c291cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKLSAgICBK
U1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgewogICAgICAgICBT
YW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIpOwogCkBAIC05MTYs
NyArOTE2LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1
ZVB0ciBJbnRlcnByZXRlcjo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlO
b2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xv
YmFsRGF0YS0+ZXhjZXB0aW9uKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uQm8KIAogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1l
ID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kKTsKICAgICBzaXplX3QgZHN0ID0gMDsKLSAgICBu
ZXdDYWxsRnJhbWVbMF0gPSB0aGlzT2JqOworICAgIG5ld0NhbGxGcmFtZVswXSA9IEpTVmFsdWVQ
dHIodGhpc09iaik7CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQo
KTsKICAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIG5ld0NhbGxGcmFtZVsrK2RzdF0gPSAqaXQ7CkBAIC05
NTYsNyArOTU2LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRnVuY3Rpb25Cbwog
ICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdD
YWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdDsKICAgICB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxs
UmVjb3JkKG1fc2FtcGxlcik7CiAKQEAgLTk3OCwxMiArOTc4LDEyIEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uQm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1Zh
bHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IEpTVmFsdWUqKiBleGNlcHRpb24pCitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKQogewog
ICAgIHJldHVybiBleGVjdXRlKGV2YWxOb2RlLCBjYWxsRnJhbWUsIHRoaXNPYmosIG1fcmVnaXN0
ZXJGaWxlLnNpemUoKSArIGV2YWxOb2RlLT5ieXRlY29kZShzY29wZUNoYWluKS5tX251bVBhcmFt
ZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIHNjb3BlQ2hhaW4sIGV4
Y2VwdGlvbik7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBl
dmFsTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgZ2xv
YmFsUmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiog
ZXhjZXB0aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZh
bE5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2Jh
bFJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciog
ZXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKTsKIApAQCAtMTAzOCw3ICsxMDM4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1
dGUoRXZhbE5vZGUqIAogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpj
cmVhdGUobV9yZWdpc3RlckZpbGUuc3RhcnQoKSArIGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKIAog
ICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgbmV3
Q2FsbEZyYW1lW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCldID0gdGhpc09iajsKKyAgICBuZXdD
YWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSBKU1ZhbHVlUHRyKHRoaXNPYmop
OwogICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIGNhbGxG
cmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogCiAgICAgaWYgKCpwcm9maWxlcikKICAg
ICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZXZhbE5vZGUtPnNv
dXJjZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxs
UmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyKTsKIApAQCAtMTE0OSwxNCArMTE0OSwxNCBAQCBz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldENQVVRpbWUoKQogCiAvLyBXZSBoYXZlIHRvIHJldHVy
biBhIEpTVmFsdWUgaGVyZSwgZ2NjIHNlZW1zIHRvIHByb2R1Y2Ugd29yc2UgY29kZSBpZiAKIC8v
IHdlIGF0dGVtcHQgdG8gcmV0dXJuIGEgYm9vbAotQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y2hlY2tUaW1lb3V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitBTFdB
WVNfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OmNoZWNrVGltZW91dChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogewogICAgIHVuc2lnbmVkIGN1cnJlbnRUaW1lID0gZ2V0Q1BVVGltZSgp
OwogICAgIAogICAgIGlmICghbV90aW1lQXRMYXN0Q2hlY2tUaW1lb3V0KSB7CiAgICAgICAgIC8v
IFN1c3BpY2lvdXMgYW1vdW50IG9mIGxvb3BpbmcgaW4gYSBzY3JpcHQgLS0gc3RhcnQgdGltaW5n
IGl0CiAgICAgICAgIG1fdGltZUF0TGFzdENoZWNrVGltZW91dCA9IGN1cnJlbnRUaW1lOwotICAg
ICAgICByZXR1cm4gbm9WYWx1ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIHRpbWVEaWZmID0gY3VycmVudFRpbWUgLSBtX3RpbWVBdExhc3RDaGVj
a1RpbWVvdXQ7CkBAIC0xMTc3LDEyICsxMTc3LDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OmNoZWMKICAgICAKICAgICBpZiAobV90aW1lb3V0VGltZSAmJiBtX3RpbWVF
eGVjdXRpbmcgPiBtX3RpbWVvdXRUaW1lKSB7CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPnNo
b3VsZEludGVycnVwdFNjcmlwdCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOyAvLyBB
cHBlYXNpbmcgR0NDLCBhbGwgd2UgbmVlZCBpcyBhIG5vbi1udWxsIGpzIHZhbHVlLgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgICAgICByZXNldFRpbWVvdXRDaGVjaygp
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gbm9WYWx1ZSgpOworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcjo6Y3JlYXRlRXhj
ZXB0aW9uU2NvcGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMp
CkBAIC0xMTkwLDE2ICsxMTkwLDE2IEBAIE5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50
ZXJwcmV0ZXIKICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJZGVudGlmaWVyJiBw
cm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcigoKyt2UEMpLT51Lm9wZXJhbmQpOwotICAg
IEpTVmFsdWUqIHZhbHVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0gbmV3IChj
YWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3QoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUs
IERvbnREZWxldGUpOwotICAgIGNhbGxGcmFtZVtkc3RdID0gc2NvcGU7CisgICAgY2FsbEZyYW1l
W2RzdF0gPSBKU1ZhbHVlUHRyKHNjb3BlKTsKIAogICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+cHVzaChzY29wZSk7CiB9CiAKIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVQ
cm90b3R5cGVDaGFpbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7Ci0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVk
aWF0ZShwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U3RydWN0dXJl
Q2hhaW4+IGNoYWluID0gU3RydWN0dXJlQ2hhaW46OmNyZWF0ZShhc09iamVjdChwcm90b3R5cGUp
LT5zdHJ1Y3R1cmUoKSk7CkBAIC0xMjA3LDcgKzEyMDcsNyBAQCBzdGF0aWMgU3RydWN0dXJlQ2hh
aW4qIGNhY2hlUHJvdG90eXBlQ2hhCiAgICAgcmV0dXJuIHN0cnVjdHVyZS0+Y2FjaGVkUHJvdG90
eXBlQ2hhaW4oKTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNhY2hl
UHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3Ry
dWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90KQorTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNhY2hlUHV0QnlJRChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMs
IEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgLy8gUmVjdXJzaXZlIGludm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0
aGlzIGluc3RydWN0aW9uLgogICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9w
X3B1dF9ieV9pZCkpCkBAIC0xMjg0LDEzICsxMjg0LDEzIEBAIE5FVkVSX0lOTElORSB2b2lkIElu
dGVycHJldGVyOjp1bmNhY2hlUHUKICAgICB2UENbNF0gPSAwOwogfQogCi1zdGF0aWMgc2l6ZV90
IGNvdW50UHJvdG90eXBlQ2hhaW5FbnRyaWVzQW5kQ2hlY2tGb3JQcm94aWVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K3N0YXRpYyBzaXplX3QgY291bnRQcm90b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hp
ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDZWxsKiBjZWxsID0gYXNDZWxsKGJhc2VWYWx1ZSk7
CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKIAogICAgIHdoaWxlIChzbG90LnNsb3RCYXNlKCkgIT0g
Y2VsbCkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gY2VsbC0+c3RydWN0dXJlKCktPnByb3RvdHlw
ZUZvckxvb2t1cChjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjZWxsLT5zdHJ1
Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAKICAgICAgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgc2xvdEJhc2UgaW4gYmFzZVZhbHVlJ3MgcHJvdG90eXBlIGNoYWluLCB0
aGVuIGJhc2VWYWx1ZQogICAgICAgICAvLyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2Jq
ZWN0LgpAQCAtMTMxNSw3ICsxMzE1LDcgQEAgc3RhdGljIHNpemVfdCBjb3VudFByb3RvdHlwZUNo
YWluRW50cmllcwogICAgIHJldHVybiBjb3VudDsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50
ZXJwcmV0ZXI6OnRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZF
Ul9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0
ciBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIC8vIFJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG1heSBhbHJlYWR5
IGhhdmUgc3BlY2lhbGl6ZWQgdGhpcyBpbnN0cnVjdGlvbi4KICAgICBpZiAodlBDWzBdLnUub3Bj
b2RlICE9IGdldE9wY29kZShvcF9nZXRfYnlfaWQpKQpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnVuY2FjaGVHZQogICAgIHZQQ1s0XSA9IDA7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZs
YWcsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pCiB7CiAgICAgLy8gT25lLXRpbWUg
aW5pdGlhbGl6YXRpb24gb2Ygb3VyIGFkZHJlc3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlz
IGNvZGUKICAgICAvLyBoZXJlIGJlY2F1c2Ugb3VyIGxhYmVscyBhcmUgb25seSBpbiBzY29wZSBp
bnNpZGUgdGhpcyBmdW5jdGlvbi4KQEAgLTE0NDUsNyArMTQ0NSw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICNlbmRpZgogCiAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwotICAgIEpTVmFsdWUqIGV4Y2Vw
dGlvblZhbHVlID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uVmFsdWUgPSBu
b1ZhbHVlKCk7CiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSAwOwogCiAgICAgSW5zdHJ1Y3Rp
b24qIHZQQyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCk7
CkBAIC0xNDY2LDggKzE0NjYsMTAgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogCiAjZGVmaW5lIENIRUNLX0ZPUl9USU1FT1VUKCkgXAogICAgIGlmICghLS10aWNr
Q291bnQpIHsgXAotICAgICAgICBpZiAoKGV4Y2VwdGlvblZhbHVlID0gY2hlY2tUaW1lb3V0KGNh
bGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSkpIFwKKyAgICAgICAgaWYgKGNoZWNrVGlt
ZW91dChjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpIHsgXAorICAgICAgICAgICAg
ZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsgXAogICAgICAgICAgICAgZ290byB2bV90aHJvdzsg
XAorICAgICAgICB9IFwKICAgICAgICAgdGlja0NvdW50ID0gbV90aWNrc1VudGlsTmV4dFRpbWVv
dXRDaGVjazsgXAogICAgIH0KICAgICAKQEAgLTE1MDYsNyArMTUwOCw3IEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgY29uc3RydWN0b3IsIGFu
ZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihjb25zdHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJhbWUpKTsKIAogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMTUyMyw3ICsxNTI1LDcgQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgZmly
c3RBcmcgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBhcmdDb3VudCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyBmaXJzdEFyZywgYXJnQ291bnQpOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNvbnN0
cnVjdEFycmF5KGNhbGxGcmFtZSwgYXJncyk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNW
YWx1ZVB0cihjb25zdHJ1Y3RBcnJheShjYWxsRnJhbWUsIGFyZ3MpKTsKIAogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMTUzNyw3ICsxNTM5LDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAg
ICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnRXhwID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IG5ldyAoZ2xvYmFsRGF0
YSkgUmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+
cmVnRXhwU3RydWN0dXJlKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlZ2V4cChyZWdFeHAp
KTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKG5ldyAoZ2xvYmFsRGF0YSkg
UmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+cmVn
RXhwU3RydWN0dXJlKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlZ2V4cChyZWdFeHApKSk7
CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTE1NjIs
MTIgKzE1NjQsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICAgICBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMx
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAg
ICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3Jj
MiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAg
ICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMy
KSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHNyYzEgPT0gc3JjMik7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFu
KGVxdWFsU2xvd0Nhc2UoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwg
c3JjMikpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE1ODIsNyArMTU4NCw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgb3Bl
cmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4K
ICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoc3JjLT5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbih0
cnVlKTsKQEAgLTE2MDIsMTIgKzE2MDQsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICAgICByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVy
IGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBz
cmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVk
aWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpz
Qm9vbGVhbihzcmMxICE9IHNyYzIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNy
YzIpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKCFlcXVhbFNs
b3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAg
IH0KQEAgLTE2MjIsNyArMTYyNCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMgYSBi
b29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNy
YyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAog
ICAgICAgICBpZiAoc3JjLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IGpzQm9vbGVhbihmYWxzZSk7CkBAIC0xNjQyLDggKzE2NDQsOCBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJlc3VsdCBh
cyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1l
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVl
KiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpT
SW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlKHNyYzEsIHNyYzIpKQogICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oc3JjMSA9PSBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAo
SlNJbW1lZGlhdGU6OmlzRWl0aGVySW1tZWRpYXRlKHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJ
bW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkgJiAoc3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0lt
bWVkaWF0ZSgpKSkKQEAgLTE2NjIsOCArMTY2NCw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVh
biBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZShzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0ganNCb29sZWFuKHNyYzEgIT0gc3JjMik7CkBAIC0xNjgzLDkgKzE2ODUsOSBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGEgYm9vbGVh
biBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMy
KSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7
CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSByZXN1bHQ7CiAKQEAgLTE3MDAsOSArMTcwMiw5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVh
biBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEsIHNy
YzIpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgc3JjMSwgc3Jj
MikpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwogCkBAIC0xNzE2LDExICsxNzE4LDExIEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgYmFjayBpbiByZWdpc3RlciBzcmNE
c3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJh
dGlvbnModikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjpp
bmNJbW1lZGlhdGVOdW1iZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpT
VmFsdWVQdHIoSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB2
LT50b051bWJlcihjYWxsRnJhbWUpICsgMSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIDEpOwogICAg
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW3Ny
Y0RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE3MzUsMTEgKzE3MzcsMTEgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBiYWNrIGluIHJl
Z2lzdGVyIHNyY0RzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3NyY0RzdF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFk
ZGl0aXZlT3BlcmF0aW9ucyh2KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJ
bW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtz
cmNEc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpKTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihj
YWxsRnJhbWUsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKKyAgICAgICAgICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB2LT50b051bWJlcihjYWxsRnJhbWUp
IC0gMSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBj
YWxsRnJhbWVbc3JjRHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTc1NiwxNSArMTc1OCwx
NSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICov
CiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmNE
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVb
c3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxG
cmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRl
OjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModikpIHsKICAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gdjsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6
OmluY0ltbWVkaWF0ZU51bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0g
SlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6aW5jSW1tZWRpYXRlTnVtYmVyKHYpKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG51bWJlciA9IGNhbGxGcmFtZVtzcmNEc3Rd
LmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciBudW1iZXIgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSkt
PnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gbnVtYmVyOwotICAgICAgICAgICAgY2Fs
bEZyYW1lW3NyY0RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0
TnVtYmVyKCkgKyAxKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0
cihqc051bWJlcihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKSk7
CiAgICAgICAgIH0KIAogICAgICAgICArK3ZQQzsKQEAgLTE3NzksMTUgKzE3ODEsMTUgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAg
ICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY0RzdF0u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbc3Jj
RHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9G
YXN0QWRkaXRpdmVPcGVyYXRpb25zKHYpKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IHY7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjpkZWNJbW1l
ZGlhdGVOdW1iZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQ
dHIoSlNJbW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlKiBudW1iZXIgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVl
KGNhbGxGcmFtZSktPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIgbnVtYmVyID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0pTTnVt
YmVyKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAg
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IG51bWJlcjsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtz
cmNEc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigp
IC0gMSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoanNOdW1i
ZXIoY2FsbEZyYW1lLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgKyt2UEM7CkBAIC0xODAyLDEyICsxODA0LDEyIEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAg
ICAgICBKU1ZhbHVlKiBzcmNWYWwgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIEpTVmFsdWVQdHIgc3JjVmFsID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxs
RnJhbWUpOwogCiAgICAgICAgIGlmIChMSUtFTFkoc3JjVmFsLT5pc051bWJlcigpKSkKICAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gY2FsbEZyYW1lW3NyY107CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc3JjVmFsLT50b0pTTnVtYmVyKGNhbGxGcmFt
ZSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNyY1ZhbC0+dG9KU051bWJlcihj
YWxsRnJhbWUpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAg
ICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE4MjIsMTMgKzE4MjQs
MTMgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAg
ICByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIg
c3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICArK3ZQQzsKICAgICAgICAgZG91YmxlIHY7CiAgICAgICAgIGlmIChmYXN0SXNOdW1i
ZXIoc3JjLCB2KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZy
YW1lLCAtdik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1i
ZXIoY2FsbEZyYW1lLCAtdikpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgLXNyYy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7
CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgLXNy
Yy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAt
MTg0MywxMiArMTg0NSwxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIG51bWVyaWMgYWRkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGVzIG9mIHRo
ZSBvcGVyYW5kcy4pCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRv
RmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRk
aXRpdmVPcGVyYXRpb25zKHNyYzIpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0lt
bWVkaWF0ZTo6YWRkSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6YWRkSW1tZWRpYXRlTnVtYmVy
cyhzcmMxLCBzcmMyKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNBZGQoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0ganNBZGQoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKICAgICAgICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0
OwogICAgICAgICB9CkBAIC0xODYyLDIxICsxODY0LDIxIEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgbnVtYmVycyksIGFuZCBwdXRzIHRoZSBw
cm9kdWN0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3Jj
MiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJsZSBsZWZ0
OwogICAgICAgICBkb3VibGUgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90
aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpIHsKICAgICAgICAgICAgIGludDMyX3QgbGVm
dCA9IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihzcmMxKTsKICAgICAgICAgICAgIGlu
dDMyX3QgcmlnaHQgPSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoc3JjMik7CiAgICAg
ICAgICAgICBpZiAoKGxlZnQgfCByaWdodCkgPj4gMTUgPT0gMCkKLSAgICAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAqIHJpZ2h0KTsKKyAgICAg
ICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1l
LCBsZWZ0ICogcmlnaHQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihsZWZ0
KSAqIHN0YXRpY19jYXN0PGRvdWJsZT4ocmlnaHQpKTsKKyAgICAgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGxlZnQpICogc3RhdGljX2Nhc3Q8ZG91YmxlPihyaWdodCkpKTsKICAgICAgICAgfSBlbHNl
IGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0
KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0
ICogcmlnaHQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVt
YmVyKGNhbGxGcmFtZSwgbGVmdCAqIHJpZ2h0KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b051bWJlcihj
YWxsRnJhbWUpICogc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZy
YW1lKSAqIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAg
ICAgIH0KQEAgLTE4OTIsMTQgKzE4OTQsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBxdW90aWVudCBpbiByZWdpc3RlciBkc3QuCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIGRpdmlkZW5kID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBkaXZpc29yID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGRpdmlk
ZW5kID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIGRpdmlzb3IgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJsZSBsZWZ0OwogICAgICAgICBkb3Vi
bGUgcmlnaHQ7CiAgICAgICAgIGlmIChmYXN0SXNOdW1iZXIoZGl2aWRlbmQsIGxlZnQpICYmIGZh
c3RJc051bWJlcihkaXZpc29yLCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAvIHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgLyByaWdodCkpOwog
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNh
bGxGcmFtZSwgZGl2aWRlbmQtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBkaXZpc29yLT50b051bWJl
cihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCBkaXZpZGVuZC0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3ItPnRvTnVt
YmVyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE5MTcsMTcg
KzE5MTksMTcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAg
ICAgICBpbnQgZGl2aWRlbmQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkaXZp
c29yID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGRpdmlkZW5kVmFs
dWUgPSBjYWxsRnJhbWVbZGl2aWRlbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNW
YWx1ZSogZGl2aXNvclZhbHVlID0gY2FsbEZyYW1lW2Rpdmlzb3JdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBkaXZpZGVuZFZhbHVlID0gY2FsbEZyYW1lW2RpdmlkZW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZGl2aXNvclZhbHVlID0g
Y2FsbEZyYW1lW2Rpdmlzb3JdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKGRpdmlkZW5kVmFsdWUsIGRpdmlzb3JW
YWx1ZSkgJiYgZGl2aXNvclZhbHVlICE9IEpTSW1tZWRpYXRlOjpmcm9tKDApKSB7Ci0gICAgICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpmcm9tKEpTSW1tZWRpYXRlOjpnZXRU
cnVuY2F0ZWRJbnQzMihkaXZpZGVuZFZhbHVlKSAlIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJ
bnQzMihkaXZpc29yVmFsdWUpKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1
ZVB0cihKU0ltbWVkaWF0ZTo6ZnJvbShKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2
aWRlbmRWYWx1ZSkgJSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVl
KSkpOwogICAgICAgICAgICAgKyt2UEM7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
CiAgICAgICAgIH0KIAogICAgICAgICBkb3VibGUgZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVy
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFt
ZSwgZm1vZChkLCBkaXZpc29yVmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSkpKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIGZtb2QoZCwgZGl2aXNvclZh
bHVlLT50b051bWJlcihjYWxsRnJhbWUpKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwpAQCAt
MTk0MSwxNiArMTk0MywxNiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRz
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1
ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJs
ZSBsZWZ0OwogICAgICAgICBkb3VibGUgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6
Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHNyYzEpICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zh
c3RBZGRpdGl2ZU9wZXJhdGlvbnMoc3JjMikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTSW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAg
ICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVO
dW1iZXJzKHNyYzEsIHNyYzIpKTsKICAgICAgICAgZWxzZSBpZiAoZmFzdElzTnVtYmVyKHNyYzEs
IGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAtIHJpZ2h0KTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgLSBy
aWdodCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVt
YmVyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJl
cihjYWxsRnJhbWUsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSBzcmMyLT50b051bWJlcihj
YWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAg
ICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xOTY1LDE2ICsxOTY3
LDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAg
ICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJfdCBsZWZ0Owog
ICAgICAgICB1aW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFs
KSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSk7Cisg
ICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1l
LCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6Omdl
dFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSkpOwogICAgICAgICBlbHNlIGlmIChmYXN0
VG9JbnQzMih2YWwsIGxlZnQpICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgPDwgKHJpZ2h0
ICYgMHgxZikpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVt
YmVyKGNhbGxGcmFtZSwgbGVmdCA8PCAocmlnaHQgJiAweDFmKSkpOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+
dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFm
KSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
KHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkg
JiAweDFmKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTk5MCwxNiArMTk5Miwx
NiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAg
IHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAq
LwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
Ci0gICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbCA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICB1aW50MzJfdCByaWdodDsKICAgICAg
ICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1l
ZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBK
U1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNo
aWZ0KSk7CiAgICAgICAgIGVsc2UgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRv
VUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVt
YmVyKGNhbGxGcmFtZSwgbGVmdCA+PiAocmlnaHQgJiAweDFmKSk7CisgICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0ID4+IChyaWdo
dCAmIDB4MWYpKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+IChzaGlm
dC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+
IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0Owog
ICAgICAgICB9CkBAIC0yMDE1LDEyICsyMDE3LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgdWludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3Vs
dCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNO
ZWdhdGl2ZSh2YWwpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6
cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCk7CisgICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsICh2YWwtPnRvVUludDMyKGNhbGxGcmFtZSkp
ID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b1VJbnQzMihjYWxs
RnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjAzNiwxNiArMjAzOCwxNiBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4K
ICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdo
dDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMx
LCBzcmMyKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OmFuZElt
bWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTVmFsdWVQdHIoSlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikp
OwogICAgICAgICBlbHNlIGlmIChmYXN0VG9JbnQzMihzcmMxLCBsZWZ0KSAmJiBmYXN0VG9JbnQz
MihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNh
bGxGcmFtZSwgbGVmdCAmIHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNW
YWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgJiByaWdodCkpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3Jj
MS0+dG9JbnQzMihjYWxsRnJhbWUpICYgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0lu
dDMyKGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1
bHQ7CiAgICAgICAgIH0KQEAgLTIwNjEsMTYgKzIwNjMsMTYgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxG
cmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIGludDMyX3QgcmlnaHQ7CiAg
ICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3Jj
MikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjp4b3JJbW1lZGlh
dGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1Zh
bHVlUHRyKEpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKICAg
ICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3Jj
MiwgcmlnaHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJh
bWUsIGxlZnQgXiByaWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQ
dHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IF4gcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRv
SW50MzIoY2FsbEZyYW1lKSBeIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihj
YWxsRnJhbWUpIF4gc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0Owog
ICAgICAgICB9CkBAIC0yMDg2LDE2ICsyMDg4LDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAg
ICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBK
U1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdodDsK
ICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBz
cmMyKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6Om9ySW1tZWRp
YXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNW
YWx1ZVB0cihKU0ltbWVkaWF0ZTo6b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKICAg
ICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3Jj
MiwgcmlnaHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJh
bWUsIGxlZnQgfCByaWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQ
dHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IHwgcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRv
SW50MzIoY2FsbEZyYW1lKSB8IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihj
YWxsRnJhbWUpIHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0Owog
ICAgICAgICB9CkBAIC0yMTEwLDEyICsyMTEyLDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdp
c3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3Qg
dmFsdWU7CiAgICAgICAgIGlmIChmYXN0VG9JbnQzMihzcmMsIHZhbHVlKSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCB+dmFsdWUpOworICAgICAgICAg
ICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgfnZhbHVl
KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1i
ZXIoY2FsbEZyYW1lLCB+c3JjLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIH5zcmMtPnRvSW50MzIoY2FsbEZy
YW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjEzMCw3ICsyMTMyLDcgQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIWNh
bGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9Cb29sZWFuKGNhbGxGcmFtZSkpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lW3NyY10uanNW
YWx1ZShjYWxsRnJhbWUpLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAKQEAgLTIx
NTUsNyArMjE1Nyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgaW50IGJhc2UgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgYmFzZVBy
b3RvID0gdlBDWzRdLnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gY2Fs
bEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNl
VmFsID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAo
aXNOb3RPYmplY3QoY2FsbEZyYW1lLCB0cnVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMs
IGJhc2VWYWwsIGV4Y2VwdGlvblZhbHVlKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CkBA
IC0yMTc0LDcgKzIxNzYsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZVtk
c3RdID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoY2FsbEZyYW1lLCBjYWxsRnJhbWVbc3JjXS5qc1Zh
bHVlKGNhbGxGcmFtZSkpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNU
eXBlU3RyaW5nRm9yVmFsdWUoY2FsbEZyYW1lLCBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxG
cmFtZSkpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpA
QCAtMjE4OCw3ICsyMTkwLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwog
ICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2
ID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0ganNCb29sZWFuKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5k
ZWZpbmVkKCkgOiB2LT5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICArK3ZQQzsKQEAgLTIyNzcsMTMgKzIyNzksMTMg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQg
cHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBiYXNlID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbYmFz
ZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWwgPSBjYWxs
RnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoaXNOb3RPYmplY3Qo
Y2FsbEZyYW1lLCBmYWxzZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgdlBDLCBiYXNlVmFsLCBl
eGNlcHRpb25WYWx1ZSkpCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogCiAgICAgICAgIEpT
T2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoYmFzZVZhbCk7CiAKLSAgICAgICAgSlNWYWx1ZSog
cHJvcE5hbWUgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBwcm9wTmFtZSA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxs
RnJhbWUpOwogCiAgICAgICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChwcm9wTmFtZS0+Z2V0
VUludDMyKGkpKQpAQCAtMjM2Myw3ICsyMzY1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgaW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
CiAgICAgICAgIGludCB2YWx1ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgCi0gICAg
ICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBKU1ZhbHVlUHRy
KGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgKyt2UEM7CiAg
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9ICAgICAgICAgICAgCkBAIC0yNDExLDcg
KzI0MTMsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAKICAg
ICAgICAgQVNTRVJUKCgqaXRlciktPmlzVmFyaWFibGVPYmplY3QoKSk7CiAgICAgICAgIEpTVmFy
aWFibGVPYmplY3QqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KCppdGVy
KTsKLSAgICAgICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpID0gY2FsbEZyYW1lW3ZhbHVlXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IEpT
VmFsdWVQdHIoY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KQEAgLTI0NzksOSArMjQ4
MSw5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAg
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAg
ICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50
LCBzbG90KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxs
RnJhbWUsIGlkZW50LCBzbG90KTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCiAg
ICAgICAgIHRyeUNhY2hlR2V0QnlJRChjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFs
dWUsIGlkZW50LCBzbG90KTsKQEAgLTI0OTgsNyArMjUwMCw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgb3BfZ2V0X2J5X2lkLgogICAgICAg
ICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFs
dWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFz
ZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBhc0NlbGwoYmFzZVZh
bHVlKTsKQEAgLTI1MTEsNyArMjUxMyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGUKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzVdLnUub3BlcmFu
ZDsKIAogICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlT2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJhbmQpKSA9PSBi
YXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoYmFzZU9iamVjdC0+Z2V0RGly
ZWN0T2Zmc2V0KG9mZnNldCkpOwogCiAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAg
ICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMjUyOSw3ICsyNTMxLDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICByZXZlcnRzIHRv
IG9wX2dldF9ieV9pZC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFt
ZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJh
c2VDZWxsID0gYXNDZWxsKGJhc2VWYWx1ZSk7CkBAIC0yNTQ1LDcgKzI1NDcsNyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSB2UENbNl0udS5vcGVyYW5kOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChwcm90b09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNl
dChvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBwcm90b09i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gSlNWYWx1ZVB0cihwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNl
dCkpOwogCiAgICAgICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0yNTc4LDcgKzI1ODAsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJldmVydHMgdG8gb3BfZ2V0
X2J5X2lkLgogICAgICAgICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2Vd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwg
PSBhc0NlbGwoYmFzZVZhbHVlKTsKQEAgLTI2MDAsNyArMjYwMiw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSB2UENbN10udS5vcGVyYW5kOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0
KG9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBiYXNl
T2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAg
ICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMjYyMyw5ICsyNjI1LDkgQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJv
cGVydHkgPSB2UENbM10udS5vcGVyYW5kOwogCiAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpT
VmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7
CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBp
ZGVudCwgc2xvdCk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAogICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKQEAgLTI2NDEsMTAgKzI2NDMsMTAgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogCiAgICAgICAgIGlu
dCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
Y2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBi
YXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBp
ZiAoTElLRUxZKGlzSlNBcnJheShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgaW50IGRzdCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgYXNBcnJheShiYXNlVmFsdWUpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBhc0FycmF5KGJh
c2VWYWx1ZSktPmxlbmd0aCgpKSk7CiAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpAQCAtMjY2MSwxMCArMjY2MywxMCBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAKICAg
ICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNl
VmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAg
ICAgICAgIGlmIChMSUtFTFkoaXNKU1N0cmluZyhiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAg
aW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgYXNTdHJpbmcoYmFzZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkp
OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxG
cmFtZSwgYXNTdHJpbmcoYmFzZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkpKTsKICAgICAgICAgICAg
IHZQQyArPSA4OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkBA
IC0yNjg3LDcgKzI2ODksNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBKU1Zh
bHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAg
ICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KTsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGJhc2VW
YWx1ZS0+cHV0KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxs
RnJhbWUpLCBzbG90KTsKQEAgLTI3MTAsNyArMjcxMiw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAg
ICAgICAqLwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgCiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFz
Q2VsbChiYXNlVmFsdWUpOwpAQCAtMjcyMyw3ICsyNzI1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVy
ZT4qIGl0ID0gdlBDWzZdLnUuc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKIAotICAgICAgICAgICAg
ICAgIEpTVmFsdWUqIHByb3RvID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZv
ckxvb2t1cChjYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBi
YXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKCFwcm90by0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGFzT2JqZWN0KHByb3RvKS0+c3RydWN0dXJlKCkgIT0gKCppdCku
Z2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmNhY2hlUHV0QnlJRChjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCB2UEMpOwpAQCAtMjc2MCw3ICsyNzYyLDcgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmls
ZS4KICAgICAgICAgKi8KICAgICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXND
ZWxsKGJhc2VWYWx1ZSk7CkBAIC0yNzk2LDcgKzI3OTgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9w
ZXJhbmQ7CiAgICAgICAgIGludCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShj
YWxsRnJhbWUpOwogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKICAgICAgICAgYmFzZVZhbHVlLT5wdXQoY2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lW3Zh
bHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSksIHNsb3QpOwpAQCAtMjgxOSw3ICsyODIxLDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIEpTT2JqZWN0
KiBiYXNlT2JqID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9PYmplY3Qo
Y2FsbEZyYW1lKTsKICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVy
dHkoY2FsbEZyYW1lLCBpZGVudCkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICArK3ZQQzsKQEAgLTI4Mzcs
MTAgKzI4MzksMTAgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICBpbnQgYmFzZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3Bl
cnR5ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNW
YWx1ZSogc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBjYWxsRnJhbWVbcHJv
cGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7Cisg
ICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgICAgICB1bnNpZ25lZCBpOwogCiAgICAgICAg
IGJvb2wgaXNVSW50MzIgPSBKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKHN1YnNjcmlwdCwgaSk7CkBA
IC0yODgwLDggKzI4ODIsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAg
aW50IHZhbHVlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFs
dWUqIHN1YnNjcmlwdCA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3Bl
cnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgdW5zaWduZWQgaTsKIApAQCAtMjky
MSw4ICsyOTIzLDggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
CiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2Fs
bEZyYW1lKS0+dG9PYmplY3QoY2FsbEZyYW1lKTsgLy8gbWF5IHRocm93CiAKLSAgICAgICAgSlNW
YWx1ZSogc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7
Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQg
PSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciByZXN1bHQ7CiAgICAgICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQt
PmdldFVJbnQzMihpKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5k
ZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsIGkpKTsKQEAgLTMwNTAsNyArMzA1Miw3IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAg
aW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjVmFsdWUgPSBjYWxsRnJhbWVbc3Jj
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjVmFsdWUgPSBjYWxs
RnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyY1ZhbHVlLT5p
c1VuZGVmaW5lZE9yTnVsbCgpIHx8ICghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHNyY1ZhbHVl
KSAmJiBzcmNWYWx1ZS0+YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoKSkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CkBAIC0zMDY4
LDcgKzMwNzAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAg
ICAgICAgICovCiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAg
IGludCB0YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyY1Zh
bHVlID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIHNyY1ZhbHVlID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAg
ICAgIGlmICghc3JjVmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgKCFKU0ltbWVkaWF0ZTo6
aXNJbW1lZGlhdGUoc3JjVmFsdWUpICYmICFzcmNWYWx1ZS0+YXNDZWxsKCktPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSkpIHsKICAgICAgICAgICAgIHZQ
QyArPSB0YXJnZXQ7CkBAIC0zMDg5LDggKzMwOTEsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5z
dHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRpb24gaXMKICAgICAgICAgICAgdGhlIEpT
IHRpbWVvdXQgaXMgcmVhY2hlZC4KICAgICAgICAgICovCi0gICAgICAgIEpTVmFsdWUqIHNyYzEg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAg
ICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMy
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAg
ICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICAKICAgICAgICAg
Ym9vbCByZXN1bHQgPSBqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTMxMTYsOCAr
MzExOCw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBtYXkgdGVybWluYXRlIEpT
IGV4ZWN1dGlvbiBpcwogICAgICAgICAgICB0aGUgSlMgdGltZW91dCBpcyByZWFjaGVkLgogICAg
ICAgICAqLwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZy
YW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXEoY2Fs
bEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTMxNDAsOCArMzE0Miw4IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1
cnJlbnQgaW5zdHJ1Y3Rpb24sIGlmIGFuZCBvbmx5IGlmIHRoZSAKICAgICAgICAgICAgcmVzdWx0
IG9mIHRoZSBjb21wYXJpc29uIGlzIGZhbHNlLgogICAgICAgICAqLwotICAgICAgICBKU1ZhbHVl
KiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBi
b29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwpAQCAtMzE2Niw3ICsz
MTY4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAg
ICAgKi8KICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiBzY3J1dGluZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoIUpTSW1tZWRp
YXRlOjppc051bWJlcihzY3J1dGluZWUpKQogICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZz
ZXQ7CiAgICAgICAgIGVsc2UgewpAQCAtMzE4Niw3ICszMTg4LDcgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgKi8KICAgICAgICAgaW50IHRhYmxl
SW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkZWZhdWx0T2Zmc2V0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOwogICAgICAgICBpZiAoIXNjcnV0aW5lZS0+aXNTdHJpbmcoKSkKICAgICAgICAg
ICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIHsKQEAgLTMyMDksNyArMzIx
MSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAg
ICovCiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAg
ICBpbnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSogc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFzY3J1dGluZWUt
PmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAg
ZWxzZSAKQEAgLTMyNjUsMTUgKzMyNjcsMTUgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbM10udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCi0gICAgICAg
IEpTVmFsdWUqIGZ1bmNWYWwgPSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIGZ1bmNWYWwgPSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxs
RnJhbWUpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQ7CiAgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3
Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7
Ci0gICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJh
bWUpOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpOwogCiAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0g
Z2xvYmFsT2JqZWN0ICYmIGZ1bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24oKSkg
ewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoY2FsbEZyYW1lLCByZWdp
c3RlckZpbGUsIGFyZ3YsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgZXhjZXB0aW9uVmFsdWUp
OworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjYWxsRXZhbChjYWxsRnJhbWUsIHJl
Z2lzdGVyRmlsZSwgYXJndiwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBleGNlcHRpb25WYWx1
ZSk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgZ290
byB2bV90aHJvdzsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwpAQCAtMzMw
Miw3ICszMzA0LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIHYgPSBj
YWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHYtPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKQEAgLTMzNDAsMTggKzMzNDIsMTggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICAgQXJnTGlzdCBhcmdzKHRoaXNSZWdpc3RlciAr
IDEsIGFyZ0NvdW50IC0gMSk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgaG9zdCBtZXRo
b2RzIHNob3VsZCBiZSBjYWxsaW5nIHRvVGhpc09iamVjdCwgYnV0IHRoaXMgaXMgbm90IHByZXNl
bnRseSB0aGUgY2FzZS4KLSAgICAgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IHRoaXNSZWdp
c3Rlci0+anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUgPSB0aGlzUmVnaXN0ZXItPmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICh0
aGlzVmFsdWUgPT0ganNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZy
YW1lLT5nbG9iYWxUaGlzVmFsdWUoKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFs
dWU7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJldHVyblZhbHVlOwogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZCht
X3NhbXBsZXIpOwogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSwgYXNPYmplY3QodiksIHRoaXNWYWx1ZSwgYXJncyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIocmV0dXJuVmFsdWUpOwogCiAgICAgICAgICAgICB2UEMgKz0g
NTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM0MTgsNyArMzQyMCw3IEBA
IEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaWYgKGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5kZXJlZigpOwogCi0gICAgICAgIEpTVmFsdWUqIHJl
dHVyblZhbHVlID0gY2FsbEZyYW1lW3Jlc3VsdF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHJldHVyblZhbHVlID0gY2FsbEZyYW1lW3Jlc3VsdF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogCiAgICAgICAgIHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKTsKICAgICAgICAg
aW50IGRzdCA9IGNhbGxGcmFtZS0+cmV0dXJuVmFsdWVSZWdpc3RlcigpOwpAQCAtMzQyNyw3ICsz
NDI5LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAg
ICBpZiAoY2FsbEZyYW1lLT5oYXNIb3N0Q2FsbEZyYW1lRmxhZygpKQogICAgICAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwogCi0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmV0dXJuVmFsdWU7
CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXR1cm5WYWx1ZSk7CiAKICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KQEAgLTM0OTcsOSArMzQ5OSw5IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KIAogICAg
ICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiB0aGlzVmFsID0gY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOworICAg
ICAgICBKU1ZhbHVlUHRyIHRoaXNWYWwgPSBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXS5nZXRKU1Zh
bHVlKCk7CiAgICAgICAgIGlmICh0aGlzVmFsLT5uZWVkc1RoaXNDb252ZXJzaW9uKCkpCi0gICAg
ICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IHRoaXNWYWwtPnRvVGhpc09iamVjdChj
YWxsRnJhbWUpOworICAgICAgICAgICAgY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0gPSBKU1ZhbHVl
UHRyKHRoaXNWYWwtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpKTsKIAogICAgICAgICArK3ZQQzsK
ICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzU0NCw3ICszNTQ2LDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJvdG8gPSB2
UENbNV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gdlBDWzZdLnUub3Bl
cmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKIAogICAgICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAg
ICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IHYtPmdldENvbnN0cnVjdERhdGEoY29u
c3RydWN0RGF0YSk7CkBAIC0zNTU1LDE0ICszNTU3LDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
ID0gJmZ1bmN0aW9uQm9keU5vZGUtPmJ5dGVjb2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7CiAKICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgICAgICAgICAgSlNWYWx1ZSogcHJv
dG90eXBlID0gY2FsbEZyYW1lW3Byb3RvXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IGNhbGxGcmFtZVtwcm90b10uanNWYWx1ZShjYWxsRnJh
bWUpOwogICAgICAgICAgICAgaWYgKHByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPSBhc09iamVjdChwcm90b3R5cGUpLT5pbmhlcml0b3JJRCgpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICBKU09iamVjdCogbmV3T2JqZWN0ID0gbmV3IChnbG9iYWxEYXRhKSBKU09iamVjdChzdHJ1Y3R1
cmUpOwogCi0gICAgICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IG5ld09iamVjdDsg
Ly8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IEpT
VmFsdWVQdHIobmV3T2JqZWN0KTsgLy8gInRoaXMiIHZhbHVlCiAKICAgICAgICAgICAgIENhbGxG
cmFtZSogcHJldmlvdXNDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAKQEAgLTM1OTAsMTMgKzM1OTIs
MTMgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUt
PnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgbmV3Q2FsbEZyYW1l
LT5pbml0KDAsIHZQQyArIDcsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwg
MCk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTYW1w
bGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0Nh
bGxGcmFtZSwgYXNPYmplY3QodiksIGFyZ3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXR1cm5W
YWx1ZSk7CiAKICAgICAgICAgICAgIHZQQyArPSA3OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwpAQCAtMzYzNCwxMSArMzYzNiwxMSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGFyZSByZXBsYWNlZCBieSB0aGUgcmVzdWx0IG9m
IHRvT2JqZWN0IGNvbnZlcnNpb24gb2YgdGhlIHNjb3BlLgogICAgICAgICAqLwogICAgICAgICBp
bnQgc2NvcGUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxs
RnJhbWVbc2NvcGVdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0g
Y2FsbEZyYW1lW3Njb3BlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIEpTT2JqZWN0KiBv
ID0gdi0+dG9PYmplY3QoY2FsbEZyYW1lKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwogCi0gICAgICAgIGNhbGxGcmFtZVtzY29wZV0gPSBvOworICAgICAgICBjYWxsRnJhbWVbc2Nv
cGVdID0gSlNWYWx1ZVB0cihvKTsKICAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKG8pKTsKIAogICAgICAgICArK3ZQQzsKQEAgLTM2
ODMsOSArMzY4NSw5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yKiBpdCA9IGNhbGxGcmFtZVtpdGVyXS5wcm9wZXJ0eU5hbWVJdGVy
YXRvcigpOwotICAgICAgICBpZiAoSlNWYWx1ZSogdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSkp
IHsKKyAgICAgICAgaWYgKEpTVmFsdWVQdHIgdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSkpIHsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IHRlbXA7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIodGVt
cCk7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwogICAgICAgICB9CkBAIC0zNzc3LDcgKzM3NzksNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dW5leHBl
Y3RlZENvbnN0YW50KHNyYyk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT51bmV4cGVjdGVkQ29uc3RhbnQoc3JjKSk7CiAKICAgICAg
ICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM3OTUsNyArMzc5Nyw3
IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50
IG1lc3NhZ2UgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEVycm9yOjpjcmVhdGUoY2FsbEZyYW1lLCAoRXJyb3JUeXBlKXR5cGUsIGNvZGVCbG9jay0+dW5l
eHBlY3RlZENvbnN0YW50KG1lc3NhZ2UpLT50b1N0cmluZyhjYWxsRnJhbWUpLCBjb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCkpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxv
Y2stPm93bmVyTm9kZSgpLT5zb3VyY2VVUkwoKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihFcnJvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgKEVycm9yVHlwZSl0eXBlLCBjb2Rl
QmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudChtZXNzYWdlKS0+dG9TdHJpbmcoY2FsbEZyYW1lKSwg
Y29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodlBDIC0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpKSwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlSUQo
KSwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlVVJMKCkpKTsKIAogICAgICAgICArK3ZQ
QzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzk1Niw3ICszOTU4LDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICN1bmRlZiBDSEVDS19G
T1JfVElNRU9VVAogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAorSlNWYWx1
ZVB0ciBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewogICAgIENhbGxGcmFtZSogZnVuY3Rpb25D
YWxsRnJhbWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAg
ICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFtZSkKQEAgLTM5ODAsNyArMzk4Miw3IEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cygKICAgICByZXR1cm4gYXJndW1lbnRzOwog
fQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxsZXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAorSlNWYWx1ZVB0ciBJbnRl
cnByZXRlcjo6cmV0cmlldmVDYWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uKSBjb25zdAogewogICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJh
bWUgPSBmaW5kRnVuY3Rpb25DYWxsRnJhbWUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAgICAgaWYg
KCFmdW5jdGlvbkNhbGxGcmFtZSkKQEAgLTM5OTAsMTQgKzM5OTIsMTQgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyKENhbAogICAgIGlmIChjYWxsZXJGcmFtZS0+aGFzSG9z
dENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNWYWx1
ZSogY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOworICAgIEpTVmFsdWVQdHIgY2FsbGVy
ID0gY2FsbGVyRnJhbWUtPmNhbGxlZSgpOwogICAgIGlmICghY2FsbGVyKQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CiAKICAgICByZXR1cm4gY2FsbGVyOwogfQogCi12b2lkIEludGVycHJldGVy
OjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGludCYgbGluZU51bWJl
ciwgaW50cHRyX3QmIHNvdXJjZUlELCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5j
dGlvbikgY29uc3QKK3ZvaWQgSW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcihDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVTdHJp
bmcmIHNvdXJjZVVSTCwgSlNWYWx1ZVB0ciYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgZnVuY3Rp
b24gPSBub1ZhbHVlKCk7CiAgICAgbGluZU51bWJlciA9IC0xOwpAQCAtNDAzMSw3ICs0MDMzLDcg
QEAgQ2FsbEZyYW1lKiBJbnRlcnByZXRlcjo6ZmluZEZ1bmN0aW9uQ2FsbAogCiAjaWYgRU5BQkxF
KEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVy
cHJldGVyOjp0cnlDVElDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
Ojp0cnlDVElDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFRoZSBpbnRlcnByZXRlciBjaGVja3Mg
Zm9yIHJlY3Vyc2lvbiBoZXJlOyBJIGRvIG5vdCBiZWxpZXZlIHRoaXMgY2FuIG9jY3VyIGluIENU
SS4KIApAQCAtNDA4OCw3ICs0MDkwLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6
OnRyeUNUSUNhYwogI2VuZGlmCiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0
cnlDVElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJs
b2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5M
SU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNUSUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVz
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAvLyBsaWtlIHRo
ZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCkBAIC00
MjgzLDcgKzQyODUsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb252ZXJ0X3Ro
CiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdjEgPSBBUkdf
c3JjMTsKKyAgICBKU1ZhbHVlUHRyIHYxID0gQVJHX3NyYzE7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IHYxLT50b1Ro
aXNPYmplY3QoY2FsbEZyYW1lKTsKQEAgLTQzMDAsMTkgKzQzMDIsMTkgQEAgdm9pZCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2VuZChTVFVCX0FSR1MpCiAgICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfYWRkKFNUVUJfQVJHUykKIHsKICAg
ICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2MSA9IEFSR19zcmMxOwot
ICAgIEpTVmFsdWUqIHYyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciB2MSA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgdjIgPSBBUkdfc3JjMjsKIAogICAgIGRvdWJsZSBsZWZ0OwogICAg
IGRvdWJsZSByaWdodCA9IDAuMDsKIAogICAgIGJvb2wgcmlnaHRJc051bWJlciA9IGZhc3RJc051
bWJlcih2MiwgcmlnaHQpOwogICAgIGlmIChyaWdodElzTnVtYmVyICYmIGZhc3RJc051bWJlcih2
MSwgbGVmdCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAr
IHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdf
Z2xvYmFsRGF0YSwgbGVmdCArIHJpZ2h0KSk7CiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwogCkBAIC00MzI0LDcgKzQzMjYsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX2FkZChTVFVCX0FSCiAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJ
T04oKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhBUkdfZ2xvYmFsRGF0
YSwgdmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShq
c1N0cmluZyhBUkdfZ2xvYmFsRGF0YSwgdmFsdWUucmVsZWFzZSgpKSk7CiAgICAgfQogCiAgICAg
aWYgKHJpZ2h0SXNOdW1iZXIgJiBsZWZ0SXNTdHJpbmcpIHsKQEAgLTQzMzYsMjUgKzQzMzgsMjUg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQoU1RVQl9BUgogICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBWTV9USFJPV19F
WENFUFRJT04oKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4ganNTdHJpbmcoQVJHX2dsb2Jh
bERhdGEsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNv
ZGUoanNTdHJpbmcoQVJHX2dsb2JhbERhdGEsIHZhbHVlLnJlbGVhc2UoKSkpOwogICAgIH0KIAog
ICAgIC8vIEFsbCBvdGhlciBjYXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCi0gICAgSlNWYWx1ZSog
cmVzdWx0ID0ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc0FkZFNsb3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsKICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX3ByZV9pbmMoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfcHJlX2luYyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElP
TigpOwogCi0gICAgSlNWYWx1ZSogdiA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgdiA9IEFS
R19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihj
YWxsRnJhbWUpICsgMSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIDEpOwogICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0
cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIGludCBJbnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hl
Y2soU1RVQl9BUkdTKQpAQCAtNDM4OCw4ICs0MzkwLDggQEAgaW50IEludGVycHJldGVyOjpjdGlf
b3BfbG9vcF9pZl9sZXNzKFNUVQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAg
IEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7
CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0g
QVJHX3NyYzI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAg
ICAgYm9vbCByZXN1bHQgPSBqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTQ0MDEs
OCArNDQwMyw4IEBAIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKFMKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3Ny
YzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9
IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNMZXNz
RXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTQ0MjYsMTkgKzQ0MjgsMTkgQEAgdm9pZCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9nZW5lcgogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJf
RlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsK
ICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCi0gICAgSlNWYWx1ZSogYmFzZVZh
bHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJh
c2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CiAKICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUla
RV9QUk9QRVJUWV9BQ0NFU1MpCkBAIC00NDgxLDUwICs0NDgzLDUwIEBAIHZvaWQgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCgKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZChTVFVCX0FS
R1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
aWQoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9
ICpBUkdfaWQyOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwg
aWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2Fs
bEZyYW1lLCBpZGVudCwgc2xvdCk7CiAKICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
U1RVQl9SRVRVUk5fQUREUkVTUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9i
eV9pZF9zZWNvbmQpKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FS
R1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
aWRfc2Vjb25kKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYg
aWRlbnQgPSAqQVJHX2lkMjsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwor
ICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxs
RnJhbWUsIGlkZW50LCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+
Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgQVJHX2dsb2JhbERhdGEtPmludGVy
cHJldGVyLT50cnlDVElDYWNoZUdldEJ5SUQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKIAogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJf
QVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lk
MjsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
YmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBz
bG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwg
aWRlbnQsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCkBAIC00NTU4LDcg
KzQ1NjAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zCiAgICAg
fSBlbHNlIHsKICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJO
X0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJp
YykpOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogZ2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIGludCYgbGlzdEluZGV4KQpAQCAtNDU5MCwyMSArNDU5MiwyMSBAQCBzdGF0
aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgcmV0dXJuIHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3Q7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKQogewogICAgIEJF
R0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2Nh
bGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFs
dWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsICpB
UkdfaWQyLCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNh
bGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwog
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUpIHx8ICFzbG90Lmlz
Q2FjaGVhYmxlKCkgfHwgYXNDZWxsKGJhc2VWYWx1ZSktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25h
cnkoKSkgewogICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5f
QUREUkVTUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9ieV9pZF9wcm90b19m
YWlsKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFz
Q2VsbChiYXNlVmFsdWUpLT5zdHJ1Y3R1cmUoKTsKQEAgLTQ2NDgsNjcgKzQ2NTAsNjcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcAogICAgIH0gZWxzZQogICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7CiAKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxs
KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJf
RlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpT
VmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFz
ZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChBUkdfY2FsbEZy
YW1lLCAqQVJHX2lkMiwgc2xvdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUt
PmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CiAKICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHUykKIHsKICAg
ICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdf
c3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5n
ZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0
ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOwogCiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVC
X0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsK
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKKyAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBz
bG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHUykK
K0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0g
ICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFs
dWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBz
bG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJh
bWUsICpBUkdfaWQyLCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKICNlbmRpZgogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNl
b2YoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlf
b3BfaW5zdGFuY2VvZihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUq
IHZhbHVlID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogYmFzZVZhbCA9IEFSR19zcmMyOwotICAg
IEpTVmFsdWUqIHByb3RvID0gQVJHX3NyYzM7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IEFSR19z
cmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIg
cHJvdG8gPSBBUkdfc3JjMzsKIAogICAgIC8vIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBjaGVja3Mg
bXVzdCBoYXZlIGZhaWxlZCB0byBnZXQgdG8gdGhlIHNsb3cgY2FzZQogICAgIEFTU0VSVChKU0lt
bWVkaWF0ZTo6aXNBbnlJbW1lZGlhdGUodmFsdWUsIGJhc2VWYWwsIHByb3RvKSAKQEAgLTQ3MjQs
NyArNDcyNiw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaW5zdGFuY2VvZigKICAg
ICB9CiAKICAgICBpZiAoIWFzT2JqZWN0KGJhc2VWYWwpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxz
ZSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7
CiAKICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93RXJyb3IoY2Fs
bEZyYW1lLCBUeXBlRXJyb3IsICJpbnN0YW5jZW9mIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCBh
biBpbnZhbGlkIHByb3RvdHlwZSBwcm9wZXJ0eS4iKTsKQEAgLTQ3MzIsMTUgKzQ3MzQsMTUgQEAg
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKAogICAgIH0KICAgICAgICAg
CiAgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihm
YWxzZSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNl
KSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZVZhbCkt
Pmhhc0luc3RhbmNlKGNhbGxGcmFtZSwgdmFsdWUsIHByb3RvKSk7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZVZhbCktPmhhc0luc3RhbmNlKGNhbGxGcmFt
ZSwgdmFsdWUsIHByb3RvKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZChTVFVCX0FSR1Mp
CitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIApAQCAtNDc0OCwyNyAr
NDc1MCwyNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZChTCiAgICAg
CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBBUkdfc3JjMS0+dG9PYmplY3QoY2FsbEZyYW1lKTsK
IAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0
eShjYWxsRnJhbWUsICpBUkdfaWQyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xl
YW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCAqQVJHX2lkMikpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfbXVsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX211bChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBB
Ukdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsK
ICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCBy
aWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAqIHJp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgbGVmdCAqIHJpZ2h0KSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgKiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUp
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMx
LT50b051bWJlcihjYWxsRnJhbWUpICogc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogSlNPYmplY3QqIEludGVycHJl
dGVyOjpjdGlfb3BfbmV3X2Z1bmMoU1RVQl9BUkdTKQpAQCAtNDg3OSwxMSArNDg4MSwxMSBAQCBK
U09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2CiAgICAgcmV0dXJuIGFjdGl2
YXRpb247CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2NhbGxfTm90SlNGdW5jdGlvbihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCi0gICAgSlNWYWx1ZSogZnVuY1ZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgZnVuY1ZhbCA9IEFSR19zcmMxOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jVmFsLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC00OTAy
LDEyICs0OTA0LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0YK
ICAgICAgICAgUmVnaXN0ZXIqIGFyZ3YgPSBBUkdfY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwogICAgICAgICBBcmdM
aXN0IGFyZ0xpc3QoYXJndiArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAgSlNWYWx1ZSog
cmV0dXJuVmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgcmV0dXJuVmFsdWU7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElf
U0FNUExFUik7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgaG9zdCBtZXRob2RzIHNob3Vs
ZCBiZSBjYWxsaW5nIHRvVGhpc09iamVjdCwgYnV0IHRoaXMgaXMgbm90IHByZXNlbnRseSB0aGUg
Y2FzZS4KLSAgICAgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB0aGlzVmFsdWUgPSBhcmd2WzBdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0ganNOdWxsKCkp
CiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFsdWUo
KTsKIApAQCAtNDkxNiw3ICs0OTE4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9j
YWxsX05vdEpTRgogICAgICAgICBBUkdfc2V0Q2FsbEZyYW1lKHByZXZpb3VzQ2FsbEZyYW1lKTsK
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXR1cm5WYWx1ZSk7CiAg
ICAgfQogCiAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CkBAIC00OTkzLDcg
KzQ5OTUsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfYXJyYXkoCiAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KEFSR19jYWxsRnJhbWUsIGFyZ0xpc3QpOwogfQogCi1KU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZShTVFVCX0FSR1MpCiB7CiAg
ICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCkBAIC01MDA5LDkgKzUwMTEsOSBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUoU1RVCiAgICAgICAgIEpTT2JqZWN0KiBvID0g
Kml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBpZiAoby0+Z2V0
UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwog
ICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3Vs
dCk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKIApAQCAtNTAzOCwx
MyArNTA0MCwxMyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfCiAg
ICAgcmV0dXJuIG5ldyAoQVJHX2dsb2JhbERhdGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiB9CiAK
LUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KFNU
VUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2Nv
bnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0g
ICAgSlNWYWx1ZSogY29uc3RyVmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBjb25zdHJW
YWwgPSBBUkdfc3JjMTsKICAgICBpbnQgYXJnQ291bnQgPSBBUkdfaW50MzsKICAgICBpbnQgdGhp
c1JlZ2lzdGVyID0gQVJHX2ludDU7CiAKQEAgLTUwNTQsMTQgKzUwNTYsMTQgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfTgogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09
IENvbnN0cnVjdFR5cGVIb3N0KSB7CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxsRnJhbWUt
PnJlZ2lzdGVycygpICsgdGhpc1JlZ2lzdGVyICsgMSwgYXJnQ291bnQgLSAxKTsKIAotICAgICAg
ICBKU1ZhbHVlKiByZXR1cm5WYWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR1cm5WYWx1ZTsK
ICAgICAgICAgewogICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxs
UmVjb3JkKENUSV9TQU1QTEVSKTsKICAgICAgICAgICAgIHJldHVyblZhbHVlID0gY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lLCBhc09iamVjdChjb25zdHJWYWwpLCBhcmdM
aXN0KTsKICAgICAgICAgfQogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KHJldHVyblZhbHVlKTsKICAgICB9CiAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25z
dHJ1Y3RUeXBlTm9uZSk7CkBAIC01MDcyLDE3ICs1MDc0LDE3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfY29uc3RydWN0X04KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAot
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwoU1RVQl9B
UkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBB
UkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBB
Ukdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVl
UHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gQVJH
X3NyYzI7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAg
ICAgdW5zaWduZWQgaTsKIAogICAgIGJvb2wgaXNVSW50MzIgPSBKU0ltbWVkaWF0ZTo6Z2V0VUlu
dDMyKHN1YnNjcmlwdCwgaSk7CkBAIC01MTAzLDcgKzUxMDUsNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2dldF9ieV92YWwoCiAgICAgfQogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNv
bHZlX2Z1bmMoU1RVQl9BUkdTKQpAQCAtNTEzNCwxMCArNTEzNiwxMCBAQCBWb2lkUHRyUGFpciBJ
bnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfCiAgICAgICAgICAgICAvLyB0aGF0IGluIGhvc3Qg
b2JqZWN0cyB5b3UgYWx3YXlzIGdldCBhIHZhbGlkIG9iamVjdCBmb3IgdGhpcy4KICAgICAgICAg
ICAgIC8vIFdlIGFsc28gaGFuZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9uIGZvciB0aGUgZ2xvYmFs
IG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmog
PSBiYXNlLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogCi0gICAgICAgICAgICBSRVRVUk5f
UEFJUih0aGlzT2JqLCBhc1BvaW50ZXIocmVzdWx0KSk7CisgICAgICAgICAgICBSRVRVUk5fUEFJ
Uih0aGlzT2JqLCBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICAg
ICAgKytpdGVyOwogICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKQEAgLTUxNDgsMjIgKzUxNTAs
MjIgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlXwogICAgIFZNX1RI
Uk9XX0VYQ0VQVElPTl8yKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bfc3Vi
KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29w
X3N1YihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNW
YWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAg
ICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdf
c3JjMjsKIAogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsKICAgICBpZiAoZmFz
dElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAg
ICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAtIHJpZ2h0KTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVm
dCAtIHJpZ2h0KSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRv
TnVtYmVyKGNhbGxGcmFtZSkgLSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihj
YWxsRnJhbWUpIC0gc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVl
UHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV92YWwoU1RVQl9BUkdTKQpAQCAtNTE3Myw5ICs1MTc1LDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6
Y3RpX29wX3B1dF9ieV92YWwoU1RVQgogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2Nh
bGxGcmFtZTsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBBUkdfZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXI7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKLSAgICBK
U1ZhbHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IEFSR19z
cmMzOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0
ciBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gQVJHX3NyYzM7
CiAKICAgICB1bnNpZ25lZCBpOwogCkBAIC01MjA2LDkgKzUyMDgsOSBAQCB2b2lkIEludGVycHJl
dGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJhCiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAg
ICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIGludCBpID0gQVJHX2ludDI7
Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBBUkdfc3JjMzsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0g
QVJHX3NyYzM7CiAKICAgICBBU1NFUlQoQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5pc0pT
QXJyYXkoYmFzZVZhbHVlKSk7CiAKQEAgLTUyMjYsMjEgKzUyMjgsMjEgQEAgdm9pZCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYQogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbGVzc2VxKFNUVUJfQVJH
UykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcShT
VFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9v
bGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOworICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFS
R19zcmMyKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogaW50
IEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl90cnVlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CisgICAg
SlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7CiAKQEAgLTUyNDksMzAgKzUyNTEsMzAgQEAgaW50IEludGVycHJldGVy
OjpjdGlfb3BfbG9vcF9pZl90cnVlKFNUVQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfbmVnYXRlKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7Cisg
ICAgSlNWYWx1ZVB0ciBzcmMgPSBBUkdfc3JjMTsKIAogICAgIGRvdWJsZSB2OwogICAgIGlmIChm
YXN0SXNOdW1iZXIoc3JjLCB2KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCAtdik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsIC12KSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC1z
cmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIC1zcmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfcmVzb2x2ZV9iYXNlKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfYmFzZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGlubGluZVJlc29sdmVCYXNlKEFSR19jYWxs
RnJhbWUsICpBUkdfaWQxLCBBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOworICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUoaW5saW5lUmVzb2x2ZUJhc2UoQVJHX2NhbGxGcmFtZSwgKkFS
R19pZDEsIEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpcChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3NraXAoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIApAQCAtNTI5Myw5ICs1Mjk1LDkgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3NraQogICAgICAgICBKU09iamVjdCogbyA9
ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdl
dFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAg
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CiAKQEAgLTUzMDUs
NyArNTMwNyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9za2kKICAg
ICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9yZXNvbHZlX2dsb2JhbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50
ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCkBAIC01MzE3LDcgKzUzMTksNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3Jlc29sdmVfZ2xvCiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxP
YmplY3QpOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVl
KGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlKCkg
JiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAg
ICAgICBHbG9iYWxSZXNvbHZlSW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8gPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5nbG9iYWxSZXNvbHZlSW5mbyhnbG9iYWxSZXNvbHZlSW5mb0luZGV4KTsKICAg
ICAgICAgICAgIGlmIChnbG9iYWxSZXNvbHZlSW5mby5zdHJ1Y3R1cmUpCkBAIC01MzI1LDExICs1
MzI3LDExIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG8KICAgICAg
ICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPnJlZigpOwogICAgICAgICAgICAgZ2xv
YmFsUmVzb2x2ZUluZm8uc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKICAg
ICAgICAgICAgIGdsb2JhbFJlc29sdmVJbmZvLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHZQQ0luZGV4
ID0gQVJHX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdldEJ5dGVjb2RlSW5kZXgoU1RVQl9SRVRV
Uk5fQUREUkVTUyk7CkBAIC01MzM3LDQyICs1MzM5LDQyIEBAIEpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfcmVzb2x2ZV9nbG8KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kaXYoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZGl2KFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAg
SlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAg
ICAgZG91YmxlIHJpZ2h0OwogICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFz
dElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCBsZWZ0IC8gcmlnaHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC8gcmlnaHQpKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051
bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIHNyYzItPnRv
TnVtYmVyKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLT50b051bWJlcihj
YWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1K
U1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2RlYyhTVFVCX0FSR1MpCiB7
CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdiA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgdiA9IEFSR19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19n
bG9iYWxEYXRhLCB2LT50b051bWJlcihjYWxsRnJhbWUpIC0gMSk7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSAt
IDEpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIGludCBJbnRl
cnByZXRlcjo6Y3RpX29wX2psZXNzKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3Jj
MiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFs
dWVQdHIgc3JjMiA9IEFSR19zcmMyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2Nh
bGxGcmFtZTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3Jj
Mik7CkBAIC01MzgwLDI0ICs1MzgyLDI0IEBAIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNz
KFNUVUJfQVJHUykKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y3RpX29wX25vdChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9ub3QoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04o
KTsKIAotICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjID0g
QVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy0+dG9Cb29sZWFuKGNhbGxGcmFt
ZSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihj
YWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBp
bnQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RV
Ql9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFs
dWVQdHIgc3JjMSA9IEFSR19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwogCkBAIC01NDEwLDEwMyArNTQxMiwxMDMgQEAgVm9pZFB0clBhaXIgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9wb3N0X2luYwogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAot
ICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBBUkdfc3JjMTsK
IAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFs
dWUqIG51bWJlciA9IHYtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG51
bWJlciA9IHYtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwogCi0gICAgUkVUVVJOX1BBSVIoYXNQb2ludGVyKG51bWJlciksIGFzUG9pbnRl
cihqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAr
IDEpKSk7CisgICAgUkVUVVJOX1BBSVIoSlNWYWx1ZVB0cjo6ZW5jb2RlKG51bWJlciksIEpTVmFs
dWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbnVtYmVyLT51bmNoZWNrZWRH
ZXROdW1iZXIoKSArIDEpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZXEo
U1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bf
ZXEoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFs
dWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAg
SlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3Ny
YzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBB
U1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2VJbmxpbmUoY2Fs
bEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4o
ZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2xzaGlmdChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9sc2hpZnQoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04o
KTsKIAotICAgIEpTVmFsdWUqIHZhbCA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNoaWZ0ID0g
QVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciB2YWwgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHNoaWZ0ID0gQVJHX3NyYzI7CiAKICAgICBpbnQzMl90IGxlZnQ7CiAgICAgdWludDMyX3Qgcmln
aHQ7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNo
aWZ0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBKU0ltbWVkaWF0
ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJ
bnQzMihzaGlmdCkgJiAweDFmKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
anNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2
YWwpIDw8IChKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0KSAmIDB4MWYpKSk7
CiAgICAgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCBy
aWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA8PCAo
cmlnaHQgJiAweDFmKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpKTsKIAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hp
ZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAo
c2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRh
bmQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlf
b3BfYml0YW5kKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAg
ICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMy
OworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9
IEFSR19zcmMyOwogCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIGludDMyX3QgcmlnaHQ7CiAgICAg
aWYgKGZhc3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkK
LSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICYgcmlnaHQpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCBsZWZ0ICYgcmlnaHQpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3Jj
MS0+dG9JbnQzMihjYWxsRnJhbWUpICYgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMy
KGNhbGxGcmFtZSkgJiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1
ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bf
cnNoaWZ0KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6
Y3RpX29wX3JzaGlmdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
Ci0gICAgSlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc2hpZnQgPSBBUkdf
c3JjMjsKKyAgICBKU1ZhbHVlUHRyIHZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2hp
ZnQgPSBBUkdfc3JjMjsKIAogICAgIGludDMyX3QgbGVmdDsKICAgICB1aW50MzJfdCByaWdodDsK
ICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQp
KQotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJz
KHZhbCwgc2hpZnQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRp
YXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7CiAgICAgaWYgKGZh
c3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAg
ICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA+PiAocmlnaHQgJiAweDFm
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdf
Z2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMy
KGNhbGxGcmFtZSkgJiAweDFmKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihB
UkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUlu
dDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQo
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVz
dWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QoU1RVQl9BUkdT
KQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfYml0bm90KFNU
VUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBz
cmMgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYyA9IEFSR19zcmMxOwogCiAgICAgaW50
IHZhbHVlOwogICAgIGlmIChmYXN0VG9JbnQzMihzcmMsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+dmFsdWUpOwotICAgICAgICAgICAgCisgICAgICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH52YWx1
ZSkpOworCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+c3JjLT50b0ludDMyKGNh
bGxGcmFtZSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsIH5zcmMtPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZl
X3dpdGhfYmFzZShTVFVCX0FSR1MpCkBAIC01NTI5LDEwICs1NTMxLDEwIEBAIFZvaWRQdHJQYWly
IEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV8KICAgICAgICAgYmFzZSA9ICppdGVyOwogICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3Bl
cnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICAgICAgICAgIFJFVFVS
Tl9QQUlSKGJhc2UsIGFzUG9pbnRlcihyZXN1bHQpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QQUlS
KGJhc2UsIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgICAgICAr
K2l0ZXI7CiAgICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtNTU1MCw4OSArNTU1Miw4OSBA
QCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19lCiAgICAgcmV0dXJuIEFS
R19mdW5jZXhwMS0+bWFrZUZ1bmN0aW9uKEFSR19jYWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbW9kKFNUVUJf
QVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX21vZChT
VFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSog
ZGl2aWRlbmRWYWx1ZSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIGRpdmlzb3JWYWx1ZSA9IEFS
R19zcmMyOworICAgIEpTVmFsdWVQdHIgZGl2aWRlbmRWYWx1ZSA9IEFSR19zcmMxOworICAgIEpT
VmFsdWVQdHIgZGl2aXNvclZhbHVlID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgZG91YmxlIGQgPSBkaXZpZGVuZFZhbHVlLT50b051
bWJlcihjYWxsRnJhbWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCBmbW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2
aXNvclZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sZXNzKFNU
VUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xl
c3MoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CisgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFS
R19zcmMyKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXEoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbmVxKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAg
SlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAgQVNTRVJUKCFKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
Qm9vbGVhbighZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWxTbG93Q2FzZUlubGluZShjYWxs
RnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogfQogCiBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfZGVjKFNUVUJfQVJH
UykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2ID0gQVJH
X3NyYzE7CisgICAgSlNWYWx1ZVB0ciB2ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pT
TnVtYmVyKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciBudW1iZXIgPSB2LT50b0pTTnVtYmVy
KGNhbGxGcmFtZSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgIFJF
VFVSTl9QQUlSKGFzUG9pbnRlcihudW1iZXIpLCBhc1BvaW50ZXIoanNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKSkpOworICAgIFJFVFVSTl9Q
QUlSKEpTVmFsdWVQdHI6OmVuY29kZShudW1iZXIpLCBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKSkpOwog
fQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdTKQorSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfdXJzaGlmdChTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdmFsID0g
QVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRy
IHZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBBUkdfc3JjMjsKIAogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGlmIChKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkgJiYgIUpTSW1tZWRpYXRl
Ojppc05lZ2F0aXZlKHZhbCkpCi0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlm
dEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUoSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hp
ZnQpKTsKICAgICBlbHNlIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJH
X2dsb2JhbERhdGEsICh2YWwtPnRvVUludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50
MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051
bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0
LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OX0FUX0VORCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gSlNW
YWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y3RpX29wX2JpdHhvcihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50
ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3IoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBz
cmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNW
YWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIF4gc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUp
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMx
LT50b0ludDMyKGNhbGxGcmFtZSkgXiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEpTT2JqZWN0KiBJbnRlcnByZXRl
cjo6Y3RpX29wX25ld19yZWdleHAoU1RVQl9BUkdTKQpAQCAtNTY0MiwyMSArNTY0NCwyMSBAQCBK
U09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfcmVnZXhwCiAgICAgcmV0dXJuIG5ldyAo
QVJHX2dsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChBUkdfY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBBUkdfcmVnZXhwMSk7CiB9CiAKLUpTVmFsdWUq
IEludGVycHJldGVyOjpjdGlfb3BfYml0b3IoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfYml0b3IoU1RVQl9BUkdTKQogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBK
U1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7
CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihB
UkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIHwgc3JjMi0+dG9JbnQzMihj
YWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxE
YXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgfCBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIElu
dGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbChTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCkBAIC01NjY1LDI5ICs1NjY3LDI5IEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKFMKIAogICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlciA9IEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlcjsKICAgICAKLSAgICBKU1ZhbHVl
KiBmdW5jVmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBmdW5jVmFsID0gQVJHX3NyYzE7
CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gQVJHX2ludDI7CiAgICAgaW50IGFyZ0NvdW50ID0g
QVJHX2ludDM7CiAKICAgICBSZWdpc3RlciogbmV3Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0OwogICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZy
YW1lIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7Ci0gICAg
SlNWYWx1ZSogdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2Jh
bE9iamVjdCgpOwogCiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBnbG9iYWxPYmplY3QgJiYgZnVuY1Zh
bCA9PSBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUqIGV4
Y2VwdGlvblZhbHVlID0gbm9WYWx1ZSgpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnRl
cnByZXRlci0+Y2FsbEV2YWwoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3YsIGFyZ0NvdW50
LCByZWdpc3Rlck9mZnNldCwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBKU1ZhbHVlUHRyIGV4
Y2VwdGlvblZhbHVlID0gbm9WYWx1ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGlu
dGVycHJldGVyLT5jYWxsRXZhbChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwgYXJnQ291
bnQsIHJlZ2lzdGVyT2Zmc2V0LCBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WShleGNlcHRpb25WYWx1ZSAhPSBub1ZhbHVlKCkpKSB7CiAgICAgICAgICAgICBBUkdfZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgICAgICAgICBWTV9USFJPV19F
WENFUFRJT05fQVRfRU5EKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIHJl
dHVybiBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCk7CisgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOwogfQogCi1KU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX3Rocm93KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Rocm93KFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKQEAgLTU2OTYsMjEgKzU2OTgsMjEgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OmN0aV9vcF90aHJvdyhTVFVCXwogCiAgICAgdW5zaWduZWQgdlBDSW5kZXggPSBj
b2RlQmxvY2stPmdldEJ5dGVjb2RlSW5kZXgoU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKLSAgICBK
U1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgZXhjZXB0
aW9uVmFsdWUgPSBBUkdfc3JjMTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwogCiAgICAg
SGFuZGxlckluZm8qIGhhbmRsZXIgPSBBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4LCB0cnVlKTsKIAog
ICAgIGlmICghaGFuZGxlcikgewogICAgICAgICAqQVJHX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvblZh
bHVlOwotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgp
KTsKICAgICB9CiAKICAgICBBUkdfc2V0Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgdm9pZCog
Y2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKICAgICBBU1NFUlQoY2F0Y2hSb3V0
aW5lKTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhjYXRjaFJvdXRpbmUpOwotICAgIHJl
dHVybiBleGNlcHRpb25WYWx1ZTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGV4Y2Vw
dGlvblZhbHVlKTsKIH0KIAogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJHUykKQEAgLTU3MjAsMTUgKzU3MjIsMTUgQEAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvciogSW50ZXJwcmV0ZXI6OmN0aQogICAgIHJldHVybiBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOjpjcmVhdGUoQVJHX2NhbGxGcmFtZSwgQVJHX3NyYzEpOwogfQogCi1KU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5hbWUoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZShTVFVCX0FSR1Mp
CiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogaXQgPSBBUkdfcG5pMTsKLSAgICBKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoQVJHX2Nh
bGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciB0ZW1wID0gaXQtPm5leHQoQVJHX2NhbGxGcmFtZSk7
CiAgICAgaWYgKCF0ZW1wKQogICAgICAgICBpdC0+aW52YWxpZGF0ZSgpOwotICAgIHJldHVybiB0
ZW1wOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUodGVtcCk7CiB9CiAKIEpTT2JqZWN0
KiBJbnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTKQpAQCAtNTc0OCwxMDIg
KzU3NTAsMTAyIEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2NvcGUoU1RVQl8KICAg
ICBBUkdfY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+cG9wKCkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZihTVFVC
X0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF90eXBl
b2YoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVy
biBqc1R5cGVTdHJpbmdGb3JWYWx1ZShBUkdfY2FsbEZyYW1lLCBBUkdfc3JjMSk7CisgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc1R5cGVTdHJpbmdGb3JWYWx1ZShBUkdfY2FsbEZyYW1l
LCBBUkdfc3JjMSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX3VuZGVm
aW5lZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9pc191bmRlZmluZWQoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04o
KTsKIAotICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKLSAgICByZXR1cm4ganNCb29sZWFuKEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVkKCkgOiB2LT5hc0NlbGwo
KS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKTsKKyAg
ICBKU1ZhbHVlUHRyIHYgPSBBUkdfc3JjMTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzQm9vbGVhbihKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgp
IDogdi0+YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQoKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Jvb2xlYW4o
U1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bf
aXNfYm9vbGVhbihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0g
ICAgcmV0dXJuIGpzQm9vbGVhbihBUkdfc3JjMS0+aXNCb29sZWFuKCkpOworICAgIHJldHVybiBK
U1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKEFSR19zcmMxLT5pc0Jvb2xlYW4oKSkpOwogfQog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX251bWJlcihTVFVCX0FSR1MpCitKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19udW1iZXIoU1RVQl9B
UkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc0Jvb2xl
YW4oQVJHX3NyYzEtPmlzTnVtYmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
anNCb29sZWFuKEFSR19zcmMxLT5pc051bWJlcigpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfaXNfc3RyaW5nKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX3N0cmluZyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihBUkdfZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0
cjo6ZW5jb2RlKGpzQm9vbGVhbihBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmlzSlNTdHJp
bmcoQVJHX3NyYzEpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfb2Jq
ZWN0KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2lzX29iamVjdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihqc0lzT2JqZWN0VHlwZShBUkdfc3JjMSkpOworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGpzSXNPYmplY3RUeXBlKEFSR19zcmMx
KSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Z1bmN0aW9uKFNUVUJf
QVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Z1
bmN0aW9uKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBy
ZXR1cm4ganNCb29sZWFuKGpzSXNGdW5jdGlvblR5cGUoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihqc0lzRnVuY3Rpb25UeXBlKEFSR19zcmMxKSkp
OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N0cmljdGVxKFNUVUJfQVJHUykK
K0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N0cmljdGVxKFNU
VUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBz
cmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFs
dWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwog
CiAgICAgLy8gaGFuZGxlZCBpbmxpbmUgYXMgZmFzdCBjYXNlcwogICAgIEFTU0VSVCghSlNJbW1l
ZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUoc3JjMSwgc3JjMikpOwogICAgIEFTU0VSVCghKEpTSW1t
ZWRpYXRlOjppc0VpdGhlckltbWVkaWF0ZShzcmMxLCBzcmMyKSAmIChzcmMxICE9IEpTSW1tZWRp
YXRlOjp6ZXJvSW1tZWRpYXRlKCkpICYgKHNyYzIgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlh
dGUoKSkpKTsKIAotICAgIHJldHVybiBqc0Jvb2xlYW4oc3RyaWN0RXF1YWxTbG93Q2FzZUlubGlu
ZShzcmMxLCBzcmMyKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4o
c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShzcmMxLCBzcmMyKSkpOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX25zdHJpY3RlcShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uc3RyaWN0ZXEoU1RVQl9BUkdTKQogewogICAg
IEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsK
LSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJH
X3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICAvLyBoYW5kbGVk
IGlubGluZSBhcyBmYXN0IGNhc2VzCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZShzcmMxLCBzcmMyKSk7CiAgICAgQVNTRVJUKCEoSlNJbW1lZGlhdGU6OmlzRWl0aGVy
SW1tZWRpYXRlKHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlh
dGUoKSkgJiAoc3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkpOwogICAgIAot
ICAgIHJldHVybiBqc0Jvb2xlYW4oIXN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoc3JjMSwgc3Jj
MikpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKCFzdHJpY3RFcXVh
bFNsb3dDYXNlSW5saW5lKHNyYzEsIHNyYzIpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
IEludGVycHJldGVyOjpjdGlfb3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKQogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOworICAgIEpT
VmFsdWVQdHIgc3JjID0gQVJHX3NyYzE7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0gc3JjLT50b0pTTnVtYmVyKGNhbGxG
cmFtZSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzcmMtPnRvSlNOdW1iZXIoY2FsbEZyYW1l
KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2luKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2luKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZV
TkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0g
ICAgSlNWYWx1ZSogYmFzZVZhbCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbCA9
IEFSR19zcmMyOwogCiAgICAgaWYgKCFiYXNlVmFsLT5pc09iamVjdCgpKSB7CiAgICAgICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKQEAgLTU4NTMsMTYgKzU4NTUsMTYg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbihTVFVCX0FSRwogICAgICAgICBWTV9U
SFJPV19FWENFUFRJT04oKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlKiBwcm9wTmFtZSA9IEFSR19z
cmMxOworICAgIEpTVmFsdWVQdHIgcHJvcE5hbWUgPSBBUkdfc3JjMTsKICAgICBKU09iamVjdCog
YmFzZU9iaiA9IGFzT2JqZWN0KGJhc2VWYWwpOwogCiAgICAgdWludDMyX3QgaTsKICAgICBpZiAo
cHJvcE5hbWUtPmdldFVJbnQzMihpKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlT2Jq
LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBpKSkpOwog
CiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BOYW1lLT50b1N0cmluZyhj
YWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgcmV0dXJuIGpzQm9v
bGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSk7CisgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSkpKTsKIH0KIAogSlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3Bf
cHVzaF9uZXdfc2NvcGUoU1RVQl9BUkdTKQpAQCAtNTkwMyw3ICs1OTA1LDcgQEAgdm9pZCogSW50
ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKFNUVQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJ
T04oKTsKIAotICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19p
bnQyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC01OTIwLDcgKzU5
MjIsNyBAQCB2b2lkKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9jaGFyKFNUCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3Ny
YzE7CisgICAgSlNWYWx1ZVB0ciBzY3J1dGluZWUgPSBBUkdfc3JjMTsKICAgICB1bnNpZ25lZCB0
YWJsZUluZGV4ID0gQVJHX2ludDI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKQEAgLTU5NDAsNyArNTk0Miw3IEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNo
X3N0cmluZygKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBz
Y3J1dGluZWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9IEFSR19zcmMx
OwogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBBUkdfaW50MjsKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtNTk1NSwxNyArNTk1NywxNyBAQCB2b2lkKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3N3aXRjaF9zdHJpbmcoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfdmFsKFNUVUJfQVJHUykKK0pTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwoU1RVQl9BUkdT
KQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgSlNPYmplY3QqIGJh
c2VPYmogPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwogCi0g
ICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0gQVJHX3NyYzI7Ci0gICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQ7CiAgICAgdWludDMyX3QgaTsKICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkpCiAg
ICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJh
bWUsIGkpKTsKQEAgLTU5NzcsNyArNTk3OSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfZGVsX2J5X3ZhbCgKICAgICB9CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogfQogCiB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2dldHRlcihTVFVCX0FSR1Mp
CkBAIC02MDExLDcgKzYwMTMsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdf
ZXJyb3IoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25l
ZCB0eXBlID0gQVJHX2ludDE7Ci0gICAgSlNWYWx1ZSogbWVzc2FnZSA9IEFSR19zcmMyOworICAg
IEpTVmFsdWVQdHIgbWVzc2FnZSA9IEFSR19zcmMyOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIg
PSBBUkdfaW50MzsKIAogICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8RXJyb3JUeXBlPih0eXBlKSwgbWVzc2FnZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSwgbGlu
ZU51bWJlciwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5v
d25lck5vZGUoKS0+c291cmNlVVJMKCkpOwpAQCAtNjAzMCw3ICs2MDMyLDcgQEAgdm9pZCBJbnRl
cnByZXRlcjo6Y3RpX29wX2RlYnVnKFNUVUJfQVJHUwogICAgIEFSR19nbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdI
b29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV92bV90aHJvdyhTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJw
cmV0ZXI6OmN0aV92bV90aHJvdyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElP
TigpOwogCkBAIC02MDQwLDcgKzYwNDIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX3Zt
X3Rocm93KFNUVUJfCiAKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Z2V0Qnl0
ZWNvZGVJbmRleChnbG9iYWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbik7CiAKLSAgICBKU1ZhbHVl
KiBleGNlcHRpb25WYWx1ZSA9IGdsb2JhbERhdGEtPmV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUHRy
IGV4Y2VwdGlvblZhbHVlID0gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uOwogICAgIEFTU0VSVChleGNl
cHRpb25WYWx1ZSk7CiAgICAgZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gbm9WYWx1ZSgpOwogCkBA
IC02MDQ4LDE0ICs2MDUwLDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfdm1fdGhyb3co
U1RVQl8KIAogICAgIGlmICghaGFuZGxlcikgewogICAgICAgICAqQVJHX2V4Y2VwdGlvbiA9IGV4
Y2VwdGlvblZhbHVlOwotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUo
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6bnVsbElt
bWVkaWF0ZSgpKTsKICAgICB9CiAKICAgICBBUkdfc2V0Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAg
ICAgdm9pZCogY2F0Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKICAgICBBU1NFUlQo
Y2F0Y2hSb3V0aW5lKTsKICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhjYXRjaFJvdXRpbmUp
OwotICAgIHJldHVybiBleGNlcHRpb25WYWx1ZTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5j
b2RlKGV4Y2VwdGlvblZhbHVlKTsKIH0KIAogI3VuZGVmIFNUVUJfUkVUVVJOX0FERFJFU1MKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMzk2
MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAsMTMgKzE0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBi
b29sIGlzT3Bjb2RlKE9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBleGVjdXRl
KFByb2dyYW1Ob2RlKiwgQ2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhp
c09iaiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVu
Y3Rpb25Cb2R5Tm9kZSosIENhbGxGcmFtZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0
aW9uKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxG
cmFtZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKLQotICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUFyZ3Vt
ZW50cyhDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIHJl
dHJpZXZlQ2FsbGVyKENhbGxGcmFtZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKLSAgICAg
ICAgdm9pZCByZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiwgaW50JiBsaW5lTnVtYmVyLCBp
bnRwdHJfdCYgc291cmNlSUQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9u
KSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGVjdXRlKFByb2dyYW1Ob2RlKiwgQ2FsbEZy
YW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZVB0ciogZXhj
ZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqLCBD
YWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWVQdHIq
IGV4Y2VwdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVB0ciByZXRyaWV2ZUFyZ3VtZW50cyhDYWxs
RnJhbWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgcmV0cmlldmVD
YWxsZXIoQ2FsbEZyYW1lKiwgSW50ZXJuYWxGdW5jdGlvbiopIGNvbnN0OworICAgICAgICB2b2lk
IHJldHJpZXZlTGFzdENhbGxlcihDYWxsRnJhbWUqLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90
JiBzb3VyY2VJRCwgVVN0cmluZyYgc291cmNlVVJMLCBKU1ZhbHVlUHRyJiBmdW5jdGlvbikgY29u
c3Q7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwg
SlNGdW5jdGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYg
YXJndiwgaW50JiBhcmdjKTsKICAgICAgICAgdm9pZCBzZXRUaW1lb3V0VGltZSh1bnNpZ25lZCB0
aW1lb3V0VGltZSkgeyBtX3RpbWVvdXRUaW1lID0gdGltZW91dFRpbWU7IH0KQEAgLTE4Myw4ICsx
ODMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9T
VFVCIGN0aV9vcF9jb252ZXJ0X3RoaXMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQg
SklUX1NUVUIgY3RpX29wX2VuZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX2FkZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX3ByZV9pbmMoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfYWRkKFNUVUJfQVJHUyk7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3ByZV9p
bmMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlfb3BfbG9vcF9p
Zl9sZXNzKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2xv
b3BfaWZfbGVzc2VxKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NU
VUIgY3RpX29wX25ld19vYmplY3QoU1RVQl9BUkdTKTsKQEAgLTE5MiwyMiArMTkyLDIyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5
X2lkX3NlY29uZChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklU
X1NUVUIgY3RpX29wX3B1dF9ieV9pZF9mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9nZW5l
cmljKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3Bf
Z2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KFNUVUJfQVJHUyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVs
bChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dl
dF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTKTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RV
Ql9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlf
aWQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9p
bnN0YW5jZW9mKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfbXVsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0
aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2Vj
b25kKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9z
ZWxmX2ZhaWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3RfZnVsbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbChT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0
aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3Ry
aW5nX2ZhaWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRp
YyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RV
Ql9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RV
QiBjdGlfb3BfbXVsKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NU
VUIgY3RpX29wX25ld19mdW5jKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRf
U1RVQiBjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBW
b2lkUHRyUGFpciBKSVRfU1RVQiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKFNUVUJfQVJHUyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9u
KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklU
X1NUVUIgY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0
aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyhTVFVCX0FSR1MpOwogICAg
ICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJh
bXMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJf
b2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTKTsKQEAgLTIxNiw3MSArMjE2LDcxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRf
Y2FsbChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcmV0
X3Njb3BlQ2hhaW4oU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RV
QiBjdGlfb3BfbmV3X2FycmF5KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfcmVzb2x2ZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Jlc29sdmUoU1RV
Ql9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RV
QiBjdGlfb3BfcmVzb2x2ZV9nbG9iYWwoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2Jq
ZWN0KiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KFNUVUJfQVJHUyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X05vdEpTQ29u
c3RydWN0KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QoU1RVQl9B
UkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBj
dGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIg
SklUX1NUVUIgY3RpX29wX3Jlc29sdmVfZnVuYyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3N1YihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9zdWIoU1RVQl9BUkdTKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdT
KTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfYXJyYXko
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9sZXNz
ZXEoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBK
SVRfU1RVQiBjdGlfb3BfbGVzc2VxKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBpbnQgSklU
X1NUVUIgY3RpX29wX2xvb3BfaWZfdHJ1ZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfYmFzZShTVFVCX0FSR1MpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpOwotICAgICAg
ICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfc2tpcChTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2RpdihTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3ByZV9kZWMoU1RVQl9B
UkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBj
dGlfb3BfcmVzb2x2ZV9iYXNlKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZl
X3NraXAoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBKSVRfU1RVQiBjdGlfb3BfZGl2KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKTsKICAg
ICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlfb3Bfamxlc3MoU1RVQl9BUkdTKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9ub3QoU1RVQl9BUkdTKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bfbm90KFNU
VUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2p0cnVlKFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBKSVRfU1RVQiBjdGlfb3BfcG9zdF9p
bmMoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9l
cShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2xz
aGlmdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29w
X2JpdGFuZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX3JzaGlmdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIg
Y3RpX29wX2JpdG5vdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9lcShTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9sc2hpZnQoU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfYml0YW5kKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSklUX1NUVUIgY3RpX29wX3JzaGlmdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXRub3QoU1RVQl9BUkdT
KTsKICAgICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3dp
dGhfYmFzZShTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0
aV9vcF9uZXdfZnVuY19leHAoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9tb2QoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9sZXNzKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfbmVxKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX21vZChTVFVCX0FSR1MpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9sZXNzKFNUVUJf
QVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIg
Y3RpX29wX25lcShTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgSklUX1NU
VUIgY3RpX29wX3Bvc3RfZGVjKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfdXJzaGlmdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogSklUX1NUVUIgY3RpX29wX2JpdHhvcihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF91cnNoaWZ0KFNUVUJfQVJHUyk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29w
X2JpdHhvcihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0
aV9vcF9uZXdfcmVnZXhwKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRf
U1RVQiBjdGlfb3BfYml0b3IoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9jYWxsX2V2YWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIEpJVF9TVFVCIGN0aV9vcF90aHJvdyhTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXRvcihTVFVCX0FSR1MpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9j
YWxsX2V2YWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfdGhyb3coU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJH
Uyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbmV4dF9wbmFtZShT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV9vcF9uZXh0X3BuYW1lKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgSklUX1NUVUIgY3RpX29wX3BvcF9zY29wZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3R5cGVvZihTVFVCX0FSR1MpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX3VuZGVmaW5lZChTVFVCX0FSR1MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9B
UkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19udW1iZXIo
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19z
dHJpbmcoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9v
cF9pc19vYmplY3QoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVC
IGN0aV9vcF9pc19mdW5jdGlvbihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX3N0cmljdGVxKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBKSVRfU1RVQiBjdGlfb3BfbnN0cmljdGVxKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF90eXBlb2Yo
U1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRf
U1RVQiBjdGlfb3BfaXNfdW5kZWZpbmVkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfaXNfbnVtYmVyKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX3N0cmluZyhTVFVCX0FSR1MpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9pc19vYmplY3Qo
U1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRf
U1RVQiBjdGlfb3BfaXNfZnVuY3Rpb24oU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bfc3RyaWN0ZXEoU1RVQl9BUkdTKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bf
bnN0cmljdGVxKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9p
bnRlciogSklUX1NUVUIgY3RpX29wX3RvX2pzbnVtYmVyKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2luKFNUVUJfQVJH
Uyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfbmV3X3Nj
b3BlKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9qbXBf
c2NvcGVzKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfYnlfaW5kZXgoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJVF9TVFVCIGN0
aV9vcF9zd2l0Y2hfaW1tKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RV
QiBjdGlfb3Bfc3dpdGNoX2NoYXIoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJ
VF9TVFVCIGN0aV9vcF9zd2l0Y2hfc3RyaW5nKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X3ZhbChTVFVCX0FSR1MpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlfdmFs
KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0
dGVyKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRf
c2V0dGVyKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3Rp
X29wX25ld19lcnJvcihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfZGVidWcoU1RVQl9BUkdTKTsKIAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NU
VUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0
YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fZG9udExhenlMaW5rQ2FsbChTVFVCX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NUVUIgY3RpX3ZtX2xhenlMaW5rQ2FsbChTVFVCX0FS
R1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX2FjdGl2
YXRpb24oU1RVQl9BUkdTKTsKQEAgLTI5MCw0MyArMjkwLDQzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBEZWZhdWx0IG51bWJlciBvZiB0aWNrcyBiZWZvcmUgYSB0aW1lb3V0IGNoZWNr
IHNob3VsZCBiZSBkb25lLgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291
bnRUaHJlc2hvbGQgPSAxMDI0OwogCi0gICAgICAgIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUqIHYp
IHsgcmV0dXJuICFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxsKCktPnZw
dHIoKSA9PSBtX2pzQXJyYXlWcHRyOyB9Ci0gICAgICAgIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVl
KiB2KSB7IHJldHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgp
LT52cHRyKCkgPT0gbV9qc1N0cmluZ1ZwdHI7IH0KKyAgICAgICAgYm9vbCBpc0pTQXJyYXkoSlNW
YWx1ZVB0ciB2KSB7IHJldHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFz
Q2VsbCgpLT52cHRyKCkgPT0gbV9qc0FycmF5VnB0cjsgfQorICAgICAgICBib29sIGlzSlNTdHJp
bmcoSlNWYWx1ZVB0ciB2KSB7IHJldHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYm
IHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0gbV9qc1N0cmluZ1ZwdHI7IH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGVudW0gRXhlY3V0aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVy
biB9OwogCi0gICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBjYWxsRXZhbChDYWxsRnJhbWUq
LCBSZWdpc3RlckZpbGUqLCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9m
ZnNldCwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0
ZShFdmFsTm9kZSosIENhbGxGcmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgZ2xvYmFs
UmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Cisg
ICAgICAgIE5FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGNhbGxFdmFsKENhbGxGcmFtZSosIFJlZ2lz
dGVyRmlsZSosIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBK
U1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZXhlY3V0ZShF
dmFsTm9kZSosIENhbGxGcmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgZ2xvYmFsUmVn
aXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKTsKIAog
ICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUgYm9v
bCByZXNvbHZlKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZh
bHVlKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwg
SW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9J
TkxJTkUgYm9vbCByZXNvbHZlR2xvYmFsKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1
ZSomIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZShD
YWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKKyAg
ICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rp
b24qLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIE5FVkVSX0lOTElORSBi
b29sIHJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyJiBl
eGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIHJlc29sdmVCYXNlKENh
bGxGcmFtZSosIEluc3RydWN0aW9uKiB2UEMpOwotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCBy
ZXNvbHZlQmFzZUFuZFByb3BlcnR5KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VB
bmRQcm9wZXJ0eShDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlv
blZhbHVlKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGVFeGNl
cHRpb25TY29wZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKTsKIAotICAgICAg
ICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYsIEpTVmFsdWUq
LCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomKTsKLSAgICAgICAgTkVWRVJf
SU5MSU5FIEhhbmRsZXJJbmZvKiB0aHJvd0V4Y2VwdGlvbihDYWxsRnJhbWUqJiwgSlNWYWx1ZSom
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBi
b29sIHJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxG
cmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZVB0ciwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBD
b2RlQmxvY2sqJik7CisgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNl
cHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFsdWVQdHImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
Ym9vbCk7CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5kRnVuYyhDYWxs
RnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKIAogICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBDYWxsRnJhbWUqIHNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKENvZGVCbG9jayosIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIHNpemVfdCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ2MpOwogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGZpbmRG
dW5jdGlvbkNhbGxGcmFtZShDYWxsRnJhbWUqLCBJbnRlcm5hbEZ1bmN0aW9uKik7CiAKLSAgICAg
ICAgSlNWYWx1ZSogcHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwg
Q2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWVQdHIgcHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNW
YWx1ZVB0ciogZXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZy
YW1lKik7CiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKIAotICAgICAg
ICBKU1ZhbHVlKiBjaGVja1RpbWVvdXQoSlNHbG9iYWxPYmplY3QqKTsKKyAgICAgICAgYm9vbCBj
aGVja1RpbWVvdXQoSlNHbG9iYWxPYmplY3QqKTsKICAgICAgICAgdm9pZCByZXNldFRpbWVvdXRD
aGVjaygpOwogCi0gICAgICAgIHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVC
bG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRyeUNh
Y2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICB2b2lkIHVuY2FjaGVHZXRCeUlEKENvZGVCbG9jayosIEluc3Ry
dWN0aW9uKiB2UEMpOwotICAgICAgICB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqLCBD
b2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSosIENv
ZGVCbG9jayosIEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHVuY2FjaGVQdXRCeUlEKENvZGVCbG9jayosIElu
c3RydWN0aW9uKiB2UEMpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhbGxCeXRlY29kZShP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NhbGwpIHx8IG9w
Y29kZSA9PSBnZXRPcGNvZGUob3BfY29uc3RydWN0KSB8fCBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9w
X2NhbGxfZXZhbCk7IH0KQEAgLTMzNCw4ICszMzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICBzdGF0aWMgdm9pZCB0aHJvd1N0YWNrT3ZlcmZsb3dQcmV2aW91
c0ZyYW1lKENhbGxGcmFtZSoqLCBKU0dsb2JhbERhdGEqLCB2b2lkKiYgcmV0dXJuQWRkcmVzcyk7
CiAKLSAgICAgICAgdm9pZCB0cnlDVElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2Nr
Kiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHRy
eUNUSUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRy
ZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOworICAgICAg
ICB2b2lkIHRyeUNUSUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiBy
ZXR1cm5BZGRyZXNzLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlDVElDYWNo
ZVB1dEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOwogI2VuZGlmCiAKICAg
ICAgICAgU2FtcGxpbmdUb29sKiBtX3NhbXBsZXI7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJl
Z2lzdGVyKCk7Ci0gICAgICAgIFJlZ2lzdGVyKEpTVmFsdWUqKTsKKyAgICAgICAgUmVnaXN0ZXIo
SlNWYWx1ZVB0cik7CiAKLSAgICAgICAgSlNWYWx1ZSoganNWYWx1ZShDYWxsRnJhbWUqKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSogZ2V0SlNWYWx1ZSgpIGNvbnN0OworICAgICAgICBKU1ZhbHVl
UHRyIGpzVmFsdWUoQ2FsbEZyYW1lKikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0SlNW
YWx1ZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgbWFyaygpOwpAQCAtODksNyArODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5p
b24gewogICAgICAgICAgICAgaW50cHRyX3QgaTsKICAgICAgICAgICAgIHZvaWQqIHY7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiB2YWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiB2YWx1ZTsKIAogICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOwogICAg
ICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHM7CkBAIC0xMzUsMjkgKzEzNSwyOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBTRVRfVFlQRShFbXB0
eVR5cGUpOwotICAgICAgICAqdGhpcyA9IG5vVmFsdWUoKTsKKyAgICAgICAgdS52YWx1ZSA9IEpT
VmFsdWVQdHI6OmVuY29kZShub1ZhbHVlKCkpOwogI2VuZGlmCiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0ZXIoSlNWYWx1ZSogdikKKyAgICBBTFdBWVNfSU5MSU5F
IFJlZ2lzdGVyOjpSZWdpc3RlcihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBTRVRfVFlQ
RShWYWx1ZVR5cGUpOwotICAgICAgICB1LnZhbHVlID0gdjsKKyAgICAgICAgdS52YWx1ZSA9IEpT
VmFsdWVQdHI6OmVuY29kZSh2KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNj
YWZmb2xkaW5nIGZvciBsZWdhY3kgY2xpZW50cy4gSXQgd2lsbCBldmVudHVhbGx5IGdvIGF3YXku
Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBSZWdpc3Rlcjo6anNWYWx1ZShDYWxsRnJhbWUq
KSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBSZWdpc3Rlcjo6anNWYWx1ZShD
YWxsRnJhbWUqKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gT25jZSByZWdpc3RlcnMgaG9sZCBk
b3VibGVzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgYSBKU1ZhbHVlKgogICAgICAgICAv
LyBpZiB0aGUgcmVnaXN0ZXIgZG9lc24ndCBob2xkIG9uZSBhbHJlYWR5LiAKICAgICAgICAgQVNT
RVJUX1RZUEUoVmFsdWVUeXBlKTsKLSAgICAgICAgcmV0dXJuIHUudmFsdWU7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjpkZWNvZGUodS52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogUmVnaXN0ZXI6OmdldEpTVmFsdWUoKSBjb25zdAorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZVB0ciBSZWdpc3Rlcjo6Z2V0SlNWYWx1ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlRfVFlQRShKU1ZhbHVlVHlwZSk7Ci0gICAgICAgIHJldHVybiB1LnZhbHVl
OworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZGVjb2RlKHUudmFsdWUpOwogICAgIH0KICAg
ICAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgUmVnaXN0ZXI6Om1hcmtlZCgpIGNvbnN0CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIFNZTUJPTF9TVFJJTkcoY3Rp
Vk1UaHJvd1RyYW1wb2xpbmUpICI6IiAKIAogZXh0ZXJuICJDIiB7CiAgICAgCi0gICAgX19kZWNs
c3BlYyhuYWtlZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZp
bGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2Jh
bERhdGEqKQorICAgIF9fZGVjbHNwZWMobmFrZWQpIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBj
dGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFs
dWVQdHIqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKICAgICB7CiAgICAg
ICAgIF9fYXNtIHsKICAgICAgICAgICAgIHB1c2ggZWJwOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAgICBKdW1wIGJvdGhXZXJl
SW1tZWRpYXRlc0J1dE5vdEVxdWFsID0gam5lMzIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKIAogICAg
IC8vIFRoZXkgYXJlIGVxdWFsIC0gc2V0IHRoZSByZXN1bHQgdG8gdHJ1ZS4gKE9yIGZhbHNlLCBp
ZiBuZWdhdGVkKS4KLSAgICBtb3ZlKEltbVB0cihqc0Jvb2xlYW4oIW5lZ2F0ZWQpKSwgWDg2Ojpl
YXgpOworICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oIW5lZ2F0
ZWQpKSksIFg4Njo6ZWF4KTsKICAgICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsID0g
anVtcCgpOwogCiAgICAgLy8gZWF4IHdhcyBub3QgYW4gaW1tZWRpYXRlLCB3ZSBoYXZlbid0IHll
dCBjaGVja2VkIGVkeC4KQEAgLTIzNSwxOSArMjM1LDE5IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShJbnN0cnVjdGlvbioKICAgICAvLyBvdGhlcndpc2UgdGhlc2UgdmFsdWVzIGFyZSBu
b3QgZXF1YWwuCiAgICAgZmlyc3ROb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZKU0NlbGwoWDg2OjplZHgpOwotICAgIGFkZFNsb3dDYXNlKGplUHRyKFg4Njo6
ZWR4LCBJbW1QdHIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKKyAgICBhZGRTbG93
Q2FzZShqZVB0cihYODY6OmVkeCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0
ZTo6emVyb0ltbWVkaWF0ZSgpKSkpKTsKICAgICBKdW1wIGZpcnN0V2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwogCiAgICAgLy8gZWF4IHdhcyBhbiBpbW1lZGlhdGUsIGJ1dCBlZHggd2Fzbid0Lgog
ICAgIC8vIElmIGVheCBpcyAwIGp1bXAgdG8gYSBzbG93IGNhc2UsIG90aGVyd2lzZSB0aGVzZSB2
YWx1ZXMgYXJlIG5vdCBlcXVhbC4KICAgICBzZWNvbmROb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJv
SW1tZWRpYXRlKCkpKSk7CisgICAgYWRkU2xvd0Nhc2UoamVQdHIoWDg2OjplYXgsIEltbVB0cihK
U1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKSk7CiAKICAg
ICAvLyBXZSBnZXQgaGVyZSBpZiB0aGUgdHdvIHZhbHVlcyBhcmUgZGlmZmVyZW50IGltbWVkaWF0
ZXMsIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgYSBKU0NlbGwuCiAgICAgLy8gVmFlbHVl
cyBhcmUgbm90IGVxdWFsLCBzZXQgdGhlIHJlc3VsdCB0byBmYWxzZS4KICAgICBib3RoV2VyZUlt
bWVkaWF0ZXNCdXROb3RFcXVhbC5saW5rKHRoaXMpOwogICAgIGZpcnN0V2FzTm90SW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShJbW1QdHIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2Ojpl
YXgpOworICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4obmVnYXRl
ZCkpKSwgWDg2OjplYXgpOwogICAgIAogICAgIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsLmxp
bmsodGhpcyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMzQ4LDcgKzM0
OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGFk
ZEp1bXAoamxQdHIoWDg2OjplYXgsIEltbVB0cihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpLCB0
YXJnZXQgKyAzKTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGpsUHRyKFg4Njo6ZWF4LCBJbW1Q
dHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQg
KyAzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTM2Niw3ICszNjYs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRK
dW1wKGpsZVB0cihYODY6OmVheCwgSW1tUHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSksIHRh
cmdldCArIDMpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoamxlUHRyKFg4Njo6ZWF4LCBJbW1Q
dHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQg
KyAzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTQxOSw3ICs0MTks
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIFg4Njo6
ZWR4KTsgLy8gcmVsb2FkIHByb3RvCiAKICAgICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGxv
YWQgdHJ1ZSByZXN1bHQKLSAgICAgICAgICAgIG1vdmUoSW1tUHRyKGpzQm9vbGVhbih0cnVlKSks
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgWDg2OjplYXgpOwogCiAgICAgICAgICAgICBMYWJlbCBsb29wKHRo
aXMpOwogCkBAIC00MjksOSArNDI5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogCiAgICAgICAgICAgICBKdW1wIGV4aXQgPSBqZVB0cihYODY6OmVjeCwgWDg2OjplZHgp
OwogCi0gICAgICAgICAgICBqbmVQdHIoWDg2OjplY3gsIEltbVB0cihqc051bGwoKSksIGxvb3Ap
OworICAgICAgICAgICAgam5lUHRyKFg4Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzTnVsbCgpKSksIGxvb3ApOwogCi0gICAgICAgICAgICBtb3ZlKEltbVB0cihqc0Jvb2xlYW4o
ZmFsc2UpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgWDg2OjplYXgpOwogCiAgICAgICAgICAgICBleGl0
LmxpbmsodGhpcyk7CiAKQEAgLTYxOCwxMSArNjE4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAg
ICAgSnVtcCBpc1plcm8gPSBqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJv
SW1tZWRpYXRlKCkpKTsKKyAgICAgICAgICAgIEp1bXAgaXNaZXJvID0gamVQdHIoWDg2OjplYXgs
IEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkp
KTsKICAgICAgICAgICAgIGFkZEp1bXAoam56MzIoWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRl
OjpUYWdCaXRUeXBlSW50ZWdlcikpLCB0YXJnZXQgKyAyKTsKIAotICAgICAgICAgICAgYWRkSnVt
cChqZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbih0cnVlKSkpLCB0YXJnZXQgKyAyKTsK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVh
bihmYWxzZSkpKSk7CisgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIo
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAKICAgICAgICAgICAgIGlzWmVyby5saW5rKHRo
aXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9pZl90cnVlKTsKQEAgLTY5MSw3
ICs2OTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBhZGRKdW1wKGpnZVB0cihYODY6OmVheCwgSW1tUHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIp
KSksIHRhcmdldCArIDMpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoamdlUHRyKFg4Njo6ZWF4
LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0
YXJnZXQgKyAzKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTcxMiwx
MSArNzEyLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVh
eCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSwgdGFyZ2V0ICsgMik7Cisg
ICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSksIHRhcmdldCArIDIpOwogICAgICAg
ICAgICAgSnVtcCBpc05vblplcm8gPSBqbnozMihYODY6OmVheCwgSW1tMzIoSlNJbW1lZGlhdGU6
OlRhZ0JpdFR5cGVJbnRlZ2VyKSk7CiAKLSAgICAgICAgICAgIGFkZEp1bXAoamVQdHIoWDg2Ojpl
YXgsIEltbVB0cihqc0Jvb2xlYW4oZmFsc2UpKSksIHRhcmdldCArIDIpOwotICAgICAgICAgICAg
YWRkU2xvd0Nhc2Uoam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoanNCb29sZWFuKHRydWUpKSkpOwor
ICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQgKyAyKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSkpOwogCiAgICAgICAgICAgICBpc05vblplcm8ubGluayh0aGlzKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2pmYWxzZSk7CkBAIC03MzYsNyArNzM2LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0
aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgICAgICAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKICAgICAgICAgICAgIGFuZDMyKEltbTMyKH5KU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRKdW1w
KGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoanNOdWxsKCkpKSwgdGFyZ2V0ICsgMik7ICAgICAgICAg
ICAgCisgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0
cjo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQgKyAyKTsgICAgICAgICAgICAKIAogICAgICAg
ICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9qZXFfbnVsbCk7CkBAIC03NTYsNyArNzU2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKICAgICAgICAgICAgIGFuZDMyKEltbTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRV
bmRlZmluZWQpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRKdW1wKGpuZVB0cihYODY6OmVh
eCwgSW1tUHRyKGpzTnVsbCgpKSksIHRhcmdldCArIDIpOyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYWRkSnVtcChqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCArIDIpOyAgICAgICAgICAgIAogCiAgICAgICAgICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2puZXFfbnVs
bCk7CkBAIC03NjYsOCArNzY2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfdW5leHBlY3RlZF9sb2FkOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0g
bV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIG1vdmUoSW1tUHRyKHYpLCBYODY6OmVheCk7CisgICAgICAg
ICAgICBKU1ZhbHVlUHRyIHYgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNW
YWx1ZVB0cjo6ZW5jb2RlKHYpKSwgWDg2OjplYXgpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3VuZXhwZWN0ZWRfbG9hZCk7CiAgICAgICAgIH0KQEAgLTgzMywxMSAr
ODMzLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBqZVB0cihYODY6
OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKTsKKyAgICAgICAgICAg
IEp1bXAgaXNaZXJvID0gamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUo
SlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKICAgICAgICAgICAgIGFkZEp1bXAoam56
MzIoWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlcikpLCB0YXJn
ZXQgKyAyKTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKGpz
Qm9vbGVhbih0cnVlKSkpLCB0YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpu
ZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbihmYWxzZSkpKSk7CisgICAgICAgICAgICBh
ZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIo
WDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7
CiAKICAgICAgICAgICAgIGlzWmVyby5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfanRydWUpOwpAQCAtMTA1Niw5ICsxMDU2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3NldHRlcik7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIG1lc3NhZ2UgPSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBtZXNzYWdlID0g
bV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCwgMSk7Ci0gICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFy
Z0NvbnN0YW50KG1lc3NhZ2UsIDIpOworICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25z
dGFudChKU1ZhbHVlUHRyOjplbmNvZGUobWVzc2FnZSksIDIpOwogICAgICAgICAgICAgZW1pdFB1
dEpJVFN0dWJBcmdDb25zdGFudChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zm
c2V0KG1fYnl0ZWNvZGVJbmRleCksIDMpOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZXdfZXJyb3IpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKQEAgLTEyODgsMTIgKzEyODgs
MTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2xzaGlmdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lm
X2xlc3M6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKICAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIDIsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIob3AyLCAyLCBYODY6OmVj
eCk7CiAgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29w
X2lmX2xlc3MpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGpuejMyKFg4Njo6
ZWF4KSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTMxNSw5ICsxMzE1
LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29w
X2lmX2xlc3NlcTogeworICAgICAgICAgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKKyAgICAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4
LCAxKTsKICAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgMiwgWDg2OjplY3gpOwpAQCAtMTM3
NSw5ICsxMzc1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9kZWMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3Bfam5sZXNzOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBn
ZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAgICAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiAgICAgICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYXgs
IDEpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCAyLCBYODY6OmVjeCk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDE3IEBACiAKICNkZWZpbmUgQVJHX2NhbGxGcmFtZSBz
dGF0aWNfY2FzdDxDYWxsRnJhbWUqPihBUkdTW1NUVUJfQVJHU19jYWxsRnJhbWVdKQogI2RlZmlu
ZSBBUkdfcmVnaXN0ZXJGaWxlIHN0YXRpY19jYXN0PFJlZ2lzdGVyRmlsZSo+KEFSR1NbU1RVQl9B
UkdTX3JlZ2lzdGVyRmlsZV0pCi0jZGVmaW5lIEFSR19leGNlcHRpb24gc3RhdGljX2Nhc3Q8SlNW
YWx1ZSoqPihBUkdTW1NUVUJfQVJHU19leGNlcHRpb25dKQorI2RlZmluZSBBUkdfZXhjZXB0aW9u
IHN0YXRpY19jYXN0PEpTVmFsdWVQdHIqPihBUkdTW1NUVUJfQVJHU19leGNlcHRpb25dKQogI2Rl
ZmluZSBBUkdfcHJvZmlsZXJSZWZlcmVuY2Ugc3RhdGljX2Nhc3Q8UHJvZmlsZXIqKj4oQVJHU1tT
VFVCX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2VdKQogI2RlZmluZSBBUkdfZ2xvYmFsRGF0YSBzdGF0
aWNfY2FzdDxKU0dsb2JhbERhdGEqPihBUkdTW1NUVUJfQVJHU19nbG9iYWxEYXRhXSkKIAogI2Rl
ZmluZSBBUkdfc2V0Q2FsbEZyYW1lKG5ld0NhbGxGcmFtZSkgKEFSR1NbU1RVQl9BUkdTX2NhbGxG
cmFtZV0gPSAobmV3Q2FsbEZyYW1lKSkKIAotI2RlZmluZSBBUkdfc3JjMSBzdGF0aWNfY2FzdDxK
U1ZhbHVlKj4oQVJHU1sxXSkKLSNkZWZpbmUgQVJHX3NyYzIgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+
KEFSR1NbMl0pCi0jZGVmaW5lIEFSR19zcmMzIHN0YXRpY19jYXN0PEpTVmFsdWUqPihBUkdTWzNd
KQotI2RlZmluZSBBUkdfc3JjNCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1s0XSkKLSNkZWZp
bmUgQVJHX3NyYzUgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbNV0pCisjZGVmaW5lIEFSR19z
cmMxIEpTVmFsdWVQdHI6OmRlY29kZShzdGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
cio+KEFSR1NbMV0pKQorI2RlZmluZSBBUkdfc3JjMiBKU1ZhbHVlUHRyOjpkZWNvZGUoc3RhdGlj
X2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihBUkdTWzJdKSkKKyNkZWZpbmUgQVJHX3Ny
YzMgSlNWYWx1ZVB0cjo6ZGVjb2RlKHN0YXRpY19jYXN0PEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
Kj4oQVJHU1szXSkpCisjZGVmaW5lIEFSR19zcmM0IEpTVmFsdWVQdHI6OmRlY29kZShzdGF0aWNf
Y2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KEFSR1NbNF0pKQorI2RlZmluZSBBUkdfc3Jj
NSBKU1ZhbHVlUHRyOjpkZWNvZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
PihBUkdTWzVdKSkKICNkZWZpbmUgQVJHX2lkMSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJH
U1sxXSkKICNkZWZpbmUgQVJHX2lkMiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1syXSkK
ICNkZWZpbmUgQVJHX2lkMyBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1szXSkKQEAgLTk3
LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdDsKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLSAgICB0eXBl
ZGVmIEpTVmFsdWUqIChKSVRfU1RVQiAqQ1RJSGVscGVyX2opKFNUVUJfQVJHUyk7CisgICAgdHlw
ZWRlZiBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogKEpJVF9TVFVCICpDVElIZWxwZXJfaikoU1RV
Ql9BUkdTKTsKICAgICB0eXBlZGVmIEpTT2JqZWN0KiAoSklUX1NUVUIgKkNUSUhlbHBlcl9vKShT
VFVCX0FSR1MpOwogICAgIHR5cGVkZWYgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogKEpJVF9TVFVC
ICpDVElIZWxwZXJfcCkoU1RVQl9BUkdTKTsKICAgICB0eXBlZGVmIHZvaWQgKEpJVF9TVFVCICpD
VElIZWxwZXJfdikoU1RVQl9BUkdTKTsKQEAgLTE5MywxMyArMTkzLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIH07CiAKICAgICBleHRlcm4gIkMiIHsKLSAgICAgICAgSlNWYWx1ZSogY3RpVHJh
bXBvbGluZSgKKyAgICAgICAgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIGN0aVRyYW1wb2xpbmUo
CiAjaWYgUExBVEZPUk0oWDg2XzY0KQogICAgICAgICAgICAgLy8gRklYTUU6IChidWcgIzIyOTEw
KSB0aGlzIHdpbGwgZm9yY2UgYWxsIGFyZ3VtZW50cyBvbnRvIHRoZSBzdGFjayAocmVncGFybSgw
KSBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgZWZmZWN0KS4KICAgICAgICAgICAgIC8vIFdl
IGNhbiBhbGxvdyByZWdpc3RlciBwYXNzaW5nIGhlcmUsIGFuZCBtb3ZlIHRoZSB3cml0ZXMgb2Yg
dGhlc2UgdmFsdWVzIGludG8gdGhlIHRyYW1wb2xpbmUuCiAgICAgICAgICAgICB2b2lkKiwgdm9p
ZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAogI2VuZGlmCi0gICAgICAgICAgICB2b2lk
KiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uLCBQ
cm9maWxlcioqLCBKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgICAgIHZvaWQqIGNvZGUsIFJlZ2lz
dGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwg
SlNHbG9iYWxEYXRhKik7CiAgICAgICAgIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKTsKICAg
ICB9OwogCkBAIC0zNDEsMTMgKzM0MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgbGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywgdm9pZCogY3RpQ29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBj
YWxsZXJBcmdDb3VudCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHVubGlua0NhbGwoQ2FsbExpbmtJ
bmZvKik7CiAKLSAgICAgICAgaW5saW5lIHN0YXRpYyBKU1ZhbHVlKiBleGVjdXRlKHZvaWQqIGNv
ZGUsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorICAgICAgICBpbmxp
bmUgc3RhdGljIEpTVmFsdWVQdHIgZXhlY3V0ZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Y3RpVHJhbXBvbGluZSgKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjpkZWNvZGUoY3Rp
VHJhbXBvbGluZSgKICNpZiBQTEFURk9STShYODZfNjQpCiAgICAgICAgICAgICAgICAgMCwgMCwg
MCwgMCwgMCwgMCwKICNlbmRpZgotICAgICAgICAgICAgICAgIGNvZGUsIHJlZ2lzdGVyRmlsZSwg
Y2FsbEZyYW1lLCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Uo
KSwgZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgY29kZSwgcmVnaXN0ZXJGaWxlLCBjYWxs
RnJhbWUsIGV4Y2VwdGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBn
bG9iYWxEYXRhKSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC00MzIsOCArNDMyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5
IGVudHJ5KTsKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvKTsKIAotICAg
ICAgICBKU1ZhbHVlKiBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3Jj
KTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0Q29uc3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYyk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgZ2V0Q29uc3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYyk7CiAgICAg
ICAgIGludDMyX3QgZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYyk7
CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3Jj
KTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudDMxQml0SW1tZWRpYXRlSW50KHVuc2ln
bmVkIHNyYyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsMTEgKzkzLDExIEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoU2xv
d19vcF9sc2hpZnQKIAogdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KHVuc2ln
bmVkIHJlc3VsdCwgdW5zaWduZWQgb3AxLCB1bnNpZ25lZCBvcDIpCiB7Ci0gICAgaWYgKEpTVmFs
dWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKG9wMikpIHsKKyAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgWDg2OjplYXgpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgpOwogICAgICAgICAvLyBNYXNrIHdpdGggMHgxZiBhcyBwZXIg
ZWNtYS0yNjIgMTEuNy4yIHN0ZXAgNy4KLSAgICAgICAgcnNoaWZ0UHRyKEltbTMyKEpTSW1tZWRp
YXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIodmFsdWUpICYgMHgxZiksIFg4Njo6ZWF4KTsKKyAgICAg
ICAgcnNoaWZ0UHRyKEltbTMyKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikpICYgMHgxZiksIFg4Njo6ZWF4KTsKICAgICB9IGVsc2UgewogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIFg4Njo6ZWF4LCBvcDIsIFg4Njo6ZWN4
KTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTEx
Niw3ICsxMTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9yc2hpZnQodW5zCiB2
b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aFNsb3dfb3BfcnNoaWZ0KHVuc2lnbmVkIHJlc3VsdCwg
dW5zaWduZWQsIHVuc2lnbmVkIG9wMiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgaWYgKGdldENvbnN0YW50SW1t
ZWRpYXRlTnVtZXJpY0FyZyhvcDIpKQorICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZUludChvcDIpKQogICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
b3AyLCAyLCBYODY6OmVjeCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IHZvaWQgSklUOjp1bmxpbmtDYWxsKENhbGxMaW5rSW5mbyogY2FsbEwKICAgICAvLyBXaGVuIHRo
ZSBKU0Z1bmN0aW9uIGlzIGRlbGV0ZWQgdGhlIHBvaW50ZXIgZW1iZWRkZWQgaW4gdGhlIGluc3Ry
dWN0aW9uIHN0cmVhbSB3aWxsIG5vIGxvbmdlciBiZSB2YWxpZAogICAgIC8vIChhbmQsIGlmIGEg
bmV3IEpTRnVuY3Rpb24gaGFwcGVuZWQgdG8gYmUgY29uc3RydWN0ZWQgYXQgdGhlIHNhbWUgbG9j
YXRpb24sIHdlIGNvdWxkIGdldCBhIGZhbHNlIHBvc2l0aXZlCiAgICAgLy8gbWF0Y2gpLiAgUmVz
ZXQgdGhlIGNoZWNrIHNvIGl0IG5vIGxvbmdlciBtYXRjaGVzLgotICAgIERhdGFMYWJlbFB0cjo6
cGF0Y2goY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxl
VmFsdWUoKSk7CisgICAgRGF0YUxhYmVsUHRyOjpwYXRjaChjYWxsTGlua0luZm8tPmhvdFBhdGhC
ZWdpbiwgSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSkp
OwogfQogCiB2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sq
IGNhbGxlZUNvZGVCbG9jaywgdm9pZCogY3RpQ29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIGludCBjYWxsZXJBcmdDb3VudCkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYQogCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWN4
LCBGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChT
Y29wZUNoYWluLCBtX25vZGUpKSwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCiAKLSAgICBz
dG9yZVB0cihJbW1QdHIobm9WYWx1ZSgpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVn
aXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KG5vVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6Ok9w
dGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOwogICAgIHN0b3JlUHRyKFg4Njo6ZWN4LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBS
ZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKICAgICBzdG9yZVB0cihYODY6OmVkeCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOwogfQpAQCAtMjExLDE0ICsyMTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogICAgICAgICBjb21waWxlT3BDYWxsRXZhbFNldHVwQXJncyhpbnN0cnVj
dGlvbik7CiAKICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2V2
YWwpOwotICAgICAgICB3YXNFdmFsID0gam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNJbW1lZGlh
dGU6OmltcG9zc2libGVWYWx1ZSgpKSk7CisgICAgICAgIHdhc0V2YWwgPSBqbmVQdHIoWDg2Ojpl
YXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1
ZSgpKSkpOwogICAgIH0KIAogICAgIC8vIFRoaXMgcGxhbnRzIGEgY2hlY2sgZm9yIGEgY2FjaGVk
IEpTRnVuY3Rpb24gdmFsdWUsIHNvIHdlIGNhbiBwbGFudCBhIGZhc3QgbGluayB0byB0aGUgY2Fs
bGVlLgogICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGxlYXZlcyB0aGUgY2FsbGVlIGluIGVjeCwg
dXNlZCB3aGVuIHNldHRpbmcgdXAgdGhlIHN0YWNrIGZyYW1lIGJlbG93CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4KTsKICAgICBEYXRhTGFiZWxQdHIgYWRkcmVz
c09mTGlua2VkRnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIGp1bXBUb1Nsb3cgPSBqbmVQdHJXaXRo
UGF0Y2goWDg2OjplY3gsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIEltbVB0cihKU0lt
bWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpKTsKKyAgICBKdW1wIGp1bXBUb1Nsb3cgPSBqbmVQ
dHJXaXRoUGF0Y2goWDg2OjplY3gsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIEltbVB0
cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSkpOwog
ICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2Vl
bihhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSA9PSBwYXRjaE9mZnNl
dE9wQ2FsbENvbXBhcmVUb0p1bXApOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1
bmN0aW9uQ2hlY2s7CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
T3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgLy8gRmFzdCB2ZXJzaW9uIG9mIHN0YWNrIGZyYW1lIGlu
aXRpYWxpemF0aW9uLCBkaXJlY3RseSByZWxhdGl2ZSB0byBlZGkuCiAgICAgLy8gTm90ZSB0aGF0
IHRoaXMgb21pdHMgdG8gc2V0IHVwIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBz
ZXQgaW4gdGhlIGNhbGxlZQotICAgIHN0b3JlUHRyKEltbVB0cihub1ZhbHVlKCkpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKKyAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKG5vVmFsdWUoKSkpLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKICAgICBzdG9yZVB0cihYODY6OmVjeCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwg
RklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2Nv
cGVDaGFpbiwgbV9ub2RlKSksIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgogICAgIHN0b3Jl
MzIoSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJP
ZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDggQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogCiAgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2
YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVn
aXN0ZXIgYWxsb2NhdG9yIQogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwotICAgICAgICBtb3ZlKEltbVB0cih2YWx1ZSksIGRzdCk7CisgICAgICAg
IEpTVmFsdWVQdHIgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAg
ICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEx
MiwxNiArMTEyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcgog
ICAgIHBlZWsoZHN0LCBhcmd1bWVudE51bWJlcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogSklUOjpnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKQotewot
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewotICAg
ICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAg
ICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSA/IHZhbHVlIDogbm9WYWx1
ZSgpOwotICAgIH0KLSAgICByZXR1cm4gbm9WYWx1ZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYykKK0FMV0FZU19JTkxJ
TkUgSlNWYWx1ZVB0ciBKSVQ6OmdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpCiB7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKICAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CkBAIC0xNDIsNyArMTMzLDcg
QEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIGlmICghbV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyk7Cisg
ICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGdldENvbnN0YW50T3BlcmFuZChzcmMpOwogCiAjaWYgVVNF
KEFMVEVSTkFURV9KU0lNTUVESUFURSkKICAgICBpZiAoIUpTSW1tZWRpYXRlOjppc051bWJlcih2
YWx1ZSkpCkBAIC0xNTksOCArMTUwLDggQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbgogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEpJVFN0dWJBcmdGcm9t
VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIHNyYywgdW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudCh2YWx1
ZSwgYXJndW1lbnROdW1iZXIpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQo
SlNWYWx1ZVB0cjo6ZW5jb2RlKHZhbHVlKSwgYXJndW1lbnROdW1iZXIpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHNjcmF0Y2gpOwogICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhzY3JhdGNo
LCBhcmd1bWVudE51bWJlcik7CkBAIC0yMTAsNyArMjAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKIHsKLSAgICBzdG9yZVB0cihJbW1QdHIoanNVbmRlZmlu
ZWQoKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3Rlcikp
KTsKKyAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwog
ICAgIC8vIEZJWE1FOiAjaWZuZGVmIE5ERUJVRywgV3JpdGUgdGhlIGNvcnJlY3QgbV90eXBlIHRv
IHRoZSByZWdpc3Rlci4KIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwxMCArMTgyLDEwIEBAIHZvaWQg
SklUOjpjb21waWxlUHV0QnlJZFNsb3dDYXNlKGludCBiYXMKICAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVy
bkxvY2F0aW9uID0gY2FsbDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHJlc2l6ZVByb3BlcnR5U3Rv
cmFnZShKU09iamVjdCogYmFzZU9iamVjdCwgaW50MzJfdCBvbGRTaXplLCBpbnQzMl90IG5ld1Np
emUpCitzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIHJlc2l6ZVByb3BlcnR5U3RvcmFn
ZShKU09iamVjdCogYmFzZU9iamVjdCwgaW50MzJfdCBvbGRTaXplLCBpbnQzMl90IG5ld1NpemUp
CiB7CiAgICAgYmFzZU9iamVjdC0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2xkU2l6ZSwgbmV3
U2l6ZSk7Ci0gICAgcmV0dXJuIGJhc2VPYmplY3Q7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVu
Y29kZShiYXNlT2JqZWN0KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxs
TmVlZFN0b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSkKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvCiAgICAgLy8gZWN4ID0gYmFzZU9iamVjdC0+bV9zdHJ1Y3R1cmUKICAg
ICBmb3IgKFJlZlB0cjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkg
ewogICAgICAgICAvLyBudWxsIGNoZWNrIHRoZSBwcm90b3R5cGUKLSAgICAgICAgc3VjY2Vzc0Nh
c2VzLmFwcGVuZChqZVB0cihYODY6OmVjeCwgSW1tUHRyKGpzTnVsbCgpKSkpOworICAgICAgICBz
dWNjZXNzQ2FzZXMuYXBwZW5kKGplUHRyKFg4Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGpzTnVsbCgpKSkpKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlIGlkCiAg
ICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoam5lUHRyKEFkZHJlc3MoWDg2OjplY3gsIEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIEltbVB0cihpdC0+Z2V0KCkpKSk7CkBAIC0y
NTIsNyArMjUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwog
CiAgICAgLy8gd3JpdGUgdGhlIHZhbHVlCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBG
SUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSksIFg4Njo6ZWF4KTsKLSAg
ICBzdG9yZVB0cihYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSkpOworICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4
LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpKTsKIAogICAgIHJldCgpOwogICAg
IApAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKFN0cnVjdHVy
ZVN0dWIKICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBw
YXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUpOwogICAgIHZvaWQqIGRpc3BsYWNlbWVudEFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihz
dHViSW5mby0+aG90UGF0aEJlZ2luKSArIHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zm
c2V0KTsKICAgICBEYXRhTGFiZWxQdHI6OnBhdGNoKHN0cnVjdHVyZUFkZHJlc3MsIHN0cnVjdHVy
ZSk7Ci0gICAgRGF0YUxhYmVsMzI6OnBhdGNoKGRpc3BsYWNlbWVudEFkZHJlc3MsIGNhY2hlZE9m
ZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOworICAgIERhdGFMYWJlbDMyOjpwYXRjaChkaXNwbGFj
ZW1lbnRBZGRyZXNzLCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpOwogfQogCiB2
b2lkIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5B
ZGRyZXNzKQpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNl
KFN0cnVjdHVyZVMKICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1
Y3R1cmU7CiAgICAgdm9pZCogZGlzcGxhY2VtZW50QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQ7CiAgICAgRGF0YUxhYmVsUHRyOjpwYXRjaChzdHJ1Y3R1cmVBZGRyZXNzLCBz
dHJ1Y3R1cmUpOwotICAgIERhdGFMYWJlbDMyOjpwYXRjaChkaXNwbGFjZW1lbnRBZGRyZXNzLCBj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKKyAgICBEYXRhTGFiZWwzMjo6cGF0Y2go
ZGlzcGxhY2VtZW50QWRkcmVzcywgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiBy
ZXR1cm5BZGRyZXNzKQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRTZWxmKFN0cnUKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RP
ZmZzZXQKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU09iamVj
dCwgbV9wcm9wZXJ0eVN0b3JhZ2UpKSwgWDg2OjplYXgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
UHRyKSksIFg4Njo6ZWF4KTsKICAgICByZXQoKTsKIAogICAgIHZvaWQqIGNvZGUgPSBtX2Fzc2Vt
Ymxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBAIC0z
OTMsNyArMzkzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgog
I2VuZGlmCiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAg
bG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSop
KSwgWDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0
ICogc2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwogCiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogCkBAIC00MzEsNyArNDMxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvKFN0cgogICAgIEp1bXAgZmFpbHVyZUNhc2VzMyA9IGpuZVB0cihBYnNvbHV0ZUFk
ZHJlc3MocHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyksIEltbVB0cihwcm90b3R5cGVTdHJ1Y3R1
cmUpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKLSAgICBs
b2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikp
LCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQg
KiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAKICAgICByZXQoKTsKIApAQCAtNDUz
LDcgKzQ1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKIHsK
ICAgICBKdW1wIGZhaWx1cmVDYXNlID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVy
ZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNPYmplY3Qs
IG1fcHJvcGVydHlTdG9yYWdlKSksIFg4Njo6ZWF4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0
cikpLCBYODY6OmVheCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCiAgICAgdm9pZCog
Y29kZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkUHJvdG9MaXN0CiAjZW5kaWYKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJl
Y3RPZmZzZXQKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4
LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAKICAgICBK
dW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAKICAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3Rv
UHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKICAgICBs
b2FkUHRyKHByb3RvUHJvcGVydHlTdG9yYWdlLCBYODY6OmVkeCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2OjplYXgp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpT
VmFsdWVQdHIpKSwgWDg2OjplYXgpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAogICAg
IHZvaWQqIGNvZGUgPSBtX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CkBAIC02MTQsNyArNjE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluKFN0cgogCiAgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5
U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgbG9hZFB0cihw
cm90b1Byb3BlcnR5U3RvcmFnZSwgWDg2OjplZHgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6
OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRy
KSksIFg4Njo6ZWF4KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKICAgICB2b2lkKiBj
b2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQ
b29sKCkpOwpAQCAtNjY0LDcgKzY2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbihTdHIKIAogICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2Ug
PSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwogICAgIGxvYWRQdHIocHJvdG9Qcm9w
ZXJ0eVN0b3JhZ2UsIFg4Njo6ZWR4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNh
Y2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6
OmVheCk7CiAgICAgcmV0KCk7CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0
YWJsZUNvcHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwpAQCAtNjg1LDcgKzY4NSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFMKIAogICAgIC8vIGNo
ZWNrcyBvdXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
OjplYXgsIEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpKSwgWDg2Ojpl
YXgpOwotICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZz
ZXQgKiBzaXplb2YoSlNWYWx1ZSopKSk7CisgICAgc3RvcmVQdHIoWDg2OjplZHgsIEFkZHJlc3Mo
WDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSkpOwogICAgIHJldCgp
OwogCiAgICAgdm9pZCogY29kZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzgsNyArMjc4LDcgQEAgUmVnaXN0ZXJJRCogTnVsbE5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlYwogewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpz
TnVsbCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKGRzdCwganNOdWxsKCkp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQm9vbGVhbk5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk3LDcgKzM5Nyw3IEBAIFJlZ2lz
dGVySUQqIEFycmF5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICB9CiAKICAgICBpZiAobV9l
bGlzaW9uKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRMb2Fk
KDAsIGpzTnVtYmVyKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fZWxpc2lvbiArIGxlbmd0aCkp
OworICAgICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0TG9hZEpTVigwLCBq
c051bWJlcihnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCBtX2VsaXNpb24gKyBsZW5ndGgpKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGFycmF5LmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwgdmFsdWUpOwogICAgIH0KIApAQCAtNjA4LDcgKzYwOCw3IEBAIHZv
aWQgRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpyZWxlYXNlTm9kZXMKIFJlZ2lzdGVySUQqIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBqc051bGwoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVy
YXRvci5lbWl0TG9hZEpTVihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgbV9hcmdzLmdl
dCgpLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKQEAgLTYyNyw3
ICs2MjcsNyBAQCB2b2lkIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpyZWxlYXNlTm9kCiBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVmUHRyPFJl
Z2lzdGVySUQ+IGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yKG1faWRlbnQpKSB7Ci0gICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bGwoKSk7CisgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWRKU1YoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBqc051bGwoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB0aGlzUmVnaXN0ZXIuZ2V0KCkpLCBs
b2NhbC5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBtX2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAKQEAgLTYzNiw3ICs2MzYsNyBAQCBS
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAgICAgSlNPYmplY3QqIGds
b2JhbE9iamVjdCA9IDA7CiAgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9p
ZGVudCwgaW5kZXgsIGRlcHRoLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNz
aW5nU3ltYm9sTWFya2VyKCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBn
ZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRo
LCBpbmRleCwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNS
ZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpz
TnVsbCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVy
YXRvci5lbWl0TG9hZEpTVihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIG1fYXJn
cy5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KIApA
QCAtOTI4LDcgKzkyOCw3IEBAIFJlZ2lzdGVySUQqIFZvaWROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRM
b2FkSlNWKGRzdCwganNVbmRlZmluZWQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBUeXBlT2ZWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTE1NTIsNyArMTU1Miw3IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVt
aXRDb2RlU2luZ2wKICAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyBjb2RlIHNob3VsZCBvbmx5IGJl
IGhpdCBpbiBldmFsIGNvZGUsIGl0IHdpbGwgcG90ZW50aWFsbHkKICAgICAvLyBhc3NpZ24gdG8g
dGhlIHdyb25nIGJhc2UgaWYgbV9pZGVudCBleGlzdHMgaW4gYW4gaW50ZXJ2ZW5pbmcgZHluYW1p
YyBzY29wZS4KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVz
b2x2ZUJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKLSAgICBSZWdpc3Rl
cklEKiB2YWx1ZSA9IG1faW5pdCA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2luaXQuZ2V0KCkpIDog
Z2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOworICAgIFJlZ2lzdGVySUQqIHZh
bHVlID0gbV9pbml0ID8gZ2VuZXJhdG9yLmVtaXROb2RlKG1faW5pdC5nZXQoKSkgOiBnZW5lcmF0
b3IuZW1pdExvYWRKU1YoMCwganNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZSk7CiB9CiAKQEAgLTIwMTQsNyAr
MjAxNCw3IEBAIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRCeXRlY29kZShCeXQKIAogICAg
IGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgZHN0ID0gMDsK
LSAgICBSZWdpc3RlcklEKiByMCA9IG1fdmFsdWUgPyBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3ZhbHVlLmdldCgpKSA6IGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwor
ICAgIFJlZ2lzdGVySUQqIHIwID0gbV92YWx1ZSA/IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1f
dmFsdWUuZ2V0KCkpIDogZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKGRzdCwganNVbmRlZmluZWQoKSk7
CiAgICAgaWYgKGdlbmVyYXRvci5zY29wZURlcHRoKCkpIHsKICAgICAgICAgUmVmUHRyPExhYmVs
PiBsMCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBT
Y29wZXMobDAuZ2V0KCksIDApOwpAQCAtMjQ2MSw3ICsyNDYxLDcgQEAgUmVnaXN0ZXJJRCogRXZh
bE5vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlUHJvZ3JhbSwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAg
IGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwganNVbmRlZmluZWQoKSk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRMb2FkSlNWKGRzdFJlZ2lzdGVyLmdldCgpLCBqc1VuZGVmaW5lZCgp
KTsKICAgICBzdGF0ZW1lbnRMaXN0RW1pdENvZGUoY2hpbGRyZW4oKSwgZ2VuZXJhdG9yLCBkc3RS
ZWdpc3Rlci5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRl
UHJvZ3JhbSwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAg
UmVnaXN0ZXJJRCogRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjbwogICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1lLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7
CiAgICAgc3RhdGVtZW50TGlzdEVtaXRDb2RlKGNoaWxkcmVuKCksIGdlbmVyYXRvciwgZ2VuZXJh
dG9yLmlnbm9yZWRSZXN1bHQoKSk7CiAgICAgaWYgKCFjaGlsZHJlbigpLnNpemUoKSB8fCAhY2hp
bGRyZW4oKS5sYXN0KCktPmlzUmV0dXJuTm9kZSgpKSB7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHIw
ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBSZWdpc3Rl
cklEKiByMCA9IGdlbmVyYXRvci5lbWl0TG9hZEpTVigwLCBqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBmaXJzdExpbmUo
KSwgbGFzdExpbmUoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHIwKTsKICAgICB9
CkBAIC0yNTgzLDcgKzI1ODMsNyBAQCBSZWdpc3RlcklEKiBQcm9ncmFtTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBm
aXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZHN0UmVn
aXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMb2Fk
KGRzdFJlZ2lzdGVyLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExv
YWRKU1YoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogICAgIHN0YXRlbWVudExp
c3RFbWl0Q29kZShjaGlsZHJlbigpLCBnZW5lcmF0b3IsIGRzdFJlZ2lzdGVyLmdldCgpKTsKIAog
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUo
KSwgbGFzdExpbmUoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB2
b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvCiAgICAgaW50IGxpbmVOdW1i
ZXI7CiAgICAgaW50cHRyX3Qgc291cmNlSUQ7CiAgICAgVVN0cmluZyBzb3VyY2VVUkw7Ci0gICAg
SlNWYWx1ZSogZnVuY3Rpb247CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbjsKIAogICAgIGV4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VJRCwgc291cmNlVVJMLCBmdW5jdGlvbik7CiAgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVO
b2RlOjpjcmVhdGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCksIGZ1bmN0aW9uID8gZnVuY3Rpb24tPnRvVGhpc09iamVjdChleGVjKSA6IDAsIHNvdXJj
ZVVSTCwgbGluZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub1BybwogICAgIH0K
IH0KIAotdm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiBmdW5jdGlvbikKK3ZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZVB0ciBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlz
RW1wdHkoKSk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0
ZShFeGVjU3RhdGUqIGV4CiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50
UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY2FsbElkZW50aWZpZXIs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCi12b2lk
IFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuY3Rpb24p
Cit2b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBm
dW5jdGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAK
QEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQ
cm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBub1ZhbHVlKCksIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLUNhbGxJ
ZGVudGlmaWVyIFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTVmFsdWUqIGZ1bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNl
VVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCitDYWxsSWRlbnRpZmllciBQcm9maWxlcjo6Y3Jl
YXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlUHRyIGZ1
bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVO
dW1iZXIpCiB7CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuIENhbGxJZGVudGlm
aWVyKEdsb2JhbENvZGVFeGVjdXRpb24sIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVt
YmVyKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAg
ICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgSlNW
YWx1ZVB0cjsKICAgICBjbGFzcyBQcm9maWxlR2VuZXJhdG9yOwogICAgIGNsYXNzIFVTdHJpbmc7
CiAKQEAgLTUxLDE0ICs1MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBQcm9maWxlciogcHJvZmlsZXIoKTsgCi0gICAgICAgIHN0YXRpYyBDYWxsSWRl
bnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBKU1ZhbHVlKiwgY29u
c3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRpYyBD
YWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBKU1ZhbHVl
UHRyLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKIAogICAgICAg
ICB2b2lkIHN0YXJ0UHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsK
ICAgICAgICAgUGFzc1JlZlB0cjxQcm9maWxlPiBzdG9wUHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNv
bnN0IFVTdHJpbmcmIHRpdGxlKTsKIAotICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0
ZSosIEpTVmFsdWUqIGZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3Rh
dGUqLCBKU1ZhbHVlUHRyIGZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVj
U3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
OwotICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogZnVuY3Rpb24p
OworICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBmdW5jdGlv
bik7CiAgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBz
b3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gPiYgY3VycmVudFByb2ZpbGVzKCkgeyByZXR1cm4g
bV9jdXJyZW50UHJvZmlsZXM7IH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEFyZ0xpc3Q6Om1hcmtMaXN0cyhM
aXN0U2V0JiBtYXJrU2V0CiAgICAgfQogfQogCi12b2lkIEFyZ0xpc3Q6OnNsb3dBcHBlbmQoSlNW
YWx1ZSogdikKK3ZvaWQgQXJnTGlzdDo6c2xvd0FwcGVuZChKU1ZhbHVlUHRyIHYpCiB7CiAgICAg
Ly8gQXMgbG9uZyBhcyBvdXIgc2l6ZSBzdGF5cyB3aXRoaW4gb3VyIFZlY3RvcidzIGlubGluZSAK
ICAgICAvLyBjYXBhY2l0eSwgYWxsIG91ciB2YWx1ZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3Rh
Y2ssIGFuZCAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAzOTYxNikK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biAhbV9zaXplOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogYXQoRXhlY1N0YXRlKiBleGVjLCBzaXpl
X3QgaSkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBhdChFeGVjU3RhdGUqIGV4ZWMsIHNpemVf
dCBpKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaSA8IG1fc2l6ZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idWZmZXJbaV0uanNWYWx1ZShleGVjKTsKQEAgLTk5LDcgKzk5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3NpemUgPSAwOwogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSogdikKKyAgICAgICAgdm9pZCBhcHBlbmQo
SlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIW1faXNSZWFkT25s
eSk7CiAgICAgICAgICAgICAKQEAgLTEyNSw3ICsxMjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgbWFya0xpc3RzKExpc3RTZXQmKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgc2xvd0FwcGVuZChKU1ZhbHVlKik7CisgICAgICAgIHZvaWQgc2xvd0FwcGVu
ZChKU1ZhbHVlUHRyKTsKICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVyKiBtX2J1ZmZlcjsKICAg
ICAgICAgc2l6ZV90IG1fc2l6ZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMjggKzE0NSwyOCBAQCBib29sIEFyZ3VtZW50czo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBBcmd1bWVudHM6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEFyZ3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IGlmIChpIDwgZC0+bnVtQXJndW1lbnRzICYmICghZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+
ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsKICAgICAgICAgaWYgKGkgPCBkLT5udW1QYXJhbWV0ZXJz
KQotICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9
IHZhbHVlOworICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXgg
KyBpXSA9IEpTVmFsdWVQdHIodmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkLT5l
eHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKKyAgICAgICAgICAg
IGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IEpTVmFsdWVQdHIodmFs
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSlNPYmplY3Q6OnB1dChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmc6OmZyb20oaSkpLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZv
aWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEFy
Z3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYm9v
bCBpc0FycmF5SW5kZXg7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5k
ZXgoJmlzQXJyYXlJbmRleCk7CiAgICAgaWYgKGlzQXJyYXlJbmRleCAmJiBpIDwgZC0+bnVtQXJn
dW1lbnRzICYmICghZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+ZGVsZXRlZEFyZ3VtZW50c1tp
XSkpIHsKICAgICAgICAgaWYgKGkgPCBkLT5udW1QYXJhbWV0ZXJzKQotICAgICAgICAgICAgZC0+
cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IHZhbHVlOworICAgICAgICAg
ICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IEpTVmFsdWVQdHIo
dmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkLT5leHRyYUFyZ3VtZW50c1tpIC0g
ZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKKyAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRz
W2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IEpTVmFsdWVQdHIodmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGQtPnJl
Z2lzdGVycyA9ICZhY3RpdmF0aW9uLT5yZWdpc3RlckF0KDApOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSog
cHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpIAogICAgICAgICB7IAogICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkp
OyAKICAgICAgICAgfQpAQCAtODIsOCArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90
JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCkBAIC05NCw5ICs5NCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8QXJndW1lbnRzRGF0YT4gZDsKICAg
ICB9OwogCi0gICAgQXJndW1lbnRzKiBhc0FyZ3VtZW50cyhKU1ZhbHVlKik7CisgICAgQXJndW1l
bnRzKiBhc0FyZ3VtZW50cyhKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBBcmd1bWVudHMqIGFz
QXJndW1lbnRzKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBBcmd1bWVudHMqIGFzQXJndW1l
bnRzKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFs
dWUpLT5pbmhlcml0cygmQXJndW1lbnRzOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBcmd1bWVudHMqPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDcgKzY4LDcgQEAgQ29uc3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdAog
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxB
cnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxBcnJheUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgYXJn
cyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjUgKzM2LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEFycmF5UHJvdG90eXBlKTsKIAotc3RhdGljIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NwbGljZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
U29tZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY0ZpbHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJh
eVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQdXNo
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQ
cm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NwbGlj
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5
UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0lu
ZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQog
CkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEhlbHBlciBmdW5jdGlvbgotc3RhdGlj
IEpTVmFsdWUqIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgdW5z
aWduZWQgaW5kZXgpCitzdGF0aWMgSlNWYWx1ZVB0ciBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmosIHVuc2lnbmVkIGluZGV4KQogewogICAgIFByb3BlcnR5U2xvdCBz
bG90KG9iaik7CiAgICAgaWYgKCFvYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xv
dCkpCkBAIC0xMTIsMTMgKzExMiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSogZ2V0UHJvcGVydHkoRXhl
Y1N0YXRlKiBlCiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCi1z
dGF0aWMgdm9pZCBwdXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCitzdGF0aWMgdm9p
ZCBwdXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBvYmotPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVl
LT5pc09iamVjdCgmSlNBcnJheTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CkBAIC0xNDMsNyArMTQzLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBKU1ZhbHVlKiBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOworICAgICAgICBK
U1ZhbHVlUHRyIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmIChl
bGVtZW50LT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3Ry
QnVmZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkpTQXJyYXk6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtMTg3LDEyICsxODcsMTIgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyhFeAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBK
U1ZhbHVlKiBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVl
UHRyIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmIChlbGVtZW50
LT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
SlNPYmplY3QqIG8gPSBlbGVtZW50LT50b09iamVjdChleGVjKTsKLSAgICAgICAgSlNWYWx1ZSog
Y29udmVyc2lvbkZ1bmN0aW9uID0gby0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50
b0xvY2FsZVN0cmluZyk7CisgICAgICAgIEpTVmFsdWVQdHIgY29udmVyc2lvbkZ1bmN0aW9uID0g
by0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZyk7CiAgICAg
ICAgIFVTdHJpbmcgc3RyOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBjb252ZXJzaW9uRnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRh
KTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKEV4CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEo
KSwgc3RyQnVmZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFs
dWUqIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3Rv
RnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1Zh
bHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKQEAgLTI0MSw3ICsyNDEsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7
CisgICAgICAgIEpTVmFsdWVQdHIgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApAQCAtMjYwLDExICsyNjAsMTEgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNKb2lu
KEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0ckJ1ZmZl
ci5kYXRhKCksIHN0ckJ1ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOwogfQog
Ci1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBh
cnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNBcnJheSogYXJyID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjKTsKICAgICBpbnQgbiA9IDA7Ci0gICAgSlNWYWx1ZSog
Y3VyQXJnID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CisgICAgSlNWYWx1ZVB0ciBj
dXJBcmcgPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKICAgICBBcmdMaXN0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBhcmdzLmVuZCgpOwogICAgIHdoaWxlICgxKSB7CkBAIC0yNzIsNyArMjcyLDcgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKgogICAgICAgICAgICAgSlNB
cnJheSogY3VyQXJyYXkgPSBhc0FycmF5KGN1ckFyZyk7CiAgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBjdXJBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSogdiA9
IGdldFByb3BlcnR5KGV4ZWMsIGN1ckFycmF5LCBrKSkKKyAgICAgICAgICAgICAgICBpZiAoSlNW
YWx1ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgY3VyQXJyYXksIGspKQogICAgICAgICAgICAg
ICAgICAgICBhcnItPnB1dChleGVjLCBuLCB2KTsKICAgICAgICAgICAgICAgICBuKys7CiAgICAg
ICAgICAgICB9CkBAIC0yODksMTMgKzI4OSwxMyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0Nv
bmNhdChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGFycjsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmlzSlNBcnJheSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoKTsKIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhl
Yyk7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRo
aXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0
aCkpOwpAQCAtMzA4LDcgKzMwOCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNT
dGF0ZSogZXgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y1B1c2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+aXNKU0FycmF5KHRoaXNWYWx1
ZSkgJiYgYXJncy5zaXplKCkgPT0gMSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJy
YXkodGhpc1ZhbHVlKTsKQEAgLTMyNSw3ICszMjUsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y1B1c2goRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCk7CiB9
CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYXJy
YXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlz
T2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4
ZWMpOwpAQCAtMzMzLDggKzMzMyw4IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShF
eGVjU3RhdGUKIAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBtaWRkbGU7IGsrKykgewog
ICAgICAgICB1bnNpZ25lZCBsazEgPSBsZW5ndGggLSBrIC0gMTsKLSAgICAgICAgSlNWYWx1ZSog
b2JqMiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGxrMSk7Ci0gICAgICAgIEpTVmFsdWUq
IG9iaiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspOworICAgICAgICBKU1ZhbHVlUHRy
IG9iajIgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBsazEpOworICAgICAgICBKU1ZhbHVl
UHRyIG9iaiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspOwogCiAgICAgICAgIGlmIChv
YmoyKQogICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGssIG9iajIpOwpAQCAtMzQ5LDEw
ICszNDksMTAgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZQogICAg
IHJldHVybiB0aGlzT2JqOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKLSAgICBKU1ZhbHVl
KiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUlu
dDMyKGV4ZWMpOwogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMzYxLDcgKzM2MSw3IEBAIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiAKICAgICB9IGVsc2UgewogICAg
ICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgMCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgayA9IDE7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIG9i
aiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQorICAgICAgICAgICAgaWYgKEpTVmFs
dWVQdHIgb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaykpCiAgICAgICAgICAgICAg
ICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgLSAxLCBvYmopOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsgLSAxKTsKQEAgLTM3
Miw3ICszNzIsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xp
ZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogCkBAIC0zODAsNyArMzgw
LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIAogCiAgICAgLy8g
V2UgcmV0dXJuIGEgbmV3IGFycmF5CiAgICAgSlNBcnJheSogcmVzT2JqID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSByZXNPYmo7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSByZXNPYmo7CiAgICAgZG91YmxlIGJlZ2luID0gYXJncy5hdChleGVjLCAw
KS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAg
aWYgKGJlZ2luID49IDApIHsKQEAgLTQxMCwxOCArNDEwLDE4IEBAIEpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jU2xpY2UoRXhlY1N0YXRlKiAKICAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4oYmVn
aW4pOwogICAgIGludCBlID0gc3RhdGljX2Nhc3Q8aW50PihlbmQpOwogICAgIGZvciAoaW50IGsg
PSBiOyBrIDwgZTsgaysrLCBuKyspIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBrKSkKKyAgICAgICAgaWYgKEpTVmFsdWVQdHIgdiA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQogICAgICAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywg
biwgdik7CiAgICAgfQogICAgIHJlc09iai0+c2V0TGVuZ3RoKG4pOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBm
dW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFy
Z3MuYXQoZXhlYywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogCkBAIC00NDEsMTEgKzQ0
MSwxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBlCiAgICAgLy8g
Ik1pbiIgc29ydC4gTm90IHRoZSBmYXN0ZXN0LCBidXQgZGVmaW5pdGVseSBsZXNzIGNvZGUgdGhh
biBoZWFwc29ydAogICAgIC8vIG9yIHF1aWNrc29ydCwgYW5kIG11Y2ggbGVzcyBzd2FwcGluZyB0
aGFuIGJ1YmJsZXNvcnQvaW5zZXJ0aW9uc29ydC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUqIGlPYmogPSB0aGlzT2JqLT5n
ZXQoZXhlYywgaSk7CisgICAgICAgIEpTVmFsdWVQdHIgaU9iaiA9IHRoaXNPYmotPmdldChleGVj
LCBpKTsKICAgICAgICAgdW5zaWduZWQgdGhlbWluID0gaTsKLSAgICAgICAgSlNWYWx1ZSogbWlu
T2JqID0gaU9iajsKKyAgICAgICAgSlNWYWx1ZVB0ciBtaW5PYmogPSBpT2JqOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IGxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiBqT2JqID0gdGhpc09iai0+Z2V0KGV4ZWMsIGopOworICAgICAgICAgICAgSlNWYWx1
ZVB0ciBqT2JqID0gdGhpc09iai0+Z2V0KGV4ZWMsIGopOwogICAgICAgICAgICAgZG91YmxlIGNv
bXBhcmVSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoak9iai0+aXNVbmRlZmluZWQoKSkKICAgICAg
ICAgICAgICAgICBjb21wYXJlUmVzdWx0ID0gMTsgLy8gZG9uJ3QgY2hlY2sgbWluT2JqIGJlY2F1
c2UgdGhlcmUncyBubyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgPT0gKDApIGZyb20gPiAoMSkKQEAg
LTQ3MywxMyArNDczLDEzIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUq
IGUKICAgICByZXR1cm4gdGhpc09iajsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxp
Y2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3Qo
ZXhlYyk7CiAKICAgICAvLyAxNS40LjQuMTIKICAgICBKU0FycmF5KiByZXNPYmogPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlc09iajsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IHJlc09iajsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMp
OwogICAgIGlmICghYXJncy5zaXplKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpA
QCAtNDk2LDcgKzQ5Niw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0
ZSoKICAgICAgICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdpbjsKIAogICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVl
KiB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKSkKKyAgICAgICAgaWYg
KEpTVmFsdWVQdHIgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbikpCiAg
ICAgICAgICAgICByZXNPYmotPnB1dChleGVjLCBrLCB2KTsKICAgICB9CiAgICAgcmVzT2JqLT5z
ZXRMZW5ndGgoZGVsZXRlQ291bnQpOwpAQCAtNTA1LDcgKzUwNSw3IEBAIEpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgIT0gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmdzIDwgZGVsZXRlQ291bnQpIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGJlZ2luOyBrIDwgbGVuZ3RoIC0gZGVsZXRl
Q291bnQ7ICsraykgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0UHJvcGVy
dHkoZXhlYywgdGhpc09iaiwgayArIGRlbGV0ZUNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAo
SlNWYWx1ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGRlbGV0ZUNvdW50
KSkKICAgICAgICAgICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgKyBhZGRpdGlvbmFs
QXJncywgdik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0aGlz
T2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrICsgYWRkaXRpb25hbEFyZ3MpOwpAQCAtNTE0LDcg
KzUxNCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICAg
ICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrIC0gMSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5ndGggLSBkZWxldGVD
b3VudDsgKGludClrID4gYmVnaW47IC0taykgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVl
KiBvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgZGVsZXRlQ291bnQgLSAxKSkK
KyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZVB0ciBvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0
aGlzT2JqLCBrICsgZGVsZXRlQ291bnQgLSAxKSkKICAgICAgICAgICAgICAgICAgICAgdGhpc09i
ai0+cHV0KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJncyAtIDEsIG9iaik7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVj
LCBrICsgYWRkaXRpb25hbEFyZ3MgLSAxKTsKQEAgLTUyOCw3ICs1MjgsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIApAQCAtNTM3LDcgKzUzNyw3IEBA
IEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBu
ckFyZ3MgPSBhcmdzLnNpemUoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgayA9IGxlbmd0aDsgayA+IDA7IC0taykgewotICAgICAgICAgICAgaWYgKEpTVmFsdWUq
IHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrIC0gMSkpCisgICAgICAgICAgICBpZiAo
SlNWYWx1ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayAtIDEpKQogICAgICAg
ICAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrICsgbnJBcmdzIC0gMSwgdik7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywg
ayArIG5yQXJncyAtIDEpOwpAQCAtNTQ1LDE2ICs1NDUsMTYgQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZQogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBr
IDwgbnJBcmdzOyArK2spCiAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrLCBhcmdzLmF0KGV4
ZWMsIGspKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBsZW5ndGggKyBu
ckFyZ3MpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgbGVuZ3RoICsg
bnJBcmdzKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jRmlsdGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdz
LmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDAp
OwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rp
b24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKQpAQCAtNTcxLDcgKzU3MSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4
ZWNTdGF0ZSoKICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywg
c2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gc2xv
dC5nZXRWYWx1ZShleGVjLCBrKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBrKTsKIAogICAgICAgICBBcmdMaXN0IGVhY2hBcmd1bWVudHM7CiAKQEAgLTU3OSw3
ICs1NzksNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqCiAgICAg
ICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAgZWFj
aEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hB
cmd1bWVudHMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKIAogICAg
ICAgICBpZiAocmVzdWx0LT50b0Jvb2xlYW4oZXhlYykpCiAgICAgICAgICAgICByZXN1bHRBcnJh
eS0+cHV0KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwpAQCAtNTg3LDExICs1ODcsMTEgQEAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKgogICAgIHJldHVybiByZXN1bHRB
cnJheTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBm
dW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFy
Z3MuYXQoZXhlYywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC02MDgsNyArNjA4LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5
U2xvdChleGVjLCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpT
VmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOwogCiAgICAgICAgIEFyZ0xpc3QgZWFjaEFyZ3VtZW50
czsKIApAQCAtNjE2LDcgKzYxNiw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykp
OwogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFw
cGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1
bWVudHMpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0KGV4ZWMsIGssIHJlc3VsdCk7CiAgICAg
fQogCkBAIC02MjgsMTEgKzYyOCwxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVj
U3RhdGUqIGV4CiAvLyBodHRwOi8vZGV2ZWxvcGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9D
b3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZTpPYmplY3RzOkFycmF5OmZvckVhY2gKIC8vIGh0
dHA6Ly9kZXZlbG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8x
LjVfUmVmZXJlbmNlOk9iamVjdHM6QXJyYXk6c29tZQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y0V2ZXJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmpl
Y3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7Cisg
ICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEo
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC02NDAsNyAr
NjQwLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVjU3RhdGUqIAogCiAgICAg
SlNPYmplY3QqIGFwcGx5VGhpcyA9IGFyZ3MuYXQoZXhlYywgMSktPmlzVW5kZWZpbmVkT3JOdWxs
KCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoZXhlYywgMSktPnRvT2JqZWN0
KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKHRydWUpOworICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKHRydWUpOwogCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJ
bnQzMihleGVjKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVj
LT5oYWRFeGNlcHRpb24oKTsgKytrKSB7CkBAIC02NjYsMTEgKzY2NiwxMSBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0
aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5h
dChleGVjLCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSkKQEAgLTY5NCwxMSArNjk0LDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jRm9yRWFjaChFeGVjU3RhdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJv
dG9GdW5jU29tZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJn
cy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAw
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkKQEAgLTcwNiw3ICs3MDYsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvbWUoRXhl
Y1N0YXRlKiBlCiAKICAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdChleGVjLCAxKS0+
aXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdChl
eGVjLCAxKS0+dG9PYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xl
YW4oZmFsc2UpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewpAQCAtNzI5LDcgKzcy
OSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICAvLyBKYXZhU2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50
YXRpb246IGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3Jp
cHRfMS41X1JlZmVyZW5jZTpHbG9iYWxfT2JqZWN0czpBcnJheTppbmRleE9mCkBAIC03NDgsOSAr
NzQ4LDkgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZQogICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZCk7CiAgICAgfQogCi0gICAgSlNW
YWx1ZSogc2VhcmNoRWxlbWVudCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBz
ZWFyY2hFbGVtZW50ID0gYXJncy5hdChleGVjLCAwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5n
dGg7ICsraW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRo
aXNPYmosIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBlID0gZ2V0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgaW5kZXgpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgaWYgKHN0cmljdEVxdWFsKHNlYXJjaEVsZW1lbnQsIGUpKQpAQCAtNzYwLDcgKzc2
MCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgLTEpOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0xhc3RJ
bmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2Yo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIC8vIEphdmFTY3JpcHQgMS42IEV4dGVuc2lvbiBieSBNb3pp
bGxhCiAgICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5
Omxhc3RJbmRleE9mCkBAIC03NzksOSArNzc5LDkgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNM
YXN0SW5kZXhPZihFeGVjUwogICAgIGlmIChkIDwgbGVuZ3RoKQogICAgICAgICBpbmRleCA9IHN0
YXRpY19jYXN0PGludD4oZCk7CiAKLSAgICBKU1ZhbHVlKiBzZWFyY2hFbGVtZW50ID0gYXJncy5h
dChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHNlYXJjaEVsZW1lbnQgPSBhcmdzLmF0KGV4ZWMs
IDApOwogICAgIGZvciAoOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7Ci0gICAgICAgIEpTVmFsdWUq
IGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVQ
dHIgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYgKCFl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHJpY3RFcXVhbChzZWFyY2hF
bGVtZW50LCBlKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIENv
bnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIH0KIAogLy8gRUNNQSAxNS42
LjEKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1Zh
bHVlUHRyIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVh
bihhcmdzLmF0KGV4ZWMsIDApLT50b0Jvb2xlYW4oZXhlYykpOwogfQpAQCAtNjgsNyArNjgsNyBA
QCBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAgICAgcmV0dXJuIENh
bGxUeXBlSG9zdDsKIH0KIAotSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRl
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkK
K0pTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUHRyIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKICAgICBCb29sZWFu
T2JqZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJu
YWxWYWx1ZShpbW1lZGlhdGVCb29sZWFuVmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoQ2FsbERhdGEmKTsKICAgICB9OwogCi0gICAgSlNPYmplY3QqIGNvbnN0cnVjdEJv
b2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqLCBKU1ZhbHVlKik7CisgICAgSlNP
YmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqLCBK
U1ZhbHVlUHRyKTsKICAgICBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqLCBj
b25zdCBBcmdMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
ICAgICB9OwogCi0gICAgQm9vbGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUqKTsK
KyAgICBCb29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZVB0cik7CiAKLSAgICBp
bmxpbmUgQm9vbGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBCb29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZCb29sZWFu
T2JqZWN0OjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0
Kj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChCb29sZWFuUHJvdG90
eXBlKTsKIAogLy8gRnVuY3Rpb25zCi1zdGF0aWMgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBib29s
ZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBib29sZWFuUHJvdG9GdW5jVmFsdWVP
ZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAog
Ly8gRUNNQSAxNS42LjQKIApAQCAtNTAsNyArNTAsNyBAQCBCb29sZWFuUHJvdG90eXBlOjpCb29s
ZWFuUHJvdG90eXBlKEV4ZWNTCiAKIC8vIEVDTUEgMTUuNi40LjIgKyAxNS42LjQuMwogCi1KU1Zh
bHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGJvb2xlYW5Q
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICh0aGlzVmFsdWUgPT0ganNCb29s
ZWFuKGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZmFs
c2UiKTsKQEAgLTY4LDcgKzY4LDcgQEAgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInRydWUiKTsKIH0K
IAotSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGJv
b2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjpp
c0Jvb2xlYW4odGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0
YSYgY2FsbERhdGEsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgZnVuY3Rpb25PYmplY3Qs
IENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZUhvc3QpCiAgICAgICAgIHJldHVybiBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhl
YywgYXNPYmplY3QoZnVuY3Rpb25PYmplY3QpLCB0aGlzVmFsdWUsIGFyZ3MpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FsbERhdGEuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMyBAQAog
I2lmbmRlZiBDYWxsRGF0YV9oCiAjZGVmaW5lIENhbGxEYXRhX2gKIAotI2luY2x1ZGUgIkpTSW1t
ZWRpYXRlLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJnTGlzdDsKICAgICBj
bGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAgICBjbGFzcyBK
U09iamVjdDsKKyAgICBjbGFzcyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2Rl
OwogCiAgICAgZW51bSBDYWxsVHlwZSB7CkBAIC00NSw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBDYWxsVHlwZUpTCiAgICAgfTsKIAotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpO
YXRpdmVGdW5jdGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQdHIgKCpOYXRpdmVGdW5jdGlv
bikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwogCiAgICAgdW5pb24gQ2FsbERhdGEgewogICAgICAgICBzdHJ1Y3QgewpAQCAtNTcs
NyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfSBqczsKICAgICB9OwogCi0gICAg
SlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
CisgICAgSlNWYWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgZnVuY3Rpb25PYmpl
Y3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2xsZWN0b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDcgKzgwMyw3IEBAIHZv
aWQgSGVhcDo6c2V0R0NQcm90ZWN0TmVlZHNMb2NraW5nKCkKICAgICAgICAgbV9wcm90ZWN0ZWRW
YWx1ZXNNdXRleC5zZXQobmV3IE11dGV4KTsKIH0KIAotdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFs
dWUqIGspCit2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZVB0ciBrKQogewogICAgIEFTU0VSVChr
KTsKICAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFt
X2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UpOwpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQg
SGVhcDo6cHJvdGVjdChKU1ZhbHVlKiBrKQogICAgICAgICBtX3Byb3RlY3RlZFZhbHVlc011dGV4
LT51bmxvY2soKTsKIH0KIAotdm9pZCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSogaykKK3ZvaWQg
SGVhcDo6dW5wcm90ZWN0KEpTVmFsdWVQdHIgaykKIHsKICAgICBBU1NFUlQoayk7CiAgICAgQVNT
RVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRh
LT5pc1NoYXJlZEluc3RhbmNlKTsKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEhlYXA6OnVucHJv
dGVjdChKU1ZhbHVlKiBrKQogICAgICAgICBtX3Byb3RlY3RlZFZhbHVlc011dGV4LT51bmxvY2so
KTsKIH0KIAotSGVhcCogSGVhcDo6aGVhcChKU1ZhbHVlKiB2KQorSGVhcCogSGVhcDo6aGVhcChK
U1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSkKICAg
ICAgICAgcmV0dXJuIDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgJKHJldmlz
aW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBDb2xsZWN0b3JfaAogI2RlZmluZSBD
b2xsZWN0b3JfaAogCi0jaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKICNpbmNsdWRlIDxzdGRkZWYu
aD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
QEAgLTQ0LDYgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29sbGVjdG9yQmxv
Y2s7CiAgICAgY2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFz
cyBKU1ZhbHVlUHRyOwogCiAgICAgZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRp
b24sIEFsbG9jYXRpb24sIENvbGxlY3Rpb24gfTsKICAgICBlbnVtIEhlYXBUeXBlIHsgUHJpbWFy
eUhlYXAsIE51bWJlckhlYXAgfTsKQEAgLTk2LDEwICs5NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgU3RhdGlzdGljcyBzdGF0aXN0aWNzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBz
ZXRHQ1Byb3RlY3ROZWVkc0xvY2tpbmcoKTsKLSAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUq
KTsKLSAgICAgICAgdm9pZCB1bnByb3RlY3QoSlNWYWx1ZSopOworICAgICAgICB2b2lkIHByb3Rl
Y3QoSlNWYWx1ZVB0cik7CisgICAgICAgIHZvaWQgdW5wcm90ZWN0KEpTVmFsdWVQdHIpOwogCi0g
ICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKEpTVmFsdWUqKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZh
bHVlcworICAgICAgICBzdGF0aWMgSGVhcCogaGVhcChKU1ZhbHVlUHRyKTsgLy8gMCBmb3IgaW1t
ZWRpYXRlIHZhbHVlcwogCiAgICAgICAgIHNpemVfdCBnbG9iYWxPYmplY3RDb3VudCgpOwogICAg
ICAgICBzaXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIENv
bXBsZXRpb24gY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gQ29tcGxl
dGlvbihOb3JtYWwpOwogfQogCi1Db21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVl
KiB0aGlzVmFsdWUpCitDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbiYgc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSkKIHsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICAKQEAgLTYzLDggKzYzLDgg
QEAgQ29tcGxldGlvbiBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjbwogCiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSAoIXRoaXNWYWx1ZSB8fCB0aGlzVmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxs
KCkpID8gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpIDogdGhpc1ZhbHVlLT50b09iamVjdChl
eGVjKTsKIAotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgp
LCBleGVjLCBzY29wZUNoYWluLm5vZGUoKSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CisgICAgSlNW
YWx1ZVB0ciBleGNlcHRpb24gPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBl
eGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBzY29w
ZUNoYWluLm5vZGUoKSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9u
KSB7CiAgICAgICAgIGlmIChleGNlcHRpb24tPmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0
aW9uKS0+aXNXYXRjaGRvZ0V4Y2VwdGlvbigpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgKi8KICAgICBjbGFzcyBDb21wbGV0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IENvbXBsZXRpb24oQ29tcGxUeXBlIHR5cGUgPSBOb3JtYWwsIEpTVmFsdWUqIHZhbHVlID0gbm9W
YWx1ZSgpKQorICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBlID0gTm9ybWFsLCBKU1Zh
bHVlUHRyIHZhbHVlID0gbm9WYWx1ZSgpKQogICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAg
ICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgQ29tcGxUeXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAg
ICBKU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAgICAgdm9p
ZCBzZXRWYWx1ZShKU1ZhbHVlKiB2KSB7IG1fdmFsdWUgPSB2OyB9Ci0gICAgICAgIGJvb2wgaXNW
YWx1ZUNvbXBsZXRpb24oKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAgICAgSlNW
YWx1ZVB0ciB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgdm9pZCBz
ZXRWYWx1ZShKU1ZhbHVlUHRyIHYpIHsgbV92YWx1ZSA9IHY7IH0KKyAgICAgICAgYm9vbCBpc1Zh
bHVlQ29tcGxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIENvbXBsVHlwZSBtX3R5cGU7Ci0gICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7Cisg
ICAgICAgIEpTVmFsdWVQdHIgbV92YWx1ZTsKICAgICB9OwogCiAgICAgQ29tcGxldGlvbiBjaGVj
a1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7Ci0gICAgQ29tcGxldGlvbiBl
dmFsdWF0ZShFeGVjU3RhdGUqLCBTY29wZUNoYWluJiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFs
dWUqIHRoaXNWYWx1ZSA9IG5vVmFsdWUoKSk7CisgICAgQ29tcGxldGlvbiBldmFsdWF0ZShFeGVj
U3RhdGUqLCBTY29wZUNoYWluJiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlID0gbm9WYWx1ZSgpKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU09iamVjdCogY29uc3RydWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogb2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5
cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBvYmpl
Y3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KG9iamVjdCksIGFyZ3MpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0
ICsyOSwxMyBAQAogI2lmbmRlZiBDb25zdHJ1Y3REYXRhX2gKICNkZWZpbmUgQ29uc3RydWN0RGF0
YV9oCiAKLSNpbmNsdWRlICJKU0ltbWVkaWF0ZS5oIiAvLyB0ZW1wb3JhcnkgdW50aWwgSlNWYWx1
ZSogYmVjb21lcyBhIGNsYXNzIHdlIGNhbiBmb3J3YXJkLWRlY2xhcmUKLQogbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBBcmdMaXN0OwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFz
cyBGdW5jdGlvbkJvZHlOb2RlOwogICAgIGNsYXNzIEpTT2JqZWN0OworICAgIGNsYXNzIEpTVmFs
dWVQdHI7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBlbnVtIENvbnN0cnVjdFR5
cGUgewpAQCAtNTcsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfSBqczsKICAg
ICB9OwogCi0gICAgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBjb25z
dHJ1Y3RvciwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xp
c3QmKTsKKyAgICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgY29u
c3RydWN0b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdM
aXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSAr
NDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRl
Q29uc3RydWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRl
Tm93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVOb3coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIERhdGVQcm90b3R5cGUqIGRhdGVQ
cm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBkYXRlUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lKSkKQEAgLTc2LDcgKzc2LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiBleGVjLAogICAgICAgICBpZiAoYXJncy5hdChleGVjLCAwKS0+aXNPYmplY3QoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgICAgICB2YWx1ZSA9IGFzRGF0ZUluc3RhbmNlKGFyZ3Mu
YXQoZXhlYywgMCkpLT5pbnRlcm5hbE51bWJlcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvUHJpbWl0aXZlKGV4
ZWMpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSBhcmdzLmF0KGV4ZWMsIDAp
LT50b1ByaW1pdGl2ZShleGVjKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmUtPmlzU3RyaW5n
KCkpCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZURhdGUocHJpbWl0aXZlLT5nZXRTdHJp
bmcoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMjMsNyArMTIzLDcgQEAgQ29uc3RydWN0VHlw
ZSBEYXRlQ29uc3RydWN0b3I6OmdldENvbnN0cgogfQogCiAvLyBFQ01BIDE1LjkuMgotc3RhdGlj
IEpTVmFsdWUqIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsRGF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgdGltZV90
IGxvY2FsVGltZSA9IHRpbWUoMCk7CiAgICAgdG0gbG9jYWxUTTsKQEAgLTEzOCwxNyArMTM4LDE3
IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2EKICAgICByZXR1cm4g
Q2FsbFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBK
U1ZhbHVlUHRyIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFy
c2VEYXRlKGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpCitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgZ2V0Q3VycmVudFVUQ1RpbWUoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlVVRDKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVVVEMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaW50IG4gPSBh
cmdzLnNpemUoKTsKICAgICBpZiAoaXNuYW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhl
YykpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsOSArNTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbXV0YWJsZSBD
YWNoZSogbV9jYWNoZTsKICAgICB9OwogCi0gICAgRGF0ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5j
ZShKU1ZhbHVlKik7CisgICAgRGF0ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlUHRy
KTsKIAotICAgIGlubGluZSBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUqIHZh
bHVlKQorICAgIGlubGluZSBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWVQdHIg
dmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5z
dGFuY2UqPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDUwICs1OCw1MCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRlUHJvdG90eXBl
KTsKIAotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxp
U2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpv
bmVPZmZzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jR2V0VVRDRGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y0dldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRN
aWxsaVNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVU
Q0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlz
ZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25k
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNU
b0RhdGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1Rv
TG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1Rp
bWVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dl
dEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5j
R2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY0dldFVUQ0RheShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0
VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY0dldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNT
ZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNTZXRNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0
VVRDRGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTWlu
dXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1Nl
dFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1Rv
TG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBkYXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9U
aW1lU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIH0KIApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgRGF0
ZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEUKIAogLy8gRnVuY3Rpb25zCiAKLUpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRl
SW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwpAQCAtMzc2LDcgKzM3Niw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUKICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUo
dCkgKyAiICIgKyBmb3JtYXRUaW1lKHQsIHV0YykpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNl
OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAg
LTM5Myw3ICszOTMsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0
CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRDVmFyaWFu
dCh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0RhdGVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CkBAIC00MTAsNyArNDEwLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhF
eGVjUwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0KSk7
CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC00MjcsNyArNDI3LDcgQEAgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjUwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgZm9ybWF0VGltZSh0LCB1dGMpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwpAQCAtNDUxLDcgKzQ1MSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyhFeGUKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2Nh
bGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZURhdGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9M
b2NhbGVEYXRlU3RyaW5nCiAjZW5kaWYKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9j
YWxlVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9Mb2Nh
bGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CkBAIC00OTksNyArNDk5LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1Rv
TG9jYWxlVGltZVN0cmluZwogI2VuZGlmCiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNWYWx1
ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTUxMiw3ICs1MTIsNyBA
QCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIG1pbGxpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFRpbWUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
aWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTI1LDcgKzUyNSw3IEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgbWlsbGkpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTU0Miw3ICs1NDIsNyBA
QCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0CiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxs
WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3Rh
bmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
QEAgLTU1OSw3ICs1NTksNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIo
RXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCi1KU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90
b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9H
TVRTdHJpbmcoRXhlY1N0CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3Jt
YXREYXRlVVRDVmFyaWFudCh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtNTkzLDcgKzU5Myw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250
aChFeGVjU3RhdGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwpAQCAtNjEwLDcgKzYxMCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENNb250aChFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKQEAgLTYyNyw3ICs2MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0
RGF0ZShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOwog
fQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+
aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CkBAIC02NDQsNyArNjQ0LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY0dldFVUQ0RhdGUoRXhlY1N0YQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRo
RGF5KTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5p
c09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKQEAgLTY2MSw3ICs2NjEsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jR2V0RGF5KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQud2Vla0Rh
eSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1
ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC02NzgsNyArNjc4LDcgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lndl
ZWtEYXkpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1Zh
bHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBKU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQu
aG91cik7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0
aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzEyLDcgKzcxMiw3IEBAIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgdC5ob3VyKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYg
KCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzI5LDcgKzcyOSw3IEBAIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGEKICAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgdC5taW51dGUpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
IHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03NDYsNyArNzQ2
LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlYwogICAgIHJldHVy
biBqc051bWJlcihleGVjLCB0Lm1pbnV0ZSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTc2Myw3
ICs3NjMsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhCiAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuc2Vjb25kKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENT
ZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtNzgwLDcgKzc4MCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRz
KEV4ZWMKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5zZWNvbmQpOwogfQogCi1KU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlz
T2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNHZXRNaWxsaVNlY29uZHMoRXgKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYg
KCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtODEwLDcgKzgxMCw3IEBAIEpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMKICAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgbXMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTgyNyw3ICs4
MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoCiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIC1nbXRvZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CiB9CiAK
LUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+
aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CkBAIC04MzUsMTIgKzgzNSwxMiBAQCBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jU2V0VGltZShFeGVjU3RhdGUqCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9
IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCiAgICAgZG91YmxlIG1pbGxpID0gdGltZUNs
aXAoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpOwotICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzTnVtYmVyKGV4ZWMsIG1pbGxpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIG1pbGxpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1
bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1
ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGlj
IEpTVmFsdWVQdHIgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwg
Ym9vbCBpbnB1dElzVVRDKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTg0OSw3ICs4NDksNyBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGlt
ZUFyZ3MoCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7
CiAgICAgCiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpIHx8IGlzbmFuKG1pbGxpKSkgewotICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUo
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC04NjEsMjQgKzg2MSwy
NCBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgdGhpc0Rh
dGVPYmotPm1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7CiAKICAg
ICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9V
c2UsICZtcywgJnQpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0
ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0gCiAgICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29y
aWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0SXNV
VEMpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRlQXJn
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWVQdHIg
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElz
VVRDKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERh
dGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOwogICAg
IGlmIChhcmdzLmlzRW1wdHkoKSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihl
eGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAg
dGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9ICAgICAgCkBAIC04OTgsMTAxICs4OTgsMTAxIEBAIHN0YXRpYyBKU1ZhbHVl
KiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncygKICAgICB9CiAgICAgCiAgICAgaWYgKCFmaWxsU3Ry
dWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KSkg
ewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVy
bmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9IAogICAgICAg
ICAgICAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRl
VGltZVRvTVModCwgbXMsIGlucHV0SXNVVEMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwog
ICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0
TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRD
KTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNV
VEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Y29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJv
bVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBi
b29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJn
cyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9G
dW5jU2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRD
ID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNW
YWx1ZSwgYXJncywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNT
ZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENN
aW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVl
OwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFy
Z3MsIDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0SG91cnMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0
TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1dElzVVRD
KTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Y29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9t
VGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKIH0KIAotSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VU
QyA9IGZhbHNlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlz
VmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
U2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKICAg
ICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAx
LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0
IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVB
cmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJ
c1VUQyA9IGZhbHNlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1Nl
dFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMg
PSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFs
dWUsIGFyZ3MsIDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0
WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtMTAw
MSw3ICsxMDAxLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgog
CiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1
ZSk7ICAgICAKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsgCi0gICAgICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTmFOKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4
ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTEwMjMsMTggKzEwMjMsMTggQEAgSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIGludDMyX3QgeWVhciA9IGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhlYywgb2spOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oZXhlYyk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRl
T2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgICAgICAgICAgCiAgICAgdC55ZWFyID0gKHllYXIgPiA5OSB8fCB5ZWFyIDwgMCkg
PyB5ZWFyIC0gMTkwMCA6IHllYXI7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhl
YywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMpKTsKKyAgICBKU1ZhbHVlUHRyIHJl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7
CiAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1
ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
KSk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIENvbnN0
cnVjdFR5cGUgRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3QKIH0KIAogLy8gRUNNQSAxNS45LjIK
LXN0YXRpYyBKU1ZhbHVlKiBjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0
ciBjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyAiRXJyb3IoKSIgZ2l2ZXMgdGhl
IHNhbWVzIHJlc3VsdCBhcyAibmV3IEVycm9yKCkiCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVycm9y
KGV4ZWMsIGFyZ3MpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRXJyb3JQcm90b3R5cGUpOwogCi1zdGF0
aWMgSlNWYWx1ZSogZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBlcnJvclByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOwogCiAvLyBFQ01BIDE1LjkuNAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0
dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKQEAgLTQ0LDEzICs0NCwxMyBAQCBFcnJv
clByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlCiAgICAgcHV0RGlyZWN0RnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dG9TdHJpbmcsIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKLUpTVmFs
dWUqIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGVycm9yUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1
ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCiAgICAgVVN0cmluZyBzID0gIkVycm9yIjsKIAotICAg
IEpTVmFsdWUqIHYgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUpOworICAgIEpTVmFsdWVQdHIgdiA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubmFtZSk7CiAgICAgaWYgKCF2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzID0g
di0+dG9TdHJpbmcoZXhlYyk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzNiArNTgsMzYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1dhdGNoZG9nRXhjZXB0aW9uKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogfTsKIAotSlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRp
b25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSlNWYWx1ZVB0ciBjcmVhdGVJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7
CiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihn
bG9iYWxEYXRhKTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBF
cnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnKQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgcmV0dXJu
IEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbXNnLCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBj
cmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cs
IGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXIm
IGxhYmVsKQogewogICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKICAgICBzdWJzdGl0dXRlKG1l
c3NhZ2UsIGxhYmVsLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywg
ZSwgbWVzc2FnZSwgLTEsIC0xLCAwKTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2KQorSlNW
YWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBj
aGFyKiBtc2csIEpTVmFsdWVQdHIgdikKIHsKICAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CiAg
ICAgc3Vic3RpdHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7CiAgICAgcmV0dXJuIEVy
cm9yOjpjcmVhdGUoZXhlYywgZSwgbWVzc2FnZSwgLTEsIC0xLCAwKTsKIH0KIAotSlNWYWx1ZSog
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWVQdHIgY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3Jl
YXRlRXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2Vl
ZGVkLiIpOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0pTVmFsdWVQdHIgY3JlYXRlVW5kZWZpbmVkVmFy
aWFibGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gMDsKICAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKQEAgLTEwNCw3ICsxMDQsNyBA
QCBKU1ZhbHVlKiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4CiAgICAgCiBib29sIGlz
U3RyV2hpdGVTcGFjZShVQ2hhciBjKTsKIAotc3RhdGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNz
YWdlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgaW50IGV4cHJl
c3Npb25TdGFydCwgaW50IGV4cHJlc3Npb25TdG9wLCBKU1ZhbHVlKiB2YWx1ZSwgVVN0cmluZyBl
cnJvcikKK3N0YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBpbnQsIGludCBleHByZXNzaW9uU3RhcnQsIGludCBleHBy
ZXNzaW9uU3RvcCwgSlNWYWx1ZVB0ciB2YWx1ZSwgVVN0cmluZyBlcnJvcikKIHsKICAgICBpZiAo
IWV4cHJlc3Npb25TdG9wIHx8IGV4cHJlc3Npb25TdGFydCA+IGNvZGVCbG9jay0+c291cmNlKCkt
Pmxlbmd0aCgpKSB7CiAgICAgICAgIFVTdHJpbmcgZXJyb3JUZXh0ID0gdmFsdWUtPnRvU3RyaW5n
KGV4ZWMpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHN0YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVz
c2FnZShFeGVjU3QKICAgICByZXR1cm4gZXJyb3JUZXh0OwogfQogCi1KU09iamVjdCogY3JlYXRl
SW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1
ZSogdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K0pTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIG9wLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgVVN0cmluZyBtZXNzYWdlID0gIm5vdCBhIHZhbGlk
IGFyZ3VtZW50IGZvciAnIjsKICAgICBtZXNzYWdlLmFwcGVuZChvcCk7CkBAIC0xNjYsNyArMTY2
LDcgQEAgSlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdAogICAgIHJldHVy
biBleGNlcHRpb247CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCitKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsK
ICAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKQEAgLTE4Nyw3ICsxODcsNyBAQCBKU09iamVjdCogY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlCiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAot
SlNWYWx1ZSogY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQor
SlNWYWx1ZVB0ciBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWVQdHIgdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwogICAgIGludCBlbmRPZmZzZXQgPSAwOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNOb3RBbk9iamVjdEVycm9yU3R1YjsKICAgICBj
bGFzcyBKU09iamVjdDsKKyAgICBjbGFzcyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIE5vZGU7CiAK
LSAgICBKU1ZhbHVlKiBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2Jh
bERhdGEqKTsKLSAgICBKU1ZhbHVlKiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
Kik7Ci0gICAgSlNWYWx1ZSogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayop
OworICAgIEpTVmFsdWVQdHIgY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNH
bG9iYWxEYXRhKik7CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhl
Y1N0YXRlKik7CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29k
ZUJsb2NrKik7CiAgICAgSlNOb3RBbk9iamVjdEVycm9yU3R1YiogY3JlYXRlTm90QW5PYmplY3RF
cnJvclN0dWIoRXhlY1N0YXRlKiwgYm9vbCBpc051bGwpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJ
bnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSosIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKLSAgICBKU09iamVjdCogY3JlYXRl
Tm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKLSAgICBKU1ZhbHVlKiBjcmVhdGVOb3RBRnVuY3Rpb25F
cnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVC
bG9jayopOworICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUq
LCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZVB0ciwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENv
ZGVCbG9jayopOworICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVj
U3RhdGUqLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7
CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlUHRyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CiAgICAgSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNOb3RBbk9iamVjdEVycm9y
U3R1YiosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBD
b25zdHJ1Y3RUeXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENvCiAgICAgcmV0dXJuIENvbnN0
cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbEZ1bmN0aW9uQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFyZ3MpOwogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoRnVuY3Rpb25Qcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiBGdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90
b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQog
ICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5udWxsSWRlbnRpZmllcikKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9p
ZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZQogICAgIHB1dERpcmVjdEZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCksIERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEpT
VmFsdWUqIGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0JikKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxGdW5jdGlvblByb3Rv
dHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKQog
ewogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtNjMsNyArNjMsNyBAQCBDYWxsVHlw
ZSBGdW5jdGlvblByb3RvdHlwZTo6Z2V0Q2FsbERhdGEoCiAKIC8vIEZ1bmN0aW9ucwogCi1KU1Zh
bHVlKiBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlv
blByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkpTRnVuY3Rpb246OmluZm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
YXNGdW5jdGlvbih0aGlzVmFsdWUpOwpAQCAtNzgsMTcgKzc4LDE3IEBAIEpTVmFsdWUqIGZ1bmN0
aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1MKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVl
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpT
VmFsdWUqIHRoaXNBcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGFyZ0FycmF5
ID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIHRoaXNBcmcgPSBhcmdzLmF0KGV4
ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYXJnQXJyYXkgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCi0g
ICAgSlNWYWx1ZSogYXBwbHlUaGlzOworICAgIEpTVmFsdWVQdHIgYXBwbHlUaGlzOwogICAgIGlm
ICh0aGlzQXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBhcHBseVRoaXMgPSBleGVj
LT5nbG9iYWxUaGlzVmFsdWUoKTsKICAgICBlbHNlCkBAIC0xMTMsMTQgKzExMywxNCBAQCBKU1Zh
bHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGNhbGwoZXhl
YywgdGhpc1ZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgYXBwbHlBcmdzKTsK
IH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFsdWUtPmdldENhbGxEYXRh
KGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogdGhpc0Fy
ZyA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB0aGlzQXJnID0gYXJncy5hdChl
eGVjLCAwKTsKIAogICAgIEpTT2JqZWN0KiBjYWxsVGhpczsKICAgICBpZiAodGhpc0FyZy0+aXNV
bmRlZmluZWRPck51bGwoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4pOwogICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKIAotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBw
cm90bykKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNWYWx1ZVB0ciBwcm90bykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBIYXNTdGFuZGFyZEdldE93
blByb3BlcnR5U2xvdCkpOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIHZv
aWQgR2V0dGVyU2V0dGVyOjptYXJrKCkKICAgICAgICAgbV9zZXR0ZXItPm1hcmsoKTsKIH0KIAot
SlNWYWx1ZSogR2V0dGVyU2V0dGVyOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1ib29sIEdldHRlclNl
dHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlKiYgdmFsdWUpCitib29sIEdldHRlclNldHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSkKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICBudW1iZXIgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dldHRlclNldHRlci5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzR2V0dGVyU2V0
dGVyKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSomIHZhbHVlKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
UHRyJiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkBA
IC02MSw5ICs2MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogbV9zZXR0
ZXI7ICAKICAgICB9OwogCi0gICAgR2V0dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVl
Kik7CisgICAgR2V0dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVlUHRyKTsKIAotICAg
IGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNHZXR0ZXJTZXR0ZXIoKSk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXIqPihhc0NlbGwodmFsdWUpKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVU
aHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAi
SlNJbW1lZGlhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJEYXRlTWF0
aC5oIgogI2luY2x1ZGUgImR0b2EuaCIKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZXJuYWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
ZXJuYWxGdW5jdGlvbi5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoSlNHbG9iYWxEYXRh
Kik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwg
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsg
CiAgICAgICAgIH0KQEAgLTUxLDkgKzUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKSA9IDA7CiAgICAgfTsKIAotICAg
IEludGVybmFsRnVuY3Rpb24qIGFzSW50ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKik7CisgICAgSW50
ZXJuYWxGdW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5s
aW5lIEludGVybmFsRnVuY3Rpb24qIGFzSW50ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKiB2YWx1ZSkK
KyAgICBpbmxpbmUgSW50ZXJuYWxGdW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWVQ
dHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0
cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW50ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCBib29sIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgaWYgKHN5
bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKEpTVmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5
TmFtZSkpIHsKKyAgICBpZiAoSlNWYWx1ZVB0ciogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlv
bihwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KGxvY2F0aW9uKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSlNB
Y3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgSlNBY3RpdmF0aW9uOjpwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBK
U0FjdGl2YXRpb246OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBKU0FjdGl2YXRpb246OnB1dChFeGVj
U3RhdGUqLCBjb25zdAogfQogCiAvLyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGhvbm9yIFJl
YWRPbmx5IChjb25zdCkgYW5kIERvbnRFbnVtCi12b2lkIEpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0
dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNBY3RpdmF0aW9uOjpwdXRX
aXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFI
ZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMp
KTsKIApAQCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjppc0R5bmFtaWNTY29w
ZSgpIGNvbnMKICAgICByZXR1cm4gZCgpLT5mdW5jdGlvbkJvZHktPnVzZXNFdmFsKCk7CiB9CiAK
LUpTVmFsdWUqIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
SlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IGFzQWN0aXZhdGlvbihzbG90LnNsb3RCYXNlKCkpOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSAr
NTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xv
dCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIEpTVmFsdWVQdHIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKIAogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhl
Y1N0YXRlKikgY29uc3Q7CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3Rv
KSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwg
TmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9u
KSk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDog
cHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsKQEAgLTc3LDE1ICs3NywxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJv
ZHk7CiAgICAgICAgIH07CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1l
bnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgTkVW
RVJfSU5MSU5FIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigp
OwogCiAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU0FjdGl2YXRpb25EYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0KICAgICB9Owog
Ci0gICAgSlNBY3RpdmF0aW9uKiBhc0FjdGl2YXRpb24oSlNWYWx1ZSopOworICAgIEpTQWN0aXZh
dGlvbiogYXNBY3RpdmF0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTQWN0aXZhdGlv
biogYXNBY3RpdmF0aW9uKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU0FjdGl2YXRpb24q
IGFzQWN0aXZhdGlvbihKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFz
T2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5
IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiAKIC8vIFRoZSBkZWZpbml0
aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZp
bml0aW9uIHN0b3JhZ2VTaXplCiAvLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBz
aXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihKU1ZhbHVlKikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoSlNWYWx1ZSop
KSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVf
dCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVl
KikpKSAvIHNpemVvZihKU1ZhbHVlKikpCisvLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVy
Zmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkgKworLy8g
KHZlY3Rvckxlbmd0aCAqIHNpemVvZihKU1ZhbHVlUHRyKSkgbXVzdCBiZSA8PSAweEZGRkZGRkZG
VSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgorI2RlZmluZSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6
ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpKSAvIHNpemVvZihKU1ZhbHVl
UHRyKSkKIAogLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4g
bWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKIC8vIGEgUElDIGJyYW5jaCBpbiBN
YWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCkBAIC05MCwxMCAr
OTAsMTAgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc3RvcmFnZVNpemUodW5zaWduZQogCiAgICAg
Ly8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRl
ZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgLy8gLSBh
cyBhc3NlcnRlZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJm
bG93LgotICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpT
VmFsdWUqKSkgKyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgc2l6ZV90
IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpICsgKHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihKU1ZhbHVlUHRyKSk7CiAgICAgLy8gQXNzZXJ0aW9uIHRvIGRl
dGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90
IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0CiAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2Yo
QXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKikpKSAvIHNpemVvZihKU1ZhbHVlKikgPT0g
dmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
SlNWYWx1ZSopKSkpOworICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkg
LSBzaXplb2YoSlNWYWx1ZVB0cikpKSAvIHNpemVvZihKU1ZhbHVlUHRyKSA9PSB2ZWN0b3JMZW5n
dGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRy
KSkpKTsKIAogICAgIHJldHVybiBzaXplOwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBAIEpTQXJyYXk6
OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHMKICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9y
TGVuZ3RoID0gaW5pdGlhbENhcGFjaXR5OwogICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0
aWFsTGVuZ3RoOwogCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KGluaXRpYWxDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKikpOworICAgIEhlYXA6OmhlYXAodGhp
cyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChpbml0aWFsQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1
ZVB0cikpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQpAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGEKICAgICB9CiAKICAgICBp
ZiAoaSA8IHN0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZVNsb3QpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMzQsNyArMjM0LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YQogfQogCiAvLyBFQ01BIDE1LjQuNS4xCi12b2lkIEpTQXJyYXk6OnB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYm9vbCBpc0FycmF5SW5kZXg7CiAgICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJmlzQXJyYXlJbmRleCk7CkBA
IC0yNTYsNyArMjU2LDcgQEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dAogICAgIEpTT2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9
CiAKLXZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSogdmFsdWUpCit2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC0yNjcs
NyArMjY3LDcgQEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAg
IH0KIAogICAgIGlmIChpIDwgbV9zdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBK
U1ZhbHVlKiYgdmFsdWVTbG90ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNW
YWx1ZVB0ciYgdmFsdWVTbG90ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYg
KHZhbHVlU2xvdCkgewogICAgICAgICAgICAgdmFsdWVTbG90ID0gdmFsdWU7CiAgICAgICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBKU0FycmF5Ojpw
dXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAgIHB1dFNsb3dDYXNlKGV4ZWMsIGksIHZhbHVl
KTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlKiB2YWx1ZSkKK05FVkVSX0lOTElORSB2b2lkIEpT
QXJyYXk6OnB1dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZVB0
ciB2YWx1ZSkKIHsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKQEAg
LTM5MSw3ICszOTEsNyBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgaWYgKGkgPCBz
dG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXZhbHVlU2xvdCkgewogICAgICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg1
LDcgKzQ4NSw3IEBAIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmcKIAog
ICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+
bV92ZWN0b3JMZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNs
b3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHImIHZhbHVl
U2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9
IHZhbHVlU2xvdDsKICAgICAgICAgICAgIHZhbHVlU2xvdCA9IG5vVmFsdWUoKTsKICAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gaGFkVmFsdWU7CkBAIC01MTAsNyAr
NTEwLDcgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZwogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKK0pTVmFsdWVQ
dHIgSlNBcnJheTo6cG9wKCkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTUyMCwx
NyArNTIwLDE3IEBAIEpTVmFsdWUqIEpTQXJyYXk6OnBvcCgpCiAKICAgICAtLWxlbmd0aDsKIAot
ICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIGlmICht
X2Zhc3RBY2Nlc3NDdXRvZmYgPiBsZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xv
dCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFs
dWVTbG90ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdOwogICAgICAgICByZXN1bHQgPSB2
YWx1ZVNsb3Q7CiAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICB2YWx1ZVNsb3QgPSBu
b1ZhbHVlKCk7CiAgICAgICAgIC0tbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAg
ICAgICBtX2Zhc3RBY2Nlc3NDdXRvZmYgPSBsZW5ndGg7CiAgICAgfSBlbHNlIGlmIChsZW5ndGgg
PCBtX3N0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNs
b3QgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF07CisgICAgICAgIEpTVmFsdWVQdHImIHZh
bHVlU2xvdCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXTsKICAgICAgICAgcmVzdWx0ID0g
dmFsdWVTbG90OwogICAgICAgICB2YWx1ZVNsb3QgPSBub1ZhbHVlKCk7CiAgICAgICAgIGlmIChy
ZXN1bHQpCkBAIC01NTksNyArNTU5LDcgQEAgSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWVQdHIgdmFsdWUpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC01OTksNyArNTk5
LDcgQEAgdm9pZCBKU0FycmF5OjptYXJrKCkKIAogICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHN0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFs
dWVQdHIgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlICYm
ICF2YWx1ZS0+bWFya2VkKCkpCiAgICAgICAgICAgICB2YWx1ZS0+bWFyaygpOwogICAgIH0KQEAg
LTYwNywxNCArNjA3LDE0IEBAIHZvaWQgSlNBcnJheTo6bWFyaygpCiAgICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gaXQtPnNlY29uZDsKICAgICAgICAgICAg
IGlmICghdmFsdWUtPm1hcmtlZCgpKQogICAgICAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXR5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUqLCBVU3RyaW5n
PiBBcnJheVFTb3J0UGFpcjsKK3R5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWVQdHIsIFVTdHJpbmc+
IEFycmF5UVNvcnRQYWlyOwogCiBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAg
ICBKU1ZhbHVlKiB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFs
dWVQdHIgdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBBU1NFUlQoIXZh
bHVlLT5pc1VuZGVmaW5lZCgpKTsKICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAg
ICAgfQpAQCAtNjg0LDcgKzY4NCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4
ZWMpCiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7Ci0gICAgSlNWYWx1
ZSogdmFsdWU7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZTsKIAogICAgIC8vIENoaWxkIHBvaW50ZXJz
LiAgVGhlIGhpZ2ggYml0IG9mIGd0IGlzIHJvYmJlZCBhbmQgdXNlZCBhcyB0aGUKICAgICAvLyBi
YWxhbmNlIGZhY3RvciBzaWduLiAgVGhlIGhpZ2ggYml0IG9mIGx0IGlzIHJvYmJlZCBhbmQgdXNl
ZCBhcwpAQCAtNjk1LDE1ICs2OTUsMTUgQEAgc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21w
YXJlIHsKIAogc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIHsKICAgICB0
eXBlZGVmIGludDMyX3QgaGFuZGxlOyAvLyBIYW5kbGUgaXMgYW4gaW5kZXggaW50byBtX25vZGVz
IHZlY3Rvci4KLSAgICB0eXBlZGVmIEpTVmFsdWUqIGtleTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQ
dHIga2V5OwogICAgIHR5cGVkZWYgaW50MzJfdCBzaXplOwogCiAgICAgVmVjdG9yPEFWTFRyZWVO
b2RlRm9yQXJyYXlDb21wYXJlPiBtX25vZGVzOwogICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAg
IEpTVmFsdWUqIG1fY29tcGFyZUZ1bmN0aW9uOworICAgIEpTVmFsdWVQdHIgbV9jb21wYXJlRnVu
Y3Rpb247CiAgICAgQ2FsbFR5cGUgbV9jb21wYXJlQ2FsbFR5cGU7CiAgICAgY29uc3QgQ2FsbERh
dGEqIG1fY29tcGFyZUNhbGxEYXRhOwotICAgIEpTVmFsdWUqIG1fZ2xvYmFsVGhpc1ZhbHVlOwor
ICAgIEpTVmFsdWVQdHIgbV9nbG9iYWxUaGlzVmFsdWU7CiAKICAgICBoYW5kbGUgZ2V0X2xlc3Mo
aGFuZGxlIGgpIHsgcmV0dXJuIG1fbm9kZXNbaF0ubHQgJiAweDdGRkZGRkZGOyB9CiAgICAgdm9p
ZCBzZXRfbGVzcyhoYW5kbGUgaCwgaGFuZGxlIGxoKSB7IG1fbm9kZXNbaF0ubHQgJj0gMHg4MDAw
MDAwMDsgbV9ub2Rlc1toXS5sdCB8PSBsaDsgfQpAQCAtNzUyLDcgKzc1Miw3IEBAIHN0cnVjdCBB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBzdGF0aWMgaGFuZGxlIG51bGwo
KSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBj
b25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlUHRyIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTc5
MCwxNCArNzkwLDE1IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
IAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVz
LCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBp
bnRvIHRoZSB0cmVlLgogICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWRdOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmlu
ZWRdLnZhbHVlID0gdjsKICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgfQog
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7
CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAg
IGlmICh2KSB7CiAgICAgICAgICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UgewpAQCAtODgwLDEyICs4ODEs
MTMgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoKQogICAgIHVuc2lnbmVk
IG51bVVuZGVmaW5lZCA9IDA7CiAKICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gc3RvcmFnZS0+bV92
ZWN0b3JbbnVtRGVmaW5lZF07CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IHN0b3JhZ2UtPm1fdmVj
dG9yW251bURlZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0pIHsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07CisgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBpZiAodi0+aXNVbmRl
ZmluZWQoKSkKICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVs
c2UKQEAgLTk0OSw3ICs5NTEsNyBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29u
c2lzdGVuCiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CisgICAg
ICAgIGlmIChKU1ZhbHVlUHRyIHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXSkgewogICAg
ICAgICAgICAgQVNTRVJUKGkgPCBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIGlm
ICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQogICAgICAgICAgICAgICAgIHZh
bHVlLT50eXBlKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KQEAgLTk4OCw3ICs5OTAsNyBAQCBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4
ZWNTdGF0ZSogCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogfQogCi1KU0Fy
cmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHNpbmdsZUl0ZW1W
YWx1ZSkKK0pTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0
ciBzaW5nbGVJdGVtVmFsdWUpCiB7CiAgICAgQXJnTGlzdCB2YWx1ZXM7CiAgICAgdmFsdWVzLmFw
cGVuZChzaW5nbGVJdGVtVmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWUqPiBTcGFyc2VBcnJheVZhbHVlTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVB0cj4gU3BhcnNlQXJyYXlWYWx1ZU1h
cDsKIAogICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1f
bnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNl
VmFsdWVNYXA7CiAgICAgICAgIHZvaWQqIGxhenlDcmVhdGlvbkRhdGE7IC8vIEEgSlNBcnJheSBz
dWJjbGFzcyBjYW4gdXNlIHRoaXMgdG8gZmlsbCB0aGUgdmVjdG9yIGxhemlseS4KLSAgICAgICAg
SlNWYWx1ZSogbV92ZWN0b3JbMV07CisgICAgICAgIEpTVmFsdWVQdHIgbV92ZWN0b3JbMV07CiAg
ICAgfTsKIAogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtNDcsNyAr
NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqKTsgLy8gRklYTUU6IE1ha2UgcHJvdGVjdGVkIGFuZCBhZGQgc2V0SXRlbS4KKyAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIpOyAvLyBGSVhNRTogTWFrZSBwcm90ZWN0ZWQgYW5kIGFkZCBzZXRJdGVtLgogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIApAQCAtNTUsMjAgKzU1LDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8vIE9LIHRv
IHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hB
cnJheS4KIAogICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZvaWQgc29y
dChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYpOworICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBjb21w
YXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOwogCi0gICAgICAgIHZvaWQg
cHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVlKik7Ci0gICAgICAgIEpTVmFsdWUqIHBvcCgpOworICAg
ICAgICB2b2lkIHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CisgICAgICAgIEpTVmFsdWVQ
dHIgcG9wKCk7CiAKICAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVy
biBpIDwgbV9mYXN0QWNjZXNzQ3V0b2ZmOyB9Ci0gICAgICAgIEpTVmFsdWUqIGdldEluZGV4KHVu
c2lnbmVkIGkpCisgICAgICAgIEpTVmFsdWVQdHIgZ2V0SW5kZXgodW5zaWduZWQgaSkKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKICAgICAgICAgICAgIHJl
dHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBj
YW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV9mYXN0QWNjZXNzQ3V0b2ZmOyB9
Ci0gICAgICAgIEpTVmFsdWUqIHNldEluZGV4KHVuc2lnbmVkIGksIEpTVmFsdWUqIHYpCisgICAg
ICAgIEpTVmFsdWVQdHIgc2V0SW5kZXgodW5zaWduZWQgaSwgSlNWYWx1ZVB0ciB2KQogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgcmV0
dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSB2OwpAQCAtNzYsMTMgKzc2LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgQXJnTGlz
dCYpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUpKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmKTsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRT
bG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAg
ICAgICAgdm9pZCBwdXRTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIpOwogCiAgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBtX3N0b3JhZ2U7CiAgICAgfTsKIAotICAgIEpT
QXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSopOworICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZVB0
cik7CiAKICAgICBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSopOwogICAg
IEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCk7Ci0gICAgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiwgSlNWYWx1
ZSogc2luZ2xlSXRlbVZhbHVlKTsKKyAgICBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3Rh
dGUqLCBKU1ZhbHVlUHRyIHNpbmdsZUl0ZW1WYWx1ZSk7CiAgICAgSlNBcnJheSogY29uc3RydWN0
QXJyYXkoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKTsKIAotICAgIGlubGluZSBK
U0FycmF5KiBhc0FycmF5KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU0FycmF5KiBhc0Fy
cmF5KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFs
dWUpLT5pbmhlcml0cygmSlNBcnJheTo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNBcnJheSo+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMTIgQEAgYm9vbCBKU0NlbGw6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpT
Q2VsbDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwg
SlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNDZWxsOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlUHRy
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgdG9PYmplY3QoZXhlYyktPnB1
dChleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNDZWxsOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSkKK3Zv
aWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1Zh
bHVlUHRyIHZhbHVlKQogewogICAgIHRvT2JqZWN0KGV4ZWMpLT5wdXQoZXhlYywgaWRlbnRpZmll
ciwgdmFsdWUpOwogfQpAQCAtMjEwLDcgKzIxMCw3IEBAIGNvbnN0IENsYXNzSW5mbyogSlNDZWxs
OjpjbGFzc0luZm8oKSBjb24KICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogSlNDZWxsOjpn
ZXRKU051bWJlcigpCitKU1ZhbHVlUHRyIEpTQ2VsbDo6Z2V0SlNOdW1iZXIoKQogewogICAgIHJl
dHVybiBub1ZhbHVlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdG9y
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzEsOCArNzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdmlydHVhbCBib29sIGdldFRydW5jYXRlZFVJbnQzMih1aW50MzJfdCYpIGNvbnN0
OwogCiAgICAgICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgotICAgICAgICB2aXJ0dWFsIEpTVmFs
dWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUq
LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKSA9IDA7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1
ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25z
dCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRl
KiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCA9IDA7CkBAIC04NywxNSArODgsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRv
T2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5
U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVy
dHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpOwogCiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVj
U3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVj
U3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmco
RXhlY1N0YXRlKik7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsKKyAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7CiAgICAgICAgIHZvaWQqIHZw
dHIoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHRoaXMpOyB9CiAKICAgICBw
cml2YXRlOgpAQCAtMTA3LDEyICsxMDgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0
cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiAgICAgfTsKIAotICAgIEpTQ2VsbCogYXNDZWxsKEpTVmFs
dWUqKTsKKyAgICBKU0NlbGwqIGFzQ2VsbChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0Nl
bGwqIGFzQ2VsbChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgSlNDZWxsKiBhc0NlbGwoSlNW
YWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPih2YWx1
ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZS0+YXNDZWxsKCk7CiAgICAgfQogCiAgICAgaW5saW5l
IEpTQ2VsbDo6SlNDZWxsKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTU3LDcgKzE1OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0Nl
bGwoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlh
dGUoYXNWYWx1ZSgpKSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+
KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNDZWxsKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0NlbGwqPih0aGlzKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC0yNDYsMTIgKzI0NywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpIHx8
IGFzQ2VsbCgpLT5tYXJrZWQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1
ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHBy
ZWZlcnJlZFR5cGUpIGNvbnN0CisgICAgaW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5
cGUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KGFzVmFsdWUoKSkgPyBhc1ZhbHVlKCkgOiBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgcHJl
ZmVycmVkVHlwZSk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1
ZSkKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRl
KiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpIHsKICAgICAgICAgICAg
IG51bWJlciA9IEpTSW1tZWRpYXRlOjp0b0RvdWJsZShhc1ZhbHVlKCkpOwpAQCAtMzAwLDkgKzMw
MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1t
ZWRpYXRlKGFzVmFsdWUoKSkgPyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcoYXNWYWx1ZSgpKSA6IGFz
Q2VsbCgpLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUq
IEpTVmFsdWU6OmdldEpTTnVtYmVyKCkKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpn
ZXRKU051bWJlcigpCiAgICAgewotCiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1i
ZXIoYXNWYWx1ZSgpKSA/IGFzVmFsdWUoKSA6IEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1Zh
bHVlKCkpID8gbm9WYWx1ZSgpIDogYXNDZWxsKCktPmdldEpTTnVtYmVyKCk7CiAgICAgfQogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcsMjQgKzc3LDI0IEBAIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxE
YXQKICAgICByZXR1cm4gQ2FsbFR5cGVKUzsKIH0KIAotSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2Fs
bChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBleGVjLT5p
bnRlcnByZXRlcigpLT5leGVjdXRlKG1fYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVl
LT50b1RoaXNPYmplY3QoZXhlYyksIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4
Y2VwdGlvblNsb3QoKSk7CiB9CiAKLUpTVmFsdWUqIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAg
ICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhp
c09iaik7CiB9CiAKLUpTVmFsdWUqIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiog
dGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIoZXhlYywgdGhpc09iaik7CiB9CiAKLUpTVmFs
dWUqIEpTRnVuY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVuY3Rpb246
Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rp
b24oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+
bV9ib2R5LT5wYXJhbWV0ZXJDb3VudCgpKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlKiBK
U0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0CiBib29sIEpTRnVuY3Rpb246OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBKU1ZhbHVlKiogbG9jYXRpb24g
PSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU1ZhbHVlUHRyKiBs
b2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYg
KCFsb2NhdGlvbikgewogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG5ldyAoZXhl
YykgSlNPYmplY3QobV9zY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVj
dHVyZSgpKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5U2xvdChFeGVjCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNGdW5jdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm47CkBAIC0xNTgsMTQgKzE1OCwxNCBAQCBDb25z
dHJ1Y3RUeXBlIEpTRnVuY3Rpb246OmdldENvbnN0cnVjdERhCiBKU09iamVjdCogSlNGdW5jdGlv
bjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBnZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBwcm90
b3R5cGUgPSBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CiAgICAg
aWYgKHByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3Qo
cHJvdG90eXBlKS0+aW5oZXJpdG9ySUQoKTsKICAgICBlbHNlCiAgICAgICAgIHN0cnVjdHVyZSA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUobV9ib2R5
LmdldCgpLCBleGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpLCBl
eGVjLT5leGNlcHRpb25TbG90KCkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gZXhlYy0+aW50
ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNPYmosIGFy
Z3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiB0aGlzT2JqOwogICAgIHJldHVybiBhc09iamVjdChyZXN1bHQpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKTsKIAogICAgICAgICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAgICAgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBjYWxs
KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKICAg
ICAgICAgdm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluKSB7IG1fc2Nv
cGVDaGFpbiA9IHNjb3BlQ2hhaW47IH0KICAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJl
dHVybiBtX3Njb3BlQ2hhaW47IH0KQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkg
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpT
VmFsdWVQdHIgcHJvdG90eXBlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNI
YXNJbnN0YW5jZSkpOyAKICAgICAgICAgfQpAQCAtODIsMTcgKzgyLDE3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25z
dHJ1Y3REYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERh
dGEmKTsKIAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBsZW5ndGhHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAg
ICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7CiAgICAgICAgIFNjb3BlQ2hh
aW4gbV9zY29wZUNoYWluOwogICAgIH07CiAKLSAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpT
VmFsdWUqKTsKKyAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAg
aW5saW5lIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5l
IEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgorI2luY2x1ZGUg
IkpTVmFsdWUuaCIKIAogc3RydWN0IE9wYXF1ZUpTQ2xhc3M7CiBzdHJ1Y3QgT3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhOwpAQCAtNzEsNyArNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9u
OworICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbjsKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICB2b2lkKiBleGNlcHRpb25Mb2NhdGlvbjsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50VGhyZXNobwogLy8gUHJl
ZmVycmVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWVvdXQgY2hlY2sK
IHN0YXRpYyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAxMDAw
OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKEpTVmFsdWUqIHYpCitzdGF0aWMg
aW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAodiAmJiAh
di0+bWFya2VkKCkpCiAgICAgICAgIHYtPm1hcmsoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAgICAgcmVzZXQocHJvdG90eXBl
KCkpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCkBAIC0xNTYsMTggKzE1NiwxOSBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAgSlNWYXJpYWJsZU9i
amVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpT
R2xvYmFsT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCit2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhl
YXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCiAgICAgaWYgKHN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTVmFsdWUqIHZhbHVlQmVmb3JlID0gZ2V0RGlyZWN0KHBy
b3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZUJlZm9yZSA9IGdldERpcmVjdChwcm9w
ZXJ0eU5hbWUpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIEpTVmFyaWFibGVPYmpl
Y3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICBpZiAoIXZhbHVl
QmVmb3JlKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZUFmdGVyID0gZ2V0RGlyZWN0KHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWVBZnRlciA9IGdldERpcmVjdChw
cm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAodmFsdWVBZnRlcikKICAgICAgICAgICAgIHB1dERp
cmVjdChwcm9wZXJ0eU5hbWUsIHZhbHVlQWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KIH0KQEAg
LTE5NCw3ICsxOTUsNyBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVD
CiAgICAgcmV0dXJuIG87CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUq
IHByb3RvdHlwZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWVQdHIgcHJvdG90
eXBlKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVj
KCk7CiAKQEAgLTI0NywxMyArMjQ4LDEzIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpT
VmFsdWUqIHByb3QKIAogICAgIC8vIENvbnN0cnVjdG9ycwogCi0gICAgSlNWYWx1ZSogb2JqZWN0
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIE9iamVjdENv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+
b2JqZWN0UHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3
IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSk7Ci0gICAgSlNWYWx1ZSogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlD
b25zdHJ1Y3RvcihleGVjLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5m
dW5jdGlvblByb3RvdHlwZSksIGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIHN0
cmluZ0NvbnN0cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBTdHJp
bmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBk
KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPnN0cmluZ1Byb3RvdHlw
ZSk7Ci0gICAgSlNWYWx1ZSogYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29sZWFu
Q29uc3RydWN0b3IoZXhlYywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgp
LT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1
ZSogbnVtYmVyQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMs
IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlw
ZSksIGQoKS0+bnVtYmVyUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3Ig
PSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3RvcihleGVjLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSwgZCgpLT5kYXRlUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIG9i
amVjdENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCBPYmpl
Y3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBk
KCktPm9iamVjdFByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbkNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlv
blByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBhcnJheUNvbnN0cnVjdG9yID0gbmV3IChleGVj
KSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgSlNW
YWx1ZVB0ciBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5nQ29uc3RydWN0b3Io
ZXhlYywgU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5zdHJp
bmdQcm90b3R5cGUpOworICAgIEpTVmFsdWVQdHIgYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7
CisgICAgSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29u
c3RydWN0b3IoZXhlYywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1
bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5udW1iZXJQcm90b3R5cGUpOworICAgIEpTVmFsdWVQdHIg
ZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgRGF0ZUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGQoKS0+ZGF0ZVByb3RvdHlwZSk7CiAK
ICAgICBkKCktPnJlZ0V4cENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3Rv
cihleGVjLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUpLCBkKCktPnJlZ0V4cFByb3RvdHlwZSk7CiAKQEAgLTMzNyw3ICszMzgsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiB9CiAKIC8vIFNldCBwcm90
b3R5cGUsIGFuZCBhbHNvIGluc2VydCB0aGUgb2JqZWN0IHByb3RvdHlwZSBhdCB0aGUgZW5kIG9m
IHRoZSBjaGFpbi4KLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWUq
IHByb3RvdHlwZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWVQ
dHIgcHJvdG90eXBlKQogewogICAgIHNldFByb3RvdHlwZShwcm90b3R5cGUpOwogICAgIGxhc3RJ
blByb3RvdHlwZUNoYWluKHRoaXMpLT5zZXRQcm90b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5cGUp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2MSw4ICsxNjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYg
c2xvdElzV3JpdGVhYmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0
aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIGdldHRlckZ1bmMpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5l
U2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNldHRlckZ1bmMpOwpAQCAtMjQ0LDE5ICsyNDQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgY29weUdsb2JhbHNGcm9tKFJlZ2lzdGVyRmlsZSYpOwogICAgICAgICB2b2lk
IGNvcHlHbG9iYWxzVG8oUmVnaXN0ZXJGaWxlJik7CiAgICAgICAgIAotICAgICAgICB2b2lkIHJl
c2V0UHJvdG90eXBlKEpTVmFsdWUqIHByb3RvdHlwZSk7CisgICAgICAgIHZvaWQgcmVzZXRQcm90
b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSgpIHsgcmV0dXJuIGQoKS0+Z2xvYmFsRGF0YS5nZXQoKTsgfQogICAgICAgICBKU0ds
b2JhbE9iamVjdERhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9i
amVjdERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKLSAgICAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1ZhbHVlKiB2
LCB1bnNpZ25lZCBhKQorICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50
aWZpZXImIGksIEpTVmFsdWVQdHIgdiwgdW5zaWduZWQgYSkKICAgICAgICAgICAgICAgICA6IGlk
ZW50aWZpZXIoaSkKICAgICAgICAgICAgICAgICAsIHZhbHVlKHYpCiAgICAgICAgICAgICAgICAg
LCBhdHRyaWJ1dGVzKGEpCkBAIC0yNjQsNyArMjY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIH07CiAgICAgICAgIHZv
aWQgYWRkU3RhdGljR2xvYmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qLCBpbnQgY291bnQpOwpAQCAt
MjcyLDE2ICsyNzIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
Ly8gRklYTUU6IEZvbGQgcmVzZXQgaW50byBpbml0LgogICAgICAgICB2b2lkIGluaXQoSlNPYmpl
Y3QqIHRoaXNWYWx1ZSk7Ci0gICAgICAgIHZvaWQgcmVzZXQoSlNWYWx1ZSogcHJvdG90eXBlKTsK
KyAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlUHRyIHByb3RvdHlwZSk7CiAKICAgICAgICAgdm9p
ZCBzZXRSZWdpc3RlcnMoUmVnaXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJy
YXksIHNpemVfdCBjb3VudCk7CiAKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7
IC8vIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCB3aXRoIEpTR2xvYmFsRGF0YQogICAgIH07CiAKLSAg
ICBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSopOworICAgIEpTR2xvYmFs
T2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTR2xv
YmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aXNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0z
MzMsNyArMzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBhc0dsb2JhbE9i
amVjdChuLT5vYmplY3QpOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBTdHJ1Y3R1cmU6
OnByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqIGV4ZWMpCisgICAgaW5saW5lIEpTVmFsdWVQ
dHIgU3RydWN0dXJlOjpwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKiBleGVjKQogICAgIHsK
ICAgICAgICAgaWYgKHR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpCiAgICAgICAgICAg
ICByZXR1cm4gbV9wcm90b3R5cGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKK3N0YXRpYyBKU1ZhbHVl
UHRyIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNo
YXIqIGRvTm90RXNjYXBlKQogewogICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdChleGVjLCAwKS0+
dG9TdHJpbmcoZXhlYyk7CiAgICAgQ1N0cmluZyBjc3RyID0gc3RyLlVURjhTdHJpbmcodHJ1ZSk7
CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVj
LCAKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsKIH0KIAotc3RhdGljIEpTVmFs
dWUqIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNo
YXIqIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQorc3RhdGljIEpTVmFsdWVQdHIgZGVjb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9Ob3RV
bmVzY2FwZSwgYm9vbCBzdHJpY3QpCiB7CiAgICAgVVN0cmluZyByZXN1bHQgPSAiIjsKICAgICBV
U3RyaW5nIHN0ciA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMjY4LDE0
ICsyNjgsMTQgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAg
IHJldHVybiBzLnRvRG91YmxlKHRydWUgLyp0b2xlcmFudCovLCBmYWxzZSAvKiBOYU4gZm9yIGVt
cHR5IHN0cmluZyAqLyk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0
KGV4ZWMpOwogICAgIEpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QgPSB0aGlzT2JqZWN0LT51bndy
YXBwZWRPYmplY3QoKTsKICAgICBpZiAoIXVud3JhcHBlZE9iamVjdC0+aXNHbG9iYWxPYmplY3Qo
KSB8fCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmV2YWxG
dW5jdGlvbigpICE9IGZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBF
dmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUg
Z2xvYmFsIG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2luYXRlZCIpOwogCi0gICAgSlNWYWx1
ZSogeCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB4ID0gYXJncy5hdChleGVj
LCAwKTsKICAgICBpZiAoIXgtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiB4OwogCkBAIC0y
OTMsOSArMjkzLDkgQEAgSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLAog
ICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBl
eGVjLCB0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9i
amVjdCktPmdsb2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7
CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1
bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaW50MzJfdCBy
YWRpeCA9IGFyZ3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYyk7CiAKICAgICBpZiAodmFsdWUt
PmlzTnVtYmVyKCkgJiYgKHJhZGl4ID09IDAgfHwgcmFkaXggPT0gMTApKSB7CkBAIC0zMTAsMjMg
KzMxMCwyMyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBlCiAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBhcnNlSW50KHZhbHVlLT50b1N0cmluZyhleGVjKSwgcmFk
aXgpKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBn
bG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFy
c2VGbG9hdChhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVl
KiBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGpzQm9vbGVhbihpc25hbihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVj
KSkpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9i
YWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZG91YmxlIG4gPSBhcmdzLmF0KGV4ZWMsIDApLT50
b051bWJlcihleGVjKTsKICAgICByZXR1cm4ganNCb29sZWFuKCFpc25hbihuKSAmJiAhaXNpbmYo
bikpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xv
YmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfdW5l
c2NhcGVfd2hlbl9kZWNvZGluZ19VUklbXSA9CiAgICAgICAgICIjJCYrLC86Oz0/QCI7CkBAIC0z
MzQsMTIgKzMzNCwxMiBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSog
CiAgICAgcmV0dXJuIGRlY29kZShleGVjLCBhcmdzLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNv
ZGluZ19VUkksIHRydWUpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9u
ZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsICIiLCB0cnVlKTsKIH0KIAotSlNWYWx1ZSogZ2xv
YmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSVtd
ID0KICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtMzUwLDcgKzM1MCw3
IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiAKICAgICByZXR1cm4g
ZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUkkpOwogfQog
Ci1KU1ZhbHVlKiBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xv
YmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBk
b19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVudFtdID0KICAgICAgICAgIkFC
Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtMzYxLDcgKzM2MSw3IEBAIEpTVmFsdWUqIGds
b2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXgKICAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFy
Z3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50KTsKIH0KIAotSlNW
YWx1ZSogZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFc2NhcGUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZVtdID0KICAgICAgICAgIkFC
Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtMzkyLDcgKzM5Miw3IEBAIEpTVmFsdWUqIGds
b2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
cmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
Z2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAg
VVN0cmluZyBzdHIgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKQEAgLTQyMCw3
ICs0MjAsNyBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBlCiB9CiAK
ICNpZm5kZWYgTkRFQlVHCi1KU1ZhbHVlKiBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ1N0cmluZ0J1ZmZlciBzdHJpbmc7CiAg
ICAgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykuZ2V0Q1N0cmluZyhzdHJpbmcpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE5ICszNSwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkg
YmUgaW4gSlNHbG9iYWxPYmplY3QuY3BwLCBidXQgcHV0dGluZyB0aGVtIHRoZXJlCiAgICAgLy8g
aXMgYSAwLjUlIHJlZHVjdGlvbi4KIAotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVl
KiBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBn
bG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVu
Y0RlY29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xv
YmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1
ZSogZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGds
b2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xv
YmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBn
bG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQ
dHIgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFbmNv
ZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIg
Z2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKICNpZm5kZWYgTkRFQlVH
Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNKU0NQ
cmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
ICNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJC
b3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bW1lZGlhdGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbW1lZGlhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2JqZWN0KEpTVmFs
dWUqIHYsIEV4ZWNTdGF0ZSogZXhlYykKK0pTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2Jq
ZWN0KEpTVmFsdWVQdHIgdiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVk
aWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0
TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihleGVjLCB2KTsKICAgICBpZiAoaXNCb29sZWFuKHYp
KQogICAgICAgICByZXR1cm4gY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGV4
ZWMsIHYpOwotICAgIGlmICh2ID09IGpzTnVsbCgpKQorICAgIGlmICh2LT5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpOwogICAgIAogICAgIEpTTm90QW5P
YmplY3RFcnJvclN0dWIqIGV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3JTdHViKGV4
ZWMsIHYtPmlzTnVsbCgpKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNPYmplY3QqIEpTSW1tZWRpYXRl
Ojp0b1RoaXNPYmplY3QoSlNWYQogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3Qo
ZXhlYywgZXhjZXB0aW9uKTsKIH0KIAotSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b09iamVjdChK
U1ZhbHVlKiB2LCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2Jq
ZWN0KEpTVmFsdWVQdHIgdiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVk
aWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQpAQCAtNjAsNyArNjAsNyBAQCBKU09iamVj
dCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0KEpTVmFsdWUqCiAgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNOb3RBbk9iamVjdChleGVjLCBleGNlcHRpb24pOwogfQogCi1KU09iamVjdCogSlNJbW1lZGlh
dGU6OnByb3RvdHlwZShKU1ZhbHVlKiB2LCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNJ
bW1lZGlhdGU6OnByb3RvdHlwZShKU1ZhbHVlUHRyIHYsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBBU1NFUlQoaXNJbW1lZGlhdGUodikpOwogICAgIGlmIChpc051bWJlcih2KSkKQEAgLTczLDE4
ICs3MywxOCBAQCBKU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3RvdHlwZShKU1ZhbHVlCiAgICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjLCBleGNlcHRpb24pOwogfQogCi1V
U3RyaW5nIEpTSW1tZWRpYXRlOjp0b1N0cmluZyhKU1ZhbHVlKiB2KQorVVN0cmluZyBKU0ltbWVk
aWF0ZTo6dG9TdHJpbmcoSlNWYWx1ZVB0ciB2KQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2
KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQogICAgICAgICByZXR1cm4gVVN0cmluZzo6ZnJvbShn
ZXRUcnVuY2F0ZWRJbnQzMih2KSk7Ci0gICAgaWYgKHYgPT0ganNCb29sZWFuKGZhbHNlKSkKKyAg
ICBpZiAoanNCb29sZWFuKGZhbHNlKSA9PSB2KQogICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAg
ICBpZiAodiA9PSBqc0Jvb2xlYW4odHJ1ZSkpCisgICAgaWYgKGpzQm9vbGVhbih0cnVlKSA9PSB2
KQogICAgICAgICByZXR1cm4gInRydWUiOwogICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuICJudWxsIjsKLSAgICBBU1NFUlQodiA9PSBqc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NF
UlQodi0+aXNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwogfQogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Fs
d2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiSlNW
YWx1ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDxzdGRhcmcuaD4KQEAgLTM5LDkgKzQwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
SlNWYWx1ZTsKICAgICBjbGFzcyBVU3RyaW5nOwogCi0gICAgaW5saW5lIEpTVmFsdWUqIG5vVmFs
dWUoKSB7IHJldHVybiAwOyB9Ci0gICAgaW5saW5lIHZvaWQqIGFzUG9pbnRlcihKU1ZhbHVlKiB2
YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KLQogICAgIC8qCiAgICAgICogQSBKU1ZhbHVlKiBpcyBl
aXRoZXIgYSBwb2ludGVyIHRvIGEgY2VsbCAoYSBoZWFwLWFsbG9jYXRlZCBvYmplY3QpIG9yIGFu
IGltbWVkaWF0ZSAoYSB0eXBlLXRhZ2dlZCAKICAgICAgKiB2YWx1ZSBtYXNxdWVyYWRpbmcgYXMg
YSBwb2ludGVyKS4gVGhlIGxvdyB0d28gYml0cyBpbiBhIEpTVmFsdWUqIGFyZSBhdmFpbGFibGUg
Zm9yIHR5cGUgdGFnZ2luZwpAQCAtMTEzLDE1MiArMTExLDE1MiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZgogIAogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0ltbWVkaWF0ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGlzSW1tZWRpYXRlKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIHJhd1ZhbHVlKHYpICYgVGFnTWFzazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc051bWJlcihKU1ZhbHVlKiB2KQorICAgICAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgVGFnQml0VHlwZUludGVnZXI7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzUG9zaXRpdmVO
dW1iZXIoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc1Bv
c2l0aXZlTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgLy8gQSBz
aW5nbGUgbWFzayB0byBjaGVjayBmb3IgdGhlIHNpZ24gYml0IGFuZCB0aGUgbnVtYmVyIHRhZyBh
bGwgYXQgb25jZS4KICAgICAgICAgICAgIHJldHVybiAocmF3VmFsdWUodikgJiAoc2lnbkJpdCB8
IFRhZ0JpdFR5cGVJbnRlZ2VyKSkgPT0gVGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFs
dWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFs
dWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2KSAmIEZ1
bGxUYWdUeXBlTWFzaykgPT0gRnVsbFRhZ1R5cGVCb29sOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzVW5kZWZpbmVkT3JOdWxsKEpTVmFs
dWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNVbmRlZmluZWRPck51
bGwoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYW5k
IG51bGwgc2hhcmUgdGhlIHNhbWUgdmFsdWUsIGJhciB0aGUgJ3VuZGVmaW5lZCcgYml0IGluIHRo
ZSBleHRlbmRlZCB0YWcuCiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgfkV4dGVu
ZGVkVGFnQml0VW5kZWZpbmVkKSA9PSBGdWxsVGFnVHlwZU51bGw7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdGF0aWMgYm9vbCBpc05lZ2F0aXZlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBi
b29sIGlzTmVnYXRpdmUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoaXNOdW1iZXIodikpOwogICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgc2lnbkJp
dDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGNoYXIpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShzaWduZWQgY2hhcik7Ci0gICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBmcm9tKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJv
bShzaG9ydCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHVuc2lnbmVkIHNob3J0KTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20oaW50KTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIGZyb20odW5zaWduZWQpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShsb25nKTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWduZWQgbG9uZyk7Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBmcm9tKGxvbmcgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBm
cm9tKHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGRv
dWJsZSk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oY2hhcik7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlUHRyIGZyb20oc2lnbmVkIGNoYXIpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZVB0ciBmcm9tKHVuc2lnbmVkIGNoYXIpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9t
KHNob3J0KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCBzaG9ydCk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oaW50KTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVQdHIgZnJvbSh1bnNpZ25lZCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20o
bG9uZyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20odW5zaWduZWQgbG9uZyk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20obG9uZyBsb25nKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCBsb25nIGxvbmcpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBmcm9tKGRvdWJsZSk7CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0VpdGhlckltbWVkaWF0ZShKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFaXRoZXJJbW1lZGlhdGUoSlNWYWx1ZVB0ciB2MSwg
SlNWYWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2
MSkgfCByYXdWYWx1ZSh2MikpICYgVGFnTWFzazsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBbnlJbW1lZGlhdGUoSlNWYWx1ZSogdjEsIEpTVmFsdWUq
IHYyLCBKU1ZhbHVlKiB2MykKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Fu
eUltbWVkaWF0ZShKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyLCBKU1ZhbHVlUHRyIHYzKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYxKSB8IHJhd1ZhbHVlKHYy
KSB8IHJhd1ZhbHVlKHYzKSkgJiBUYWdNYXNrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRlKEpTVmFsdWUqIHYxLCBKU1ZhbHVl
KiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRl
KEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBpc0ltbWVkaWF0ZSh2MSkgJiBpc0ltbWVkaWF0ZSh2Mik7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKEpT
VmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcmF3VmFsdWUodjEpICYgcmF3VmFsdWUodjIp
ICYgVGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBhbmRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVl
KiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBhbmRJbW1lZGlh
dGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKICAgICAgICAg
ICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpICYgcmF3VmFsdWUodjIpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHhvckltbWVkaWF0
ZU51bWJlcnMoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlUHRyIHhvckltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNW
YWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlh
dGVOdW1iZXJzKHYxLCB2MikpOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgocmF3VmFs
dWUodjEpIF4gcmF3VmFsdWUodjIpKSB8IFRhZ0JpdFR5cGVJbnRlZ2VyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIG9ySW1tZWRpYXRlTnVtYmVy
cyhKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWVQdHIgb3JJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIg
djIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVy
cyh2MSwgdjIpKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpIHwg
cmF3VmFsdWUodjIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIHJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHZhbCwgSlNWYWx1
ZSogc2hpZnQpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgcmlnaHRT
aGlmdEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2YWwsIEpTVmFsdWVQdHIgc2hpZnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWws
IHNoaWZ0KSk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKChyYXdWYWx1ZSh2YWwpID4+
ICgocmF3VmFsdWUoc2hpZnQpID4+IEludGVnZXJQYXlsb2FkU2hpZnQpICYgMHgxZikpIHwgVGFn
Qml0VHlwZUludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoSlNWYWx1ZSogdikKKyAgICAgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoSlNW
YWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOdW1iZXIgaXMgbm9uLW5lZ2F0
aXZlIGFuZCBhbiBvcGVyYXRpb24gaW52b2x2aW5nIHR3byBvZiB0aGVzZSBjYW4ndCBvdmVyZmxv
dy4KICAgICAgICAgICAgIC8vIENoZWNraW5nIGZvciBhbGxvd2VkIG5lZ2F0aXZlIG51bWJlcnMg
dGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQncyB3b3J0aCBvbiBTdW5TcGlkZXIuCiAgICAgICAgICAg
ICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgKFRhZ0JpdFR5cGVJbnRlZ2VyICsgKHNpZ25CaXQgfCAo
c2lnbkJpdCA+PiAxKSkpKSA9PSBUYWdCaXRUeXBlSW50ZWdlcjsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGFkZEltbWVkaWF0ZU51bWJlcnMoSlNW
YWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIGFkZEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9u
cyh2MSkpOwogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2
MikpOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgKyByYXdWYWx1
ZSh2MikgLSBUYWdCaXRUeXBlSW50ZWdlcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMg
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBzdWJJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBK
U1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBzdWJJ
bW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpKTsKICAg
ICAgICAgICAgIEFTU0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjIpKTsKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpIC0gcmF3VmFsdWUodjIpICsgVGFn
Qml0VHlwZUludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogaW5jSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgaW5jSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWVQdHIg
dikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0
aW9ucyh2KSk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYpICsgKDEg
PDwgSW50ZWdlclBheWxvYWRTaGlmdCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogZGVjSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWUqIHYpCisgICAg
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgZGVjSW1tZWRpYXRlTnVtYmVyKEpT
VmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0
aXZlT3BlcmF0aW9ucyh2KSk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVl
KHYpIC0gKDEgPDwgSW50ZWdlclBheWxvYWRTaGlmdCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
c3RhdGljIGRvdWJsZSB0b0RvdWJsZShKU1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyBib29sIHRv
Qm9vbGVhbihKU1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9PYmplY3QoSlNW
YWx1ZSosIEV4ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVj
dChKU1ZhbHVlKiwgRXhlY1N0YXRlKik7Ci0gICAgICAgIHN0YXRpYyBVU3RyaW5nIHRvU3RyaW5n
KEpTVmFsdWUqKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBnZXRVSW50MzIoSlNWYWx1ZSosIHVp
bnQzMl90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZEludDMyKEpTVmFsdWUq
LCBpbnQzMl90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZFVJbnQzMihKU1Zh
bHVlKiwgdWludDMyX3QmKTsKLQotICAgICAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0ZWRJ
bnQzMihKU1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyB1aW50MzJfdCBnZXRUcnVuY2F0ZWRVSW50
MzIoSlNWYWx1ZSopOwotCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiB0cnVlSW1tZWRpYXRlKCk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmYWxzZUltbWVkaWF0ZSgpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogdW5kZWZpbmVkSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBudWxsSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiB6ZXJvSW1tZWRpYXRl
KCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBvbmVJbW1lZGlhdGUoKTsKKyAgICAgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZShKU1ZhbHVlUHRyKTsKKyAgICAgICAgc3RhdGljIGJvb2wgdG9C
b29sZWFuKEpTVmFsdWVQdHIpOworICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvT2JqZWN0KEpT
VmFsdWVQdHIsIEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09i
amVjdChKU1ZhbHVlUHRyLCBFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIFVTdHJpbmcgdG9T
dHJpbmcoSlNWYWx1ZVB0cik7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VUludDMyKEpTVmFs
dWVQdHIsIHVpbnQzMl90Jik7CisgICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZEludDMy
KEpTVmFsdWVQdHIsIGludDMyX3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVk
VUludDMyKEpTVmFsdWVQdHIsIHVpbnQzMl90Jik7CisKKyAgICAgICAgc3RhdGljIGludDMyX3Qg
Z2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZVB0cik7CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBn
ZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZVB0cik7CisKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQ
dHIgdHJ1ZUltbWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmYWxzZUltbWVk
aWF0ZSgpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciB1bmRlZmluZWRJbW1lZGlhdGUoKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgbnVsbEltbWVkaWF0ZSgpOworICAgICAgICBzdGF0
aWMgSlNWYWx1ZVB0ciB6ZXJvSW1tZWRpYXRlKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IG9uZUltbWVkaWF0ZSgpOwogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbXBvc3NpYmxlVmFs
dWUoKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgaW1wb3NzaWJsZVZhbHVlKCk7CiAgICAg
ICAgIAotICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHByb3RvdHlwZShKU1ZhbHVlKiwgRXhlY1N0
YXRlKik7CisgICAgICAgIHN0YXRpYyBKU09iamVjdCogcHJvdG90eXBlKEpTVmFsdWVQdHIsIEV4
ZWNTdGF0ZSopOwogCiAgICAgcHJpdmF0ZToKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRF
KQpAQCAtMjcwLDY1ICsyNjgsNjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEltbWVkaWF0ZVVJbnQgPSBtYXhJbW1lZGlhdGVJbnQ7
CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZVZhbHVlKGludHB0
cl90IGludGVnZXIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFr
ZVZhbHVlKGludHB0cl90IGludGVnZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihpbnRlZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlUHRyOjptYWtlSW1tZWRpYXRlKGludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZUludChpbnQzMl90IHZhbHVlKQorICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VJbnQoaW50MzJfdCB2YWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KHZhbHVlKSA8PCBJbnRlZ2VyUGF5bG9hZFNoaWZ0KSB8IFRhZ0JpdFR5cGVJbnRl
Z2VyKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogbWFrZUJvb2woYm9vbCBiKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIG1ha2VCb29sKGJvb2wgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGIpIDw8IEV4dGVuZGVkUGF5bG9hZFNo
aWZ0KSB8IEZ1bGxUYWdUeXBlQm9vbCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIG1ha2VVbmRlZmluZWQoKQorICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VVbmRlZmluZWQoKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKEZ1bGxUYWdUeXBlVW5kZWZpbmVkKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFr
ZU51bGwoKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VOdWxs
KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZShGdWxsVGFnVHlwZU51
bGwpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBp
bnQzMl90IGludFZhbHVlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGludDMyX3QgaW50VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmF3VmFsdWUodikgPj4gSW50ZWdlclBheWxvYWRT
aGlmdCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHVpbnQzMl90IHVpbnRWYWx1ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSB1aW50MzJfdCB1aW50VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhd1ZhbHVlKHYpID4+IEludGVnZXJQ
YXlsb2FkU2hpZnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIGJvb2xWYWx1ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIGJvb2xWYWx1ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiByYXdWYWx1ZSh2KSAmIEV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRyX3Qg
cmF3VmFsdWUoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRy
X3QgcmF3VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odik7CisgICAgICAgICAgICByZXR1cm4gdi5pbW1l
ZGlhdGVWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBub25Jbmxp
bmVOYU4oKTsKICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0
ZTo6dHJ1ZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKHRydWUpOyB9Ci0gICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSB7IHJldHVybiBt
YWtlQm9vbChmYWxzZSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRl
Ojp1bmRlZmluZWRJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlVW5kZWZpbmVkKCk7IH0KLSAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1
cm4gbWFrZU51bGwoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6
Onplcm9JbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlSW50KDApOyB9Ci0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUludCgx
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVk
aWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKHRydWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKGZh
bHNlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dW5kZWZp
bmVkSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZVVuZGVmaW5lZCgpOyB9CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFr
ZU51bGwoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWVQdHIgSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMSk7
IH0KIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgaW1wb3NzaWJsZSBiZWNhdXNlIDB4NCBpcyBub3Qg
YSB2YWxpZCBwb2ludGVyIGJ1dCBhIHRhZyBvZiAwIHdvdWxkIGluZGljYXRlIG5vbi1pbW1lZGlh
dGUKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFs
dWUoKSB7IHJldHVybiBtYWtlVmFsdWUoMHg0KTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZVB0ciBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkgeyByZXR1cm4gbWFrZVZhbHVlKDB4
NCk7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKEpT
VmFsdWUqIHYpCisgICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4o
SlNWYWx1ZVB0ciB2KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKICAg
ICAgICAgaW50cHRyX3QgYml0cyA9IHJhd1ZhbHVlKHYpOwpAQCAtMzM3LDgwICszMzUsODAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICA6IGJpdHMgPT0gKEZ1bGxUYWdUeXBlQm9vbCB8
IEV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZSk7IC8vIGJvb2wgdHJ1ZQogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihK
U1ZhbHVlKiB2KQorICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRy
dW5jYXRlZFVJbnQzMihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNOdW1i
ZXIodikpOwogICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZnJvbShjaGFyIGkpCisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKGNoYXIgaSkKICAgICB7CiAgICAgICAg
IHJldHVybiBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
SlNJbW1lZGlhdGU6OmZyb20oc2lnbmVkIGNoYXIgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIgSlNJbW1lZGlhdGU6OmZyb20oc2lnbmVkIGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJ
bW1lZGlhdGU6OmZyb20odW5zaWduZWQgY2hhciBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBjaGFyIGkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpT
SW1tZWRpYXRlOjpmcm9tKHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpT
SW1tZWRpYXRlOjpmcm9tKHNob3J0IGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChp
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9t
KHVuc2lnbmVkIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRp
YXRlOjpmcm9tKHVuc2lnbmVkIHNob3J0IGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUlu
dChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpm
cm9tKGludCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJv
bShpbnQgaSkKICAgICB7CiAgICAgICAgIGlmICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+
IG1heEltbWVkaWF0ZUludCkpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAg
ICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBpZiAoaSA+
IG1heEltbWVkaWF0ZVVJbnQpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAg
ICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIg
SlNJbW1lZGlhdGU6OmZyb20obG9uZyBpKQogICAgIHsKICAgICAgICAgaWYgKChpIDwgbWluSW1t
ZWRpYXRlSW50KSB8IChpID4gbWF4SW1tZWRpYXRlSW50KSkKICAgICAgICAgICAgIHJldHVybiBu
b1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBpKQorICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBsb25n
IGkpCiAgICAgewogICAgICAgICBpZiAoaSA+IG1heEltbWVkaWF0ZVVJbnQpCiAgICAgICAgICAg
ICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcgbG9uZyBp
KQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShsb25nIGxv
bmcgaSkKICAgICB7CiAgICAgICAgIGlmICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+IG1h
eEltbWVkaWF0ZUludCkpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICBy
ZXR1cm4gbWFrZUludChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaSkpOwogICAgIH0KIAotICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBsb25n
IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2ln
bmVkIGxvbmcgbG9uZyBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPiBtYXhJbW1lZGlhdGVVSW50
KQogICAgICAgICAgICAgcmV0dXJuIG5vVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQo
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGRvdWJsZSBkKQorICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShkb3VibGUgZCkKICAgICB7CiAgICAgICAgIGNvbnN0
IGludCBpbnRWYWwgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwogCkBAIC00MjQsMTMgKzQyMiwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQoaW50VmFsKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZElu
dDMyKEpTVmFsdWUqIHYpCisgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRJbnQzMihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNO
dW1iZXIodikpOwogICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSBkb3VibGUgSlNJbW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWUqIHYpCisgICAg
QUxXQVlTX0lOTElORSBkb3VibGUgSlNJbW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWVQdHIgdikK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgICAgIGludCBpOwpA
QCAtNDQzLDM2ICs0NDEsMTMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihK
U1ZhbHVlKiB2LCB1aW50MzJfdCYgaSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlh
dGU6OmdldFVJbnQzMihKU1ZhbHVlUHRyIHYsIHVpbnQzMl90JiBpKQogICAgIHsKICAgICAgICAg
aSA9IHVpbnRWYWx1ZSh2KTsKICAgICAgICAgcmV0dXJuIGlzUG9zaXRpdmVOdW1iZXIodik7CiAg
ICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJ
bnQzMihKU1ZhbHVlKiB2LCBpbnQzMl90JiBpKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0lt
bWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZVB0ciB2LCBpbnQzMl90JiBpKQogICAg
IHsKICAgICAgICAgaSA9IGludFZhbHVlKHYpOwogICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7
CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0
ZWRVSW50MzIoSlNWYWx1ZSogdiwgdWludDMyX3QmIGkpCisgICAgQUxXQVlTX0lOTElORSBib29s
IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZVB0ciB2LCB1aW50MzJfdCYg
aSkKICAgICB7CiAgICAgICAgIHJldHVybiBnZXRVSW50MzIodiwgaSk7CiAgICAgfQogCi0gICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc1VuZGVmaW5lZCgpCisgICAgaW5saW5lIEpTVmFsdWVQ
dHIganNOdWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVk
aWF0ZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlUHRyIGpzQm9vbGVhbihib29sIGIp
CisgICAgeworICAgICAgICByZXR1cm4gYiA/IEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkg
OiBKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNW
YWx1ZVB0ciBqc1VuZGVmaW5lZCgpCiAgICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OnVuZGVmaW5lZEltbWVkaWF0ZSgpOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBqc051
bGwoKQorICAgIC8vIFRoZXNlIGFyZSBpZGVudGljYWwgbG9naWMgdG8gdGhlIEpTVmFsdWUgZnVu
Y3Rpb25zIGFib3ZlLCBhbmQgZmFzdGVyIHRoYW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMigp
LgorICAgIGludDMyX3QgdG9JbnQzMihkb3VibGUpOworICAgIHVpbnQzMl90IHRvVUludDMyKGRv
dWJsZSk7CisgICAgaW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7Cisg
ICAgdWludDMyX3QgdG9VSW50MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKworICAgIGlu
bGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1
ZSgpID09IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIGpzQm9v
bGVhbihib29sIGIpCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBiID8gSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSA6IEpT
SW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09
IGpzTnVsbCgpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVk
T3JOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNVbmRl
ZmluZWRPck51bGwoYXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0Jvb2xlYW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpp
c0Jvb2xlYW4oYXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpn
ZXRCb29sZWFuKGJvb2wmIHYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmlzQm9vbGVhbihhc1ZhbHVlKCkpKSB7CisgICAgICAgICAgICB2ID0gSlNJbW1lZGlhdGU6OnRv
Qm9vbGVhbihhc1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9v
bCBKU1ZhbHVlOjpnZXRCb29sZWFuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhc1Zh
bHVlKCkgPT0ganNCb29sZWFuKHRydWUpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgaW50
MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAg
ICAgIGludDMyX3QgaTsKKyAgICAgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKQorICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b0ludDMy
U2xvd0Nhc2UoZXhlYywgb2spOworICAgIH0KKworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVl
Ojp0b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICB1aW50MzJf
dCBpOworICAgICAgICBpZiAoZ2V0VHJ1bmNhdGVkVUludDMyKGkpKQorICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNl
KGV4ZWMsIG9rKTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50MzJfdCB0b0ludDMyKGRvdWJsZSB2
YWwpCisgICAgeworICAgICAgICBpZiAoISh2YWwgPj0gLTIxNDc0ODM2NDguMCAmJiB2YWwgPCAy
MTQ3NDgzNjQ4LjApKSB7CisgICAgICAgICAgICBib29sIGlnbm9yZWQ7CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbCk7CisgICAgfQorCisgICAgaW5saW5lIHVp
bnQzMl90IHRvVUludDMyKGRvdWJsZSB2YWwpCisgICAgeworICAgICAgICBpZiAoISh2YWwgPj0g
MC4wICYmIHZhbCA8IDQyOTQ5NjcyOTYuMCkpIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlZDsK
KyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWwpOworICAgIH0K
KworICAgIGlubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBi
b29sJiBvaykgY29uc3QKKyAgICB7CisgICAgICAgIGludDMyX3QgaTsKKyAgICAgICAgaWYgKGdl
dFRydW5jYXRlZEludDMyKGkpKSB7CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKGV4
ZWMsIG9rKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90
IGk7CisgICAgICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpIHsKKyAgICAgICAgICAgIG9r
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9D
TEFTU19GSVRTX0lOX0NFTEwoSlNOb3RBbk9iamVjdCk7CiAKIC8vIEpTVmFsdWUgbWV0aG9kcwot
SlNWYWx1ZSogSlNOb3RBbk9iamVjdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBKU05vdEFuT2JqZWN0Ojp0b1By
aW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7
CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5l
eGNlcHRpb24oKSA9PSBtX2V4Y2VwdGlvbik7CiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uOwogfQog
Ci1ib29sIEpTTm90QW5PYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMs
IGRvdWJsZSYsIEpTVmFsdWUqJikKK2Jvb2wgSlNOb3RBbk9iamVjdDo6Z2V0UHJpbWl0aXZlTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiwgSlNWYWx1ZVB0ciYpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKSA9
PSBtX2V4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTUsMTIgKzk1LDEyIEBAIGJv
b2wgSlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgSlNOb3RBbk9iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90JikKK3ZvaWQgSlNOb3RBbk9iamVj
dDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgLCBKU1ZhbHVlUHRyLCBQ
dXRQcm9wZXJ0eVNsb3QmKQogewogICAgIEFTU0VSVF9VTlVTRUQoZXhlYywgZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRpb24pOwogfQogCi12b2lk
IEpTTm90QW5PYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkLCBKU1ZhbHVlKikK
K3ZvaWQgSlNOb3RBbk9iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQsIEpTVmFs
dWVQdHIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAm
JiBleGVjLT5leGNlcHRpb24oKSA9PSBtX2V4Y2VwdGlvbik7CiB9CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTUgKzYw
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90
b3R5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAg
ICAgIH0KIAogICAgICBwcml2YXRlOgogICAgICAgICAvLyBKU1ZhbHVlIG1ldGhvZHMKLSAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKTsKKyAgICAgICAgdmlydHVh
bCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRv
TnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJp
bmcoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC04MSw4ICs4MSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5
U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVy
dHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJlckNlbGwuY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1KU1ZhbHVlKiBKU051bWJlckNlbGw6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlUHRyIEpTTnVtYmVyQ2VsbDo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxKU051bWJlckNlbGwqPih0aGlzKTsKIH0KIAotYm9vbCBKU051bWJl
ckNlbGw6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNW
YWx1ZSomIHZhbHVlKQorYm9vbCBKU051bWJlckNlbGw6OmdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpCiB7CiAgICAgbnVtYmVy
ID0gbV92YWx1ZTsKICAgICB2YWx1ZSA9IHRoaXM7CkBAIC05NiwyNyArOTYsMjcgQEAgYm9vbCBK
U051bWJlckNlbGw6OmdldFRydW5jYXRlZFVJbnQzMih1aQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1KU1ZhbHVlKiBKU051bWJlckNlbGw6OmdldEpTTnVtYmVyKCkKK0pTVmFsdWVQdHIgSlNOdW1i
ZXJDZWxsOjpnZXRKU051bWJlcigpCiB7CiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLU5FVkVSX0lO
TElORSBKU1ZhbHVlKiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgZCkKK05F
VkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSBkKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTnVtYmVyQ2VsbChleGVjLCBkKTsKIH0K
IAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpzTmFOKEV4ZWNTdGF0ZSogZXhlYykKK05FVkVSX0lO
TElORSBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gbmV3
IChleGVjKSBKU051bWJlckNlbGwoZXhlYywgTmFOKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFs
dWUqIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQorTkVW
RVJfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgZG91YmxlIGQpCiB7CiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNOdW1iZXJDZWxs
KGdsb2JhbERhdGEsIGQpOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNOYU4oSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQorTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIganNOYU4oSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTTnVt
YmVyQ2VsbChnbG9iYWxEYXRhLCBOYU4pOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU051bWJlckNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TnVtYmVyQ2VsbC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOdW1iZXJDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE1ICs0MywxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEpTTnVtYmVyQ2VsbCA6IHB1YmxpYyBKU0NlbGwgewogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOdW1iZXJD
ZWxsKEpTR2xvYmFsRGF0YSosIGRvdWJsZSk7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc05h
TihKU0dsb2JhbERhdGEqKTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChF
eGVjU3RhdGUqLCBkb3VibGUpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOYU4oRXhlY1N0
YXRlKik7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERh
dGEqLCBkb3VibGUpOworICAgICAgICBmcmllbmQgSlNWYWx1ZVB0ciBqc05hTihKU0dsb2JhbERh
dGEqKTsKKyAgICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSos
IGRvdWJsZSk7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSopOwog
ICAgIHB1YmxpYzoKICAgICAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1
ZSk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFs
dWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNTksNyAr
NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9UaGlz
U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1Ro
aXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0
SlNOdW1iZXIoKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7CiAK
ICAgICAgICAgaW50MzJfdCB0b0ludDMyKCkgY29uc3Q7CiAgICAgICAgIHVpbnQzMl90IHRvVUlu
dDMyKCkgY29uc3Q7CkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNlbmRp
ZgogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHBy
b3RvLCBUeXBlSW5mbyhOdW1iZXJUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0
ciBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE51bWJl
clR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
SlNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQpAQCAt
MTA3LDEyNCArMTA3LDEyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBleHRlcm4gY29uc3QgZG91
YmxlIE5hTjsKICAgICBleHRlcm4gY29uc3QgZG91YmxlIEluZjsKIAotICAgIEpTTnVtYmVyQ2Vs
bCogYXNOdW1iZXJDZWxsKEpTVmFsdWUqKTsKKyAgICBKU051bWJlckNlbGwqIGFzTnVtYmVyQ2Vs
bChKU1ZhbHVlUHRyKTsKIAotICAgIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEq
LCBkb3VibGUpOwotICAgIEpTVmFsdWUqIGpzTmFOKEpTR2xvYmFsRGF0YSopOwotICAgIEpTVmFs
dWUqIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqLCBkb3VibGUpOwotICAgIEpTVmFsdWUqIGpzTmFO
KEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSos
IGRvdWJsZSk7CisgICAgSlNWYWx1ZVB0ciBqc05hTihKU0dsb2JhbERhdGEqKTsKKyAgICBKU1Zh
bHVlUHRyIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqLCBkb3VibGUpOworICAgIEpTVmFsdWVQdHIg
anNOYU4oRXhlY1N0YXRlKik7CiAKLSAgICBpbmxpbmUgSlNOdW1iZXJDZWxsKiBhc051bWJlckNl
bGwoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTTnVtYmVyQ2VsbCogYXNOdW1iZXJDZWxs
KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+
aXNOdW1iZXIoKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU051bWJlckNlbGwqPihh
c0NlbGwodmFsdWUpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oZCk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGQpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZXhlYywgZCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRy
IGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgc2hvcnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFs
dWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJ
bW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChl
eGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzaG9ydCBpKQogICAgIHsK
LSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1Zh
bHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDog
anNOdW1iZXJDZWxsKGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSoganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgaSkKICAgICB7Ci0gICAgICAg
IEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVy
Q2VsbChleGVjLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
UHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBpKQogICAgIHsKLSAgICAgICAgSlNW
YWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBK
U0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxs
KGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9uZyBpKQogICAgIHsK
LSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1Zh
bHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDog
anNOdW1iZXJDZWxsKGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSoganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGxvbmcgaSkKICAg
ICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8g
diA6IGpzTnVtYmVyQ2VsbChleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgbG9uZyBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9uZyBsb25nIGkpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZXhlYywgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBk
KQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGRvdWJsZSBkKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGQpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShk
KTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGQpOwog
ICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBzaG9ydCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051
bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHNob3J0IGkpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZ2xvYmFsRGF0YSwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBq
c051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIHNob3J0IGkpCisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgdW5zaWduZWQgc2hvcnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVk
aWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20o
aSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgaW50IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVt
YmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGkpCiAgICAgewotICAgICAgICBKU1Zh
bHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpT
SW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwo
Z2xvYmFsRGF0YSwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051
bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGkpCisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJl
dHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
bG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGxvbmcgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0lt
bWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZy
b20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBp
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcg
aSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVy
biB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9u
ZyBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFs
RGF0YSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxv
bmcgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBpKQogICAgIHsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJD
ZWxsKGdsb2JhbERhdGEsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIApAQCAtMjUy
LDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNDOjp0b1VJbnQz
MlNsb3dDYXNlKG1fdmFsdWUsIHNjcmF0Y2gpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogSlNWYWx1ZTo6dG9KU051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTVmFsdWU6OnRvSlNOdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc051bWJlcihh
c1ZhbHVlKCkpID8gYXNWYWx1ZSgpIDoganNOdW1iZXIoZXhlYywgdGhpcy0+dG9OdW1iZXIoZXhl
YykpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSlNPYmplY3Q6Om1hcmsoKQogCiAgICAgc2l6
ZV90IHN0b3JhZ2VTaXplID0gbV9zdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3JhZ2VTaXplOyArK2kpIHsKLSAgICAgICAgSlNW
YWx1ZSogdiA9IG1fcHJvcGVydHlTdG9yYWdlW2ldOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBt
X3Byb3BlcnR5U3RvcmFnZVtpXTsKICAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkKICAgICAgICAg
ICAgIHYtPm1hcmsoKTsKICAgICB9CkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIHRocm93
U2V0dGVyRXJyb3IoRXhlY1N0YXRlKiAKIH0KIAogLy8gRUNNQSA4LjYuMi4yCi12b2lkIEpTT2Jq
ZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTT2JqZWN0Ojpw
dXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUp
OwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0g
SGVhcDo6aGVhcCh0aGlzKSk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgY29ucwogICAgICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpICYm
ICF2YWx1ZS0+aXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSlNWYWx1
ZSogbmV4dFByb3RvdHlwZVZhbHVlID0gdmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgbmV4dFBy
b3RvdHlwZVZhbHVlID0gdmFsdWU7CiAgICAgICAgIHdoaWxlIChuZXh0UHJvdG90eXBlVmFsdWUg
JiYgbmV4dFByb3RvdHlwZVZhbHVlLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVj
dCogbmV4dFByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90b3R5cGVWYWx1ZSktPnVud3JhcHBl
ZE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKG5leHRQcm90b3R5cGUgPT0gdGhpcykgewpAQCAt
MTIzLDcgKzEyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMK
ICAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVy
cyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlOworICAgIEpT
VmFsdWVQdHIgcHJvdG90eXBlOwogICAgIGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXM7ICFvYmot
PnN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IG9iaiA9IGFzT2JqZWN0
KHByb3RvdHlwZSkpIHsKICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAg
ICAgICAgaWYgKHByb3RvdHlwZS0+aXNOdWxsKCkpIHsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lk
IEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXM7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBl
KSkgewotICAgICAgICBpZiAoSlNWYWx1ZSogZ3MgPSBvYmotPmdldERpcmVjdChwcm9wZXJ0eU5h
bWUpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlUHRyIGdzID0gb2JqLT5nZXREaXJlY3QocHJvcGVy
dHlOYW1lKSkgewogICAgICAgICAgICAgaWYgKGdzLT5pc0dldHRlclNldHRlcigpKSB7CiAgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIHNldHRlckZ1bmMgPSBhc0dldHRlclNldHRlcihncyktPnNl
dHRlcigpOyAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0ZXJGdW5jKSB7CkBAIC0x
NjcsMTggKzE2NywxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
CiAgICAgcmV0dXJuOwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU09iamVjdDo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVl
KQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHB1dChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU09i
amVjdDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNP
YmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAg
ICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyk7CiB9CiAKLXZvaWQg
SlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNP
YmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIHB1
dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogfQpAQCAtMjI2LDkgKzIyNiw5IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gZGVsZXRlUHJvcGVydHko
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAotc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBjYWxsRGVmYXVsdFZhbHVl
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBvYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBv
YmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsK
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNhbGxEZWZhdWwKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKIAotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Y29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgY29uc3RfY2FzdDxKU09iamVjdCo+KG9iamVjdCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAg
ICBBU1NFUlQoIXJlc3VsdC0+aXNHZXR0ZXJTZXR0ZXIoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7CkBAIC0yNDgsNyAr
MjQ4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogY2FsbERlZmF1bAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgcmVzdWx0KQorYm9vbCBKU09i
amVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIs
IEpTVmFsdWVQdHImIHJlc3VsdCkKIHsKICAgICByZXN1bHQgPSBkZWZhdWx0VmFsdWUoZXhlYywg
UHJlZmVyTnVtYmVyKTsKICAgICBudW1iZXIgPSByZXN1bHQtPnRvTnVtYmVyKGV4ZWMpOwpAQCAt
MjU2LDE4ICsyNTYsMjIgQEAgYm9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dAogfQogCiAvLyBFQ01BIDguNi4yLjYKLUpTVmFsdWUqIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1Zh
bHVlUHRyIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgLy8gTXVzdCBjYWxsIHRvU3RyaW5nIGZp
cnN0IGZvciBEYXRlIG9iamVjdHMuCiAgICAgaWYgKChoaW50ID09IFByZWZlclN0cmluZykgfHwg
KGhpbnQgIT0gUHJlZmVyTnVtYmVyICYmIHByb3RvdHlwZSgpID09IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZGF0ZVByb3RvdHlwZSgpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSogdmFs
dWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvU3RyaW5nKSkKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGNhbGxEZWZhdWx0
VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcp
OworICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAg
IGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlz
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgICAgIHZhbHVlID0gY2FsbERl
ZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1
ZU9mKTsKKyAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVG
dW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAg
ICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhp
cywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpOworICAgICAgICBpZiAodmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNh
bGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
dG9TdHJpbmcpKQorICAgICAgICB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVj
LCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpOworICAgICAgICBpZiAodmFs
dWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCkBAIC0yODksNyArMjkzLDcg
QEAgY29uc3QgSGFzaEVudHJ5KiBKU09iamVjdDo6ZmluZFByb3BlcnR5SAogCiB2b2lkIEpTT2Jq
ZWN0OjpkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbikKIHsKLSAgICBKU1ZhbHVlKiBvYmpl
Y3QgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG9iamVjdCA9IGdl
dERpcmVjdChwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0dldHRl
clNldHRlcigpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpKTsKICAgICAgICAgYXNHZXR0ZXJTZXR0ZXIob2JqZWN0KS0+c2V0R2V0dGVy
KGdldHRlckZ1bmN0aW9uKTsKQEAgLTMxNiw3ICszMjAsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZp
bmVHZXR0ZXIoRXhlY1N0YXRlKiBlCiAKIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNl
dHRlckZ1bmN0aW9uKQogewotICAgIEpTVmFsdWUqIG9iamVjdCA9IGdldERpcmVjdChwcm9wZXJ0
eU5hbWUpOworICAgIEpTVmFsdWVQdHIgb2JqZWN0ID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7
CiAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAg
QVNTRVJUKG1fc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogICAgICAg
ICBhc0dldHRlclNldHRlcihvYmplY3QpLT5zZXRTZXR0ZXIoc2V0dGVyRnVuY3Rpb24pOwpAQCAt
MzQxLDEyICszNDUsMTEgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSog
ZQogICAgIGdldHRlclNldHRlci0+c2V0U2V0dGVyKHNldHRlckZ1bmN0aW9uKTsKIH0KIAotSlNW
YWx1ZSogSlNPYmplY3Q6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlUHRyIEpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVl
ID0gb2JqZWN0LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgIGlmIChKU1ZhbHVlUHRyIHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3QocHJvcGVy
dHlOYW1lKSkgewogICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNHZXR0ZXJTZXR0ZXIoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIEpTT2JqZWN0
KiBmdW5jdGlvbk9iamVjdCA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CkBAIC0z
NjEsMTIgKzM2NCwxMSBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwR2V0dGVyKEV4ZWNTdGF0
CiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pTVmFsdWVQdHIgSlNPYmplY3Q6Omxv
b2t1cFNldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgSlNWYWx1ZSogdmFsdWUgPSBvYmplY3QtPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVQdHIgdmFsdWUgPSBvYmplY3Qt
PmdldERpcmVjdChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc0dl
dHRlclNldHRlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUp
LT5zZXR0ZXIoKTsKQEAgLTM4MSw3ICszODMsNyBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3Vw
U2V0dGVyKEV4ZWNTdGF0CiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0OjpoYXNJbnN0YW5jZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90bykKK2Jvb2wgSlNP
YmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNW
YWx1ZVB0ciBwcm90bykKIHsKICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKSB7CiAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2Jq
ZWN0IHdpdGggYW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIik7CkBAIC0zOTMsNyArMzk1
LDcgQEAgYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleAogCiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICB3aGlsZSAoKG9iamVjdCA9IG9i
amVjdC0+cHJvdG90eXBlKCktPmdldE9iamVjdCgpKSkgewotICAgICAgICBpZiAob2JqZWN0ID09
IHByb3RvKQorICAgICAgICBpZiAocHJvdG8gPT0gb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTQzNCw3ICs0MzYsNyBAQCBib29s
IEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uCiAKIGRvdWJsZSBKU09iamVjdDo6
dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIEpTVmFsdWUqIHByaW1pdGl2
ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7CisgICAgSlNWYWx1ZVB0ciBwcmlt
aXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAog
ICAgICAgICByZXR1cm4gMC4wOwogICAgIHJldHVybiBwcmltaXRpdmUtPnRvTnVtYmVyKGV4ZWMp
OwpAQCAtNDQyLDcgKzQ0NCw3IEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRl
KiBleGUKIAogVVN0cmluZyBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewotICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0
cmluZyk7CisgICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVm
ZXJTdHJpbmcpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
ICIiOwogICAgIHJldHVybiBwcmltaXRpdmUtPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNDg5LDcgKzQ5
MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFQKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCZl
eGVjLT5nbG9iYWxEYXRhKCkpKSwgZnVuY3Rpb24sIGF0dHIpOwogfQogCi1ORVZFUl9JTkxJTkUg
dm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3Qs
IEpTVmFsdWUqKiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0
dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZVB0ciogbG9jYXRpb24p
CiB7CiAgICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKCps
b2NhdGlvbiktPmdldHRlcigpKQogICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVu
Y3Rpb24pOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0aW9uICAgICA9IDEg
PDwgNCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhh
c2h0YWJsZXMKICAgICB9OwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlKiogUHJvcGVydHlTdG9yYWdl
OworICAgIHR5cGVkZWYgSlNWYWx1ZVB0ciogUHJvcGVydHlTdG9yYWdlOwogCiAgICAgY2xhc3Mg
SlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEJhdGNoZWRU
cmFuc2l0aW9uT3B0aW1pemVyOwpAQCAtNjksOCArNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBib29sIGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKSBjb25zdCB7
IHJldHVybiBKU0NlbGw6OmlzT2JqZWN0KGNsYXNzSW5mbyk7IH0KIAotICAgICAgICBKU1ZhbHVl
KiBwcm90b3R5cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSog
cHJvdG90eXBlKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKICAgICAgICAg
U3RydWN0dXJlKiBpbmhlcml0b3JJRCgpOwpAQCAtNzksOCArNzksOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAKLSAgICAg
ICAgSlNWYWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdl
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC04OCwxMSAr
ODgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmli
dXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdp
dGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0
aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgYm9vbCBw
cm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwogCkBAIC0xMDMsMTQgKzEwMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0
eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCi0gICAgICAgIHZpcnR1YWwg
SlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBoYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgSlNWYWx1ZSogcHJvdG90eXBlUHJv
cGVydHkpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNW
YWx1ZVB0ciwgSlNWYWx1ZVB0ciBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsK
IAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlKiYgdmFsdWUpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91Ymxl
JiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVlKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVj
U3RhdGUqKSBjb25zdDsKQEAgLTEyMiwzMCArMTIyLDMwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0Owog
CiAgICAgICAgIC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5
IG1hcC4KLSAgICAgICAgSlNWYWx1ZSogZ2V0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXREaXJlY3QoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qg
b2Zmc2V0ID0gbV9zdHJ1Y3R1cmUtPmdldChwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0
dXJuIG9mZnNldCAhPSBXVEY6Om5vdEZvdW5kID8gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA6
IG5vVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqKiBnZXREaXJlY3RMb2Nh
dGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisgICAgICAgIEpTVmFsdWVQdHIq
IGdldERpcmVjdExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICAg
ICAgewogICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlLT5nZXQocHJvcGVy
dHlOYW1lKTsKICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCA/IGxv
Y2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1
ZSoqIGdldERpcmVjdExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQmIGF0dHJpYnV0ZXMpCisgICAgICAgIEpTVmFsdWVQdHIqIGdldERpcmVjdExvY2F0aW9u
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVjdHVyZS0+Z2V0KHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IFdU
Rjo6bm90Rm91bmQgPyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQog
Ci0gICAgICAgIHNpemVfdCBvZmZzZXRGb3JMb2NhdGlvbihKU1ZhbHVlKiogbG9jYXRpb24pCisg
ICAgICAgIHNpemVfdCBvZmZzZXRGb3JMb2NhdGlvbihKU1ZhbHVlUHRyKiBsb2NhdGlvbikKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uIC0gbV9wcm9wZXJ0eVN0b3JhZ2U7
CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiogbG9jYXRpb25Gb3JPZmZzZXQoc2l6ZV90
IG9mZnNldCkKKyAgICAgICAgSlNWYWx1ZVB0ciogbG9jYXRpb25Gb3JPZmZzZXQoc2l6ZV90IG9m
ZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnR5U3RvcmFnZVtv
ZmZzZXRdOwogICAgICAgICB9CkBAIC0xNTYsMjIgKzE1NiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBoYXNDdXN0b21Qcm9wZXJ0aWVzKCkgeyByZXR1cm4gIW1fc3RydWN0dXJl
LT5pc0VtcHR5KCk7IH0KICAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCi0g
ICAgICAgIHZvaWQgcHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHIgPSAwKTsKLSAgICAgICAgdm9pZCBwdXREaXJlY3Qo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQg
YXR0ciwgYm9vbCBjaGVja1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgICAg
ICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUsIHVuc2lnbmVkIGF0dHIgPSAwKTsKKyAgICAgICAgdm9pZCBwdXREaXJlY3QoY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBh
dHRyLCBib29sIGNoZWNrUmVhZE9ubHksIFB1dFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgICAg
IHZvaWQgcHV0RGlyZWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiwgdW5zaWduZWQgYXR0ciA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIHVuc2lnbmVkIGF0dHIgPSAwKTsKKyAgICAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFs
dWUsIHVuc2lnbmVkIGF0dHIgPSAwKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3RGdW5jdGlvbldp
dGhvdXRUcmFuc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24sIHVuc2lnbmVkIGF0dHIgPSAwKTsKIAogICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93
biBwcm9wZXJ0eSBvZmZzZXRzLgotICAgICAgICBKU1ZhbHVlKiBnZXREaXJlY3RPZmZzZXQoc2l6
ZV90IG9mZnNldCkgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XTsgfQotICAgICAg
ICB2b2lkIHB1dERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0LCBKU1ZhbHVlKiB2YWx1ZSkgeyBt
X3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdID0gdmFsdWU7IH0KKyAgICAgICAgSlNWYWx1ZVB0ciBn
ZXREaXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNldCkgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2Vb
b2Zmc2V0XTsgfQorICAgICAgICB2b2lkIHB1dERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0LCBK
U1ZhbHVlUHRyIHZhbHVlKSB7IG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF0gPSB2YWx1ZTsgfQog
Ci0gICAgICAgIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1Zh
bHVlKiogbG9jYXRpb24pOworICAgICAgICB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJv
cGVydHlTbG90JiwgSlNWYWx1ZVB0ciogbG9jYXRpb24pOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5l
U2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNldHRlckZ1bmN0aW9uKTsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBsb29rdXBHZXR0
ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBsb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGxvb2t1cEdldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICB2
aXJ0dWFsIEpTVmFsdWVQdHIgbG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzR2xvYmFsT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVmFyaWFi
bGVPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZVN0b3JhZ2VD
YXBhY2l0eSA9IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQmFzZVN0
b3JhZ2VDYXBhY2l0eSA9IDE2OwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7
CiAgICAgICAgIH0KQEAgLTIwMiwxNCArMjAyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlPiBtX2luaGVyaXRvcklEOwogCiAgICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBtX3Byb3BlcnR5U3RvcmFnZTsgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBtX2lubGlu
ZVN0b3JhZ2VbaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX2lu
bGluZVN0b3JhZ2VbaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9OwogCi0gICAgSlNPYmpl
Y3QqIGFzT2JqZWN0KEpTVmFsdWUqKTsKKyAgICBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZVB0
cik7CiAKICAgICBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKik7CiAK
LWlubGluZSBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZSogdmFsdWUpCitpbmxpbmUgSlNPYmpl
Y3QqIGFzT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzQ2VsbCh2YWx1
ZSktPmlzT2JqZWN0KCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFzQ2Vs
bCh2YWx1ZSkpOwpAQCAtMjMzLDEyICsyMzMsMTIgQEAgaW5saW5lIEpTT2JqZWN0Ojp+SlNPYmpl
Y3QoKQogICAgIG1fc3RydWN0dXJlLT5kZXJlZigpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNP
YmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6cHJv
dG90eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTVmFsdWUqIHBy
b3RvdHlwZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBw
cm90b3R5cGUpCiB7CiAgICAgQVNTRVJUKHByb3RvdHlwZSk7CiAgICAgUmVmUHRyPFN0cnVjdHVy
ZT4gbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKG1f
c3RydWN0dXJlLCBwcm90b3R5cGUpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIGlubGluZSBib29sIEpT
VmFsdWU6OmlzT2JqZWN0KGNvbnN0IENsYXMKIAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoSlNWYWx1
ZSoqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgeworICAgIGlm
IChKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkp
IHsKICAgICAgICAgaWYgKG1fc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
JiYgbG9jYXRpb25bMF0tPmlzR2V0dGVyU2V0dGVyKCkpCiAgICAgICAgICAgICBmaWxsR2V0dGVy
UHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQpAQCAtMjk1LDcgKzI5
NSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3cKIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90Rm9yV3JpdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0g
ICAgaWYgKEpTVmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcykpIHsKKyAgICBpZiAoSlNWYWx1ZVB0ciogbG9jYXRpb24gPSBnZXREaXJl
Y3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSB7CiAgICAgICAgIGlmIChtX3N0
cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uWzBdLT5pc0dl
dHRlclNldHRlcigpKSB7CiAgICAgICAgICAgICBzbG90SXNXcml0ZWFibGUgPSBmYWxzZTsKICAg
ICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOwpAQCAtMzM5
LDcgKzMzOSw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXgKICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAob2JqZWN0LT5mYXN0R2V0T3duUHJvcGVydHlT
bG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOwogICAgICAgICBp
ZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKQEAgLTM1MiwxNCArMzUyLDE0IEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXgKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBKU1ZhbHVl
KiBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHBy
b3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBlLT5p
c09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBvYmplY3QgPSBh
c09iamVjdChwcm90b3R5cGUpOwogICAgIH0KIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0
OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNv
bnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXMpOwogICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQpAQCAtMzY4LDcgKzM2OCw3IEBAIGlu
bGluZSBKU1ZhbHVlKiBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09i
amVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAog
ewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwogICAgIGlmIChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQpA
QCAtMzc3LDEzICszNzcsMTMgQEAgaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0OjpnZXQoRXhlY1N0
YXRlKgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIHVuc2lnbmVkIGF0dHIpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0
cikKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBwdXREaXJlY3QocHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0ciwgZmFsc2UsIHNsb3QpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgY2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IGJvb2wgY2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VS
VCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0
aGlzKSk7CiAKQEAgLTQ0NCw3ICs0NDQsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0KGNvbnN0IElkCiAgICAgc2V0U3RydWN0dXJlKHN0cnVjdHVyZS5yZWxlYXNlKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiB7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IG1fc3RydWN0dXJl
LT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOwogICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVj
dHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwpAQCAtNDYwLDE4ICs0NjAsMTggQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnRyYW5zaXRp
b25UbyhTdHJ1YwogICAgIHNldFN0cnVjdHVyZShuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUg
SlNWYWx1ZSogSlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIgSlNP
YmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBwcmVmZXJyZWRUeXBlKSBjb25zdAogewogICAgIHJldHVybiBkZWZhdWx0VmFsdWUoZXhlYywg
cHJlZmVycmVkVHlwZSk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUg
SlNWYWx1ZVB0ciBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAg
ICAgcmV0dXJuIGdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1pbmxpbmUgSlNW
YWx1ZSogSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBK
U1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKGFzVmFsdWUoKSwgZXhlYyk7CkBAIC00ODQs
MjAgKzQ4NCwyMCBAQCBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogCiAg
ICAgICAgIGlmIChjZWxsLT5mYXN0R2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBBU1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgIEpTVmFs
dWUqIHByb3RvdHlwZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnByb3RvdHlwZSgp
OworICAgICAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
Y2VsbCktPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBjZWxsID0gYXNPYmpl
Y3QocHJvdG90eXBlKTsKICAgICB9CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUgSlNW
YWx1ZVB0ciBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgcmV0dXJuIGdl
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNWYWx1
ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QK
IHsKICAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkp
KSB7CiAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBKU0ltbWVkaWF0ZTo6cHJvdG90eXBl
KGFzVmFsdWUoKSwgZXhlYyk7CkBAIC01MTAsMTQgKzUxMCwxNCBAQCBpbmxpbmUgSlNWYWx1ZSog
SlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgICAgIGlmIChjZWxsLT5nZXRPd25Qcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiBzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIEFTU0VSVChjZWxsLT5pc09i
amVjdCgpKTsKLSAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICgh
cHJvdG90eXBlLT5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIGNlbGwgPSBwcm90b3R5cGUtPmFzQ2VsbCgpOwogICAgIH0KIH0KIAotaW5saW5l
IHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoraW5saW5l
IHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpKSkgewog
ICAgICAgICBKU0ltbWVkaWF0ZTo6dG9PYmplY3QoYXNWYWx1ZSgpLCBleGVjKS0+cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIGlubGluZSB2
b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMKICAgICBhc0NlbGwoKS0+cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVl
KQoraW5saW5lIHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWShKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgpKSkpIHsKICAgICAgICAgSlNJbW1lZGlhdGU6OnRv
T2JqZWN0KGFzVmFsdWUoKSwgZXhlYyktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
QEAgLTUzOSw4ICs1MzksOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmFsbG9jYXRl
UHJvCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIAotICAgIEpTVmFsdWUqKiBv
bGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBtX3Byb3BlcnR5U3Rv
cmFnZSA9IG5ldyBKU1ZhbHVlKltuZXdTaXplXTsKKyAgICBKU1ZhbHVlUHRyKiBvbGRQcm9wZXJ0
eVN0b3JhZ2UgPSBtX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBtX3Byb3BlcnR5U3RvcmFnZSA9IG5l
dyBKU1ZhbHVlUHRyW25ld1NpemVdOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9s
ZFNpemU7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0eVN0b3JhZ2VbaV0gPSBvbGRQcm9wZXJ0eVN0
b3JhZ2VbaV07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMg
KzM3LDEzIEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6On5KU1Byb3BlcnR5TmFtZUkKIHsKIH0K
IAotSlNWYWx1ZSogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKK0pTVmFsdWVQdHIgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbm9WYWx1
ZSgpOwogfQogCi1ib29sIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmLCBKU1ZhbHVlKiYpCitib29sIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmLCBKU1ZhbHVlUHRy
JikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAko
cmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKik7CisgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CiAKICAgICAgICAgdmly
dHVhbCB+SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1
ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91
YmxlJiwgSlNWYWx1ZSomKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYsIEpTVmFsdWVQ
dHImKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTUzLDcg
KzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
IAotICAgICAgICBKU1ZhbHVlKiBuZXh0KEV4ZWNTdGF0ZSopOworICAgICAgICBKU1ZhbHVlUHRy
IG5leHQoRXhlY1N0YXRlKik7CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgcHJp
dmF0ZToKQEAgLTgzLDcgKzgzLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpT
UHJvcGVydAogewogfQogCi1pbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdikKK2lubGlu
ZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I7CkBAIC05NCw3ICs5NCw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1By
b3BlcnQKICAgICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKG8sIHBy
b3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKSk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yOjpuZXh0KEV4ZWNTdGF0ZSogZXhlYykKK2lubGluZSBKU1ZhbHVlUHRy
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om5leHQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlm
IChtX3Bvc2l0aW9uID09IG1fZW5kKQogICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCShyZXZp
c2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNPYmplY3QqIEpTU3RhdGlj
U2NvcGVPYmplY3Q6OnRvVGhpc09iagogICAgIHJldHVybiBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KTsKIH0KIAotdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JikKK3ZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikK
IHsKICAgICBpZiAoc3ltYm9sVGFibGVQdXQocHJvcGVydHlOYW1lLCB2YWx1ZSkpCiAgICAgICAg
IHJldHVybjsKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQo
RXhlY1N0YXRlKgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTU3RhdGlj
U2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2
b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKIHsKICAgICBpZiAoc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgfTsK
ICAgICAgICAgCiAgICAgcHVibGljOgotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQorICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLnN0YXRpY1Njb3BlU3RydWN0dXJlLCBuZXcgSlNTdGF0aWNTY29wZU9iamVjdERhdGEo
KSkKICAgICAgICAgewogICAgICAgICAgICAgZCgpLT5yZWdpc3RlclN0b3JlID0gdmFsdWU7CkBA
IC01NSwxMCArNTUsMTAgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgdmlydHVhbCBKU09iamVj
dCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVh
YmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dFdpdGhB
dHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2
b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1Zh
bHVlUHRyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIE5lZWRzVGhpc0NvbnZl
cnNpb24pKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0
cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90
bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0RGF0YSogZCgpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTU3RhdGljU2NvcGVPYmplY3REYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7
IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMiArMzAsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIEpTU3RyaW5n
Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAor
SlNWYWx1ZVB0ciBKU1N0cmluZzo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU1N0cmluZyo+KHRo
aXMpOwogfQogCi1ib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSkKK2Jvb2wgSlNTdHJpbmc6OmdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUp
CiB7CiAgICAgdmFsdWUgPSB0aGlzOwogICAgIG51bWJlciA9IG1fdmFsdWUudG9Eb3VibGUoKTsK
QEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBKU1N0cmluZzo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBzbG90LnNldEJhc2UodGhpcyk7CiAgICAgSlNP
YmplY3QqIG9iamVjdDsKLSAgICBmb3IgKEpTVmFsdWUqIHByb3RvdHlwZSA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCk7ICFwcm90b3R5cGUtPmlzTnVsbCgp
OyBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpKSB7CisgICAgZm9yIChKU1ZhbHVlUHRy
IHByb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBl
KCk7ICFwcm90b3R5cGUtPmlzTnVsbCgpOyBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgp
KSB7CiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgICAgIGlmIChv
YmplY3QtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fdmFsdWUuc2l6ZSgpKTsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNHbG9i
YWxEYXRhKiwgdW5zaWduZWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpT
VmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5m
byhTdHJpbmdUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGVudW0gVlB0clN0ZWFsaW5nSGFja1R5cGUgeyBWUHRyU3RlYWxpbmdIYWNrIH07CkBA
IC05OSw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpOworICAg
ICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVlKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtMTE3LDkgKzExNyw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBVU3RyaW5nIG1fdmFsdWU7CiAgICAgfTsKIAot
ICAgIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKik7CisgICAgSlNTdHJpbmcqIGFzU3RyaW5n
KEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKiB2
YWx1ZSkKKyAgICBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNTdHJpbmcoKSk7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCh2YWx1ZSkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIxICsyMCwyNSBAQAogICoK
ICAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBzaXplX3QKKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKwogI2lmbmRlZiBKU1ZhbHVlX2gKICNkZWZpbmUgSlNWYWx1ZV9oCiAKICNpbmNsdWRl
ICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKLSNpbmNsdWRlICJKU0lt
bWVkaWF0ZS5oIgotI2luY2x1ZGUgIlVTdHJpbmcuaCIKLSNpbmNsdWRlIDxzdGRkZWYuaD4gLy8g
Zm9yIHNpemVfdAorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIElkZW50aWZpZXI7CisgICAgY2xhc3MgSlNDZWxsOworICAgIGNsYXNz
IEpTT2JqZWN0OwogICAgIGNsYXNzIEpTU3RyaW5nOwogICAgIGNsYXNzIFByb3BlcnR5U2xvdDsK
ICAgICBjbGFzcyBQdXRQcm9wZXJ0eVNsb3Q7CisgICAgY2xhc3MgVVN0cmluZzsKIAogICAgIHN0
cnVjdCBDbGFzc0luZm87CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtNzYsMTUgKzgwLDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGdldFRydW5jYXRlZFVJbnQzMih1aW50
MzJfdCYpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCi0g
ICAgICAgIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0g
Tm9QcmVmZXJlbmNlKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhl
Y1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImKTsKIAogICAgICAgICBib29sIHRv
Qm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJz
aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhh
cwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCiAgICAgICAg
IGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogdG9K
U051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsgLy8gRmFzdCBwYXRoIGZvciB3aGVuIHlvdSBleHBl
Y3QgdGhhdCB0aGUgdmFsdWUgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAgSlNWYWx1
ZVB0ciB0b0pTTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OyAvLyBGYXN0IHBhdGggZm9yIHdoZW4g
eW91IGV4cGVjdCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgogCiAgICAg
ICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTEwNSwxMiArMTA5LDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCiAgICAgICAgIC8vIE9i
amVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCi0g
ICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAgICAgSlNW
YWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAg
ICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7
CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAg
ICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29u
c3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0cik7CiAgICAgICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCkBAIC0xMTksOSArMTIz
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgdG9UaGlzU3RyaW5nKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRl
Kik7CiAKLSAgICAgICAgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsgLy8gMCBpZiB0aGlzIGlzIG5v
dCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRKU051
bWJlcigpOyAvLyAwIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAog
Ci0gICAgICAgIEpTVmFsdWUqIGFzVmFsdWUoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBh
c1ZhbHVlKCkgY29uc3Q7CiAKICAgICAgICAgSlNDZWxsKiBhc0NlbGwoKSBjb25zdDsKIApAQCAt
MTMyLDEwOCArMTM2LDg4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MzJfdCB0b1VJ
bnQzMlNsb3dDYXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKICAgICB9OwogCi0gICAg
Ly8gVGhlc2UgYXJlIGlkZW50aWNhbCBsb2dpYyB0byB0aGUgSlNWYWx1ZSBmdW5jdGlvbnMgYWJv
dmUsIGFuZCBmYXN0ZXIgdGhhbiBqc051bWJlcihudW1iZXIpLT50b0ludDMyKCkuCi0gICAgaW50
MzJfdCB0b0ludDMyKGRvdWJsZSk7Ci0gICAgdWludDMyX3QgdG9VSW50MzIoZG91YmxlKTsKLSAg
ICBpbnQzMl90IHRvSW50MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKLSAgICB1aW50MzJf
dCB0b1VJbnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOworICAgIGNsYXNzIEpTSW1tZWRp
YXRlOworICAgIGNsYXNzIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyOwogCi0gICAgaW5saW5lIEpT
VmFsdWUqIEpTVmFsdWU6OmFzVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SlNWYWx1ZSo+KHRoaXMpOwotICAgIH0KKyAgICBjbGFzcyBKU1ZhbHVlUHRyIHsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEpTSW1tZWRpYXRlOwogCi0gICAgaW5saW5lIGJvb2wgSlNW
YWx1ZTo6aXNVbmRlZmluZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFzVmFsdWUo
KSA9PSBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgbWFr
ZUltbWVkaWF0ZShpbnRwdHJfdCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWVQdHIocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAg
fQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNOdWxsKCk7Ci0gICAgfQorICAgICAgICBpbnRwdHJf
dCBpbW1lZGlhdGVWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX3B0cik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHVi
bGljOgorICAgICAgICBKU1ZhbHVlUHRyKCkKKyAgICAgICAgICAgIDogbV9wdHIoMCkKKyAgICAg
ICAgeworICAgICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9y
TnVsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzVW5kZWZp
bmVkT3JOdWxsKGFzVmFsdWUoKSk7Ci0gICAgfQorICAgICAgICBKU1ZhbHVlUHRyKEpTVmFsdWUq
IHB0cikKKyAgICAgICAgICAgIDogbV9wdHIocHRyKQorICAgICAgICB7CisgICAgICAgIH0KIAot
ICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzQm9vbGVhbihhc1ZhbHVlKCkpOwotICAgIH0KKyAgICAg
ICAgSlNWYWx1ZVB0cihjb25zdCBKU1ZhbHVlKiBwdHIpCisgICAgICAgICAgICA6IG1fcHRyKGNv
bnN0X2Nhc3Q8SlNWYWx1ZSo+KHB0cikpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0gICAgaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6Z2V0Qm9vbGVhbihib29sJiB2KSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4oYXNWYWx1ZSgpKSkgewotICAgICAgICAgICAg
diA9IEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4oYXNWYWx1ZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBKU1ZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fcHRyOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0Qm9vbGVh
bigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzQm9vbGVhbih0
cnVlKTsKLSAgICB9CisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGludDMyX3QgaTsKLSAgICAgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKQotICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHJldHVybiB0b0lu
dDMyU2xvd0Nhc2UoZXhlYywgb2spOwotICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEpTVmFsdWVQdHIgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3B0ciA9PSBvdGhlci5tX3B0cjsKKyAgICAgICAgfQogCi0gICAgaW5saW5lIHVpbnQzMl90
IEpTVmFsdWU6OnRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAgICB7Ci0gICAgICAg
IHVpbnQzMl90IGk7Ci0gICAgICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpCi0gICAgICAg
ICAgICByZXR1cm4gaTsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgcmV0dXJuIHRvVUludDMy
U2xvd0Nhc2UoZXhlYywgb2spOwotICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEpTVmFsdWVQdHIgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3B0ciAhPSBvdGhlci5tX3B0cjsKKyAgICAgICAgfQogCi0gICAgaW5saW5lIGludDMyX3QgdG9J
bnQzMihkb3VibGUgdmFsKQotICAgIHsKLSAgICAgICAgaWYgKCEodmFsID49IC0yMTQ3NDgzNjQ4
LjAgJiYgdmFsIDwgMjE0NzQ4MzY0OC4wKSkgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJTbG93Q2FzZSh2YWwsIGlnbm9yZWQpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIGVuY29kZShKU1ZhbHVlUHRyIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlcio+KHZhbHVlLm1fcHRyKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsKTsKLSAgICB9CiAKLSAgICBpbmxpbmUgdWludDMy
X3QgdG9VSW50MzIoZG91YmxlIHZhbCkKLSAgICB7Ci0gICAgICAgIGlmICghKHZhbCA+PSAwLjAg
JiYgdmFsIDwgNDI5NDk2NzI5Ni4wKSkgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVkKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVQdHIgZGVjb2RlKEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
SlNWYWx1ZSo+KHB0cikpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4odmFsKTsKLSAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b0lu
dDMyKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSlNWYWx1ZSogbV9wdHI7CisgICAgfTsKKworICAgIGlubGluZSBKU1ZhbHVlUHRyIEpTVmFs
dWU6OmFzVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgaW50MzJfdCBpOwotICAgICAgICBp
ZiAoZ2V0VHJ1bmNhdGVkSW50MzIoaSkpIHsKLSAgICAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nh
c2UoZXhlYywgb2spOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cih0aGlzKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoRXhlY1N0YXRlKiBleGVjLCBi
b29sJiBvaykgY29uc3QKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBub1ZhbHVlKCkKICAgICB7Ci0g
ICAgICAgIHVpbnQzMl90IGk7Ci0gICAgICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpIHsK
LSAgICAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVQdHIoKTsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEpTVmFsdWVQdHIgYSwgY29uc3QgSlNWYWx1ZSogYikgeyByZXR1cm4gYSA9PSBKU1ZhbHVl
UHRyKGIpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlKiBhLCBj
b25zdCBKU1ZhbHVlUHRyIGIpIHsgcmV0dXJuIEpTVmFsdWVQdHIoYSkgPT0gYjsgfQorCisgICAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIGEsIGNvbnN0IEpTVmFsdWUq
IGIpIHsgcmV0dXJuIGEgIT0gSlNWYWx1ZVB0cihiKTsgfQorICAgIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgSlNWYWx1ZSogYSwgY29uc3QgSlNWYWx1ZVB0ciBiKSB7IHJldHVybiBKU1Zh
bHVlUHRyKGEpICE9IGI7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1Zh
bHVlX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHB1YmxpYzoKICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1
cm4gKmQtPnN5bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRy
aWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQg
YXR0cmlidXRlcykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwpAQCAtOTAsOCArOTAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsK
LSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSop
OwotICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRp
ZmllciYsIEpTVmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgYm9vbCBzeW1i
b2xUYWJsZVB1dChjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0cik7CisgICAgICAgIGJvb2wg
c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0
ciwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERhdGEq
IGQ7CiAgICAgfTsKQEAgLTExNyw3ICsxMTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6
OnN5bWJvbFRhYmxlUHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUpCisgICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXQo
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9
PSBIZWFwOjpoZWFwKHRoaXMpKTsKIApAQCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1Zhcmlh
YmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAg
aW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUp
IHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTMgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBleHBsaWNpdCBKU1dy
YXBwZXJPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKIAogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNWYWx1ZSogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxWYWx1
ZTsgfQotICAgICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSopOworICAgICAgICBK
U1ZhbHVlUHRyIGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsVmFsdWU7
IH0KKyAgICAgICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWVQdHIpOwogICAgICAgICAK
ICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSlNWYWx1ZSogbV9pbnRlcm5hbFZhbHVlOworICAgICAgICBKU1ZhbHVlUHRyIG1faW50
ZXJuYWxWYWx1ZTsKICAgICB9OwogICAgIAogICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpT
V3JhcHBlck9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQpAQCAtNDgsNyAr
NDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2
b2lkIEpTV3JhcHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBpbmxpbmUgdm9pZCBKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUoSlNWYWx1ZVB0
ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCgh
dmFsdWUtPmlzT2JqZWN0KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBIYXNoVGFibGU6OmRlbGV0ZVRhYmxlKCkg
Y29uc3QKIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBIYXNoRW50cnkqIGVudHJ5LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKGVudHJ5LT5h
dHRyaWJ1dGVzKCkgJiBGdW5jdGlvbik7Ci0gICAgSlNWYWx1ZSoqIGxvY2F0aW9uID0gdGhpc09i
ai0+Z2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyKiBsb2Nh
dGlvbiA9IHRoaXNPYmotPmdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CiAKICAgICBp
ZiAoIWxvY2F0aW9uKSB7CiAgICAgICAgIFByb3RvdHlwZUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCks
IHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xv
b2t1cC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
fTsKIAogICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyByZWFzb24gdGhpcyBnZXQgZnVuY3Rpb24g
Y2FuJ3QgYmUgc2ltcGxlci4KLSAgICAvLyBpZS4gdHlwZWRlZiBKU1ZhbHVlKiAoKkdldEZ1bmN0
aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCkKKyAgICAvLyBpZS4gdHlwZWRl
ZiBKU1ZhbHVlUHRyICgqR2V0RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0KQogICAgIHR5cGVkZWYgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgR2V0RnVuY3Rpb247
Ci0gICAgdHlwZWRlZiB2b2lkICgqUHV0RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSk7CisgICAgdHlwZWRlZiB2b2lkICgqUHV0RnVuY3Rp
b24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKTsK
IAogICAgIGNsYXNzIEhhc2hFbnRyeSB7CiAgICAgcHVibGljOgpAQCAtMjQzLDcgKzI0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAqIGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCBy
ZXR1cm5zIHRydWUsIGVsc2UgaXQgcmV0dXJucyBmYWxzZS4KICAgICAgKi8KICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVGhpc0ltcD4KLSAgICBpbmxpbmUgYm9vbCBsb29rdXBQdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBjb25z
dCBIYXNoVGFibGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqKQorICAgIGlubGluZSBib29sIGxv
b2t1cFB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhpc09i
aikKICAgICB7CiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+ZW50cnko
ZXhlYywgcHJvcGVydHlOYW1lKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAqIHRoZW4gaXQgY2FsbHMgcHV0KCkgb24gdGhlIFBhcmVudEltcCBjbGFzcy4KICAg
ICAgKi8KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAg
IGlubGluZSB2b2lkIGxvb2t1cFB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRo
aXNJbXAqIHRoaXNPYmosIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICBpbmxpbmUgdm9pZCBs
b29rdXBQdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNP
YmosIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CiAgICAgICAgIGlmICghbG9va3VwUHV0
PFRoaXNJbXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHRhYmxlLCB0aGlzT2JqKSkKICAg
ICAgICAgICAgIHRoaXNPYmotPlBhcmVudEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOyAvLyBub3QgZm91bmQ6IGZvcndhcmQgdG8gcGFyZW50CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjQgKzMy
LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE1hdGhP
YmplY3QpOwogCi1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0
aFByb3RvRnVuY0FDb3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRo
UHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRo
UHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFBy
b3RvRnVuY0V4cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJv
dG9GdW5jTG9nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jTWluKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
UmFuZG9tKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1
bmNTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
VGFuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9G
dW5jQUNvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0
aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNDb3MoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0Zs
b29yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90
b0Z1bmNNYXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0
aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jU2luKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5j
VGFuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwog
CiB9CiAKQEAgLTExMyw1NyArMTEzLDU3IEBAIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jQWJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgZmFicyhhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwog
fQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1
bmNBQ29zKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBhY29zKGFyZ3MuYXQoZXhl
YywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2lu
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIGFzaW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAot
SlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQVRh
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXRhbihhcmdzLmF0KGV4ZWMsIDAp
LT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVRhbjIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIGF0YW4yKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpLCBhcmdzLmF0KGV4
ZWMsIDEpLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ2Vp
bChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051
bWJlcihleGVjLCBjZWlsKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAK
LUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQ29z
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBjb3MoYXJncy5hdChleGVjLCAwKS0+
dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4cChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGV4cChhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBt
YXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZsb29yKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVt
YmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBsb2co
YXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFBy
b3RvRnVuY01heChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgdW5z
aWduZWQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7CiAgICAgZG91YmxlIHJlc3VsdCA9IC1JbmY7
CkBAIC0xNzksNyArMTc5LDcgQEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUq
IGV4ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBt
YXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICB1bnNpZ25lZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKICAgICBkb3VibGUgcmVzdWx0ID0g
K0luZjsKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWluKEV4ZWNT
dGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUqIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jUG93KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIC8vIEVDTUEgMTUuOC4yLjEuMTMKIApAQCAtMjA5LDEyICsyMDksMTIgQEAgSlNWYWx1
ZSogbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBwb3coYXJnLCBhcmcyKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSYW5kb20o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IFdURjo6cmFuZG9tTnVtYmVyKCkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZG91YmxlIGFyZyA9
IGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChzaWduYml0KGFyZykg
JiYgYXJnID49IC0wLjUpCkBAIC0yMjIsMTcgKzIyMiwxNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jUm91bmQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZsb29yKGFy
ZyArIDAuNSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
bWF0aFByb3RvRnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2luKGFy
Z3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90
b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHNxcnQoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykp
KTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90
b0Z1bmNUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRhbihhcmdzLmF0KGV4
ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0
ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkp
OwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBDb25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdlCiAgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbE5hdGl2
ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3Is
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE5h
dGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0
b3IsIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPmNvbnN0cnVjdChl
eGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTnVtYmVyQ29uc3Ry
dWN0b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JOZWdJbmZpbml0eShFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVy
Q29uc3RydWN0b3JQb3NJbmZpbml0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JNYXhW
YWx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JNaW5WYWx1ZShFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVj
dG9yTmVnSW5maW5pdHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0
eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApAQCAtNjgsMjcg
KzY4LDI3IEBAIGJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICBy
ZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PE51bWJlckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0
aW9uPihleGVjLCBFeGVjU3RhdGU6Om51bWJlclRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1Zh
bHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTmFOVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNOYU4oZXhl
Yyk7CiB9CiAKLUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTmVnSW5maW5pdHkoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQ
dHIgbnVtYmVyQ29uc3RydWN0b3JOZWdJbmZpbml0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJlckNl
bGwoZXhlYywgLUluZik7CiB9CiAKLUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5p
dHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JikKK0pTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0eShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVy
biBqc051bWJlckNlbGwoZXhlYywgSW5mKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0
b3JNYXhWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAg
cmV0dXJuIGpzTnVtYmVyQ2VsbChleGVjLCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCk7CiB9CiAK
LUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbnVtYmVyQ29u
c3RydWN0b3JNaW5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJlckNlbGwoZXhlYywgNUUtMzI0
KTsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBDb25zdHJ1Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9y
OjpnZXRDb25zCiB9CiAKIC8vIEVDTUEgMTUuNy4yCi1zdGF0aWMgSlNWYWx1ZSogY2FsbE51bWJl
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxOdW1iZXJDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXJncy5pc0VtcHR5KCkgPyAwIDogYXJn
cy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDExICszMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBOdW1iZXJQcm90b3R5cGUqKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRy
IGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHBy
b3RvKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShw
cm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAogICAg
ICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVj
dChQYXNzUmVmUHRyPFN0CiB7CiB9CiAKLUpTVmFsdWUqIE51bWJlck9iamVjdDo6Z2V0SlNOdW1i
ZXIoKQorSlNWYWx1ZVB0ciBOdW1iZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKIHsKICAgICByZXR1
cm4gaW50ZXJuYWxWYWx1ZSgpOwogfQpAQCAtNDgsNyArNDgsNyBAQCBOdW1iZXJPYmplY3QqIGNv
bnN0cnVjdE51bWJlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotTnVtYmVy
T2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRlTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCitOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlckZyb21JbW1l
ZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIE51
bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqZWN0LT5z
ZXRJbnRlcm5hbFZhbHVlKHZhbHVlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJP
YmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVl
KiBnZXRKU051bWJlcigpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZ2V0SlNOdW1iZXIo
KTsKICAgICB9OwogCiAgICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRl
KiwgSlNOdW1iZXJDZWxsKik7Ci0gICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9t
SW1tZWRpYXRlTnVtYmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsKKyAgICBOdW1iZXJPYmplY3Qq
IGNvbnN0cnVjdE51bWJlckZyb21JbW1lZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0
cik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE51bWJl
clByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclBy
b3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Rv
UHJlY2lzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQcm90
b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQ
cm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKIAogLy8gRUNNQSAxNS43LjQKIApAQCAtMTMzLDkgKzEzMyw5IEBAIHN0
YXRpYyBkb3VibGUgaW50UG93MTAoaW50IGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewotICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1
ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtMTk3LDMzICsxOTcsMzMg
QEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YQogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzdGFydE9mUmVzdWx0U3RyaW5nKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVy
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVu
Y1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZCB5ZXQuCiAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOworICAg
IEpTVmFsdWVQdHIgdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgdi0+dG9TdHJpbmcoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQ
cm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNWYWx1ZU9m
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsK
KyAgICBKU1ZhbHVlUHRyIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgcmV0
dXJuIHY7CiB9CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
SlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYg
PSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogZnJhY3Rpb25EaWdp
dHMgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnJhY3Rpb25EaWdpdHMgPSBh
cmdzLmF0KGV4ZWMsIDApOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVn
ZXIoZXhlYyk7CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3VtZW50
IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHN0YXRpYyB2
b2lkIGV4cG9uZW50aWFsUGFydFRvU3RyaW5nKGNoYXIKICAgICBidWZbaSsrXSA9IHN0YXRpY19j
YXN0PGNoYXI+KCcwJyArIGV4cG9uZW50aWFsICUgMTApOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQ
cm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG51bWJlclByb3Rv
RnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIHYgPSB0aGlz
VmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRK
U051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKIApAQCAtMzEzLDcgKzMxMyw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVu
Y1RvRXhwb25lbnRpYWwoRXgKICAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCiAgICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpmcm9tKHgpKTsKIAotICAgIEpTVmFsdWUq
IGZyYWN0aW9uYWxEaWdpdHNWYWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0
ciBmcmFjdGlvbmFsRGlnaXRzVmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGRvdWJsZSBk
ZiA9IGZyYWN0aW9uYWxEaWdpdHNWYWx1ZS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICghKGRm
ID49IDAgJiYgZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5n
ZUVycm9yLCAidG9FeHBvbmVudGlhbCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIp
OwpAQCAtMzcyLDkgKzM3Miw5IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRp
YWwoRXgKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAotSlNWYWx1ZSogbnVt
YmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbnVtYmVyUHJv
dG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIHYgPSB0aGlz
VmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRK
U051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgT2Jq
ZWN0Q29uc3RydWN0b3I6Ok9iamVjdENvbnN0cnVjdG9yKEV4ZQogLy8gRUNNQSAxNS4yLjIKIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3RPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGFyZyA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlm
IChhcmctPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
T2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUo
KSk7CiAgICAgcmV0dXJuIGFyZy0+dG9PYmplY3QoZXhlYyk7CkBAIC01OCw3ICs1OCw3IEBAIENv
bnN0cnVjdFR5cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnMKICAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZUhvc3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsT2JqZWN0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJl
dHVybiBjb25zdHJ1Y3RPYmplY3QoZXhlYywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksMTUgKzI5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKE9iamVjdFByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
b2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVm
aW5lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9v
a3VwU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0
UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0hhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3Rv
RnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CiAKIE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0dWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3R1Y3R1cmUpCkBA
IC02MCwzNSArNjAsMzUgQEAgT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0
YQogCiAvLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40LjUsIDE1LjIuNC43CiAKLUpT
VmFsdWUqIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG9iamVjdFBy
b3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS0+dG9UaGlzT2Jq
ZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQo
ZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSkpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1
bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0lz
UHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhp
c1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICBpZiAoIWFyZ3MuYXQoZXhlYywgMCkt
PmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogCi0gICAgSlNW
YWx1ZSogdiA9IGFzT2JqZWN0KGFyZ3MuYXQoZXhlYywgMCkpLT5wcm90b3R5cGUoKTsKKyAgICBK
U1ZhbHVlUHRyIHYgPSBhc09iamVjdChhcmdzLmF0KGV4ZWMsIDApKS0+cHJvdG90eXBlKCk7CiAK
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCiAgICAgICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgaWYgKHRoaXNPYmogPT0gdikL
CisgICAgICAgIGlmICh2ID09IHRoaXNPYmopCwogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bih0cnVlKTsKICAgICAgICAgdiA9IGFzT2JqZWN0KHYpLT5wcm90b3R5cGUoKTsKICAgICB9CiB9
CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5nZXRDYWxsRGF0
YShjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQpAQCAtOTcsNyArOTcsNyBAQCBKU1ZhbHVlKiBv
YmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5nZXRDYWxs
RGF0YShjYWxsRGF0YSkgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMTA2LDI3ICsxMDYsMjcgQEAgSlNW
YWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZQogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cEdl
dHRlcihleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4
ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIHJldHVybiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwU2V0
dGVyKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhl
YykpKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFi
bGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc1ZhbHVlLT50b1Ro
aXNPYmplY3QoZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKSk7CiB9CiAKLUpTVmFsdWUqIG9i
amVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBvYmplY3RQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVybiB0aGlzVmFsdWUtPnRv
VGhpc0pTU3RyaW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJbb2JqZWN0ICIgKyB0aGlzVmFs
dWUtPnRvVGhpc09iamVjdChleGVjKS0+Y2xhc3NOYW1lKCkgKyAiXSIpOwogfQpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAzOTYxNikKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE9iamVjdFByb3RvdHlw
ZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7CisgICAgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gRUNNQSAxMS45
LjMKLWJvb2wgZXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIp
Citib29sIGVxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2
MikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2
MikpCiAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKQEAgLTQ0LDEyICs0NCwxMiBAQCBib29sIGVx
dWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdjEsCiAgICAgcmV0dXJuIGVxdWFsU2xvd0Nh
c2VJbmxpbmUoZXhlYywgdjEsIHYyKTsKIH0KIAotYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBlcXVhbFNsb3dDYXNlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICByZXR1
cm4gZXF1YWxTbG93Q2FzZUlubGluZShleGVjLCB2MSwgdjIpOwogfQogCi1ib29sIHN0cmljdEVx
dWFsKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK2Jvb2wgc3RyaWN0RXF1YWwoSlNWYWx1ZVB0
ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGUodjEsIHYyKSkKICAgICAgICAgcmV0dXJuIHYxID09IHYyOwpAQCAtNjAsMTIgKzYwLDEy
IEBAIGJvb2wgc3RyaWN0RXF1YWwoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYKICAgICByZXR1cm4g
c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZSh2MSwgdjIpOwogfQogCi1ib29sIHN0cmljdEVxdWFs
U2xvd0Nhc2UoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBzdHJpY3RFcXVhbFNsb3dD
YXNlKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgcmV0dXJuIHN0cmljdEVx
dWFsU2xvd0Nhc2VJbmxpbmUodjEsIHYyKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCitORVZFUl9JTkxJTkUgSlNWYWx1
ZVB0ciB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAiT3V0IG9mIG1l
bW9yeSIpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogICAvLyBFQ01BIDExLjkuMwotICBib29sIGVxdWFsKEV4ZWNTdGF0
ZSosIEpTVmFsdWUqLCBKU1ZhbHVlKik7Ci0gIGJvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUq
LCBKU1ZhbHVlKiwgSlNWYWx1ZSopOworICBib29sIGVxdWFsKEV4ZWNTdGF0ZSosIEpTVmFsdWVQ
dHIsIEpTVmFsdWVQdHIpOworICBib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNWYWx1
ZVB0ciwgSlNWYWx1ZVB0cik7CiAKLSAgQUxXQVlTX0lOTElORSBib29sIGVxdWFsU2xvd0Nhc2VJ
bmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgIEFMV0FZ
U19JTkxJTkUgYm9vbCBlcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgewogICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6
YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgaWYgKHYxLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICAgIGlmICh2Mi0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2
MjsKLSAgICAgICAgICAgICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7Cisg
ICAgICAgICAgICAgIEpTVmFsdWVQdHIgcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7CiAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgdjEgPSBwMTsKQEAgLTcyLDcgKzcyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKHYyLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgIEpTVmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMpOwor
ICAgICAgICAgICAgICBKU1ZhbHVlUHRyIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMpOwogICAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgIHYyID0gcDI7CkBAIC0xMDAsMTAgKzEwMCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgfQogCiAKLSAgYm9vbCBzdHJpY3RFcXVhbChKU1ZhbHVlKiwg
SlNWYWx1ZSopOwotICBib29sIHN0cmljdEVxdWFsU2xvd0Nhc2UoSlNWYWx1ZSosIEpTVmFsdWUq
KTsKKyAgYm9vbCBzdHJpY3RFcXVhbChKU1ZhbHVlUHRyLCBKU1ZhbHVlUHRyKTsKKyAgYm9vbCBz
dHJpY3RFcXVhbFNsb3dDYXNlKEpTVmFsdWVQdHIsIEpTVmFsdWVQdHIpOwogCi0gIGlubGluZSBi
b29sIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQor
ICBpbmxpbmUgYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKEpTVmFsdWVQdHIgdjEsIEpT
VmFsdWVQdHIgdjIpCiAgIHsKICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGUodjEsIHYyKSk7CiAgICAgICAKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgIHJldHVybiB2MSA9PSB2MjsKICAgfQogCi0gIEpTVmFsdWUqIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihFeGVjU3RhdGUqKTsKKyAgSlNWYWx1ZVB0ciB0aHJvd091dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKik7CiB9CiAKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICAvLyBQcmV2ZW50IGdldHRlciBmdW5jdGlvbnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0aW9uIGlm
IGFuIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAi
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5o
PgpAQCAtNDQsMTYgKzQ1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY2xlYXJW
YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgZXhwbGljaXQgUHJvcGVydHlTbG90KGNvbnN0
IEpTVmFsdWUqIGJhc2UpCi0gICAgICAgICAgICA6IG1fc2xvdEJhc2UoY29uc3RfY2FzdDxKU1Zh
bHVlKj4oYmFzZSkpCisgICAgICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChjb25zdCBKU1ZhbHVl
UHRyIGJhc2UpCisgICAgICAgICAgICA6IG1fc2xvdEJhc2UoYmFzZSkKICAgICAgICAgICAgICwg
bV9vZmZzZXQoV1RGOjpub3RGb3VuZCkKICAgICAgICAgewogICAgICAgICAgICAgY2xlYXJWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgdHlwZWRlZiBKU1ZhbHVlKiAoKkdldFZhbHVlRnVu
YykoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
ICAgICAgICB0eXBlZGVmIEpTVmFsdWVQdHIgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBKU1ZhbHVl
KiBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKG1fZ2V0VmFsdWUgPT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAg
ICAgIHJldHVybiAqbV9kYXRhLnZhbHVlU2xvdDsKQEAgLTYyLDcgKzYzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUs
ICp0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorICAgICAgICBKU1ZhbHVlUHRy
IGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfU0xPVF9N
QVJLRVIpCiAgICAgICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwpAQCAtNzgs
MTcgKzc5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBwdXRWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkKKyAg
ICAgICAgdm9pZCBwdXRWYWx1ZShKU1ZhbHVlUHRyIHZhbHVlKQogICAgICAgICB7IAogICAgICAg
ICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKSB7CiAgICAgICAg
ICAgICAgICAgKm1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQobV9nZXRWYWx1ZSA9PSBKU0Nf
UkVHSVNURVJfU0xPVF9NQVJLRVIpOwotICAgICAgICAgICAgKm1fZGF0YS5yZWdpc3RlclNsb3Qg
PSB2YWx1ZTsKKyAgICAgICAgICAgICptX2RhdGEucmVnaXN0ZXJTbG90ID0gSlNWYWx1ZVB0cih2
YWx1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlKiog
dmFsdWVTbG90KSAKKyAgICAgICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZVB0ciogdmFsdWVT
bG90KSAKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHZhbHVlU2xvdCk7CiAgICAgICAg
ICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSOwpAQCAtOTYsNyArOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNs
b3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFs
dWUqIHNsb3RCYXNlLCBKU1ZhbHVlKiogdmFsdWVTbG90KQorICAgICAgICB2b2lkIHNldFZhbHVl
U2xvdChKU1ZhbHVlUHRyIHNsb3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICAgICAgbV9nZXRWYWx1
ZSA9IEpTQ19WQUxVRV9TTE9UX01BUktFUjsKQEAgLTEwNCw3ICsxMDUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqIHNsb3RCYXNl
LCBKU1ZhbHVlKiogdmFsdWVTbG90LCBzaXplX3Qgb2Zmc2V0KQorICAgICAgICB2b2lkIHNldFZh
bHVlU2xvdChKU1ZhbHVlUHRyIHNsb3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QsIHNpemVf
dCBvZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAg
ICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9TTE9UX01BUktFUjsKQEAgLTExMyw3ICsx
MTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0Owog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUqIHZhbHVl
KQorICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZB
TFVFX1NMT1RfTUFSS0VSOwpAQCAtMTMwLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgbV9kYXRhLnJlZ2lzdGVyU2xvdCA9IHJlZ2lzdGVyU2xvdDsKICAgICAgICAgfQog
Ci0gICAgICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWUqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMg
Z2V0VmFsdWUpCisgICAgICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWVQdHIgc2xvdEJhc2UsIEdl
dFZhbHVlRnVuYyBnZXRWYWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RC
YXNlKTsKICAgICAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CkBAIC0xMzgsNyArMTM5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAgICAg
ICAgIH0KIAotICAgICAgICB2b2lkIHNldEN1c3RvbUluZGV4KEpTVmFsdWUqIHNsb3RCYXNlLCB1
bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgICAgICB2b2lkIHNldEN1
c3RvbUluZGV4KEpTVmFsdWVQdHIgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBHZXRWYWx1ZUZ1
bmMgZ2V0VmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAg
ICAgICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwpAQCAtMTYwLDEzICsxNjEsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBzZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
fQogCi0gICAgICAgIEpTVmFsdWUqIHNsb3RCYXNlKCkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0
ciBzbG90QmFzZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RC
YXNlKTsKICAgICAgICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBzZXRCYXNlKEpTVmFsdWUqIGJhc2UpCisgICAgICAgIHZvaWQgc2V0QmFzZShKU1Zh
bHVlUHRyIGJhc2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsK
ICAgICAgICAgICAgIEFTU0VSVChiYXNlKTsKQEAgLTE5MCwxOSArMTkxLDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5p
bmRleDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIEdldFZh
bHVlRnVuYyBtX2dldFZhbHVlOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogbV9zbG90QmFz
ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX3Nsb3RCYXNlOwogICAgICAgICB1bmlvbiB7CiAgICAg
ICAgICAgICBKU09iamVjdCogZ2V0dGVyRnVuYzsKLSAgICAgICAgICAgIEpTVmFsdWUqKiB2YWx1
ZVNsb3Q7CisgICAgICAgICAgICBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3Q7CiAgICAgICAgICAgICBS
ZWdpc3RlciogcmVnaXN0ZXJTbG90OwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXg7CiAgICAg
ICAgIH0gbV9kYXRhOwogCi0gICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7CisgICAgICAgIEpTVmFs
dWVQdHIgbV92YWx1ZTsKIAogICAgICAgICBzaXplX3QgbV9vZmZzZXQ7CiAgICAgfTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvdGVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyOCArNDksMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBnY1VucHJvdGVjdCh2YWwpOwogICAgIH0KICAg
ICAKLSAgICBpbmxpbmUgdm9pZCBnY1Byb3RlY3QoSlNWYWx1ZSogdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZ2NQcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlu
bGluZSB2b2lkIGdjVW5wcm90ZWN0KEpTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGdjVW5wcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlubGluZSB2
b2lkIGdjUHJvdGVjdE51bGxUb2xlcmFudChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9p
ZCBnY1Byb3RlY3QoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUg
fHwgSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZ2NQcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGlubGluZSB2
b2lkIGdjVW5wcm90ZWN0TnVsbFRvbGVyYW50KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2
b2lkIGdjVW5wcm90ZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlIHx8IEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC04MSw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGFuZCB0aGUgaW1w
bGljaXQgY29udmVyc2lvbiB0byByYXcgcG9pbnRlcgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBj
bGFzcyBQcm90ZWN0ZWRQdHIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvdGVjdGVkUHRyKCkg
OiBtX3B0cigwKSB7IH0KKyAgICAgICAgUHJvdGVjdGVkUHRyKCkgOiBtX3B0cigwKSB7fQogICAg
ICAgICBQcm90ZWN0ZWRQdHIoVCogcHRyKTsKICAgICAgICAgUHJvdGVjdGVkUHRyKGNvbnN0IFBy
b3RlY3RlZFB0ciYpOwogICAgICAgICB+UHJvdGVjdGVkUHRyKCk7CkBAIC05MCw4ICs3NiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyOyB9CiAgICAgICAgIG9wZXJhdG9yIFQqKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KKyAgICAgICAgb3BlcmF0b3IgSlNWYWx1ZVB0cigpIGNvbnN0IHsgcmV0dXJuIEpTVmFsdWVQ
dHIobV9wdHIpOyB9CiAgICAgICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0
cjsgfQogICAgICAgICAKKyAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyOyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9
CiAKICAgICAgICAgUHJvdGVjdGVkUHRyJiBvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkUHRyJik7
CkBAIC0xMDEsMzAgKzg5LDUzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUKiBtX3B0cjsK
ICAgICB9OwogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0cjxUPjo6UHJvdGVj
dGVkUHRyKFQqIHB0cikKKyAgICBjbGFzcyBQcm90ZWN0ZWRKU1ZhbHVlUHRyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFByb3RlY3RlZEpTVmFsdWVQdHIoKSB7fQorICAgICAgICBQcm90ZWN0ZWRK
U1ZhbHVlUHRyKEpTVmFsdWVQdHIgdmFsdWUpOworICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRy
KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImKTsKKyAgICAgICAgflByb3RlY3RlZEpTVmFsdWVQ
dHIoKTsKKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gUHJvdGVjdGVkSlNWYWx1ZVB0cihj
b25zdCBQcm90ZWN0ZWRQdHI8VT4mKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVQdHIgZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBvcGVyYXRvciBKU1ZhbHVlUHRy
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisKKyAgICAgICAgUHJvdGVjdGVkSlNWYWx1
ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImKTsKKyAgICAgICAgUHJv
dGVjdGVkSlNWYWx1ZVB0ciYgb3BlcmF0b3I9KEpTVmFsdWVQdHIpOworICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBKU1ZhbHVlUHRyIG1fdmFsdWU7CisgICAgfTsKKworICAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoVCogcHRy
KQogICAgICAgICA6IG1fcHRyKHB0cikKICAgICB7CiAgICAgICAgIGdjUHJvdGVjdE51bGxUb2xl
cmFudChtX3B0cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0
cjxUPjo6UHJvdGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0ciYgbykKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKGNvbnN0IFByb3Rl
Y3RlZFB0ciYgbykKICAgICAgICAgOiBtX3B0cihvLmdldCgpKQogICAgIHsKICAgICAgICAgZ2NQ
cm90ZWN0TnVsbFRvbGVyYW50KG1fcHRyKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gUHJvdGVjdGVkUHRyPFQ+Ojp+UHJvdGVjdGVkUHRyKCkKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lIFByb3RlY3RlZFB0cjxUPjo6flByb3RlY3RlZFB0cigpCiAgICAgewogICAgICAg
ICBnY1VucHJvdGVjdE51bGxUb2xlcmFudChtX3B0cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IHRlbXBsYXRlIDxjbGFzcyBVPiBQcm90ZWN0ZWRQdHI8VD46OlByb3RlY3RlZFB0
cihjb25zdCBQcm90ZWN0ZWRQdHI8VT4mIG8pCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHRlbXBs
YXRlIDxjbGFzcyBVPiBpbmxpbmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoY29uc3Qg
UHJvdGVjdGVkUHRyPFU+JiBvKQogICAgICAgICA6IG1fcHRyKG8uZ2V0KCkpCiAgICAgewogICAg
ICAgICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQobV9wdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRl
IDxjbGFzcyBUPiBQcm90ZWN0ZWRQdHI8VD4mIFByb3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNv
bnN0IFByb3RlY3RlZFB0cjxUPiYgbykgCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQ
cm90ZWN0ZWRQdHI8VD4mIFByb3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3Rl
ZFB0cjxUPiYgbykgCiAgICAgewogICAgICAgICBUKiBvcHRyID0gby5tX3B0cjsKICAgICAgICAg
Z2NQcm90ZWN0TnVsbFRvbGVyYW50KG9wdHIpOwpAQCAtMTQxLDYgKzE1Miw0NiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIGlubGluZSBQcm90
ZWN0ZWRKU1ZhbHVlUHRyOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyKEpTVmFsdWVQdHIgdmFsdWUpCisg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVjdGVkSlNW
YWx1ZVB0cihjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBvKQorICAgICAgICA6IG1fdmFsdWUo
by5nZXQoKSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIoKQorICAg
IHsKKyAgICAgICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PGNsYXNzIFU+IFByb3RlY3RlZEpTVmFsdWVQdHI6OlByb3RlY3RlZEpTVmFsdWVQdHIoY29uc3Qg
UHJvdGVjdGVkUHRyPFU+JiBvKQorICAgICAgICA6IG1fdmFsdWUoby5nZXQoKSkKKyAgICB7Cisg
ICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgUHJvdGVjdGVk
SlNWYWx1ZVB0ciYgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3Rl
ZEpTVmFsdWVQdHImIG8pIAorICAgIHsKKyAgICAgICAgSlNWYWx1ZVB0ciBvdmFsdWUgPSBvLm1f
dmFsdWU7CisgICAgICAgIGdjUHJvdGVjdChvdmFsdWUpOworICAgICAgICBnY1VucHJvdGVjdCht
X3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IG92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIGlubGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBQcm90ZWN0ZWRKU1Zh
bHVlUHRyOjpvcGVyYXRvcj0oSlNWYWx1ZVB0ciBvdmFsdWUpCisgICAgeworICAgICAgICBnY1By
b3RlY3Qob3ZhbHVlKTsKKyAgICAgICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7CisgICAgICAgIG1f
dmFsdWUgPSBvdmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRQdHI8
VD4mIGEsIGNvbnN0IFByb3RlY3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdl
dCgpOyB9CiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgUHJvdGVjdGVkUHRyPFQ+JiBhLCBjb25zdCBUKiBiKSB7IHJldHVybiBhLmdldCgpID09IGI7
IH0KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
KiBhLCBjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQpA
QCAtMTQ4LDYgKzE5OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEsIGNvbnN0
IFByb3RlY3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVk
UHRyPFQ+JiBhLCBjb25zdCBUKiBiKSB7IHJldHVybiBhLmdldCgpICE9IGI7IH0KICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUKiBhLCBjb25zdCBQ
cm90ZWN0ZWRQdHI8VD4mIGIpIHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorCisgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBQcm90
ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0KKyAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0
IEpTVmFsdWVQdHIgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgdGVtcGxhdGUgPGNs
YXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYg
YSwgY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpID09IEpTVmFsdWVQ
dHIoYi5nZXQoKSk7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWVQ
dHIgYSwgY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gYSA9PSBiLmdldCgp
OyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UHJvdGVjdGVkUHRyPFQ+JiBhLCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVy
biBKU1ZhbHVlUHRyKGEuZ2V0KCkpID09IGIuZ2V0KCk7IH0KKworICAgIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgUHJvdGVjdGVkSlNW
YWx1ZVB0ciYgYikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBKU1ZhbHVl
UHRyIGIpIHsgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0
IFByb3RlY3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSAhPSBKU1ZhbHVlUHRyKGIuZ2V0
KCkpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIGEsIGNv
bnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGIpIHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorICAg
IHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3Rl
ZFB0cjxUPiYgYSwgY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gSlNWYWx1
ZVB0cihhLmdldCgpKSAhPSBiLmdldCgpOyB9CiAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDI0ICszMywyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJl
Z0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxh
c3RNYXRjaChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4oRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFs
dWUqIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0
cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjEo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3Rh
dGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
Q29uc3RydWN0b3JEb2xsYXIzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3Rh
dGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNShFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
Q29uc3RydWN0b3JEb2xsYXI2KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjco
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3Rh
dGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
Q29uc3RydWN0b3JEb2xsYXI5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
cmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0
b3JMYXN0UGFyZW4oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjEoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0
b3JEb2xsYXIyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyhFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29u
c3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVn
RXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9s
bGFyOShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAKLXN0YXRpYyB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKik7Ci1zdGF0aWMgdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKK3N0YXRpYyB2b2lkIHNldFJl
Z0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsK
K3N0YXRpYyB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0cik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkBAIC0xODUsNyAr
MTg1LDcgQEAgSlNPYmplY3QqIFJlZ0V4cENvbnN0cnVjdG9yOjphcnJheU9mTWF0YwogICAgIHJl
dHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKIH0KIAot
SlNWYWx1ZSogUmVnRXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3Jl
ZihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RP
dmVjdG9yICYmIGkgPD0gZC0+bGFzdE51bVN1YlBhdHRlcm5zKSB7CiAgICAgICAgIGludCBzdGFy
dCA9IGQtPmxhc3RPdmVjdG9yWzIgKiBpXTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBS
ZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYyk7CiB9CiAKLUpTVmFsdWUqIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMYXN0UGFyZW4oRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFz
dFBhcmVuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpID0gZC0+bGFz
dE51bVN1YlBhdHRlcm5zOwogICAgIGlmIChpID4gMCkgewpAQCAtMjA3LDE0ICsyMDcsMTQgQEAg
SlNWYWx1ZSogUmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbgogICAgIHJldHVybiBqc0Vt
cHR5U3RyaW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGVm
dENvbnRleHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1
Y3Rvcjo6Z2V0TGVmdENvbnRleHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmIChk
LT5sYXN0T3ZlY3RvcikKICAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQtPmxhc3RJ
bnB1dCwgMCwgZC0+bGFzdE92ZWN0b3JbMF0pOwogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4
ZWMpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZXh0KEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgUmVnRXhwQ29uc3RydWN0b3I6OmdldFJp
Z2h0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVj
dG9yKQogICAgICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCBkLT5s
YXN0T3ZlY3RvclsxXSwgZC0+bGFzdElucHV0LnNpemUoKSAtIGQtPmxhc3RPdmVjdG9yWzFdKTsK
QEAgLTIyNiw5MiArMjI2LDkyIEBAIGJvb2wgUmVnRXhwQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2wKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PFJlZ0V4cENvbnN0cnVjdG9yLCBJ
bnRlcm5hbEZ1bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUo
ZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENv
bnN0cnVjdG9yRG9sbGFyMShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFy
MShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgp
KS0+Z2V0QmFja3JlZihleGVjLCAxKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JE
b2xsYXIyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNr
cmVmKGV4ZWMsIDIpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVy
biBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywg
Myk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
UHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhw
Q29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCA0KTsKIH0KIAot
SlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhw
Q29uc3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3Rv
cihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDUpOwogfQogCi1KU1ZhbHVlKiBy
ZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjYoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xv
dEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgNik7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0
cnVjdG9yRG9sbGFyNyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+
Z2V0QmFja3JlZihleGVjLCA3KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xs
YXI4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVm
KGV4ZWMsIDgpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBh
c1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgOSk7
CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBy
ZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
YXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5pbnB1dCgpKTsKIH0KIAotSlNW
YWx1ZSogcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3Ry
dWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwQ29uc3RydWN0
b3Ioc2xvdC5zbG90QmFzZSgpKS0+bXVsdGlsaW5lKCkpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBD
b25zdHJ1Y3Rvckxhc3RNYXRjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFz
dE1hdGNoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RC
YXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDApOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1
Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVu
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkp
LT5nZXRMYXN0UGFyZW4oZXhlYyk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTGVm
dENvbnRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5n
ZXRMZWZ0Q29udGV4dChleGVjKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JSaWdo
dENvbnRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+
Z2V0UmlnaHRDb250ZXh0KGV4ZWMpOwogfQogCi12b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBsb29rdXBQdXQ8UmVn
RXhwQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIEV4ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwgdGhpcywgc2xvdCk7
CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhwQ29uc3Ry
dWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVl
UHRyIHZhbHVlKQogewogICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldElu
cHV0KHZhbHVlLT50b1N0cmluZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0
b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZSogdmFsdWUpCit2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgYXNS
ZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLT50b0Jvb2xl
YW4oZXhlYykpOwogfQpAQCAtMzE5LDggKzMxOSw4IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0
b3JNdWx0aWxpbmUoRXhlY1MKIC8vIEVDTUEgMTUuMTAuNAogSlNPYmplY3QqIGNvbnN0cnVjdFJl
Z0V4cChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1
ZSogYXJnMCA9IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYXJnMSA9IGFyZ3MuYXQo
ZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhcmcwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBK
U1ZhbHVlUHRyIGFyZzEgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCiAgICAgaWYgKGFyZzAtPmlzT2Jq
ZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmlu
ZWQoKSkKQEAgLTM0OSw3ICszNDksNyBAQCBDb25zdHJ1Y3RUeXBlIFJlZ0V4cENvbnN0cnVjdG9y
OjpnZXRDb25zCiB9CiAKIC8vIEVDTUEgMTUuMTAuMwotc3RhdGljIEpTVmFsdWUqIGNhbGxSZWdF
eHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUmVnRXhwQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdFJlZ0V4cChleGVjLCBhcmdzKTsKIH0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGlj
OgogICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4sIFJlZ0V4cFByb3RvdHlwZSopOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90
b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwpAQCAtNTMsMTAgKzUzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHNldE11bHRpbGluZShib29sKTsKICAgICAgICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdDsK
IAotICAgICAgICBKU1ZhbHVlKiBnZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSogZ2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAg
ICAgICBKU1ZhbHVlKiBnZXRMZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAg
SlNWYWx1ZSogZ2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1Zh
bHVlUHRyIGdldEJhY2tyZWYoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OworICAgICAgICBK
U1ZhbHVlUHRyIGdldExhc3RQYXJlbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1
ZVB0ciBnZXRMZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0
ciBnZXRSaWdodENvbnRleHQoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRh
Jik7CkBAIC02NywxMSArNjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxS
ZWdFeHBDb25zdHJ1Y3RvclByaXZhdGU+IGQ7CiAgICAgfTsKIAotICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiBhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWUqKTsKKyAgICBSZWdFeHBDb25zdHJ1Y3Rv
ciogYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlUHRyKTsKIAogICAgIEpTT2JqZWN0KiBjb25z
dHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCi0gICAgaW5saW5lIFJl
Z0V4cENvbnN0cnVjdG9yKiBhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBSZWdFeHBDb25zdHJ1Y3RvciogYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlUHRy
IHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMo
JlJlZ0V4cENvbnN0cnVjdG9yOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZWdFeHBDb25zdHJ1Y3Rvcio+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMTQgKzQ0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdiwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHYsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkKICAgICAg
ICAgICAgICAgICBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsKICAgICAgICAgICAgIEpTQXJyYXk6
OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSogdikKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKQogICAgICAgICAgICAgICAgIGZpbGxBcnJheUluc3Rh
bmNlKGV4ZWMpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAko
cmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cE9iamVjdEdsb2JhbChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
T2JqZWN0SWdub3JlQ2FzZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0TXVsdGlsaW5lKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiByZWdFeHBPYmplY3RTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJ
bmRleChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci1zdGF0aWMgdm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RHbG9iYWwoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgcmVnRXhwT2JqZWN0SWdub3JlQ2FzZShFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBP
YmplY3RNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKQEAgLTcxLDU0ICs3MSw1NCBAQCBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KEV4CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBPYmplY3Qs
IEpTT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RHbG9iYWwoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFs
dWVQdHIgcmVnRXhwT2JqZWN0R2xvYmFsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4
cE9iamVjdChzbG90LnNsb3RCYXNlKCkpLT5yZWdFeHAoKS0+Z2xvYmFsKCkpOwogfQogCi1KU1Zh
bHVlKiByZWdFeHBPYmplY3RJZ25vcmVDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdElnbm9y
ZUNhc2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHNsb3Quc2xvdEJh
c2UoKSktPnJlZ0V4cCgpLT5pZ25vcmVDYXNlKCkpOwogfQogIAotSlNWYWx1ZSogcmVnRXhwT2Jq
ZWN0TXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdE11bHRpbGluZShFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogeyAgICAgICAg
ICAgIAogICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KS0+cmVnRXhwKCktPm11bHRpbGluZSgpKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0U291
cmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVnRXhw
KCktPnBhdHRlcm4oKSk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIGFzUmVnRXhwT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSktPmxhc3RJbmRleCgp
KTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBsb29rdXBQdXQ8UmVnRXhwT2JqZWN0LCBKU09iamVjdD4oZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgRXhlY1N0YXRlOjpyZWdFeHBUYWJsZShleGVjKSwgdGhpcywgc2xv
dCk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRSZWdFeHBPYmpl
Y3RMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZVB0ciB2YWx1ZSkKIHsKICAgICBhc1JlZ0V4cE9iamVjdChiYXNlT2JqZWN0KS0+c2V0TGFzdElu
ZGV4KHZhbHVlLT50b0ludGVnZXIoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBPYmplY3Q6
OnRlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBS
ZWdFeHBPYmplY3Q6OnRlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIHJldHVybiBqc0Jvb2xlYW4obWF0Y2goZXhlYywgYXJncykpOwogfQogCi1KU1ZhbHVl
KiBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIGlmIChtYXRjaChleGVjLCBhcmdzKSkKICAgICAgICAgcmV0
dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKS0+YXJy
YXlPZk1hdGNoZXMoZXhlYyk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1zdGF0aWMgSlNW
YWx1ZSogY2FsbFJlZ0V4cE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlv
biwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxs
UmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChm
dW5jdGlvbiktPmV4ZWMoZXhlYywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldExhc3RJbmRleChkb3VibGUgbGFzdEluZGV4KSB7
IGQtPmxhc3RJbmRleCA9IGxhc3RJbmRleDsgfQogICAgICAgICBkb3VibGUgbGFzdEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gZC0+bGFzdEluZGV4OyB9CiAKLSAgICAgICAgSlNWYWx1ZSogdGVzdChF
eGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWMoRXhlY1N0
YXRlKiwgY29uc3QgQXJnTGlzdCYpOworICAgICAgICBKU1ZhbHVlUHRyIHRlc3QoRXhlY1N0YXRl
KiwgY29uc3QgQXJnTGlzdCYpOworICAgICAgICBKU1ZhbHVlUHRyIGV4ZWMoRXhlY1N0YXRlKiwg
Y29uc3QgQXJnTGlzdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRy
IHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC03MCw5
ICs3MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8UmVnRXhwT2JqZWN0RGF0
YT4gZDsKICAgICB9OwogCi0gICAgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVl
Kik7CisgICAgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAg
IGlubGluZSBSZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBSZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmUmVnRXhwT2Jq
ZWN0OjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihh
c09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBQcm90b3R5cGUp
OwogCi1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
UHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVGVzdChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBQcm90
b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIC8vIEVDTUEg
MTUuMTAuNQogCkBAIC01NSwyOCArNTUsMjggQEAgUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90
b3R5cGUoRXhlY1N0YQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIAotSlNWYWx1ZSogcmVnRXhwUHJv
dG9GdW5jVGVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNUZXN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVj
dDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
ICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnRlc3QoZXhlYywgYXJncyk7CiB9
CiAKLUpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
cmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUt
PmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUp
LT5leGVjKGV4ZWMsIGFyZ3MpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNDb21waWxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUmVnRXhwT2JqZWN0OjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIFJl
ZlB0cjxSZWdFeHA+IHJlZ0V4cDsKLSAgICBKU1ZhbHVlKiBhcmcwID0gYXJncy5hdChleGVjLCAw
KTsKLSAgICBKU1ZhbHVlKiBhcmcxID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRy
IGFyZzAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYXJnMSA9IGFyZ3MuYXQo
ZXhlYywgMSk7CiAgICAgCiAgICAgaWYgKGFyZzAtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6Omlu
Zm8pKSB7CiAgICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmluZWQoKSkKQEAgLTk2LDcgKzk2LDcg
QEAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdAogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAg
aWYgKHRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cFByb3RvdHlwZTo6aW5mbykpCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgTkVWRVJfSU5MSU5FIEpT
VmFsdWVQdHIgc3RyaW5nRnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVDaGFyKiBidWYgPSBzdGF0aWNfY2FzdDxVQ2hhcio+
KGZhc3RNYWxsb2MoYXJncy5zaXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgVUNoYXIqIHAg
PSBidWY7CkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogc3Ry
aW5nRnJvbUMKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhidWYsIHAgLSBidWYs
IGZhbHNlKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3Rh
dGljIEpTVmFsdWVQdHIgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChMSUtFTFko
YXJncy5zaXplKCkgPT0gMSkpCiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmlu
ZyhleGVjLCBhcmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihleGVjKSk7CkBAIC03NCw3ICs3NCw3
IEBAIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNN
QSAxNS41LjEKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IEpTVmFsdWVQdHIgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNyBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgU3RyaW5nT2JqZWN0Ojpw
dXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmKTsKIApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBKU1N0cmluZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3Ry
aW5nKEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBl
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9
CkBAIC01OSw5ICs1OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTU3Ry
aW5nKiB0b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUqKTsKICAgfTsKIAotICAgIFN0cmluZ09iamVj
dCogYXNTdHJpbmdPYmplY3QoSlNWYWx1ZSopOworICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdP
YmplY3QoSlNWYWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09i
amVjdChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09i
amVjdChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU1ZhbHVlKiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAogICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7IAogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMzYgKzM3LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKFN0cmluZ1Byb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJp
bmdQcm90b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xh
c3RJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNv
bXBhcmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNTbWFsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0JvbGQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0ZvbnRzaXplKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVu
Y0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5j
U2VhcmNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmlu
Z1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9VcHBl
ckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworCitzdGF0aWMgSlNW
YWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNT
bWFsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3Rv
RnVuY1N0cmlrZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IHN0cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xv
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQogCkBA
IC0yMDUsMTQgKzIwNSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0
IFVTCiAgICAgcmV0dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGEuZGF0YSgpKSwgYS5zaXplKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGIuZGF0YSgpKSwgYi5zaXplKCkpOwogfQogCi1KU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwg
PSB0aGlzVmFsdWUtPnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHNv
dXJjZSA9IHNvdXJjZVZhbC0+dmFsdWUoKTsKIAotICAgIEpTVmFsdWUqIHBhdHRlcm4gPSBhcmdz
LmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgcGF0dGVybiA9IGFyZ3MuYXQoZXhlYywgMCk7
CiAKLSAgICBKU1ZhbHVlKiByZXBsYWNlbWVudCA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNW
YWx1ZVB0ciByZXBsYWNlbWVudCA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgVVN0cmluZyByZXBs
YWNlbWVudFN0cmluZzsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IHJlcGxhY2VtZW50LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMTAsNyArMzEw
LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdAogICAgICAgICAr
IHNvdXJjZS5zdWJzdHIobWF0Y2hQb3MgKyBtYXRjaExlbikpOwogfQogCi1KU1ZhbHVlKiBzdHJp
bmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVlT2YuCiAKQEAgLTMy
MywxMSArMzIzLDExIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGEK
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogfQogCi1KU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRv
VGhpc1N0cmluZyhleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1Zh
bHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcihhMCkpIHsKICAgICAgICAg
dWludDMyX3QgaTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoYTAsIGkpICYm
IGkgPCBsZW4pCkBAIC0zNDAsMTEgKzM0MCwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmND
aGFyQXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBz
ID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5z
aXplKCk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQ
dHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIo
YTApKSB7CiAgICAgICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Z2V0
VUludDMyKGEwLCBpKSAmJiBpIDwgbGVuKQpAQCAtMzU3LDcgKzM1Nyw3IEBAIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1MKICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiB9
CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogCkBAIC0zNjcsMTMgKzM2NywxMyBAQCBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGlu
dCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsK
LSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9
IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7
CiAgICAgVVN0cmluZyB1MiA9IGEwLT50b1N0cmluZyhleGVjKTsKICAgICBkb3VibGUgZHBvcyA9
IGExLT50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKGRwb3MgPCAwKQpAQCAtMzgzLDEzICszODMs
MTMgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdAogICAgIHJldHVy
biBqc051bWJlcihleGVjLCBzLmZpbmQodTIsIHN0YXRpY19jYXN0PGludD4oZHBvcykpKTsKIH0K
IAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBz
LnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1Zh
bHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKICAgICBV
U3RyaW5nIHUyID0gYTAtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEtPnRv
SW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwpAQCAtNDAwLDExICs0MDAsMTEgQEAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlYwogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBzLnJmaW5kKHUyLCBzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpKSk7CiB9CiAKLUpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVu
Y01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhp
c1N0cmluZyhleGVjKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAg
ICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKIAogICAgIFVTdHJpbmcgdSA9IHM7
CiAgICAgUmVmUHRyPFJlZ0V4cD4gcmVnOwpAQCAtNDUxLDExICs0NTEsMTEgQEAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJh
eShleGVjLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBK
U1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3Mu
YXQoZXhlYywgMCk7CiAKICAgICBVU3RyaW5nIHUgPSBzOwogICAgIFJlZlB0cjxSZWdFeHA+IHJl
ZzsKQEAgLTQ3NiwxMyArNDc2LDEzIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChF
eGVjU3RhdGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG9zKTsKIH0KIAotSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9U
aGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUq
IGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywg
MSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0
ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKICAgICAvLyBUaGUgYXJnIHByb2Nlc3NpbmcgaXMg
dmVyeSBtdWNoIGxpa2UgQXJyYXlQcm90b0Z1bmM6OlNsaWNlCiAgICAgZG91YmxlIHN0YXJ0ID0g
YTAtPnRvSW50ZWdlcihleGVjKTsKQEAgLTUwMCwxMiArNTAwLDEyIEBAIEpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVj
KTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBh
cmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0gYXJncy5hdChleGVjLCAxKTsKKyAg
ICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0g
YXJncy5hdChleGVjLCAxKTsKIAogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYyk7CiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC01NjIsMTMgKzU2MiwxMyBAQCBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6
ZSgpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUq
IGExID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVj
LCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChleGVjLCAxKTsKIAogICAgIGRvdWJs
ZSBzdGFydCA9IGEwLT50b0ludGVnZXIoZXhlYyk7CiAgICAgZG91YmxlIGxlbmd0aCA9IGExLT5p
c1VuZGVmaW5lZCgpID8gbGVuIDogYTEtPnRvSW50ZWdlcihleGVjKTsKQEAgLTU4NCwxMyArNTg0
LDEzIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUKICAgICByZXR1
cm4ganNTdWJzdHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3Vic3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0
cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1ZhbHVlKiBhMCA9
IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdzLmF0KGV4ZWMsIDEpOwor
ICAgIEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTEg
PSBhcmdzLmF0KGV4ZWMsIDEpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAtPnRvTnVtYmVyKGV4
ZWMpOwogICAgIGRvdWJsZSBlbmQgPSBhMS0+dG9OdW1iZXIoZXhlYyk7CkBAIC02MTYsNyArNjE2
LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdAogICAgIHJldHVy
biBqc1N1YnN0cmluZyhleGVjLCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCkpOwog
fQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU1N0cmluZyog
c1ZhbCA9IHRoaXNWYWx1ZS0+dG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmlu
ZyYgcyA9IHNWYWwtPnZhbHVlKCk7CkBAIC02NTAsNyArNjUwLDcgQEAgSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlYwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3Ry
aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1By
b3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlz
VmFsdWUtPnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFs
LT52YWx1ZSgpOwpAQCAtNjg0LDk1ICs2ODQsOTUgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
VG9VcHBlckNhc2UoRXhlYwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZl
ci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkg
PCAxKQogICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDApOwogCiAgICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0
KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBsb2NhbGVDb21wYXJlKHMsIGEwLT50b1N0cmluZyhleGVjKSkp
OwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+
dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGJpZz4iICsg
cyArICI8L2JpZz4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmlu
ZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsICI8c21hbGw+IiArIHMgKyAiPC9zbWFsbD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiArIHMgKyAiPC9ibGluaz4iKTsK
IH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+
dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGI+IiArIHMg
KyAiPC9iPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMg
PSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgIjx0dD4iICsgcyArICI8L3R0PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJ
dGFsaWNzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAg
cmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8aT4iICsgcyArICI8L2k+Iik7CiB9CiAKLUpTVmFsdWUq
IHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5j
U3RyaWtlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJp
bmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIgKyBzICsgIjwv
c3RyaWtlPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRo
aXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAi
PHN1Yj4iICsgcyArICI8L3N1Yj4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vw
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgIjxzdXA+IiArIHMgKyAiPC9zdXA+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmlu
Z1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNGb250Y29sb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+
dG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsK
KyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgIjxmb250IGNvbG9yPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsg
cyArICI8L2ZvbnQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAg
ICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFy
Z3MuYXQoZXhlYywgMCk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwi
IiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKLUpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJp
bmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVj
LCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgIjxhIG5hbWU9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIg
KyBzICsgIjwvYT4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVl
KiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8YSBocmVmPVwiIiArIGEwLT50b1N0
cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2E+Iik7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAg
dm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6
OlN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykK
K1N0cnVjdHVyZTo6U3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8pCiAgICAgOiBtX3R5cGVJbmZvKHR5cGVJbmZvKQogICAgICwgbV9wcm90b3R5
cGUocHJvdG90eXBlKQogICAgICwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbigwKQpAQCAtNDQ0LDcg
KzQ0NCw3IEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OnJlbW92ZVAKICAgICBy
ZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RydWN0dXJlPiBT
dHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTVmFsdWUqIHByb3RvdHlwZSkKK1Bhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmNo
YW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWVQdHIg
cHJvdG90eXBlKQogewogICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHRyYW5zaXRpb24gPSBjcmVhdGUo
cHJvdG90eXBlLCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkpOwogCkBAIC01MzksNyArNTM5LDcgQEAg
U3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6Y3JlYXRlQ2FjaGVkUAogICAgIEFTU0VSVCh0eXBl
SW5mbygpLnR5cGUoKSA9PSBPYmplY3RUeXBlKTsKICAgICBBU1NFUlQoIW1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwogCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RvcmVkUHJvdG90eXBlKCk7
CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBzdG9yZWRQcm90b3R5cGUoKTsKICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHByb3RvdHlwZSkpCiAgICAgICAgIHJldHVybiAwOwog
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDM5NjE2KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTdHJ1Y3R1cmUgOiBwdWJsaWMg
UmVmQ291bnRlZDxTdHJ1Y3R1cmU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVQ7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlKEpTVmFs
dWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZShKU1ZhbHVlUHRyIHByb3RvdHlwZSwgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0cnVjdHVyZShwcm90b3R5cGUsIHR5cGVJbmZvKSk7CiAgICAgICAgIH0KQEAgLTY0
LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gYWRkUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpOwog
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBzaXplX3QmIG9mZnNldCk7CiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVj
dHVyZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgc2l6ZV90JiBvZmZzZXQpOwot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb24oU3RydWN0dXJlKiwgSlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFN0cnVjdHVyZSos
IEpTVmFsdWVQdHIgcHJvdG90eXBlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHRvRGljdGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlKik7
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gZnJvbURpY3Rpb25hcnlUcmFu
c2l0aW9uKFN0cnVjdHVyZSopOwpAQCAtODAsMTQgKzgwLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKICAgICAgICAg
c2l6ZV90IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgc2l6ZV90IHJlbW92ZVBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihKU1ZhbHVlKiBwcm90
b3R5cGUpIHsgbV9wcm90b3R5cGUgPSBwcm90b3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbihKU1ZhbHVlUHRyIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlw
ZSA9IHByb3RvdHlwZTsgfQogCiAgICAgICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0RpY3Rpb25hcnk7IH0KIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogc3Rv
cmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KLSAgICAgICAgSlNW
YWx1ZSogcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopOyAKKyAgICAgICAgSlNWYWx1ZVB0
ciBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKTsgCiAKICAgICAgICAg
U3RydWN0dXJlKiBwcmV2aW91c0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsg
fQogCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/ICFtX3Byb3BlcnR5VGFibGUt
PmtleUNvdW50IDogbV9vZmZzZXQgPT0gbm9PZmZzZXQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJik7CisgICAg
ICAgIFN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKIAog
ICAgICAgICBzaXplX3QgcHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHNpemVfdCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOwogCi0gICAgICAgIEpTVmFsdWUqIG1fcHJvdG90eXBl
OworICAgICAgICBKU1ZhbHVlUHRyIG1fcHJvdG90eXBlOwogICAgICAgICBSZWZQdHI8U3RydWN0
dXJlQ2hhaW4+IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CiAKICAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZT4gbV9wcmV2aW91czsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2
YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIw
MDktMDEtMDUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwg
dXNlcyBvZiBKU1ZhbHVlKiB3aXRoIG5ldyB3cmFwcGVyIGNsYXNzLCBKU1ZhbHVlUHRyLgorICAg
ICAgICBTZWUgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbGVkIGRlc2Ny
aXB0aW9uLgorCisgICAgICAgICogSlNPYmplY3QuY3BwOgorICAgICAgICAobmF0aXZlQ2FsbEZ1
bmN0aW9uKToKKyAgICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9KU09i
amVjdCk6CisgICAgICAgIChKU09iamVjdEtKU1ZhbHVlKToKKyAgICAgICAgKEtKU1ZhbHVlVG9D
RlR5cGVJbnRlcm5hbCk6CisgICAgICAgIChLSlNWYWx1ZVRvQ0ZUeXBlKToKKyAgICAgICAgKiBK
U1V0aWxzLmg6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAoSlNWYWx1
ZVdyYXBwZXI6OkpTVmFsdWVXcmFwcGVyKToKKyAgICAgICAgKEpTVmFsdWVXcmFwcGVyOjpHZXRW
YWx1ZSk6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDb3B5UHJvcGVydHkpOgor
ICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0U2V0UHJvcGVydHkpOgorICAgICAgICAo
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKiBKU1ZhbHVl
V3JhcHBlci5oOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9i
amVjdEltcDo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoVXNlck9iamVjdEltcDo6dXNlck9i
amVjdEdldHRlcik6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoVXNlck9iamVjdEltcDo6cHV0KToKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6
OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6CisgICAgICAgIChVc2Vy
T2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDA4LTEyLTE1ICBNYXJrIFJvd2UgIDxt
cm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQ2FtZXJvbiBad2Fy
aWNoLgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRHbHVlL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
R2x1ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBK
U1VzZXJPYmplY3Q6OlNldFByb3BlcnR5KENGU3RyaW5nUgogCiB9CiAKLXN0YXRpYyBKU1ZhbHVl
KiAgbmF0aXZlQ2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9u
T2JqZWN0LCBKU1ZhbHVlKiAgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IEpTVmFsdWVQdHIgIG5hdGl2ZUNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZVB0ciAgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wKj4oZnVuY3Rpb25P
YmplY3QpLT5jYWxsQXNGdW5jdGlvbihleGVjLCBhc09iamVjdCh0aGlzVmFsdWUpLCBhcmdzKTsK
IH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRHbHVlL0pTVXRpbHMuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRHbHVl
L0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBPYmpl
Y3RJbXBMaXN0IHsKICAgICBDRlR5cGVSZWYgZGF0YTsKIH07CiAKLXN0YXRpYyBDRlR5cGVSZWYg
S0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wTGlzdCogaW5JbXBzKTsKK3N0YXRpYyBDRlR5cGVSZWYgS0pTVmFsdWVUb0NG
VHlwZUludGVybmFsKEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXBMaXN0KiBpbkltcHMpOwogc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFkR2xv
YmFsT2JqZWN0KCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCw3ICsxMDAsNyBAQCBD
RlN0cmluZ1JlZiBJZGVudGlmaWVyVG9DRlN0cmluZyhjb25zdCBJCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLyBLSlNWYWx1ZVRvSlNPYmplY3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUpTVXNlck9i
amVjdCogS0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhl
YykKK0pTVXNlck9iamVjdCogS0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWVQdHIgaW5WYWx1ZSwg
RXhlY1N0YXRlICpleGVjKQogewogICAgIEpTVXNlck9iamVjdCogcmVzdWx0ID0gMDsKIApAQCAt
MTI2LDExICsxMjYsMTEgQEAgSlNVc2VyT2JqZWN0KiBLSlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1
ZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gSlNPYmplY3RLSlNWYWx1ZQogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotSlNWYWx1ZSogSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKK0pT
VmFsdWVQdHIgSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKIHsKICAgICBKU0xv
Y2sgbG9jayh0cnVlKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChwdHIpCiAgICAg
ewogICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBKU1Zh
bHVlKiBKU09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogCiAvLyBLSlNWYWx1ZVRvQ0ZUeXBl
SW50ZXJuYWwKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBm
b3IgcmVsZWFzaW5nIHRoZSByZXR1cm5lZCBDRlR5cGVSZWYKLUNGVHlwZVJlZiBLSlNWYWx1ZVRv
Q0ZUeXBlSW50ZXJuYWwoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXBMaXN0KiBpbkltcHMpCitDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFs
dWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpCiB7
CiAgICAgaWYgKCFpblZhbHVlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM1OCw3ICszNTgsNyBA
QCBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUNGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNT
dGF0ZSAqZXhlYykKK0NGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWVQdHIgaW5WYWx1
ZSwgRXhlY1N0YXRlICpleGVjKQogewogICAgIHJldHVybiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJu
YWwoaW5WYWx1ZSwgZXhlYywgMCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5oCShyZXZpc2lvbiAzOTYxNikK
KysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRHbHVlLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Db2xsZWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC01NCw5ICs1NCw5IEBAIFVTdHJpbmcgQ0ZTdHJp
bmdUb1VTdHJpbmcoQ0ZTdHJpbmdSZWYgaW4KIENGU3RyaW5nUmVmIFVTdHJpbmdUb0NGU3RyaW5n
KGNvbnN0IFVTdHJpbmcmIGluVVN0cmluZyk7CiBJZGVudGlmaWVyIENGU3RyaW5nVG9JZGVudGlm
aWVyKENGU3RyaW5nUmVmIGluQ0ZTdHJpbmcsIEV4ZWNTdGF0ZSopOwogQ0ZTdHJpbmdSZWYgSWRl
bnRpZmllclRvQ0ZTdHJpbmcoY29uc3QgSWRlbnRpZmllciYgaW5JZGVudGlmaWVyKTsKLUpTVXNl
ck9iamVjdCAqS0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAq
ZXhlYyk7Ci1DRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlKiBpblZhbHVlLCBFeGVj
U3RhdGUgKmV4ZWMpOwotSlNWYWx1ZSogSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0
cik7CitKU1VzZXJPYmplY3QgKktKU1ZhbHVlVG9KU09iamVjdChKU1ZhbHVlUHRyIGluVmFsdWUs
IEV4ZWNTdGF0ZSAqZXhlYyk7CitDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlUHRy
IGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYyk7CitKU1ZhbHVlUHRyIEpTT2JqZWN0S0pTVmFsdWUo
SlNVc2VyT2JqZWN0KiBwdHIpOwogQ0ZUeXBlUmVmIEdldENGTnVsbCh2b2lkKTsKIAogaW5saW5l
IENGVHlwZVJlZiBSZXRhaW5DRlR5cGUoQ0ZUeXBlUmVmIHgpIHsgaWYgKHgpIHggPSBDRlJldGFp
bih4KTsgcmV0dXJuIHg7IH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlz
aW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVy
dHlOYW1lQXJyYXkuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKLUpTVmFsdWVXcmFwcGVyOjpK
U1ZhbHVlV3JhcHBlcihKU1ZhbHVlKiBpblZhbHVlKQorSlNWYWx1ZVdyYXBwZXI6OkpTVmFsdWVX
cmFwcGVyKEpTVmFsdWVQdHIgaW5WYWx1ZSkKICAgICA6IGZWYWx1ZShpblZhbHVlKQogewogfQpA
QCAtNDEsNyArNDEsNyBAQCBKU1ZhbHVlV3JhcHBlcjo6fkpTVmFsdWVXcmFwcGVyKCkKIHsKIH0K
IAotSlNWYWx1ZSogSlNWYWx1ZVdyYXBwZXI6OkdldFZhbHVlKCkKK0pTVmFsdWVQdHIgSlNWYWx1
ZVdyYXBwZXI6OkdldFZhbHVlKCkKIHsKICAgICByZXR1cm4gZlZhbHVlLmdldCgpOwogfQpAQCAt
MTA4LDcgKzEwOCw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHkK
ICAgICBpZiAocHRyKQogICAgIHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFk
R2xvYmFsRXhlY1N0YXRlKCk7Ci0gICAgICAgIEpTVmFsdWUqIHByb3BWYWx1ZSA9IHB0ci0+R2V0
VmFsdWUoKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBDRlN0cmluZ1RvSWRlbnRpZmllcihw
cm9wZXJ0eU5hbWUsIGV4ZWMpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm9wVmFsdWUgPSBwdHIt
PkdldFZhbHVlKCktPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgQ0ZTdHJpbmdUb0lkZW50aWZp
ZXIocHJvcGVydHlOYW1lLCBleGVjKSk7CiAgICAgICAgIEpTVmFsdWVXcmFwcGVyKiB3cmFwcGVy
VmFsdWUgPSBuZXcgSlNWYWx1ZVdyYXBwZXIocHJvcFZhbHVlKTsKIAogICAgICAgICBKU09iamVj
dENhbGxCYWNrcyBjYWxsQmFja3M7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBKU1ZhbHVlV3Jh
cHBlcjo6SlNPYmplY3RTZXRQcm9wZXJ0eQogICAgIGlmIChwdHIpCiAgICAgewogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKTsKLSAgICAgICAgSlNW
YWx1ZSogdmFsdWUgPSBKU09iamVjdEtKU1ZhbHVlKChKU1VzZXJPYmplY3QqKWpzVmFsdWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0
Kilqc1ZhbHVlKTsKICAgICAgICAgSlNPYmplY3QgKm9ialZhbHVlID0gcHRyLT5HZXRWYWx1ZSgp
LT50b09iamVjdChleGVjKTsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAg
IG9ialZhbHVlLT5wdXQoZXhlYywgQ0ZTdHJpbmdUb0lkZW50aWZpZXIocHJvcGVydHlOYW1lLCBl
eGVjKSwgdmFsdWUsIHNsb3QpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIEpTT2JqZWN0UmVmIEpTVmFs
dWVXcmFwcGVyOjpKU09iamVjdENhbGwKICAgICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpOwogCi0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0g
SlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kil0aGlzT2JqKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciB2YWx1ZSA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopdGhpc09iaik7CiAg
ICAgICAgIEpTT2JqZWN0ICprc2pUaGlzT2JqID0gdmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogICAg
ICAgICBKU09iamVjdCAqb2JqVmFsdWUgPSBwdHItPkdldFZhbHVlKCktPnRvT2JqZWN0KGV4ZWMp
OwogCkBAIC0xNTcsNyArMTU3LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2Jq
ZWN0Q2FsbAogICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBqc0FyZyA9IChKU09iamVjdFJlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGFyZ3MsIGkpOwotICAgICAgICAgICAgSlNWYWx1ZSoga2dz
QXJnID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kilqc0FyZyk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIGtnc0FyZyA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopanNB
cmcpOwogICAgICAgICAgICAgbGlzdEFyZ3MuYXBwZW5kKGtnc0FyZyk7CiAgICAgICAgIH0KIApA
QCAtMTY1LDcgKzE2NSw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENh
bGwKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmpWYWx1ZS0+Z2V0Q2FsbERhdGEoY2Fs
bERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIEpTVmFsdWUqICByZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywg
b2JqVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwga3NqVGhpc09iaiwgbGlzdEFyZ3MpOworICAg
ICAgICBKU1ZhbHVlUHRyICByZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywgb2JqVmFsdWUsIGNhbGxU
eXBlLCBjYWxsRGF0YSwga3NqVGhpc09iaiwgbGlzdEFyZ3MpOwogICAgICAgICBKU1ZhbHVlV3Jh
cHBlciogd3JhcHBlclZhbHVlID0gbmV3IEpTVmFsdWVXcmFwcGVyKHJlc3VsdFZhbHVlKTsKICAg
ICAgICAgSlNPYmplY3RDYWxsQmFja3MgY2FsbEJhY2tzOwogICAgICAgICBHZXRKU09iZWN0Q2Fs
bEJhY2tzKGNhbGxCYWNrcyk7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTUgKzM1LDE1IEBACiAKIGNsYXNzIEpTVmFsdWVXcmFwcGVyIHsKIHB1YmxpYzoK
LSAgICBKU1ZhbHVlV3JhcHBlcihKU1ZhbHVlKik7CisgICAgSlNWYWx1ZVdyYXBwZXIoSlNWYWx1
ZVB0cik7CiAgICAgdmlydHVhbCB+SlNWYWx1ZVdyYXBwZXIoKTsKIAogICAgIHN0YXRpYyB2b2lk
IEdldEpTT2JlY3RDYWxsQmFja3MoSlNPYmplY3RDYWxsQmFja3MmIGNhbGxCYWNrcyk7CiAKLSAg
ICBKU1ZhbHVlKiBHZXRWYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgR2V0VmFsdWUoKTsKIAogcHJp
dmF0ZToKLSAgICBQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gZlZhbHVlOworICAgIFByb3RlY3RlZEpT
VmFsdWVQdHIgZlZhbHVlOwogICAgIAogICAgIHN0YXRpYyB2b2lkIEpTT2JqZWN0RGlzcG9zZSh2
b2lkICpkYXRhKTsKICAgICBzdGF0aWMgQ0ZBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZXJ0eU5h
bWVzKHZvaWQgKmRhdGEpOwpJbmRleDogSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDkgKzU2LDkgQEAgQ2FsbFR5cGUgVXNlck9iamVjdEltcDo6Z2V0Q2FsbERhdGEo
Q2FsbAogICAgIHJldHVybiBmSlNVc2VyT2JqZWN0ID8gZkpTVXNlck9iamVjdC0+Z2V0Q2FsbERh
dGEoY2FsbERhdGEpIDogQ2FsbFR5cGVOb25lOwogfQogCi1KU1ZhbHVlKiBVc2VyT2JqZWN0SW1w
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25z
dCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZVB0ciBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdz
KQogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIEpTVXNlck9iamVjdCoganNUaGlzT2JqID0g
S0pTVmFsdWVUb0pTT2JqZWN0KHRoaXNPYmosIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsK
ICAgICAgICAgQ0ZJbmRleCBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwpAQCAtMTEyLDcgKzExMiw3
IEBAIHZvaWQgVXNlck9iamVjdEltcDo6Z2V0UHJvcGVydHlOYW1lcyhFeGUKICAgICBKU09iamVj
dDo6Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAotSlNWYWx1ZSog
IFVzZXJPYmplY3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IFVzZXJPYmplY3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVXNl
ck9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAgKj4oYXNPYmpl
Y3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90IHNob3VsZCBo
YXZlIGd1YXJkZWQgYWdhaW5zdCBhIG51bGwgZkpTVXNlck9iamVjdC4KQEAgLTEyMSw3ICsxMjEs
NyBAQCBKU1ZhbHVlKiAgVXNlck9iamVjdEltcDo6dXNlck9iamVjdEdldHRlCiAgICAgQ0ZTdHJp
bmdSZWYgY2ZQcm9wTmFtZSA9IElkZW50aWZpZXJUb0NGU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAg
ICAgSlNVc2VyT2JqZWN0ICpqc1Jlc3VsdCA9IHRoaXNPYmotPmZKU1VzZXJPYmplY3QtPkNvcHlQ
cm9wZXJ0eShjZlByb3BOYW1lKTsKICAgICBSZWxlYXNlQ0ZUeXBlKGNmUHJvcE5hbWUpOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IEpTT2JqZWN0S0pTVmFsdWUoanNSZXN1bHQpOworICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0gSlNPYmplY3RLSlNWYWx1ZShqc1Jlc3VsdCk7CiAgICAganNSZXN1bHQt
PlJlbGVhc2UoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9v
bCBVc2VyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgICAgICBqc1Jlc3VsdC0+
UmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBK
U1ZhbHVlKiBranNWYWx1ZSA9IHRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRy
IGtqc1ZhbHVlID0gdG9QcmltaXRpdmUoZXhlYyk7CiAgICAgICAgIGlmICgha2pzVmFsdWUtPmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0ICpranNPYmplY3QgPSBr
anNWYWx1ZS0+dG9PYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBpZiAoa2pzT2JqZWN0LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKQEAgLTE1MCw3ICsxNTAsNyBA
QCBib29sIFVzZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
IAotdm9pZCBVc2VyT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgVXNlck9i
amVjdEltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBpZiAoIWZKU1VzZXJPYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKQEAgLTE2OSw5ICsxNjksOSBAQCBKU1VzZXJPYmplY3QqIFVz
ZXJPYmplY3RJbXA6OkdldEpTVXNlck9iCiAgICAgcmV0dXJuIGZKU1VzZXJPYmplY3Q7CiB9CiAK
LUpTVmFsdWUqIFVzZXJPYmplY3RJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNU
eXBlKSBjb25zdAorSlNWYWx1ZVB0ciBVc2VyT2JqZWN0SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUgKmV4ZWMsIEpTVHlwZSkgY29uc3QKIHsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICBKU1Vz
ZXJPYmplY3QqIGpzT2JqUHRyID0gS0pTVmFsdWVUb0pTT2JqZWN0KHRvT2JqZWN0KGV4ZWMpLCBl
eGVjKTsKICAgICBDRlR5cGVSZWYgY2ZWYWx1ZSA9IGpzT2JqUHRyID8ganNPYmpQdHItPkNvcHlD
RlZhbHVlKCkgOiAwOwogICAgIGlmIChjZlZhbHVlKSB7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9V
c2VyT2JqZWN0SW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdElt
cC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAK
LSAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1
ZVB0ciBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBj
b25zdCBBcmdMaXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNW
YWx1ZVB0ciB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKIAotICAgIEpTVmFsdWUqIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBj
b25zdDsKKyAgICBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVm
ZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdG9C
b29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1i
ZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlICpleGVjKSBjb25zdDsKQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJsaWM6CiAKICAg
ICBKU1VzZXJPYmplY3QgKkdldEpTVXNlck9iamVjdCgpIGNvbnN0OwogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQ
dHIgcHJvdG90eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgSlNWYWx1ZSogdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1Zh
bHVlUHRyIHVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpT
VXNlck9iamVjdDsKIH07CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5NyBAQAorMjAwOS0wMS0wNSAgR2F2aW4gQmFycmFj
bG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIEpTVmFsdWUqIHdpdGgg
bmV3IHdyYXBwZXIgY2xhc3MsIEpTVmFsdWVQdHIuCisgICAgICAgIFNlZSBKYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjpz
ZXRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVE
ZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFy
YXRpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0
aW9uOjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlND
YW52YXNQaXhlbEFycmF5Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVs
QXJyYXk6OmdldEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNQaXhlbEFycmF5
OjppbmRleFNldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0hUTUxDYW52YXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NsaXBib2FyZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6dHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmNsZWFyRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0Ns
aXBib2FyZDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6c2V0RHJh
Z0ltYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDb25zb2xlOjpwcm9maWxlcyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3Vz
dG9tUG9zaXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9t
Vm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b1ZvaWRDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBw
bGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ09yTnVs
bCk6CisgICAgICAgIChXZWJDb3JlOjpqc093bmVkU3RyaW5nT3JOdWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzU3RyaW5nT3JVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdP
ckZhbHNlKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2sp
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEN1cnJlbnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0RE9NT2JqZWN0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRET01Ob2RlV3JhcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6
ZmluZEpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVj
dDo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
R2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6c2hvd01vZGFsRGlhbG9nKToK
KyAgICAgICAgKGpzRE9NV2luZG93QmFzZUNyeXB0byk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jh
c2VFdmVudCk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VJbWFnZSk6CisgICAgICAgIChqc0RP
TVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5lbCk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VPcHRp
b24pOgorICAgICAgICAoanNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAo
anNET01XaW5kb3dCYXNlQXVkaW8pOgorICAgICAgICAoanNET01XaW5kb3dCYXNlV29ya2VyKToK
KyAgICAgICAgKGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IpOgorICAgICAgICAoc2V0SlNE
T01XaW5kb3dCYXNlRXZlbnQpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlQXVkaW8pOgor
ICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlSW1hZ2UpOgorICAgICAgICAoc2V0SlNET01XaW5k
b3dCYXNlTWVzc2FnZUNoYW5uZWwpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlT3B0aW9u
KToKKyAgICAgICAgKHNldEpTRE9NV2luZG93QmFzZVdvcmtlcik6CisgICAgICAgIChzZXRKU0RP
TVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VY
U0xUUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2hpbGRG
cmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2xlYXIpOgorICAgICAgICAod2luZG93UHJvdG9GdW5j
T3Blbik6CisgICAgICAgICh3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2cpOgorICAgICAg
ICAod2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpzZXRSZXR1cm5WYWx1ZVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlNET01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpsb29rdXBHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Omxvb2t1cFNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRpbWVvdXRPcklu
dGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpjbGVhclRpbWVvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93OjpjbGVhckludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojph
dG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpidG9hKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
RE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rp
b25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rp
b25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdl
RnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y3VzdG9tUHV0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93U2hlbGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxs
OjpwdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxs
Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6bG9v
a3VwU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hl
bGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9j
dW1lbnQ6OmxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpldmVudFBhcmFtZXRlck5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJn
ZXROb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpy
ZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MQWxsQ29sbGVjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TEFwcGxldEVsZW1lbnQ6OmN1c3RvbVB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBcHBs
ZXRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29s
bGVjdGlvbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpuYW1l
ZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1l
bnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OmFsbCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTERvY3VtZW50OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERv
Y3VtZW50Ojp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6d3JpdGVs
bik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSFRNTEVtYmVkRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxG
cmFtZUVsZW1lbnQ6OnNldFNyYyk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1l
bnQ6OnNldExvY2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVs
ZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVTZXRFbGVtZW50
OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNy
Yyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNIVE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RJbmRleFNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25D
YWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNh
Y2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9u
Q2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0
b3J5OjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SW5zcGVjdGVkT2JqZWN0V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0ZWRPYmpl
Y3RXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXBPdXRnb2luZ1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lu
c3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3Bl
Y3RvckNhbGxiYWNrV3JhcHBlcjo6cHJlcGFyZUluY29taW5nVmFsdWUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcE91dGdvaW5nVmFsdWUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNS
ZXBsYWNlRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRp
Y1JlbG9hZEZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0
aWNBc3NpZ25GdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpj
dXN0b21QdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNl
dEhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNMb2NhdGlvbjo6c2V0U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246
OnNldEhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6YXNzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnRvU3RyaW5n
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWlt
ZVR5cGVBcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5v
ZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVNYXA6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0dGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5lZWRzWW91VHViZVF1aXJrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTmF2aWdhdG9y
OjphcHBWZXJzaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjppbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNOb2RlOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjpyZW1v
dmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OmFwcGVuZENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5
Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmls
dGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRl
ckNvbmRpdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvTm9kZUZpbHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0
b3I6Om5leHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91
c05vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbE5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxp
c3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0R2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhbGxQbHVnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1
bmN0aW9ucy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFw
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjph
c1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OmNhY2hlZFZhbHVlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyOjpoYXNJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTUkdCQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNSR0JDb2xvcik6CisgICAg
ICAgIChqc1JHQkNvbG9yUmVkKToKKyAgICAgICAgKGpzUkdCQ29sb3JHcmVlbik6CisgICAgICAg
IChqc1JHQkNvbG9yQmx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSR0JDb2xvci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SlNSR0JDb2xvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FM
VHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxl
bWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudElu
c3RhbmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVu
dEluc3RhbmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVu
aXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnRy
YW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6c2NhbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR01hdHJpeDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4
Ojpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjpmbGlw
WCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6ZmxpcFkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdNYXRyaXg6OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4
Ojpza2V3WSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0
aFNlZ0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdQYXRoU2VnTGlzdDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R1BhdGhTZWdMaXN0OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1Bv
aW50TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNl
dHRlclJlYWRPbmx5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0Ojpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQ
b2ludExpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6
OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluaXNoU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRP
bmx5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpuYW1lR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTVGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVh
dGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVX
YWxrZXI6Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Om5leHRT
aWJsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bmV4dE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJD
b250ZXh0QmFzZTo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRC
YXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6c2VsZik6CisgICAgICAgIChXZWJD
b3JlOjpKU1dvcmtlckNvbnRleHQ6OnNldFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3Jr
ZXJDb250ZXh0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
Q29udGV4dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpKU1hNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6b3ZlcnJpZGVNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVl
c3Q6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0VXBsb2FkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RV
cGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVx
dWVzdFVwbG9hZDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nl
c3Nvcjo6aW1wb3J0U3R5bGVzaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNz
b3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vz
c29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nl
c3Nvcjo6c2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6
Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3Zl
UGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRD
YWxsU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXpl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVs
ZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0VmFsdWU6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNVbmRl
ZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRWYWx1ZTo6U2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0VmFsdWU6OmpzVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3
aXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVXZWJT
Y3JpcHQ6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZvcktleTpdKToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAg
ICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290
T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRP
YmplY3RQcml2YXRlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG06CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5f
SW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2
YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNN
ZXRob2QpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2Nf
aW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VN
ZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VEZWZhdWx0
TWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlQ29uc3Ry
dWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2Uu
aDoKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY19ydW50
aW1lLmg6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxp
dHkuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHA6CisgICAgICAgIChK
YXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6bnVtYmVy
VmFsdWUpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUpOgorICAgICAgICAo
SmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpkZWZh
dWx0VmFsdWUpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjp2YWx1ZU9mKToKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0Lmg6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06CisgICAgICAgIChK
YXZhSlNPYmplY3Q6OmNhbGwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpldmFsKToKKyAgICAg
ICAgKEphdmFKU09iamVjdDo6Z2V0TWVtYmVyKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Z2V0
U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCk6Cisg
ICAgICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICog
YnJpZGdlL2puaS9qbmlfb2JqYy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmRpc3BhdGNo
Sk5JQ2FsbCk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6CisgICAgICAg
IChKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheSk6CisgICAgICAgIChKYXZhRmllbGQ6
OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2YWx1ZUZy
b21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3Rh
bmNlKToKKyAgICAgICAgKEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAg
KEphdmFBcnJheTo6c2V0VmFsdWVBdCk6CisgICAgICAgIChKYXZhQXJyYXk6OnZhbHVlQXQpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2puaV91dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXZhQXJyYXkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVl
VG9KVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3V0aWxpdHkuaDoKKyAgICAgICAg
KiBicmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6Ok9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QpOgorICAgICAgICAq
IGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAg
ICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJ
bnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5j
ZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6ZGVm
YXVsdFZhbHVlKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAg
ICAoT2JqY0luc3RhbmNlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmJv
b2xlYW5WYWx1ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAq
IGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9v
YmpjL29iamNfcnVudGltZS5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6
dmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVl
VG9PYmpjT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFs
dWVUb0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNBcnJheTo6c2V0VmFs
dWVBdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjQXJyYXk6OnZhbHVlQXQpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y2FsbE9iakNGYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAg
ICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpj
VmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3Rh
bmNlOjpnZXRWYWx1ZU9mRmllbGQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6
OnNldFZhbHVlT2ZGaWVsZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWUuaDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkNsYXNzOjpmYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6Okluc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoSlND
OjpSdW50aW1lQXJyYXk6OnB1dCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoK
KyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6
Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6OmNhbGxSdW50aW1lTWV0aG9kKToKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhv
ZDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcik6
CisgICAgICAgIChKU0M6OlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKToKKyAgICAgICAg
KEpTQzo6UnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UnVu
dGltZU9iamVjdEltcDo6cHV0KToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6ZGVm
YXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6Y2FsbFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAo
SlNDOjpjYWxsUnVudGltZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9v
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZh
U2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZh
U2NyaXB0UHJvZmlsZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogaW5zcGVjdG9yL0ph
dmFTY3JpcHRQcm9maWxlTm9kZS5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorCiAy
MDA5LTAxLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIEpTQXR0cjo6c2V0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNBdHRyOjpzZXRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgQXR0ciogaW1wID0gc3RhdGljX2Nhc3Q8
QXR0cio+KGltcGwoKSk7CiAgICAgU3RyaW5nIGF0dHJWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRo
TnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NS
dWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVs
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIENTU1J1bGUqIHJ1bGUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBDU1NSdWxlKiBydWxlKQogewogICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBib29sIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2FuR2V0SXRlbXNGCiAK
IC8vIEZJWE1FOiBZb3UgY2FuIGdldCB0aGVzZSBwcm9wZXJ0aWVzLCBhbmQgc2V0IHRoZW0gKHNl
ZSBjdXN0b21QdXQgYmVsb3cpLAogLy8gYnV0IHlvdSBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIGVu
dW1lcmF0ZSB0aGVtLgotSlNWYWx1ZSogSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbiog
dGhpc09iaiA9IHN0YXRpY19jYXN0PEpTQ1NTU3R5bGVEZWNsYXJhdGlvbio+KGFzT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSkpOwogCkBAIC0xNTYsNyArMTU2LDcgQEAgSlNWYWx1ZSogSlNDU1NTdHls
ZURlY2xhcmF0aW9uOjpuYW1lR2V0dAogfQogCiAKLWJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9u
OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQorYm9vbCBKU0NTU1N0eWxlRGVj
bGFyYXRpb246OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKICAgICBp
ZiAoIWlzQ1NTUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1Zh
bHVlKiB2YWx1ZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1ZhbHVlKiB2
YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlD
dXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgaW5saW5lIEpTVmFsdWUqIEpT
Q2FudmFzUGl4ZWxBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkK
KyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU0NhbnZhc1BpeGVsQXJyYXk6OmdldEJ5SW5kZXgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBjaGFyIHJl
c3VsdDsKICAgICAgICAgaWYgKCFpbXBsKCktPmdldChpbmRleCwgcmVzdWx0KSkKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OmZyb20ocmVzdWx0KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgSlNDYW52YXNQaXhl
bEFycmF5OjppbmRleFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4U2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBkb3VibGUgcGl4ZWxWYWx1ZSA9IHZhbHVlLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1
ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKK3N0YXRpYyBKU1Zh
bHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYW52YXNTdHlsZSogc3R5bGUpCiB7CiAgICAg
aWYgKHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBz
dHlsZS0+Y2FudmFzR3JhZGllbnQoKSk7CkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBKU1ZhbHVl
KiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3R5
bGUtPmNvbG9yKCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1M
Q2FudmFzU3R5bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogdmFsdWUpCitzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNTdHlsZT4gdG9IVE1MQ2FudmFzU3R5bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciB2
YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBDYW52
YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoKSk7CkBAIC02MywyNyArNjMs
MjcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvSFRNTENhbgogICAgIHJldHVy
biAwOwogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5
bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVy
biB0b0pTKGV4ZWMsIGltcGwoKS0+c3Ryb2tlU3R5bGUoKSk7ICAgICAgICAKIH0KIAotdm9pZCBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0
cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpbXBs
KCktPnNldFN0cm9rZVN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CiB9CiAK
LUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zmls
bFN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBp
bXBsKCktPmZpbGxTdHlsZSgpKTsKIH0KIAotdm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGltcGwoKS0+c2V0RmlsbFN0eWxlKHRvSFRNTENhbnZh
c1N0eWxlKGV4ZWMsIHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGaWxsQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBKU1Zh
bHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9ICAgIAogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U3Ryb2tlQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBKU1ZhbHVlKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBp
bXBsKCk7CiAgICAgCkBAIC0xNzIsNyArMTcyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnN0cgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIAotSlNW
YWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
eyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAg
LTE4Miw3ICsxODIsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
CiAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBk
aCkKICAgICAvLyBDb21wb3NpdGUgb3BlcmF0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGdsb2JhbENv
bXBvc2l0ZU9wZXJhdGlvbi4KICAgICAvLyBUaGUgaW1nIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1n
PiBvciA8Y2FudmFzPiBlbGVtZW50LgotICAgIEpTVmFsdWUqIHZhbHVlID0gYXJncy5hdChleGVj
LCAwKTsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpZiAo
IXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogICAgIEpTT2JqZWN0KiBvID0gYXNPYmplY3QodmFsdWUpOwpAQCAtMjM3LDExICsy
MzcsMTEgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYQogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdJbWFnZUZyb21SZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZUZyb21SZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogICAgIAotICAgIEpT
VmFsdWUqIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0g
YXJncy5hdChleGVjLCAwKTsKICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgIEpTT2JqZWN0KiBvID0gYXNP
YmplY3QodmFsdWUpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmEKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpT
VmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0U2hhZG93KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCkBA
IC0zMDMsMTggKzMwMywxOCBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVlKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCi0gICAgSlNW
YWx1ZSogdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBh
cmdzLmF0KGV4ZWMsIDApOwogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09i
amVjdCh2YWx1ZSk7CiAKICAgICBpZiAoby0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6
c19pbmZvKSkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBKU1ZhbHVlKiBw
YXR0ZXJuID0gdG9KUyhleGVjLAorICAgICAgICBKU1ZhbHVlUHRyIHBhdHRlcm4gPSB0b0pTKGV4
ZWMsCiAgICAgICAgICAgICBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkpLCBlYykuZ2V0KCkpOwogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwpAQCAtMzIyLDcgKzMyMiw3IEBAIEpTVmFsdWUqIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmUKICAgICB9CiAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0hU
TUxDYW52YXNFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgICAgIEpTVmFsdWUqIHBhdHRlcm4gPSB0b0pTKGV4ZWMsCisgICAgICAgIEpTVmFsdWVQdHIg
cGF0dGVybiA9IHRvSlMoZXhlYywKICAgICAgICAgICAgIGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4o
c3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50
Kj4obyktPmltcGwoKSksCiAgICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hl
Y2soZXhlYywgYXJncy5hdChleGVjLCAxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CkBAIC0zMzIsNyArMzMyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNyZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1K
U1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgLy8gcHV0SW1hZ2VEYXRhIGhhcyB0d28gdmFyaWFudHMKICAgICAvLyBw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhLCB4LCB5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIEpTVmFsdWUq
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXQKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1w
bCgpOwogCkBAIC0zNjgsNyArMzY4LDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmZpbAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlVGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCiAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKQEAgLTYzLDcg
KzYzLDcgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZQogICAgIHJl
dHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBsaXN0KTsKIH0KIAotSlNWYWx1ZSogSlNDbGlwYm9h
cmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwogCkBAIC04
MSw3ICs4MSw3IEBAIEpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhlY1N0YXQKICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgImNsZWFyRGF0YTogSW52YWxp
ZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiB9CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpnZXRE
YXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlND
bGlwYm9hcmQ6OmdldERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIC8vIEZJWE1FOiBJdCBkb2VzIG5vdCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgSlMgYmlu
ZGluZ3MgdG8gdGhyb3cgb24gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIGlmIChh
cmdzLnNpemUoKSAhPSAxKQpAQCAtOTcsNyArOTcsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6
Z2V0RGF0YShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHJlc3VsdCk7CiB9
CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJk
ID0gaW1wbCgpOwogCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnNl
dERhdGEoRXhlY1N0YXRlKgogICAgIHJldHVybiBqc0Jvb2xlYW4oY2xpcGJvYXJkLT5zZXREYXRh
KGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLCBhcmdzLmF0KGV4ZWMsIDEpLT50b1N0
cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDbGlwYm9h
cmQ6OnNldERyYWdJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEpTQzo6
UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OwogCi1KU1ZhbHVlKiBKU0NvbnNvbGU6OnByb2ZpbGVz
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNDb25zb2xlOjpwcm9maWxlcyhF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmls
ZXMgPSBpbXBsKCktPnByb2ZpbGVzKCk7CiAgICAgQXJnTGlzdCBsaXN0OwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25DYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0N1c3RvbVBvc2l0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZQogICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2Up
OwogICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24g
PSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlv
bi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5v
bmUpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHZvaWQgSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmQK
ICAgICAKICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKLSAgICBKU1ZhbHVlKiBm
dW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVF
dmVudCIpKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRh
KTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVu
dENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCB2b2lkIEpTQ3Vz
dG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2so
ZmFsc2UpOwotICAgICAgICAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdl
dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKworICAgIEpTVmFsdWVQ
dHIgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFu
ZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpIHsKQEAgLTcxLDkgKzcxLDkgQEAgdm9pZCBKU0N1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrOjpoYW5kbAogICAgICAgICB9CiAgICAgICAgIGZ1bmN0aW9uID0gbV9jYWxs
YmFjazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgUmVmUHRyPEpTQ3VzdG9tU1FMU3RhdGVtZW50
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7Ci0gICAgICAgIAorCiAgICAgQXJnTGlzdCBhcmdzOwog
ICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgdHJhbnNhY3Rpb24pKTsKICAgICBhcmdzLmFwcGVu
ZCh0b0pTKGV4ZWMsIHJlc3VsdFNldCkpOwpAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgSlNDdXN0
b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGwKICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGlt
ZW91dENoZWNrKCk7CiAgICAgY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBtX2NhbGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2so
KTsKLSAgICAgICAgCisKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAg
cmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKLSAgICAgICAgCisKICAgICAgICAgcmFpc2Vk
RXhjZXB0aW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgRG9jdW1lbnQ6OnVwZGF0
ZURvY3VtZW50c1JlbmRlcmluZygpOwogfQotICAgIAorCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBib29sIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6CiAgICAgICAgIAogICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBoYW5kbGVF
dmVudEZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhh
bmRsZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IG1fY2Fs
bGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBD
YWxsRGF0YSBoYW5kbGVFdmVudENhbGxEYXRhOwogICAgIENhbGxUeXBlIGhhbmRsZUV2ZW50Q2Fs
bFR5cGUgPSBoYW5kbGVFdmVudEZ1bmN0aW9uLT5nZXRDYWxsRGF0YShoYW5kbGVFdmVudENhbGxE
YXRhKTsKICAgICBDYWxsRGF0YSBjYWxsYmFja0NhbGxEYXRhOwpAQCAtODAsNyArODAsNyBAQCBi
b29sIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6CiAgICAgYXJncy5hcHBlbmQo
dG9KUyhleGVjLCB0cmFuc2FjdGlvbikpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZXJy
b3IpKTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVz
dWx0OwogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICBpZiAoaGFu
ZGxlRXZlbnRDYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJlc3VsdCA9IGNhbGwo
ZXhlYywgaGFuZGxlRXZlbnRGdW5jdGlvbiwgaGFuZGxlRXZlbnRDYWxsVHlwZSwgaGFuZGxlRXZl
bnRDYWxsRGF0YSwgbV9jYWxsYmFjaywgYXJncyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgSlNDdXN0
b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpoYW4KICAgICAgICAgCiAgICAgSlNDOjpKU0xvY2sg
bG9jayhmYWxzZSk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY3Rpb24g
PSBtX2RhdGEtPmNhbGxiYWNrKCktPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVF
dmVudCIpKTsKKyAgICBKU1ZhbHVlUHRyIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBtX2RhdGEtPmNh
bGxiYWNrKCktPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAg
ICBDYWxsRGF0YSBoYW5kbGVFdmVudENhbGxEYXRhOwogICAgIENhbGxUeXBlIGhhbmRsZUV2ZW50
Q2FsbFR5cGUgPSBoYW5kbGVFdmVudEZ1bmN0aW9uLT5nZXRDYWxsRGF0YShoYW5kbGVFdmVudENh
bGxEYXRhKTsKICAgICBDYWxsRGF0YSBjYWxsYmFja0NhbGxEYXRhOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgYm9vbCBKU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjawogICAg
ICAgICAKICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgSlNWYWx1
ZSogZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFu
ZGxlRXZlbnQiKSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxs
RGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtNzYsNyArNzYs
NyBAQCBib29sIEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiAgICAgQXJnTGlz
dCBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZXJyb3IpKTsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICBnbG9iYWxPYmplY3QtPnN0
YXJ0VGltZW91dENoZWNrKCk7CiAgICAgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0
b3BUaW1lb3V0Q2hlY2soKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lk
Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21W
b2lkQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IHZvaWQgSlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KCkKICAgICAgICAgCiAgICAg
SlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9u
ID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50Iikp
OworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBK
U0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogICAgIERvY3VtZW50Ojp1cGRhdGVE
b2N1bWVudHNSZW5kZXJpbmcoKTsKIH0KICAKLVBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiB0b1Zv
aWRDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHRvVm9pZENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2
YWx1ZSkKIHsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUtPmdldE9iamVjdCgpOwogICAg
IGlmICghb2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2Fs
bGJhY2suaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
Vm9pZENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgfTsKIAotICAg
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiB0b1ZvaWRDYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiB0b1ZvaWRDYWxs
YmFjayhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0cik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1QYXNzUmVm
UHRyPEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3Jl
YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0
cjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0
ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlm
ICh2YWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC04MSw3
ICs4MSw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdCgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG1fY3VzdG9tUmVzb2x2ZXItPmdl
dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsb29rdXBOYW1lc3BhY2VVUkkiKSk7CisgICAgSlNW
YWx1ZVB0ciBmdW5jdGlvbiA9IG1fY3VzdG9tUmVzb2x2ZXItPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJsb29rdXBOYW1lc3BhY2VVUkkiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwog
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKQEAgLTEwMCw3ICsxMDAsNyBAQCBT
dHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgYXJncy5hcHBlbmQo
anNTdHJpbmcoZXhlYywgcHJlZml4KSk7CiAKICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91
dENoZWNrKCk7Ci0gICAgSlNWYWx1ZSogcmV0dmFsID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBtX2N1c3RvbVJlc29sdmVyLCBhcmdzKTsKKyAgICBKU1ZhbHVlUHRy
IHJldHZhbCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9jdXN0
b21SZXNvbHZlciwgYXJncyk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7
CiAKICAgICBTdHJpbmcgcmVzdWx0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21YUGF0aE5TUmVzb2x2ZXIuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXIgOiBwdWJsaWMgWFBhdGhOU1Jlc29sdmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBjcmVhdGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlND
dXN0b21YUGF0aE5TUmVzb2x2ZXI+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZVB0cik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIH5KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
cigpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0
aW9uQ2FjaGVDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCB2b2lkIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6bWFyaygpCiAgICAgfQogfQog
Ci1KU1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtOTEsNyArOTEsNyBAQCBKU1ZhbHVlKiBKU0RP
TUFwcGxpY2F0aW9uQ2FjaGU6OmFkZChFeGVjCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01BcHBsaWNhdGlvbkNhY2hl
OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZy
YW1lKiBmcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+
aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0xMDQsNyArMTA0LDcgQEAgSlNW
YWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRQogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBK
U0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9N
QXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3MCArMzQwLDcwIEBAIHZvaWQgbWFya0RP
TU9iamVjdFdyYXBwZXIoSlNHbG9iYWxEYXRhJiAKICAgICB3cmFwcGVyLT5tYXJrKCk7CiB9CiAK
LUpTVmFsdWUqIGpzU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
KQorSlNWYWx1ZVB0ciBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgcykKIHsKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNPd25lZFN0cmlu
Z09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpz
T3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzKQogewog
ICAgIGlmIChzLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJu
IGpzT3duZWRTdHJpbmcoZXhlYywgcyk7CiB9CiAKLUpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpzU3RyaW5n
T3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYg
KHMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQorSlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBzKTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBLVVJMJiB1cmwpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygpKTsKIH0K
IAotSlNWYWx1ZSoganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtV
UkwmIHVybCkKK0pTVmFsdWVQdHIganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygp
KTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdPckZhbHNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
S1VSTCYgdXJsKQorSlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihmYWxzZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVybC5zdHJpbmco
KSk7CiB9CiAKLVVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK1VTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CiAgICAgcmV0dXJuIHZhbHVlLT50b1N0
cmluZyhleGVjKTsKIH0KIAotVVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCitVU3RyaW5nIHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRy
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuIFVTdHJpbmcoKTsKICAgICByZXR1cm4gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwogfQog
Ci12b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZXhj
ZXB0aW9uKQordm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWVQdHIgZXhjZXB0aW9uKQogewogICAgIFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9u
LT50b1N0cmluZyhleGVjKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uT2JqZWN0ID0gZXhjZXB0
aW9uLT50b09iamVjdChleGVjKTsKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMs
IGV4Y2VwdGlvbik7CiB9CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBFeAogICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbjsKICAgICBnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGRlc2NyaXB0aW9uKTsK
IAotICAgIEpTVmFsdWUqIGVycm9yT2JqZWN0ID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIg
ZXJyb3JPYmplY3QgPSBub1ZhbHVlKCk7CiAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi50eXBlKSB7
CiAgICAgICAgIGNhc2UgRE9NRXhjZXB0aW9uVHlwZToKICAgICAgICAgICAgIGVycm9yT2JqZWN0
ID0gdG9KUyhleGVjLCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKQEAg
LTQ4OSw3ICs0ODksNyBAQCB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZy
CiAgICAgICAgIHdpbmRvdy0+cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLUpTVmFs
dWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRy
IG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGNhY2hlRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdCwg
d3JhcHBlcik7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlKiBn
ZXRET01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogb2JqZWN0
KQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGlu
ZSBKU0M6OkpTVmFsdWVQdHIgZ2V0RE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgRE9NQ2xhc3MqIG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CkBAIC0xMTcsNyArMTE3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBjYWNoZURPTU9iamVjdFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBvYmplY3QsIHdyYXBwZXIpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSogZ2V0RE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9N
Q2xhc3MqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBX
cmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlUHRyIGdldERP
TU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmplY3QsIFNW
R0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoIW9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgY2FjaGVET01Ob2RlV3JhcHBlcihub2RlLT5kb2N1bWVudCgpLCBu
b2RlLCB3cmFwcGVyKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQotICAgIHRlbXBs
YXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFs
dWUqIGdldERPTU5vZGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogbm9k
ZSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlUHRyIGdldERPTU5vZGVXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBET01DbGFzcyogbm9kZSkKICAgICB7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwpAQCAtMTQ3LDI5ICsxNDcsMjkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldEhhc2hUYWJsZUZvckdsb2Jh
bERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBjb25zdCBKU0M6Okhhc2hUYWJsZSogc3RhdGljVGFi
bGUpOwogCi0gICAgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUqIGV4Y2VwdGlvbik7CisgICAgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWVQdHIgZXhjZXB0aW9uKTsKICAgICB2b2lkIHJlcG9ydEN1cnJlbnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIAogICAgIC8vIENvbnZlcnQgYSBET00gaW1wbGVt
ZW50YXRpb24gZXhjZXB0aW9uIGNvZGUgaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRo
ZSBleGVjdXRpb24gc3RhdGUuCiAgICAgdm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBFeGNlcHRpb25Db2RlKTsKIAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gbnVsbCBpZiB0aGUgc3RyaW5nIGlz
IG51bGwKLSAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgS1VSTCYpOyAvLyBudWxsIGlmIHRoZSBVUkwgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1
ZVB0ciBqc1N0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBu
dWxsIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09y
TnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEtVUkwmKTsgLy8gbnVsbCBpZiB0aGUgVVJMIGlz
IG51bGwKIAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxs
Ci0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgS1VSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisgICAgSlNDOjpK
U1ZhbHVlUHRyIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1
ZVB0ciBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAv
LyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCiAKLSAgICBKU0M6OkpTVmFsdWUqIGpzU3Ry
aW5nT3JGYWxzZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFuIGZh
bHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPckZh
bHNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRo
ZSBVUkwgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gYm9vbGVhbiBmYWxzZSBpZiB0aGUgc3RyaW5n
IGlzIG51bGwKKyAgICBKU0M6OkpTVmFsdWVQdHIganNTdHJpbmdPckZhbHNlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgS1VSTCYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBVUkwgaXMgbnVsbAog
CiAgICAgLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVz
ZWQgZm9yIGFueSBVU3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCiAgICAg
Ly8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNT
dHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLSAgICBKU0M6OkpTVmFs
dWUqIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVTdHJp
bmcmKTsgCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OlVTdHJpbmcmKTsgCiAKLSAgICBKU0M6OlVTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTsgLy8g
bnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbAotICAgIEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5n
V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKik7
IC8vIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkCisgICAgSlNDOjpVU3Ry
aW5nIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlUHRyKTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbAorICAgIEpTQzo6VVN0cmluZyB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlUHRyKTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQK
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFQ+IHB0cikgeyByZXR1cm4gdG9KUyhleGVj
LCBwdHIuZ2V0KCkpOyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpT
VmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxUPiBwdHIpIHsg
cmV0dXJuIHRvSlMoZXhlYywgcHRyLmdldCgpKTsgfQogCiAgICAgYm9vbCBjaGVja05vZGVTZWN1
cml0eShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKTsKIApAQCAtMTc5LDcgKzE3OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShKU0M6OkV4ZWNT
dGF0ZSosIEZyYW1lKik7CiAgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoSlNDOjpFeGVj
U3RhdGUqLCBGcmFtZSosIFN0cmluZyYgbWVzc2FnZSk7CiAgICAgdm9pZCBwcmludEVycm9yTWVz
c2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBKU0M6OkpT
VmFsdWUqIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBK
U0M6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5v
ZGUoTm9kZSopOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEpTRE9NR2xv
YmFsT2JqZWN0OjptYXJrKCkKICAgICB9CiB9CiAKLUpTRXZlbnRMaXN0ZW5lciogSlNET01HbG9i
YWxPYmplY3Q6OmZpbmRKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZSogdmFsLCBib29sIGlzSW5saW5l
KQorSlNFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpTRXZlbnRMaXN0ZW5l
cihKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoIXZhbC0+aXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05NSw3ICs5NSw3IEBAIEpTRXZlbnRMaXN0ZW5l
ciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmQKICAgICByZXR1cm4gbGlzdGVuZXJzLmdldChvYmpl
Y3QpOwogfQogCi1QYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6
OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWwsIGJv
b2wgaXNJbmxpbmUpCitQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmpl
Y3Q6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHZh
bCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBpc0lubGluZSkpCiAgICAgICAgIHJldHVybiBsaXN0
ZW5lcjsKQEAgLTEwNyw3ICsxMDcsNyBAQCBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNE
T01HbG9iYWxPCiAgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KHZh
bCksIHRoaXMsIGlzSW5saW5lKS5nZXQoKTsKIH0KIAotSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSogdmFsLCBib29sIGlzSW5saW5lKQorSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciB2YWwsIGJvb2wgaXNJbmxpbmUpCiB7CiAgICAgaWYg
KCF2YWwtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTE2LDcgKzExNiw3IEBA
IEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE8KICAgICByZXR1cm4gbGlz
dGVuZXJzLmdldChhc09iamVjdCh2YWwpKTsKIH0KIAotUGFzc1JlZlB0cjxKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsLCBib29sIGlzSW5s
aW5lKQorUGFzc1JlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gSlNET01HbG9iYWxP
YmplY3Q6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB2YWwsIGJvb2wgaXNJbmxpbmUpCiB7CiAgICAgaWYgKEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihleGVjLCB2YWwsIGlzSW5saW5lKSkKICAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDE2ICs1NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
ID0gMDsKIAogICAgICAgICAvLyBGaW5kcyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVy
LCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25lLgotICAgICAgICBKU0V2ZW50TGlzdGVuZXIq
IGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNl
KTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTQzo6SlNW
YWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBGaW5kcyBvciBj
cmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlzdGVuZXIg
b2JqZWN0IGlzIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVu
ZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSosIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CisgICAgICAgIFBhc3NSZWZQdHI8SlNFdmVu
dExpc3RlbmVyPiBmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWVQdHIsIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CiAKICAgICAgICAgLy8gRmlu
ZHMgYSB3cmFwcGVyIG9mIGEgR0MtdW5wcm90ZWN0ZWQgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJu
cyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSosIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CisgICAgICAgIEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKiBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWVQdHIsIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CiAKICAgICAgICAg
Ly8gRmluZHMgb3IgY3JlYXRlcyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBKUyBF
dmVudExpc3RlbmVyIG9iamVjdCBpcyAqTk9UKiBHQy1wcm90ZWN0ZWQuCi0gICAgICAgIFBhc3NS
ZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBpc0lu
bGluZSA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWVQdHIsIGJvb2wgaXNJbmxpbmUgPSBmYWxzZSk7CiAKICAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU0V2ZW50TGlzdGVuZXIqPiBMaXN0ZW5l
cnNNYXA7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU0M6OkpTT2JqZWN0KiwgSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIqPiBVbnByb3RlY3RlZExpc3RlbmVyc01hcDsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSwyOSArNjksMjkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotc3RhdGljIEpTVmFsdWUq
IHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERp
YWxvZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMgSlNWYWx1ZSog
anNET01XaW5kb3dCYXNlQ3J5cHRvKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VFdmVudChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0
aWMgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VFdmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciB3aW5kb3dQ
cm90b0Z1bmNOb3RJbXBsZW1lbnRlZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKKworc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlQ3J5
cHRvKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNldEpTRE9N
V2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0cik7CiAKIC8v
IENvbnN0cnVjdG9ycwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2
b2lkIHNldEpTRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSopOwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpT
RE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwotc3Rh
dGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpT
RE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSopOwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgdm9pZCBzZXRK
U0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1z
dGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKLXN0YXRpYyBK
U1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgdm9pZCBzZXRKU0RPTVdp
bmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsK
LXN0YXRpYyBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIp
Oworc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZv
aWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQg
c2V0SlNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMg
dm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIpOworc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWFNMVFBy
b2Nlc3NvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0cik7CiAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2Uu
bHV0LmgiCiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gcGFyc2VNb2RhCiB9CiAKIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYywgRnJhbWUqIG9wZW5lckZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwKLSAgICBjb25zdCBT
dHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBK
U1ZhbHVlKiBkaWFsb2dBcmdzKQorICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBjb25zdCBX
aW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIEpTVmFsdWVQdHIgZGlhbG9nQXJncykKIHsK
ICAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoYWN0aXZlRnJhbWUpOwpA
QCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25z
dCAKICAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPmNhblJ1bk1vZGFsTm93KCk7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlKiBzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiBleGVjLCBGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgdXJsLCBKU1ZhbHVlKiBkaWFsb2dBcmdzLCBjb25zdCBTdHJpbmcm
IGZlYXR1cmVBcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgc2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0
ZSogZXhlYywgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgSlNWYWx1ZVB0ciBkaWFs
b2dBcmdzLCBjb25zdCBTdHJpbmcmIGZlYXR1cmVBcmdzKQogewogICAgIGlmICghY2FuU2hvd01v
ZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhYWxsb3dQb3BVcChleGVjKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CkBAIC0zMzcsNyArMzM3LDcgQEAgc3RhdGljIEpTVmFsdWUqIHNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdAogCiAgICAgLy8gR2V0IHRoZSByZXR1cm4gdmFsdWUgZWl0aGVy
IGp1c3QgYmVmb3JlIGNsZWFyaW5nIHRoZSBkaWFsb2cgd2luZG93J3MKICAgICAvLyBwcm9wZXJ0
aWVzIChpbiBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFyKSwgb3Igd2hlbiBvbiByZXR1cm4gZnJvbSBy
dW5Nb2RhbC4KLSAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IG5vVmFsdWUoKTsKKyAgICBKU1Zh
bHVlUHRyIHJldHVyblZhbHVlID0gbm9WYWx1ZSgpOwogICAgIGRpYWxvZ1dpbmRvdy0+c2V0UmV0
dXJuVmFsdWVTbG90KCZyZXR1cm5WYWx1ZSk7CiAgICAgZGlhbG9nRnJhbWUtPnBhZ2UoKS0+Y2hy
b21lKCktPnJ1bk1vZGFsKCk7CiAgICAgZGlhbG9nV2luZG93LT5zZXRSZXR1cm5WYWx1ZVNsb3Qo
MCk7CkBAIC0zNTUsMTIgKzM1NSwxMiBAQCBzdGF0aWMgSlNWYWx1ZSogc2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1KU1ZhbHVlKiBqc0RPTVdp
bmRvd0Jhc2VDcnlwdG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZUNyeXB0byhFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzCiB9CiAKLUpTVmFsdWUqIGpzRE9N
V2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlRXZlbnQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwpAQCAtMzY5LDE0ICszNjksMTQgQEAgSlNWYWx1ZSoganNET01XaW5kb3dC
YXNlRXZlbnQoRXhlY1N0YXRlKgogICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpT
RE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5jdXJyZW50RXZlbnQo
KSk7CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
anNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20o
ZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKIH0KIAotSlNWYWx1ZSoganNE
T01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jh
c2VNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAjaWYgRU5BQkxFKENIQU5ORUxfTUVTU0FHSU5HKQog
ICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC0zODcsMjEgKzM4NywyMSBAQCBK
U1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5lbChFCiAjZW5kaWYKIH0KIAotSlNW
YWx1ZSoganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dC
YXNlT3B0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+
KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8
SlNPcHRpb25Db25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOwogfQogCi1KU1ZhbHVlKiBqc0RPTVdpbmRvd0Jh
c2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVhNTEh0dHBS
ZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFz
T2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKSk7CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2lu
ZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFz
ZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQpA
QCAtNDE0LDcgKzQxNCw3IEBAIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0
ZSoKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5z
bG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC00MjUsNyArNDI1LDcgQEAg
SlNWYWx1ZSoganNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZQogI2VuZGlmCiB9CiAKLUpT
VmFsdWUqIGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RP
TVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBp
ZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQpAQCAtNDM2LDcgKzQzNiw3IEBAIEpTVmFsdWUq
IGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXgKICNlbmRpZgogfQogCi12b2lkIHNldEpT
RE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3Qs
IEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VFdmVudChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlm
ICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vz
c0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSogCiAgICAgc3RhdGljX2Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJFdmVu
dCIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpT
RE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3Qs
IEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0
YXRlKiAKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0
RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkF1ZGlvIiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRK
U0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBp
ZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5hbGxvd3NBY2Nl
c3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm47CkBAIC00NjAsNyArNDYwLDcgQEAgdm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqIAogICAgIHN0YXRpY19jYXN0PEpTRE9N
V2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiSW1h
Z2UiKSwgdmFsdWUpOwogfQogCi12b2lkIHNldEpTRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVs
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQor
dm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghc3RhdGlj
X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4CiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJNZXNzYWdlQ2hhbm5l
bCIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRK
U0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93
QmFzZSo+KHRoaXNPYmplY3QpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1
cm47CkBAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhl
Y1N0YXRlKgogICAgIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5w
dXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiT3B0aW9uIiksIHZhbHVlKTsKIH0KIAotdm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
amVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZVdvcmtlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2
b2lkIHNldEpTRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqCiAgICAgc3RhdGljX2Nhc3Q8
SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMs
ICJXb3JrZXIiKSwgdmFsdWUpOwogfQogCi12b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBS
ZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZh
bHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICgh
c3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zy
b20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5Miw3ICs0OTIsNyBAQCB2b2lkIHNldEpT
RE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4CiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5k
b3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJYTUxIdHRw
UmVxdWVzdCIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlWFNMVFByb2Nl
c3NvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghc3Rh
dGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20o
ZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTUwMiwxNyArNTAyLDE3IEBAIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1K
U1ZhbHVlKiBKU0RPTVdpbmRvd0Jhc2U6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgSlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5k
b3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJl
ZSgpLT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSktPmRvbVdpbmRvdygpKTsKIH0K
IAotSlNWYWx1ZSogSlNET01XaW5kb3dCYXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IEpTRE9NV2luZG93QmFzZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiB0b0pTKGV4
ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSkpLT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+Y2hpbGQoc2xvdC5pbmRleCgpKS0+ZG9tV2lu
ZG93KCkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvd0Jhc2U6Om5hbWVkSXRlbUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvd0Jhc2U6Om5hbWVkSXRlbUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iaiA9
IHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkp
OwogICAgIERvY3VtZW50KiBkb2MgPSB0aGlzT2JqLT5pbXBsKCktPmZyYW1lKCktPmRvY3VtZW50
KCk7CkBAIC01NTYsNyArNTU2LDcgQEAgYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OmdldE93blByb3Bl
cnR5U2xvdAogCiAgICAgLy8gRG8gcHJvdG90eXBlIGxvb2t1cCBlYXJseSBzbyB0aGF0IGZ1bmN0
aW9ucyBhbmQgYXR0cmlidXRlcyBpbiB0aGUgcHJvdG90eXBlIGNhbiBoYXZlCiAgICAgLy8gcHJl
Y2VkZW5jZSBvdmVyIHRoZSBpbmRleCBhbmQgbmFtZSBnZXR0ZXJzLiAgCi0gICAgSlNWYWx1ZSog
cHJvdG8gPSBwcm90b3R5cGUoKTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvID0gcHJvdG90eXBlKCk7
CiAgICAgaWYgKHByb3RvLT5pc09iamVjdCgpKSB7CiAgICAgICAgIGlmIChhc09iamVjdChwcm90
byktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAgICAg
ICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC01OTQsNyArNTk0LDcgQEAgYm9v
bCBKU0RPTVdpbmRvd0Jhc2U6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBK
U0RPTVdpbmRvd0Jhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQg
SlNET01XaW5kb3dCYXNlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gSlNET01XaW5kb3dCYXNlVGFibGUuZW50cnko
ZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoZW50cnkpIHsKQEAgLTcxNyw3ICs3MTcsNyBA
QCBKU0dsb2JhbERhdGEqIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1KU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCF3
aW5kb3cpCkBAIC03ODgsNyArNzg4LDcgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jT3BlbihF
eGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIGZyYW1lLT5kb21XaW5kb3coKSk7IC8v
IGdsb2JhbCBvYmplY3QKIH0KIAotSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlh
bG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxv
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5k
b3codGhpc1ZhbHVlKTsKICAgICBpZiAoIXdpbmRvdykKQEAgLTgwMyw3ICs4MDMsNyBAQCBKU1Zh
bHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2coCiAgICAgcmV0dXJuIHNob3dNb2Rh
bERpYWxvZyhleGVjLCBmcmFtZSwgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKSwgYXJncy5hdChleGVjLCAxKSwgdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDIpKSk7CiB9CiAK
LUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0
ciB3aW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdG9K
U0RPTVdpbmRvdyh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwpAQCAtODEyLDcgKzgxMiw3IEBAIEpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY05v
dEltcGxlbWVudGVkKEUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTRE9NV2luZG93
QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90KEpTVmFsdWUqKiBzbG90KQordm9pZCBKU0RPTVdpbmRv
d0Jhc2U6OnNldFJldHVyblZhbHVlU2xvdChKU1ZhbHVlUHRyKiBzbG90KQogewogICAgIGQoKS0+
cmV0dXJuVmFsdWVTbG90ID0gc2xvdDsKIH0KQEAgLTgyOSw3ICs4MjksNyBAQCBpbnQgSlNET01X
aW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChjb25zCiAgICAgcmV0dXJuIGluc3RhbGxUaW1lb3V0
KG5ldyBTY2hlZHVsZWRBY3Rpb24oaGFuZGxlciksIHQsIHNpbmdsZVNob3QpOwogfQogCi1pbnQg
SlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IGZ1bmMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpCitpbnQg
SlNET01XaW5kb3dCYXNlOjppbnN0YWxsVGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgZnVuYywgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKIHsK
ICAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQobmV3IFNjaGVkdWxlZEFjdGlvbihleGVjLCBmdW5j
LCBhcmdzKSwgdCwgc2luZ2xlU2hvdCk7CiB9CkBAIC04NDMsNyArODQzLDcgQEAgdm9pZCBKU0RP
TVdpbmRvd0Jhc2U6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhl
Y1N0YXRlKiwgRE9NV2luZG93KiBkb21XaW5kb3cpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRl
KiwgRE9NV2luZG93KiBkb21XaW5kb3cpCiB7CiAgICAgaWYgKCFkb21XaW5kb3cpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBKU0RPTVdpbmRvdyogdG9KU0RP
TVdpbmRvdyhGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93
U2hlbGwoKS0+d2luZG93KCk7CiB9CiAKLUpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTVmFs
dWUqIHZhbHVlKQorSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNWYWx1ZVB0ciB2YWx1ZSkK
IHsKICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMzk2MTYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSwxNiArNjEsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpc2Nvbm5l
Y3RGcmFtZSgpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSosIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6OlB1dFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgICAgIGludCBpbnN0YWxsVGltZW91dChjb25zdCBKU0M6OlVT
dHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwotICAgICAgICBpbnQgaW5z
dGFsbFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqIGZ1bmN0aW9uLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpOworICAgICAgICBp
bnQgaW5zdGFsbFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIgZnVuY3Rp
b24sIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKIAogICAgICAgICB2b2lk
IGNsZWFyKCk7CiAKICAgICAgICAgLy8gU2V0IGEgcGxhY2UgdG8gcHV0IGEgZGlhbG9nIHJldHVy
biB2YWx1ZSB3aGVuIHRoZSB3aW5kb3cgaXMgY2xlYXJlZC4KLSAgICAgICAgdm9pZCBzZXRSZXR1
cm5WYWx1ZVNsb3QoSlNDOjpKU1ZhbHVlKiogc2xvdCk7CisgICAgICAgIHZvaWQgc2V0UmV0dXJu
VmFsdWVTbG90KEpTQzo6SlNWYWx1ZVB0ciogc2xvdCk7CiAKICAgICAgICAgdmlydHVhbCBjb25z
dCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQog
ICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpAQCAtMTAxLDEzICsx
MDEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICBSZWZQdHI8RE9NV2lu
ZG93PiBpbXBsOwogCi0gICAgICAgICAgICBKU0M6OkpTVmFsdWUqKiByZXR1cm5WYWx1ZVNsb3Q7
CisgICAgICAgICAgICBKU0M6OkpTVmFsdWVQdHIqIHJldHVyblZhbHVlU2xvdDsKICAgICAgICAg
ICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsOwogICAgICAgICB9OwogCi0gICAgICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUqIGNoaWxkRnJhbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlKiBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUqIG5hbWVkSXRlbUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWVQdHIgY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWVQdHIgaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlUHRyIG5hbWVkSXRlbUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgdm9p
ZCBjbGVhckhlbHBlck9iamVjdFByb3BlcnRpZXMoKTsKICAgICAgICAgaW50IGluc3RhbGxUaW1l
b3V0KFNjaGVkdWxlZEFjdGlvbiosIGludCBpbnRlcnZhbCwgYm9vbCBzaW5nbGVTaG90KTsKQEAg
LTExOSwxMSArMTE5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgLy8g
UmV0dXJucyBhIEpTRE9NV2luZG93IG9yIGpzTnVsbCgpCi0gICAgSlNDOjpKU1ZhbHVlKiB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgRE9NV2luZG93Kik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cqKTsKIAogICAgIC8vIFJldHVybnMgSlNET01XaW5k
b3cgb3IgMAogICAgIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEZyYW1lKik7Ci0gICAgSlNE
T01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNDOjpKU1ZhbHVlKik7CisgICAgSlNET01XaW5kb3cq
IHRvSlNET01XaW5kb3coSlNDOjpKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgSlNET01XaW5kb3c6OmRl
ZmluZVNldHRlcihFeGVjU3RhdGUKICAgICBCYXNlOjpkZWZpbmVTZXR0ZXIoZXhlYywgcHJvcGVy
dHlOYW1lLCBzZXR0ZXJGdW5jdGlvbik7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93Ojpsb29r
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CitKU1ZhbHVlUHRyIEpTRE9NV2luZG93Ojpsb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgLy8gT25seSBhbGxvdyBsb29r
aW5nLXVwIGdldHRlcnMgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KICAgICBpZiAoIWFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC0xMTYsNyArMTE2LDcgQEAgSlNWYWx1ZSogSlNET01X
aW5kb3c6Omxvb2t1cEdldHRlcihFeGVjUwogICAgIHJldHVybiBCYXNlOjpsb29rdXBHZXR0ZXIo
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6Omxvb2t1cFNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pT
VmFsdWVQdHIgSlNET01XaW5kb3c6Omxvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBPbmx5IGFsbG93IGxvb2tpbmct
dXAgc2V0dGVycyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgogICAgIGlmICghYWxsb3dz
QWNjZXNzRnJvbShleGVjKSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRv
dzo6bG9va3VwU2V0dGVyKEV4ZWNTCiAgICAgcmV0dXJuIEJhc2U6Omxvb2t1cFNldHRlcihleGVj
LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBhY3Rp
dmVGcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1w
bCgpLT5mcmFtZSgpOwogICAgIGlmICghYWN0aXZlRnJhbWUpCkBAIC0xNTIsNyArMTUyLDcgQEAg
dm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKgogICAgIH0KIH0KIAotSlNW
YWx1ZSogSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBET01XaW5kb3cqIHdpbmRvdyA9
IGltcGwoKTsKIApAQCAtMTc1LDkgKzE3NSw5IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93Ojpwb3N0
TWVzc2FnZShFeGVjU3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEpT
VmFsdWUqIHNldFRpbWVvdXRPckludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNET01XaW5kb3cq
IHdpbmRvdywgY29uc3QgQXJnTGlzdCYgYXJncywgYm9vbCB0aW1lb3V0KQorc3RhdGljIEpTVmFs
dWVQdHIgc2V0VGltZW91dE9ySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBKU0RPTVdpbmRvdyog
d2luZG93LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBib29sIHRpbWVvdXQpCiB7Ci0gICAgSlNWYWx1
ZSogdiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gYXJncy5hdChleGVj
LCAwKTsKICAgICBpbnQgZGVsYXkgPSBhcmdzLmF0KGV4ZWMsIDEpLT50b0ludDMyKGV4ZWMpOwog
ICAgIGlmICh2LT5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2lu
ZG93LT5pbnN0YWxsVGltZW91dChhc1N0cmluZyh2KS0+dmFsdWUoKSwgZGVsYXksIHRpbWVvdXQp
KTsKQEAgLTE4OSwzNCArMTg5LDM0IEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXRUaW1lb3V0T3JJbnRl
cnZhbChFeGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2luZG93LT5pbnN0YWxsVGltZW91
dChleGVjLCB2LCBhcmdzVGFpbCwgZGVsYXksIHRpbWVvdXQpKTsKIH0KIAotSlNWYWx1ZSogSlNE
T01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIHNldFRpbWVvdXRPckludGVydmFsKGV4
ZWMsIHRoaXMsIGFyZ3MsIHRydWUpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6Y2xlYXJU
aW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNET01XaW5kb3c6OmNsZWFyVGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgcmVtb3ZlVGltZW91dChhcmdzLmF0KGV4ZWMsIDApLT50b0ludDMyKGV4
ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5k
b3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gc2V0VGltZW91dE9ySW50ZXJ2YWwoZXhlYywg
dGhpcywgYXJncywgZmFsc2UpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6Y2xlYXJJbnRl
cnZhbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
RE9NV2luZG93OjpjbGVhckludGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICByZW1vdmVUaW1lb3V0KGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRv
dzo6YXRvYihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTRE9NV2luZG93OjphdG9iKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBKU1ZhbHVl
KiB2ID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMs
IDApOwogICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYyk7CiAKQEAgLTIzNywxMiArMjM3LDEyIEBAIEpTVmFsdWUqIEpTRE9NV2luZG93OjphdG9i
KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nKG91dC5kYXRh
KCksIG91dC5zaXplKCkpKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6OmJ0b2EoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6
YnRvYShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgSlNWYWx1ZSogdiA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpZiAo
di0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogCkBAIC0y
NjIsNyArMjYyLDcgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OmJ0b2EoRXhlY1N0YXRlKiBleAog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNpemUoKSkp
OwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93OjphZGRF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTI3
Niw3ICsyNzYsNyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihFCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpyZW1v
dmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjkwLDcgKzI5MCw3IEBAIEpTVmFsdWUqIEpTRE9N
V2luZG93OjpyZW1vdmVFdmVudExpc3RlbmUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotRE9NV2luZG93KiB0b0RPTVdpbmRvdyhKU1ZhbHVlKiB2YWx1ZSkKK0RPTVdpbmRvdyogdG9E
T01XaW5kb3coSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTMwMiwyMiArMzAyLDIyIEBAIERPTVdpbmRvdyogdG9E
T01XaW5kb3coSlNWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTVmFsdWUqIG5v
bkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0
ciBub25DYWNoaW5nU3RhdGljQ2xvc2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAg
ICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25DbG9zZSk7CiB9CiAKLUpTVmFsdWUqIG5v
bkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRy
IG5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAg
cmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1l
LCBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uQmx1cik7CiB9CiAKLUpTVmFsdWUqIG5vbkNh
Y2hpbmdTdGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBu
b25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICBy
ZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUs
IGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Gb2N1cyk7CiB9CiAKLUpTVmFsdWUqIG5vbkNh
Y2hpbmdTdGF0aWNQb3N0TWVzc2FnZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1
ZVB0ciBub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAyLCBw
cm9wZXJ0eU5hbWUsIGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIGlubGluZSBjb25zdCBKU0RPTVdpbmRvdyogYXNK
U0RPTVdpbmRvdygKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3cqPihn
bG9iYWxPYmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1
bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29u
c3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Js
dXJGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYs
IGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci1KU0M6OkpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0
aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGlu
Z1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworSlNDOjpKU1ZhbHVl
UHRyIG5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKK0pTQzo6
SlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljQmx1ckZ1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
K0pTQzo6SlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlT
bG90Jik7CitKU0M6OkpTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rp
b25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBK
U0M6OlByb3BlcnR5U2xvdCYpOwogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNET01XaW5kb3c6OmN1
c3RvbUdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90JiBzbG90KQogewpAQCAt
MTIzLDcgKzEyMyw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU0RPTVdpbmRvdzo6Y3VzdG9tR2UK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIEpTRE9NV2luZG93OjpjdXN0b21Q
dXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUqIHZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2lu
bGluZSBib29sIEpTRE9NV2luZG93OjpjdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUs
IEpTQzo6UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghaW1wbCgpLT5mcmFtZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTIgQEAgYm9v
bCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eVNsbwogICAgIHJldHVybiBtX3dpbmRv
dy0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNET01XaW5kb3dTaGVsbDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQor
dm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBtX3dpbmRvdy0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OwogfQogCi12b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0V2l0aEF0dHJp
YnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgbV93aW5kb3ctPnB1
dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwog
fQpAQCAtMTE3LDEyICsxMTcsMTIgQEAgdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpkZWZpbmVTZXR0
ZXIoRXhlYwogICAgIG1fd2luZG93LT5kZWZpbmVTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBz
ZXR0ZXJGdW5jdGlvbik7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93U2hlbGw6Omxvb2t1cEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pT
VmFsdWVQdHIgSlNET01XaW5kb3dTaGVsbDo6bG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIHJldHVybiBtX3dpbmRvdy0+
bG9va3VwR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2lu
ZG93U2hlbGw6Omxvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKK0pTVmFsdWVQdHIgSlNET01XaW5kb3dTaGVsbDo6bG9va3VwU2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBtX3dpbmRvdy0+bG9va3VwU2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CkBA
IC0xNjAsNyArMTYwLDcgQEAgdm9pZCogSlNET01XaW5kb3dTaGVsbDo6b3BlcmF0b3IgbmV3KHNp
egogLy8gQ29udmVyc2lvbiBtZXRob2RzCiAvLyAtLS0tCiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0
YXRlKiwgRnJhbWUqIGZyYW1lKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSosIEZyYW1lKiBm
cmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUqIHByb3RvdHlwZSkgCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U1ZhbHVlUHRyIHByb3RvdHlwZSkgCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUpKTsgCiAgICAgICAgIH0KQEAgLTY5LDIyICs2OSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAgICAgICAgIHZpcnR1YWwgSlNDOjpVU3Ry
aW5nIGNsYXNzTmFtZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdp
dGhBdHRyaWJ1dGVzKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0ciwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eUF0dHJp
YnV0ZXMoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVm
aW5lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTQzo6SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRlZmluZVNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU0M6OkpTT2JqZWN0KiBzZXR0ZXJGdW5jdGlvbik7Ci0gICAgICAgIHZp
cnR1YWwgSlNDOjpKU1ZhbHVlKiBsb29rdXBHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1Zh
bHVlKiBsb29rdXBTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIGxvb2t1cEdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgbG9va3VwU2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2
aXJ0dWFsIEpTQzo6SlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCgpOwogICAgICAgICB2aXJ0dWFs
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZv
OyB9CiAKICAgICAgICAgSlNET01XaW5kb3cqIG1fd2luZG93OwogICAgIH07CiAKLSAgICBKU0M6
OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSopOworICAgIEpTQzo6SlNWYWx1
ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqKTsKICAgICBKU0RPTVdpbmRvd1NoZWxs
KiB0b0pTRE9NV2luZG93U2hlbGwoRnJhbWUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlKiBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNEYXRhYmFzZTo6
Y2hhbmdlVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgU3RyaW5nIG9sZFZlcnNpb24gPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsK
ICAgICBTdHJpbmcgbmV3VmVyc2lvbiA9IGFyZ3MuYXQoZXhlYywgMSktPnRvU3RyaW5nKGV4ZWMp
OwpAQCAtODYsNyArODYsNyBAQCBKU1ZhbHVlKiBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKEV4
ZWNTCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRGF0YWJhc2U6
OnRyYW5zYWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiBvYmplY3Q7CiAgICAgCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCB2b2lkIEpTRG9jdW1lbnQ6Om1hcmsoKQogICAgIG1hcmtBY3RpdmVPYmpl
Y3RzRm9yQ29udGV4dCgqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBpbXBsKCkpOwog
fQogCi1KU1ZhbHVlKiBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU1ZhbHVlUHRyIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwoKSktPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTU4LDcgKzU4LDcgQEAgSlNWYWx1ZSogSlNEb2N1
bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKgogICAgIHJldHVybiB0b0pTKGV4ZWMsIGZyYW1lLT5k
b21XaW5kb3coKS0+bG9jYXRpb24oKSk7CiB9CiAKLXZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNEb2N1bWVudDo6c2V0
TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKS0+ZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0aW9u
KEV4ZWNTdGF0ZSogCiAgICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGZhbHNlLCB1
c2VyR2VzdHVyZSk7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVu
dCogZG9jdW1lbnQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0dGlu
Z1NyY1RvSmF2YQogICAgIHJldHVybiB0cnVlOwogfSAKIAotSlNWYWx1ZSogSlNFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXRvbWljU3RyaW5n
IG5hbWUgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKQEAgLTc2LDcgKzc2LDcg
QEAgSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGUoRXhlY1N0YQogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0VsZW1l
bnQ6OnNldEF0dHJpYnV0ZU5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIEF0dHIqIG5ld0F0dHIgPSB0b0F0
dHIoYXJncy5hdChleGVjLCAwKSk7CkBAIC04OSwxMiArODksMTIgQEAgSlNWYWx1ZSogSlNFbGVt
ZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEV4ZQogICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZh
c2NyaXB0VVJMKGV4ZWMsIGltcCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSB0
b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBlYykp
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5z
ZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNFbGVtZW50OjpzZXRB
dHRyaWJ1dGVOUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIEF0b21pY1N0cmlu
ZyBuYW1lc3BhY2VVUkkgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBhcmdzLmF0
KGV4ZWMsIDApKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5TKEV4ZWNTCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUq
IEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIEF0dHIqIG5ld0F0dHIgPSB0b0F0dHIoYXJncy5hdChleGVjLCAwKSk7CkBA
IC0xMjMsMTIgKzEyMywxMiBAQCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVO
UyhFCiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZXhlYywgaW1wLCBu
ZXdBdHRyLT5uYW1lKCksIG5ld0F0dHItPnZhbHVlKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIo
aW1wLT5zZXRBdHRyaWJ1dGVOb2RlTlMobmV3QXR0ciwgZWMpKSk7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+c2V0QXR0cmlidXRlTm9kZU5TKG5l
d0F0dHIsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMs
IEVsZW1lbnQqIGVsZW1lbnQpCitKU1ZhbHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRl
KiBleGVjLCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTRXZlbnQ6OmNsaXBib2FyZERh
dGEoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0V2ZW50OjpjbGlwYm9hcmRE
YXRhKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4gaW1wbCgpLT5pc0NsaXBi
b2FyZEV2ZW50KCkgPyB0b0pTKGV4ZWMsIGltcGwoKS0+Y2xpcGJvYXJkRGF0YSgpKSA6IGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZl
bnQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudCogZXZlbnQpCiB7CiAg
ICAgSlNMb2NrIGxvY2soZmFsc2UpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEpT
QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50
RnVuY3Rpb24gPSBsaXN0ZW5lci0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2
ZW50IikpOworICAgIEpTVmFsdWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGxpc3RlbmVyLT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBoYW5kbGVFdmVudEZ1bmN0aW9uLT5n
ZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewpAQCAtMTAxLDEyICsxMDEsMTIgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbgogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKTsKICAgICAgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9i
amVjdFNjb3BlKGV4ZWMsIGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QgPyBnbG9iYWxE
YXRhLT5keW5hbWljR2xvYmFsT2JqZWN0IDogZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBKU1Zh
bHVlKiByZXR2YWw7CisgICAgICAgIEpTVmFsdWVQdHIgcmV0dmFsOwogICAgICAgICBpZiAoaGFu
ZGxlRXZlbnRGdW5jdGlvbikgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVv
dXRDaGVjaygpOwogICAgICAgICAgICAgcmV0dmFsID0gY2FsbChleGVjLCBoYW5kbGVFdmVudEZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGxpc3RlbmVyLCBhcmdzKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZTsKKyAgICAgICAgICAgIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlOwogICAgICAgICAgICAgaWYgKGlzV2luZG93RXZlbnQpCiAgICAgICAg
ICAgICAgICAgdGhpc1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT50b1RoaXNPYmplY3QoZXhlYyk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC0yNjMsNyArMjYzLDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6Omxpc3RlbmVyTwogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KLWlubGluZSBKU1Zh
bHVlKiBldmVudFBhcmFtZXRlck5hbWUoSlNMYXp5RXZlbnRMaXN0ZW5lcjo6TGF6eUV2ZW50TGlz
dGVuZXJUeXBlIHR5cGUsIEV4ZWNTdGF0ZSogZXhlYykKK2lubGluZSBKU1ZhbHVlUHRyIGV2ZW50
UGFyYW1ldGVyTmFtZShKU0xhenlFdmVudExpc3RlbmVyOjpMYXp5RXZlbnRMaXN0ZW5lclR5cGUg
dHlwZSwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2Ug
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6SFRNTExhenlFdmVudExpc3RlbmVyOgpAQCAtMzE5LDcgKzMx
OSw3IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY28KICAgICAgICAg
Ly8gKGFuZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBKU0hUTUxFbGVtZW50Ojpl
dmVudEhhbmRsZXJTY29wZSkKICAgICAgICAgU2NvcGVDaGFpbiBzY29wZSA9IGxpc3RlbmVyQXNG
dW5jdGlvbi0+c2NvcGUoKTsKIAotICAgICAgICBKU1ZhbHVlKiB0aGlzT2JqID0gdG9KUyhleGVj
LCBtX29yaWdpbmFsTm9kZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdGhpc09iaiA9IHRvSlMoZXhl
YywgbV9vcmlnaW5hbE5vZGUpOwogICAgICAgICBpZiAodGhpc09iai0+aXNPYmplY3QoKSkgewog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNFdmVudFRhcmdldE5vZGUqPihhc09iamVjdCh0aGlz
T2JqKSktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBzY29wZSk7CiAgICAgICAgICAgICBs
aXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKHNjb3BlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCitKU1ZhbHVlUHRyIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAgIGlmICghdGFyZ2V0
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBFdmVudFRhcmdldDsKIAotICAgIEpTQzo6SlNWYWx1ZSogdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEV2ZW50VGFyZ2V0Kik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBFdmVudFRhcmdldCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCwxMyArNzQsMTMgQEAKICAgICBtYWNybyhzcGVjaWZpY0V2ZW50VGFy
Z2V0LCBPblVubG9hZCwgdW5sb2FkRXZlbnQpIFwKIAogI2RlZmluZSBFVkVOVF9MSVNURU5FUl9H
RVRURVIoc3BlY2lmaWNFdmVudFRhcmdldCwgbmFtZSwgZXZlbnQpIFwKLUpTQzo6SlNWYWx1ZSog
anMjI3NwZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCkgXAorSlNDOjpKU1Zh
bHVlUHRyIGpzIyNzcGVjaWZpY0V2ZW50VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmIHNsb3QpIFwKIHsg
XAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKUyMjc3BlY2lmaWNFdmVudFRhcmdldCo+KHNsb3Qu
c2xvdEJhc2UoKSktPmdldExpc3RlbmVyKGV2ZW50KTsgXAogfSBcCiAKICNkZWZpbmUgRVZFTlRf
TElTVEVORVJfU0VUVEVSKHNwZWNpZmljRXZlbnRUYXJnZXQsIG5hbWUsIGV2ZW50KSBcCi12b2lk
IHNldEpTIyNzcGVjaWZpY0V2ZW50VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU0M6OkpTVmFsdWUqIHZhbHVlKSBcCit2b2lkIHNl
dEpTIyNzcGVjaWZpY0V2ZW50VGFyZ2V0IyNuYW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUpIFwKIHsgXAogICAg
IHN0YXRpY19jYXN0PEpTIyNzcGVjaWZpY0V2ZW50VGFyZ2V0Kj4oYmFzZU9iamVjdCktPnNldExp
c3RlbmVyKGV4ZWMsIGV2ZW50LCB2YWx1ZSk7IFwKIH0gXApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZTo6YWRkRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
RXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAg
ICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC01Miw3ICs1Miw3IEBAIEpTVmFsdWUqIEpTRXZlbnRU
YXJnZXROb2RlOjphZGRFdmVudExpc3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAot
SlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0V2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xv
YmFsT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2Nh
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDIxICszOSwyMSBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogdmFsdWUpCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0
ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAg
ICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogCi0gICAgSlNWYWx1ZSogZW5hYmxlSGln
aEFjY3VyYWN5VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJlbmFi
bGVIaWdoQWNjdXJhY3kiKSk7CisgICAgSlNWYWx1ZVB0ciBlbmFibGVIaWdoQWNjdXJhY3lWYWx1
ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImVuYWJsZUhpZ2hBY2N1cmFj
eSIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5ID0gZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUtPnRv
Qm9vbGVhbihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgSlNWYWx1ZSogdGltZW91dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsKKyAgICBKU1ZhbHVlUHRyIHRpbWVvdXRWYWx1
ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInRpbWVvdXQiKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICB1bnNpZ25l
ZCB0aW1lb3V0ID0gdGltZW91dFZhbHVlLT50b1VJbnQzMihleGVjKTsKQEAgLTYzLDcgKzYzLDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdAogICAgIHJldHVybiBQ
b3NpdGlvbk9wdGlvbnM6OmNyZWF0ZShlbmFibGVIaWdoQWNjdXJhY3ksIHRpbWVvdXQpOwogfQog
Ci1KU1ZhbHVlKiBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJy
b3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogICAgIFJlZlB0cjxQb3NpdGlv
bkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrOwpAQCAtMTAyLDcgKzEwMiw3IEBAIEpTVmFsdWUq
IEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGkKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSogSlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTR2VvbG9jYXRpb246Ondh
dGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JD
YWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogICAgIFJlZlB0cjxQb3NpdGlvbkNh
bGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxBbGxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxBbGxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxBbGxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1
ZSogcHJvdG8pIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsgCiAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIEpTQzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOyAKICAgICAgICAg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
QXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
Ym9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0b21HZXRPd25QcgogICAgIHJldHVybiBydW50
aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0
b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcnVu
dGltZU9iamVjdEN1c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBsKCksIHNs
b3QpOwogfQpAQCAtNTMsNyArNTMsNyBAQCBib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmNhbkdl
dEl0ZW1zRm9yCiAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29i
amVjdCI7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEFwcGxldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNIVE1MQXBwbGV0RWxlbWVudDo6bmFtZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBKU1ZhbHVlKiBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSFRN
TENvbGxlY3Rpb24qIGltcGwsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3N0YXRp
YyBKU1ZhbHVlUHRyIGdldE5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBIVE1MQ29sbGVjdGlv
biogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBuYW1lZEl0ZW1zOwogICAgIGltcGwtPm5hbWVkSXRlbXMocHJvcGVydHlO
YW1lLCBuYW1lZEl0ZW1zKTsKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIEpTVmFsdWUqIGdldE5h
bWVkSXRlbXMoRXhlY1N0YXRlKgogCiAvLyBIVE1MQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2Jq
ZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLAogLy8gc28gdGhhdCBkb2N1bWVu
dC5mb3Jtcy5pdGVtKDApIGFuZCBkb2N1bWVudC5mb3JtcygwKSBib3RoIHdvcmsuCi1zdGF0aWMg
SlNWYWx1ZSogY2FsbEhUTUxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1
bmN0aW9uLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRy
IGNhbGxIVE1MQ29sbGVjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkg
PCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEwMiwxMyArMTAyLDEzIEBA
IGJvb2wgSlNIVE1MQ29sbGVjdGlvbjo6Y2FuR2V0SXRlbXNGb3JOYW0KICAgICByZXR1cm4gIWdl
dE5hbWVkSXRlbXMoZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKS0+aXNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNIVE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNIVE1MQ29sbGVjdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpT
SFRNTENvbGxlY3Rpb24qPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4g
Z2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzT2JqLT5pbXBsKCksIHByb3BlcnR5TmFtZSk7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0hUTUxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIG9rOwogICAgIHVpbnQz
Ml90IGluZGV4ID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9r
LCBmYWxzZSk7CkBAIC0xMTcsMTIgKzExNywxMiBAQCBKU1ZhbHVlKiBKU0hUTUxDb2xsZWN0aW9u
OjppdGVtKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoZXhlYywgaW1wbCgpLCBJ
ZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRl
bShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGdl
dE5hbWVkSXRlbXMoZXhlYywgaW1wbCgpLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbikKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQogewogICAgIGlmICghY29sbGVjdGlv
bikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgYm9vbCBKU0hUTUxEb2N1bWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKAogICAg
IHJldHVybiBhdG9taWNQcm9wZXJ0eU5hbWUgJiYgKGRvY3VtZW50LT5oYXNOYW1lZEl0ZW0oYXRv
bWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0oYXRvbWljUHJv
cGVydHlOYW1lKSk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRG9jdW1lbnQqIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU0hUTUxEb2N1bWVudCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhU
TUxEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzT2Jq
LT5pbXBsKCkpOwpAQCAtNzgsMTYgKzc4LDE3IEBAIEpTVmFsdWUqIEpTSFRNTERvY3VtZW50Ojpu
YW1lR2V0dGVyKEV4ZWMKIAogLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKIAotSlNWYWx1ZSogSlNIVE1M
RG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTERv
Y3VtZW50OjphbGwoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIElmICJhbGwiIGhh
cyBiZWVuIG92ZXJ3cml0dGVuLCByZXR1cm4gdGhlIG92ZXJ3cml0dGVuIHZhbHVlCi0gICAgaWYg
KEpTVmFsdWUqIHYgPSBnZXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiYWxsIikpKQorICAgIEpT
VmFsdWVQdHIgdiA9IGdldERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJhbGwiKSk7CisgICAgaWYg
KHYpCiAgICAgICAgIHJldHVybiB2OwogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nh
c3Q8SFRNTERvY3VtZW50Kj4oaW1wbCgpKS0+YWxsKCkuZ2V0KCkpOwogfQogCi12b2lkIEpTSFRN
TERvY3VtZW50OjpzZXRBbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
SlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUp
CiB7CiAgICAgLy8gQWRkICJhbGwiIHRvIHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgcHV0RGlyZWN0
KElkZW50aWZpZXIoZXhlYywgImFsbCIpLCB2YWx1ZSk7CkBAIC05NSw3ICs5Niw3IEBAIHZvaWQg
SlNIVE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUqIGUKIAogLy8gQ3VzdG9tIGZ1bmN0aW9u
cwogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBGb3IgY29tcGF0aWJpbGl0
eSB3aXRoIG90aGVyIGJyb3dzZXJzLCBwYXNzIG9wZW4gY2FsbHMgd2l0aCBtb3JlIHRoYW4gMiBw
YXJhbWV0ZXJzIHRvIHRoZSB3aW5kb3cuCiAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMikgewpAQCAt
MTAzLDcgKzEwNCw3IEBAIEpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSoK
ICAgICAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3cmFw
cGVyID0gdG9KU0RPTVdpbmRvd1NoZWxsKGZyYW1lKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVy
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAib3BlbiIpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRy
IGZ1bmN0aW9uID0gd3JhcHBlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIm9wZW4iKSk7
CiAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgICAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xMzgsMTQgKzEzOSwx
NCBAQCBzdGF0aWMgU3RyaW5nIHdyaXRlSGVscGVyKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Ondy
aXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNI
VE1MRG9jdW1lbnQ6OndyaXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKICAgICBzdGF0aWNfY2Fz
dDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT53cml0ZSh3cml0ZUhlbHBlcihleGVjLCBhcmdzKSwg
YWN0aXZlRG9jdW1lbnQpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVl
KiBKU0hUTUxEb2N1bWVudDo6d3JpdGVsbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBEb2N1bWVudCogYWN0aXZlRG9jdW1lbnQg
PSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZG9j
dW1lbnQoKTsKICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT53cml0ZSh3
cml0ZUhlbHBlcihleGVjLCBhcmdzKSArICJcbiIsIGFjdGl2ZURvY3VtZW50KTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgSlNIVE1MRW1i
ZWRFbGVtZW50OjpjdXN0b21HZXRPd25Qcm8KICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3Rv
bUdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQog
Ci1ib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQorYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9t
UHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcGwoKSwgc2xvdCk7CiB9CkBAIC01Myw3
ICs1Myw3IEBAIGJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpjYW5HZXRJdGVtc0Zvck4KICAgICBy
ZXR1cm4gcHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IjsKIH0KIAotSlNW
YWx1ZSogSlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIEpTSFRNTEVtYmVkRWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBib29sIEpTSFRNTEZvcm1FbGVtZW50OjpjYW5HZXRJdGVtc0Zvck5hCiAgICAgcmV0dXJuIG5h
bWVkSXRlbXMuc2l6ZSgpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0hUTUxGb3JtRWxlbWVudDo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTsKICAgICAKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBhbGxvd1NldHRpbmdKYXZhc2NyaXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0hU
TUxGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQor
dm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudCo+KGltcGwoKSk7CiAgICAgU3RyaW5nIHNyY1ZhbHVlID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpT
SFRNTEZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0CiAgICAgcmV0dXJuOwogfQogCi12b2lk
IEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCogaW1wID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGltcGwoKSk7CiAgICAgU3RyaW5nIGxvY2F0
aW9uVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJh
bWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBi
b29sIEpTSFRNTEZyYW1lU2V0RWxlbWVudDo6Y2FuR2V0SXRlbXNGCiAgICAgcmV0dXJuIGZyYW1l
ICYmIGZyYW1lLT5oYXNUYWdOYW1lKGZyYW1lVGFnKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRnJh
bWVTZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0hUTUxG
cmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNIVE1MRWxl
bWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihhc09iamVjdChzbG90
LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0hUTUxJRnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0
U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MSUZyYW1l
RWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQqPihpbXBsKCkpOwog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5w
dXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBib29s
IEpTSFRNTElucHV0RWxlbWVudDo6Y3VzdG9tR2V0T3duUHJvCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1KU1ZhbHVlKiBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25T
dGFydChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBpZiAoIWlu
cHV0LT5jYW5IYXZlU2VsZWN0aW9uKCkpCkBAIC02MCw3ICs2MCw3IEBAIEpTVmFsdWUqIEpTSFRN
TElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5w
dXQtPnNlbGVjdGlvblN0YXJ0KCkpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxJbnB1dEVsZW1lbnQ6
OnNlbGVjdGlvbkVuZChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTElu
cHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihp
bXBsKCkpOwogICAgIGlmICghaW5wdXQtPmNhbkhhdmVTZWxlY3Rpb24oKSkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgSlNIVE1MT2Jq
ZWN0RWxlbWVudDo6Y3VzdG9tR2V0T3duUHIKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3Rv
bUdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHRoaXMpOwogfQog
Ci1ib29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK2Jvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0
b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgaW1wbCgpLCBzbG90KTsKIH0KQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpjYW5HZXRJdGVtc0ZvcgogICAg
IHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwogfQogCi1K
U1ZhbHVlKiBKU0hUTUxPYmplY3RFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlUHRyIEpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEdldHRlcihleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29s
bGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEzICszNSwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpsZW5ndGgo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0hUTUxPcHRpb25zQ29sbGVjdGlv
bjo6bGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGltcC0+bGVuZ3RoKCkpOwogfQogCi12b2lkIEpT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9u
KiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihpbXBsKCkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNjAsMTQgKzYwLDE0IEBAIHZvaWQgSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aCgKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogfQogCi12b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRleFNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAg
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihpbXBsKCkpOwogICAgIEhUTUxT
ZWxlY3RFbGVtZW50KiBiYXNlID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihpbXAt
PmJhc2UoKSk7CiAgICAgc2VsZWN0SW5kZXhTZXR0ZXIoYmFzZSwgZXhlYywgaW5kZXgsIHZhbHVl
KTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjphZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xs
ZWN0aW9uKj4oaW1wbCgpKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gdG9IVE1M
T3B0aW9uRWxlbWVudChhcmdzLmF0KGV4ZWMsIDApKTsKQEAgLTg4LDcgKzg4LDcgQEAgSlNWYWx1
ZSogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChFeAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uc0NvbGxlY3Rpb24qPihpbXBsKCkpOwogICAgIEpTSFRNTFNlbGVjdEVsZW1lbnQqIGJhc2Ug
PSBzdGF0aWNfY2FzdDxKU0hUTUxTZWxlY3RFbGVtZW50Kj4oYXNPYmplY3QodG9KUyhleGVjLCBp
bXAtPmJhc2UoKSkpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxl
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1KU1ZhbHVlKiBKU0hUTUxTZWxlY3RFbGVtZW50
OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU0hUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3QgPSAqc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihpbXBsKCkpOwogCkBAIC00Niw3ICs0Niw3IEBAIEpTVmFs
dWUqIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShFeGUKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotdm9pZCBzZWxlY3RJbmRleFNldHRlcihIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSog
dmFsdWUpCit2b2lkIHNlbGVjdEluZGV4U2V0dGVyKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlUHRyIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgc2Vs
ZWN0LT5yZW1vdmUoaW5kZXgpOwpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIHNlbGVjdEluZGV4U2V0
dGVyKEhUTUxTZWxlY3RFbGVtZW50CiAgICAgfQogfQogCi12b2lkIEpTSFRNTFNlbGVjdEVsZW1l
bnQ6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlND
OjpKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhTZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWVQdHIgdmFs
dWUpCiB7CiAgICAgc2VsZWN0SW5kZXhTZXR0ZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQqPihpbXBsKCkpLCBleGVjLCBpbmRleCwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgJKHJldmlzaW9uIDM5NjE2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIHNlbGVjdEluZGV4U2V0dGVyKEhUTUxTZWxlY3RFbGVtZW50KiwgSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKik7Cit2b2lkIHNlbGVjdEluZGV4U2V0dGVy
KEhUTUxTZWxlY3RFbGVtZW50KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlND
OjpKU1ZhbHVlUHRyKTsKIAogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlD
dXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0
b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogbm9uQ2FjaGlu
Z1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbm9uQ2Fj
aGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4g
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlz
dG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0
aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG5vbkNhY2hp
bmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMCwgcHJvcGVydHlOYW1lLCBqc0hp
c3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOwogfQogCi1KU1ZhbHVlKiBub25DYWNoaW5n
U3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbm9uQ2FjaGlu
Z1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMSwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQ
cm90b3R5cGVGdW5jdGlvbkdvKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBKU0hpc3Rvcnk6
OmN1c3RvbUdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpT
SGlzdG9yeTo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKQorYm9vbCBKU0hpc3Rvcnk6OmN1c3RvbVB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNs
b3QmKQogewogICAgIC8vIE9ubHkgYWxsb3cgcHV0dGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUg
b3JpZ2luLgogICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIGltcGwoKS0+ZnJh
bWUoKSkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAko
cmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBJbWFnZURhdGEqIGltYWdlRGF0YSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEltYWdlRGF0YSogaW1hZ2VEYXRhKQogewogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2Jq
ZWN0V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBzdGF0aWMgR2xvYmFsT2JqZWN0V3JhcHBlck1hcCYgd3JhcHBlcnMoCiAKIGNv
bnN0IENsYXNzSW5mbyBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OnNfaW5mbyA9IHsgIkpTSW5z
cGVjdGVkT2JqZWN0V3JhcHBlciIsICZKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6c19pbmZv
LCAwLCAwIH07CiAKLUpTVmFsdWUqIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChFeGVj
U3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKQorSlNWYWx1ZVB0
ciBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoRXhlY1N0YXRlKiB1bndyYXBwZWRFeGVj
LCBKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKQogewogICAgIGlmICghdW53cmFwcGVkVmFsdWUt
PmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB1bndyYXBwZWRWYWx1ZTsKQEAgLTYxLDcgKzYx
LDcgQEAgSlNWYWx1ZSogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKAogICAgICAgICBp
ZiAoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gd3JhcHBlck1hcC0+Z2V0KHVu
d3JhcHBlZE9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAotICAgIEpTVmFs
dWUqIHByb3RvdHlwZSA9IHVud3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgSlNWYWx1
ZVB0ciBwcm90b3R5cGUgPSB1bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOwogICAgIEFTU0VS
VChwcm90b3R5cGUtPmlzTnVsbCgpIHx8IHByb3RvdHlwZS0+aXNPYmplY3QoKSk7CiAKICAgICBp
ZiAocHJvdG90eXBlLT5pc051bGwoKSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNJbnNwZWN0ZWRPYmpl
Y3RXcmFwcGVyOjp+SlNJbnNwZWN0ZWRPYgogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNJbnNwZWN0
ZWRPYmplY3RXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVl
KiB2YWx1ZSkgY29uc3QKK0pTVmFsdWVQdHIgSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjpwcmVw
YXJlSW5jb21pbmdWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHZhbHVlKSBjb25zdAogewog
ICAgIC8vIFRoZSBJbnNwZWN0b3IgaXMgb25seSBhbGxvd2VkIHRvIHBhc3MgcHJpbWl0aXZlIHZh
bHVlcyBhbmQgd3JhcHBlZCBvYmplY3RzIHRvIG9iamVjdHMgZnJvbSB0aGUgaW5zcGVjdGVkIHBh
Z2UuCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdy
YXBwZXIuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVj
dGVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlciA6IHB1
YmxpYyBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlKiB3cmFwKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBK
U0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZVB0ciB3cmFwKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIg
dW53cmFwcGVkVmFsdWUpOwogICAgICAgICB2aXJ0dWFsIH5KU0luc3BlY3RlZE9iamVjdFdyYXBw
ZXIoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwpAQCAt
NDgsOCArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NDYWxsQXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGFsbG93c0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVl
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZh
bHVlKSBjb25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsg
fQorICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBwcmVwYXJlSW5jb21pbmdWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZh
bHVlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgd3JhcE91dGdvaW5n
VmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1bndy
YXBwZWRWYWx1ZSkgY29uc3QgeyByZXR1cm4gd3JhcCh1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRW
YWx1ZSk7IH0KIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBTdHJ1Y3R1cmUq
IGxlYWtJbnNwZWN0b3JDYWxsYmFja1cKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1KU1Zh
bHVlKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3JhcHBl
ZEV4ZWMsIEpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKQorSlNWYWx1ZVB0ciBKU0luc3BlY3RvckNh
bGxiYWNrV3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWVQdHIg
dW53cmFwcGVkVmFsdWUpCiB7CiAgICAgaWYgKCF1bndyYXBwZWRWYWx1ZS0+aXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIHVud3JhcHBlZFZhbHVlOwpAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVl
KiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhCiAgICAgaWYgKEpTSW5zcGVjdG9yQ2Fs
bGJhY2tXcmFwcGVyKiB3cmFwcGVyID0gd3JhcHBlcnMoKS5nZXQodW53cmFwcGVkT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSB1bndy
YXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gdW53
cmFwcGVkT2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICBBU1NFUlQocHJvdG90eXBlLT5pc051bGwo
KSB8fCBwcm90b3R5cGUtPmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKHByb3RvdHlwZS0+aXNOdWxs
KCkpIHsKQEAgLTg4LDcgKzg4LDcgQEAgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6On5KU0lu
c3BlY3RvcgogICAgIHdyYXBwZXJzKCkucmVtb3ZlKHVud3JhcHBlZE9iamVjdCgpKTsKIH0KIAot
SlNWYWx1ZSogSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OnByZXBhcmVJbmNvbWluZ1ZhbHVl
KEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0
CitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdW
YWx1ZShFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUp
IGNvbnN0CiB7CiAgICAgaWYgKEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0g
YXNXcmFwcGVyKHVud3JhcHBlZFZhbHVlKSkgewogICAgICAgICAvLyBUaGUgb25seSB0aW1lIGEg
d3JhcHBlciBzaG91bGQgYmUgcGFzc2VkIGludG8gYSBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
ciBpcyB3aGVuIGEgY2xpZW50LXNpZGUgc3RvcmFnZSBjYWxsYmFjawpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIgOiBwdWJsaWMgSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSogd3JhcChKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlKiB1
bndyYXBwZWRWYWx1ZSk7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgd3JhcChKU0M6
OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVl
KTsKIAogICAgICAgICB2aXJ0dWFsIH5KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcigpOwogCkBA
IC00NCw4ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dzQ2FsbEFzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAg
ICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHdyYXBPdXRnb2luZ1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZhbHVlKSBjb25z
dCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsgfQorICAgICAg
ICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBwcmVwYXJlSW5jb21pbmdWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgd3JhcE91dGdvaW5nVmFsdWUoSlND
OjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1
ZSkgY29uc3QgeyByZXR1cm4gd3JhcCh1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRWYWx1ZSk7IH0K
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IG5vVmFsdWUo
KTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9u
ID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gaW1wbCgpLT5ldmFsdWF0ZShh
cmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSwgZXhjZXB0aW9uKTsKIAogICAgIGlmIChl
eGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwpAQCAtNDQs
MTIgKzQ0LDEyIEBAIEpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnRo
aXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWVQdHIgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjp0aGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGltcGwoKS0+
dGhpc09iamVjdCgpID8gaW1wbCgpLT50aGlzT2JqZWN0KCkgOiBqc051bGwoKTsKIH0KIAotSlNW
YWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K0pTVmFsdWVQdHIgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKGltcGwoKS0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRGVi
dWdnZXJDYWxsRnJhbWU6OkZ1bmN0aW9uVHlwZToKQEAgLTYyLDcgKzYyLDcgQEAgSlNWYWx1ZSog
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEV4ZQogICAgIHJldHVybiBqc051bGwoKTsKIH0K
IAotSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWlu
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKS0+c2NvcGVDaGFpbigp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSog
bm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFs
dWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikK
IHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9w
ZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOwogfQogCi1KU1Zh
bHVlKiBub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitK
U1ZhbHVlUHRyIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBw
cm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CiB9CiAKLUpT
VmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikK
K0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDEs
IHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKIH0KQEAg
LTkzLDcgKzkzLDcgQEAgYm9vbCBKU0xvY2F0aW9uOjpjdXN0b21HZXRPd25Qcm9wZXJ0eVNsbwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTTG9jYXRpb246OmN1c3RvbVB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tUHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgp
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIHZv
aWQgbmF2aWdhdGVJZkFsbG93ZWQoRXhlY1N0YXRlKgogICAgIH0KIH0KIAotdm9pZCBKU0xvY2F0
aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9j
YXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAt
MTU3LDcgKzE1Nyw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SHJlZihFeGVjU3RhdGUqIGV4ZWMK
ICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZv
aWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
UHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBB
U1NFUlQoZnJhbWUpOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJv
dG9jb2woRXhlY1N0YXRlKiAKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJs
LCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1l
KCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIEpTTG9jYXRp
b246OnNldEhvc3QoRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywg
ZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRpb246OnNldEhvc3RuYW1lKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9jYXRpb246OnNldEhvc3Ru
YW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTE5MCw3ICsxOTAs
NyBAQCB2b2lkIEpTTG9jYXRpb246OnNldEhvc3RuYW1lKEV4ZWNTdGF0ZSogCiAgICAgbmF2aWdh
dGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRp
b246OnNldFBvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2Nh
dGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CkBAIC0y
MDYsNyArMjA2LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsKIH0KIAotdm9p
ZCBKU0xvY2F0aW9uOjpzZXRQYXRobmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVl
KQordm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRobmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFT
U0VSVChmcmFtZSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQYXRo
bmFtZShFeGVjU3RhdGUqIAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmws
IGZhbHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZy
YW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIEpTTG9j
YXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4CiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhl
YywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
aW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CkBAIC0yNDUsNyArMjQ1LDcgQEAg
dm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYwogICAgIG5hdmlnYXRlSWZB
bGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsKIH0KIAotSlNWYWx1ZSogSlNMb2NhdGlv
bjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTTG9jYXRpb246OnJlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQpAQCAtMjYxLDcgKzI2MSw3IEBAIEpTVmFsdWUqIEpTTG9jYXRpb246OnJlcGxhY2UoRXhl
Y1N0YXRlKiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNMb2Nh
dGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRy
IEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAt
Mjc4LDcgKzI3OCw3IEBAIEpTVmFsdWUqIEpTTG9jYXRpb246OnJlbG9hZChFeGVjU3RhdGUqIGUK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNMb2NhdGlvbjo6YXNz
aWduKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNM
b2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTI5NSw3ICsyOTUsNyBAQCBKU1ZhbHVlKiBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBl
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTTG9jYXRpb246OnRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTTG9j
YXRpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVs
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSogbV9jb250
ZXh0V3JhcHBlcjsKKyAgICAgICAgSlNDOjpKU1ZhbHVlUHRyIG1fY29udGV4dFdyYXBwZXI7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDcgQEAgdm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrKCkKICAgICB9CiB9CiAKLUpTVmFs
dWUqIEpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJz
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgY29uc3QgVVN0cmluZyYgbWVz
c2FnZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNzMsNyArNzMsNyBA
QCBKU1ZhbHVlKiBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvCiAgICAgcmV0dXJuIHRv
SlMoZXhlYywgaW1wbCgpLT5zdGFydENvbnZlcnNhdGlvbihnbG9iYWxPYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgbWVzc2FnZSkuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU01lc3Nh
Z2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtODUsNyArODUsNyBAQCBK
U1ZhbHVlKiBKU01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTTWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU01l
c3NhZ2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVB
cnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVU
eXBlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQCBib29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lCiAgICAgcmV0dXJu
IG1pbWVUeXBlQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1K
U1ZhbHVlKiBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWVQdHIgSlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNNaW1lVHlwZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFy
cmF5Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
dGhpc09iai0+aW1wbCgpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBib29sIEpTTmFtZWROb2RlTWFwOjpjYW5HZXRJdGVt
c0Zvck5hbWUoCiAgICAgcmV0dXJuIGltcGwtPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwog
fQogCi1KU1ZhbHVlKiBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciBKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTTmFtZWROb2RlTWFwKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOYW1lZE5v
ZGVNYXAqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhleGVj
LCB0aGlzT2JqLT5pbXBsKCktPmdldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6SlNOYW1lZE5vZGVzQ29sbAogewogfQogCi1KU1ZhbHVlKiBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU05hbWVkTm9kZXNDb2xsZWN0
aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZXNDb2xsZWN0aW9uKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRoaXNPYmotPm1fbm9k
ZXMtPnNpemUoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU05hbWVkTm9kZXNDb2xsZWN0aW9uKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgKCp0aGlzT2JqLT5tX25vZGVzKVtzbG90LmluZGV4KCld
LmdldCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVj
dGlvbi5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5v
ZGVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJv
dG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSogaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlUHRyIGxlbmd0aEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWVQdHIgaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIE93blB0cjxW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4gPiBtX25vZGVzOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqCiAg
ICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBJZGVudGlmaWVyLCBpc1NhZmFyaUZ1bmN0aW9uLCAoZXhlYywgImlz
U2FmYXJpIikpOwotICAgIEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5n
ZXREaXJlY3QoaXNTYWZhcmlGdW5jdGlvbk5hbWUpOworICAgIEpTVmFsdWVQdHIgaXNTYWZhcmlG
dW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9uTmFtZSk7CiAg
ICAgaWYgKGlzU2FmYXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVR
dWlyayhFeGVjU3RhdGUqCiAKICNlbmRpZgogCi1KU1ZhbHVlKiBKU05hdmlnYXRvcjo6YXBwVmVy
c2lvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTTmF2aWdhdG9yOjphcHBW
ZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBOYXZpZ2F0b3IqIGltcCA9IHN0
YXRpY19jYXN0PE5hdmlnYXRvcio+KGltcGwoKSk7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5m
cmFtZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGlu
dCBFeHBlY3Rpb25Db2RlOwogCi1KU1ZhbHVlKiBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZTo6aW5zZXJ0
QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIG9rID0gaW1wbCgpLT5pbnNlcnRCZWZvcmUodG9O
b2RlKGFyZ3MuYXQoZXhlYywgMCkpLCB0b05vZGUoYXJncy5hdChleGVjLCAxKSksIGVjLCB0cnVl
KTsKQEAgLTc2LDcgKzc2LDcgQEAgSlNWYWx1ZSogSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhlY1N0
YXRlKgogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlOjpyZXBsYWNl
Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U05vZGU6OnJlcGxhY2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBvayA9IGltcGwoKS0+cmVw
bGFjZUNoaWxkKHRvTm9kZShhcmdzLmF0KGV4ZWMsIDApKSwgdG9Ob2RlKGFyZ3MuYXQoZXhlYywg
MSkpLCBlYywgdHJ1ZSk7CkBAIC04Niw3ICs4Niw3IEBAIEpTVmFsdWUqIEpTTm9kZTo6cmVwbGFj
ZUNoaWxkKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLUpTVmFsdWUqIEpT
Tm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIG9rID0g
aW1wbCgpLT5yZW1vdmVDaGlsZCh0b05vZGUoYXJncy5hdChleGVjLCAwKSksIGVjKTsKQEAgLTk2
LDcgKzk2LDcgQEAgSlNWYWx1ZSogSlNOb2RlOjpyZW1vdmVDaGlsZChFeGVjU3RhdGUqIAogICAg
IHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlOjphcHBlbmRDaGlsZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZTo6YXBw
ZW5kQ2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgb2sgPSBpbXBsKCktPmFwcGVuZENoaWxkKHRv
Tm9kZShhcmdzLmF0KGV4ZWMsIDApKSwgZWMsIHRydWUpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZv
aWQgSlNOb2RlOjptYXJrKCkKICAgICBBU1NFUlQobWFya2VkKCkpOwogfQogCi1zdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlKiBjcmVhdGVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSog
bm9kZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgY3JlYXRlV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VS
VCghZ2V0Q2FjaGVkRE9NTm9kZVdyYXBwZXIobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZSkpOwpAQCAt
MjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNyZWF0ZVdyYXAK
ICAgICByZXR1cm4gd3JhcHBlcjsgICAgCiB9CiAgICAgCi1KU1ZhbHVlKiB0b0pTTmV3bHlDcmVh
dGVkKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkKK0pTVmFsdWVQdHIgdG9KU05ld2x5Q3Jl
YXRlZChFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0yMjYsNyArMjI2LDcgQEAgSlNWYWx1ZSogdG9KU05l
d2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKGV4ZWMs
IG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5v
ZGUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQogewogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogQVNTRVJUX0NM
QVNTX0ZJVFNfSU5fQ0VMTChKU05vZGVGaWx0ZXJDb25kaXRpb24pCiAKLUpTTm9kZUZpbHRlckNv
bmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTVmFsdWUqIGZpbHRlcikKK0pTTm9kZUZp
bHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTVmFsdWVQdHIgZmlsdGVyKQog
ICAgIDogbV9maWx0ZXIoZmlsdGVyKQogewogfQpAQCAtNjUsNyArNjUsNyBAQCBzaG9ydCBKU05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIAotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgbV9maWx0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
bV9maWx0ZXIsIGFyZ3MpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2FsbChleGVjLCBtX2Zp
bHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2ZpbHRlciwgYXJncyk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVD
VDsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5o
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwxOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBKU05vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZp
bHRlckNvbmRpdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U05vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6OkpTVmFsdWUqIGZpbHRlcikKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNOb2RlRmlsdGVyQ29uZGl0aW9uPiBjcmVhdGUoSlNDOjpK
U1ZhbHVlUHRyIGZpbHRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBKU05vZGVGaWx0ZXJDb25kaXRpb24oZmlsdGVyKSk7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWUqIGZpbHRl
cik7CisgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihKU0M6OkpTVmFsdWVQdHIgZmlsdGVy
KTsKIAogICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoU2NyaXB0U3RhdGUqLCBOb2Rl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKLSAgICAgICAgSlNDOjpK
U1ZhbHVlKiBtX2ZpbHRlcjsKKyAgICAgICAgSlNDOjpKU1ZhbHVlUHRyIG1fZmlsdGVyOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiAr
NDEsMTIgQEAgdm9pZCBKU05vZGVGaWx0ZXI6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygp
OwogfQogCi1KU1ZhbHVlKiBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU05vZGVGaWx0ZXI6OmFjY2VwdE5v
ZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBq
c051bWJlcihleGVjLCBpbXBsKCktPmFjY2VwdE5vZGUoZXhlYywgdG9Ob2RlKGFyZ3MuYXQoZXhl
YywgMCkpKSk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTVmFs
dWUqIHZhbHVlKQorUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNWYWx1ZVB0
ciB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCZKU05vZGVGaWx0ZXI6OnNfaW5m
bykpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU05vZGVGaWx0ZXIqPihhc09iamVjdCh2
YWx1ZSkpLT5pbXBsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9y
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJh
dG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2
b2lkIEpTTm9kZUl0ZXJhdG9yOjptYXJrKCkKICAgICBET01PYmplY3Q6Om1hcmsoKTsKIH0KIAot
SlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjLCBlYyk7CkBAIC01Miw3
ICs1Miw3IEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3QKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBub2RlLmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZVB0ciBKU05vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPE5vZGU+
IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGVjLCBlYyk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAv
LyBOZWVkIHRvIHN1cHBvcnQgY2FsbCBzbyB0aGF0IGxpc3QoMCkgd29ya3MuCi1zdGF0aWMgSlNW
YWx1ZSogY2FsbE5vZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxOb2Rl
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0g
YXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rKTsKQEAgLTU2LDcg
KzU2LDcgQEAgYm9vbCBKU05vZGVMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlYwogICAgIHJl
dHVybiBpbXBsLT5pdGVtV2l0aE5hbWUocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNO
b2RlTGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU05vZGVM
aXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOb2RlTGlzdCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTTm9kZUxpc3QqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW1XaXRoTmFtZShw
cm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGJvb2wg
SlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEUKICAgICByZXR1cm4gcGx1Z2luQXJy
YXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU1Bs
dWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTUGx1
Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1BsdWdpbkFy
cmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJheSo+KGFzT2JqZWN0KHNsb3Qu
c2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFt
ZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdp
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdp
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgYm9vbCBKU1BsdWdp
bjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdAogICAgIHJldHVybiBwbHVnaW4tPmNhbkdldEl0
ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU1BsdWdpbjo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU1BsdWdpbjo6bmFtZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEpTUGx1Z2luKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
SlNQbHVnaW4qPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhl
eGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5j
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBSdW50aW1l
T2JqZWN0SW1wKiBnZXRSdW50aW1lT2JqZWMKICAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6SW5z
dGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywgaW5zdGFuY2UpOwogfQogCi1KU1ZhbHVl
KiBydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcnVudGltZU9iamVjdEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNIVE1MRWxlbWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRN
TEVsZW1lbnQqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKQEAg
LTY5LDcgKzY5LDcgQEAgSlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihFeGVjU3RhdGUqIAog
ICAgIHJldHVybiBydW50aW1lT2JqZWN0ID8gcnVudGltZU9iamVjdCA6IGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1M
RWxlbWVudCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAt
OTAsNyArOTAsNyBAQCBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgcnVudGltZU9iamVjdEN1c3RvbVB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUs
IEhUTUxFbGVtZW50KiBlbGVtZW50LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIHJ1bnRp
bWVPYmplY3RDdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCogcnVudGltZU9iamVjdCA9
IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgZWxlbWVudCk7CiAgICAgaWYgKCFydW50aW1lT2JqZWN0
KQpAQCAtMTAxLDExICsxMDEsMTEgQEAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEV4ZWNT
dGF0ZSogZQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbFBsdWdp
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUGx1Z2luKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IHBsdWdpbkluc3RhbmNlKHN0YXRpY19jYXN0PEpT
SFRNTEVsZW1lbnQqPihmdW5jdGlvbiktPmltcGwoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZXhl
YywgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVs
dE1ldGhvZChleGVjLCBhcmdzKTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRG
dW5jdGlvbnMuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luRWxlbWVudEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gUnVudGltZSBvYmplY3Qgc3VwcG9ydCBjb2Rl
IGZvciBKU0hUTUxBcHBsZXRFbGVtZW50LCBKU0hUTUxFbWJlZEVsZW1lbnQgYW5kIEpTSFRNTE9i
amVjdEVsZW1lbnQuCiAKLSAgICBKU0M6OkpTVmFsdWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIEpTQzo6SlNWYWx1ZSogcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcnVudGltZU9iamVjdEdldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90
Jik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlT
bG90Jik7CiAgICAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3Qm
LCBKU0hUTUxFbGVtZW50Kik7Ci0gICAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVlKiwgSFRNTEVs
ZW1lbnQqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgcnVudGltZU9iamVjdEN1
c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNW
YWx1ZVB0ciwgSFRNTEVsZW1lbnQqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTQzo6
Q2FsbFR5cGUgcnVudGltZU9iamVjdEdldENhbGxEYXRhKEhUTUxFbGVtZW50KiwgSlNDOjpDYWxs
RGF0YSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcAkocmV2aXNpb24gMzk2
MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKEpTUXVhcmFudGluZWRPCiAKIGNvbnN0IENsYXNzSW5mbyBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcjo6c19pbmZvID0geyAiSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIiLCAwLCAwLCAw
IH07CiAKLUpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlcjo6YXNXcmFwcGVyKEpTVmFsdWUqIHZhbHVlKQorSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXIqIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dyYXBwZXIoSlNWYWx1ZVB0ciB2YWx1
ZSkKIHsKICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTQ5LDkgKzQ5LDkgQEAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIEpTUXVhcmFudGluZQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcio+KG9iamVj
dCk7CiB9CiAKLUpTVmFsdWUqIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjYWNoZWRWYWx1
ZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZVB0ciBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FjaGVkVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKLSAgICBKU1ZhbHVlKiB2ID0gc2xvdC5zbG90QmFzZSgpOworICAgIEpTVmFs
dWVQdHIgdiA9IHNsb3Quc2xvdEJhc2UoKTsKICAgICBBU1NFUlQodik7CiAgICAgcmV0dXJuIHY7
CiB9CkBAIC0xMTEsNyArMTExLDcgQEAgYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
Z2V0T3duUAogICAgIFByb3BlcnR5U2xvdCB1bndyYXBwZWRTbG90KG1fdW53cmFwcGVkT2JqZWN0
KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVkT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNs
b3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIsIHVud3JhcHBlZFNsb3QpOwogICAg
IGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUgPSB1bndyYXBw
ZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCBpZGVudGlmaWVyKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0VmFsdWUodW53
cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIpOwogICAgICAgICBzbG90LnNldEN1c3RvbSh3
cmFwT3V0Z29pbmdWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgdW53cmFwcGVkVmFsdWUpLCBj
YWNoZWRWYWx1ZUdldHRlcik7CiAgICAgfQogCkBAIC0xMzAsNyArMTMwLDcgQEAgYm9vbCBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUAogICAgIFByb3BlcnR5U2xvdCB1bndyYXBw
ZWRTbG90KG1fdW53cmFwcGVkT2JqZWN0KTsKICAgICBib29sIHJlc3VsdCA9IG1fdW53cmFwcGVk
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZp
ZXIsIHVud3JhcHBlZFNsb3QpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgSlNWYWx1ZSog
dW53cmFwcGVkVmFsdWUgPSB1bndyYXBwZWRTbG90LmdldFZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0
ZSgpLCBpZGVudGlmaWVyKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1ZSA9IHVu
d3JhcHBlZFNsb3QuZ2V0VmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIpOwog
ICAgICAgICBzbG90LnNldEN1c3RvbSh3cmFwT3V0Z29pbmdWYWx1ZSh1bndyYXBwZWRFeGVjU3Rh
dGUoKSwgdW53cmFwcGVkVmFsdWUpLCBjYWNoZWRWYWx1ZUdldHRlcik7CiAgICAgfQogCkBAIC0x
MzksNyArMTM5LDcgQEAgYm9vbCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Z2V0T3duUAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFs
dWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYg
KCFhbGxvd3NTZXRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDksNyArMTQ5LDcg
QEAgdm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6cHV0KEV4ZQogICAgIHRyYW5zZmVy
RXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiB9CiAKLXZvaWQgSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlkZW50aWZpZXIsIEpTVmFs
dWUqIHZhbHVlKQordm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBp
ZiAoIWFsbG93c1NldFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw5ICsxOTcs
OSBAQCBKU09iamVjdCogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNvCiAgICAgQ29uc3Ry
dWN0VHlwZSB1bndyYXBwZWRDb25zdHJ1Y3RUeXBlID0gd3JhcHBlci0+bV91bndyYXBwZWRPYmpl
Y3QtPmdldENvbnN0cnVjdERhdGEodW53cmFwcGVkQ29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJU
KHVud3JhcHBlZENvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZU5vbmUpOwogCi0gICAgSlNW
YWx1ZSogdW53cmFwcGVkUmVzdWx0ID0gSlNDOjpjb25zdHJ1Y3Qod3JhcHBlci0+dW53cmFwcGVk
RXhlY1N0YXRlKCksIHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDb25zdHJ1
Y3RUeXBlLCB1bndyYXBwZWRDb25zdHJ1Y3REYXRhLCBwcmVwYXJlZEFyZ3MpOworICAgIEpTVmFs
dWVQdHIgdW53cmFwcGVkUmVzdWx0ID0gSlNDOjpjb25zdHJ1Y3Qod3JhcHBlci0+dW53cmFwcGVk
RXhlY1N0YXRlKCksIHdyYXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDb25zdHJ1
Y3RUeXBlLCB1bndyYXBwZWRDb25zdHJ1Y3REYXRhLCBwcmVwYXJlZEFyZ3MpOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0VmFsdWUgPSB3cmFwcGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51
bndyYXBwZWRFeGVjU3RhdGUoKSwgdW53cmFwcGVkUmVzdWx0KTsKKyAgICBKU1ZhbHVlUHRyIHJl
c3VsdFZhbHVlID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVk
RXhlY1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CiAgICAgQVNTRVJUKHJlc3VsdFZhbHVlLT5p
c09iamVjdCgpKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gYXNPYmplY3QocmVzdWx0VmFsdWUp
OwogCkBAIC0yMTksNyArMjE5LDcgQEAgQ29uc3RydWN0VHlwZSBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcgogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIAotYm9vbCBKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlcjo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSwgSlNWYWx1ZSogcHJvdG8pCitib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIEpTVmFsdWVQ
dHIgcHJvdG8pCiB7CiAgICAgaWYgKCFhbGxvd3NIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yMzEsMTEgKzIzMSwxMSBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpoYXNJbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXI6OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVu
Y3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogZnVuY3Rpb24sIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gc3RhdGljX2Nh
c3Q8SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqPihmdW5jdGlvbik7CiAKLSAgICBKU1ZhbHVl
KiBwcmVwYXJlZFRoaXNWYWx1ZSA9IHdyYXBwZXItPnByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4ZWMs
IHRoaXNWYWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBwcmVwYXJlZFRoaXNWYWx1ZSA9IHdyYXBwZXIt
PnByZXBhcmVJbmNvbWluZ1ZhbHVlKGV4ZWMsIHRoaXNWYWx1ZSk7CiAKICAgICBBcmdMaXN0IHBy
ZXBhcmVkQXJnczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kp
CkBAIC0yNDcsOSArMjQ3LDkgQEAgSlNWYWx1ZSogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OmNhbAogICAgIENhbGxUeXBlIHVud3JhcHBlZENhbGxUeXBlID0gd3JhcHBlci0+bV91bndyYXBw
ZWRPYmplY3QtPmdldENhbGxEYXRhKHVud3JhcHBlZENhbGxEYXRhKTsKICAgICBBU1NFUlQodW53
cmFwcGVkQ2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKIAotICAgIEpTVmFsdWUqIHVud3JhcHBl
ZFJlc3VsdCA9IEpTQzo6Y2FsbCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwgd3JhcHBl
ci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENhbGxUeXBlLCB1bndyYXBwZWRDYWxsRGF0
YSwgcHJlcGFyZWRUaGlzVmFsdWUsIHByZXBhcmVkQXJncyk7CisgICAgSlNWYWx1ZVB0ciB1bndy
YXBwZWRSZXN1bHQgPSBKU0M6OmNhbGwod3JhcHBlci0+dW53cmFwcGVkRXhlY1N0YXRlKCksIHdy
YXBwZXItPm1fdW53cmFwcGVkT2JqZWN0LCB1bndyYXBwZWRDYWxsVHlwZSwgdW53cmFwcGVkQ2Fs
bERhdGEsIHByZXBhcmVkVGhpc1ZhbHVlLCBwcmVwYXJlZEFyZ3MpOwogCi0gICAgSlNWYWx1ZSog
cmVzdWx0ID0gd3JhcHBlci0+d3JhcE91dGdvaW5nVmFsdWUod3JhcHBlci0+dW53cmFwcGVkRXhl
Y1N0YXRlKCksIHVud3JhcHBlZFJlc3VsdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSB3cmFw
cGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwgdW53
cmFwcGVkUmVzdWx0KTsKIAogICAgIHdyYXBwZXItPnRyYW5zZmVyRXhjZXB0aW9uVG9FeGVjU3Rh
dGUoZXhlYyk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyIDogcHVibGljIEpTQzo6SlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBhc1dyYXBwZXIoSlNDOjpKU1ZhbHVl
Kik7CisgICAgICAgIHN0YXRpYyBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogYXNXcmFwcGVy
KEpTQzo6SlNWYWx1ZVB0cik7CiAKICAgICAgICAgdmlydHVhbCB+SlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXIoKTsKIApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1
ZSogcHJvdG8pIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsgCiAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpPdmVycmlk
ZXNIYXNJbnN0YW5jZSkpOyAKICAgICAgICAgfQpAQCAtNTksOCArNTksOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1
dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNWYWx1ZSos
IEpTQzo6UHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpKU1ZhbHVlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFs
dWVQdHIsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpKU1ZhbHVlUHRyKTsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQpOwpAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0M6OkNhbGxEYXRh
Jik7CiAgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpDb25zdHJ1Y3REYXRhJik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpKU1ZhbHVlKiBwcm90byk7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZVB0ciwgSlNDOjpKU1ZhbHVlUHRyIHByb3RvKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
Z2V0UHJvcGVydHlOYW1lcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
KTsKIApAQCAtODIsMTQgKzgyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCBib29sIGFsbG93c0NhbGxBc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAgICAgdmlydHVhbCBib29sIGFsbG93c0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBwcmVwYXJlSW5j
b21pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlKiB1
bndyYXBwZWRWYWx1ZSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSog
d3JhcE91dGdvaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNW
YWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWVQdHIgcHJlcGFyZUluY29taW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4
ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1ZSkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB3cmFwT3V0Z29pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSog
dW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7
CiAKLSAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSogY2FjaGVkVmFsdWVHZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xv
dCYpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGNhY2hlZFZhbHVlR2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICB2b2lkIHRyYW5zZmVyRXhjZXB0aW9uVG9FeGVjU3RhdGUoSlND
OjpFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBjYWxs
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCogZnVuY3Rpb24sIEpTQzo6SlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZVB0ciBjYWxsKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCogZnVuY3Rpb24sIEpT
Qzo6SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogICAgICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogCiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIG1fdW53cmFwcGVkR2xvYmFsT2JqZWN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JHQkNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29s
b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAotc3RhdGljIEpTVmFsdWUqIGpzUkdCQ29sb3JSZWQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIGpzUkdC
Q29sb3JHcmVlbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSoganNSR0JDb2xvckJsdWUoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIganNS
R0JDb2xvclJlZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc1JHQkNvbG9yR3JlZW4oRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
anNSR0JDb2xvckJsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwogCiAvKgogQGJlZ2luIEpTUkdCQ29sb3JUYWJsZQpAQCAtNTksNyArNTksNyBA
QCBib29sIEpTUkdCQ29sb3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAgICAgcmV0dXJuIGdl
dFN0YXRpY1ZhbHVlU2xvdDxKU1JHQkNvbG9yLCBET01PYmplY3Q+KGV4ZWMsICZKU1JHQkNvbG9y
VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIGdldEpTUkdC
Q29sb3IoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb2xvcikKK0pTVmFsdWVQdHIgZ2V0SlNS
R0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQogewogICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTUkdCQ29sb3IoZXhlYywgY29sb3IpOwogfQpAQCAtNjgsMTcgKzY4LDE3IEBA
IEpTVmFsdWUqIGdldEpTUkdCQ29sb3IoRXhlY1N0YXRlKiBleGVjLCAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIGpzUkdCQ29sb3JSZWQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBq
c1JHQkNvbG9yUmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKChzdGF0aWNfY2FzdDxKU1JHQkNvbG9yKj4oYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKSktPmltcGwoKSA+PiAxNikgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOwogfQogCi1KU1ZhbHVlKiBqc1JHQkNvbG9yR3JlZW4oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBq
c1JHQkNvbG9yR3JlZW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoKHN0YXRpY19jYXN0PEpTUkdCQ29sb3IqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+aW1wbCgpID4+IDgpICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKIH0KIAotSlNWYWx1ZSoganNSR0JDb2xvckJsdWUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBq
c1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdGF0aWNfY2FzdDxKU1JHQkNvbG9yKj4oYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKSktPmltcGwoKSAmIDB4RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuaAkocmV2aXNpb24gMzk2MTYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlND
OjpKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC01Miw3ICs1
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgbV9jb2xvcjsKICAg
ICB9OwogCi0gICAgSlNDOjpKU1ZhbHVlKiBnZXRKU1JHQkNvbG9yKEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgY29sb3IpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBnZXRKU1JHQkNvbG9yKEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgY29sb3IpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSogSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAg
ICAgaW50IGluZGV4ID0gYXJncy5hdChleGVjLCAwKS0+dG9JbnQzMihleGVjLCBpbmRleE9rKTsK
QEAgLTU2LDcgKzU2LDcgQEAgSlNWYWx1ZSogSlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKEV4
ZQogICAgIHVuc2lnbmVkIHZhbHVlc0luZGV4ID0gaW5kZXggKiBudW1Db2x1bW5zOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpKyspIHsKICAgICAgICAgY29uc3Qg
U1FMVmFsdWUmIHZhbHVlID0gbV9pbXBsLT52YWx1ZXMoKVt2YWx1ZXNJbmRleCArIGldOwotICAg
ICAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gbm9WYWx1ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIGpz
VmFsdWUgPSBub1ZhbHVlKCk7CiAKICAgICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgU1FMVmFsdWU6OlN0cmluZ1ZhbHVlOgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIAotSlNWYWx1ZSogSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1FM
VHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0
cmluZyhleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01NSw3ICs1NSw3
IEBAIEpTVmFsdWUqIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXgKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSogbGVu
Z3RoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbGVuZ3RoVmFsdWUtPnRvVUludDMyKGV4ZWMpOwpAQCAtNjMsNyArNjMsNyBA
QCBKU1ZhbHVlKiBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4CiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20u
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50
SW5zdGFuY2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNTVkdF
bGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6YWRkRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAt
NDgsNyArNDgsNyBAQCBKU1ZhbHVlKiBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6YWRkRXZlbnRMCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHRWxlbWVudEluc3Rh
bmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMyArMjYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NWR0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAorSlNWYWx1ZVB0ciBKU1NWR0xlbmd0aDo6dmFsdWUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIFNWR0xlbmd0aCBpbXAoKmltcGwoKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIGltcC52YWx1ZShjb250ZXh0KCkpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdMZW5ndGg6
OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU1NWR1BPRFR5cGVX
cmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIgPSBpbXBsKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6Om11bHRpcGx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6Om11bHRpcGx5KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1w
KCppbXBsKCkpOwogCkBAIC0zNywxMCArMzcsMTAgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6Om11
bHRpcGx5KEV4ZWNTdGF0ZQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlw
ZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5tdWx0aXBseShzZWNvbmRNYXRy
aXgpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6
OmludmVyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNT
VkdNYXRyaXg6OmludmVyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwotICAgIEpTQzo6SlNWYWx1ZSogcmVzdWx0
ID0gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46
OmNyZWF0ZShpbXAuaW52ZXJzZSgpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU0M6
OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVy
PEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuaW52ZXJzZSgpKS5nZXQoKSwgbV9jb250ZXh0
LmdldCgpKTsKIAogICAgIGlmICghaW1wLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0aW9uOjpTVkdfTUFUUklYX05PVF9JTlZFUlRBQkxFKTsK
QEAgLTQ4LDcgKzQ4LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OmludmVyc2UoRXhlY1N0YXRl
KgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojp0cmFuc2xh
dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NW
R01hdHJpeDo6dHJhbnNsYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCkBAIC01OCw3ICs1OCw3IEBA
IEpTVmFsdWUqIEpTU1ZHTWF0cml4Ojp0cmFuc2xhdGUoRXhlY1N0YXQKICAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0
ZShpbXAudHJhbnNsYXRlKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNW
YWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwog
CkBAIC02Niw3ICs2Niw3IEBAIEpTVmFsdWUqIEpTU1ZHTWF0cml4OjpzY2FsZShFeGVjU3RhdGUq
IGUKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmlu
ZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuc2NhbGUoc2NhbGVGYWN0b3IpKS5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5pZm9ybShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0
cml4OjpzY2FsZU5vblVuaWZvcm0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKQEAgLTc2LDcgKzc2LDcg
QEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5pZm9ybShFeAogICAgIHJldHVybiB0
b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3Jl
YXRlKGltcC5zY2FsZU5vblVuaWZvcm0oc2NhbGVGYWN0b3JYLCBzY2FsZUZhY3RvclkpKS5nZXQo
KSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0
cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKQEAgLTg0LDE0ICs4NCwxNCBAQCBKU1Zh
bHVlKiBKU1NWR01hdHJpeDo6cm90YXRlKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhl
YywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1w
LnJvdGF0ZShhbmdsZSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBK
U1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
aW1wKCppbXBsKCkpOwogIAogICAgIGZsb2F0IHggPSBhcmdzLmF0KGV4ZWMsIDApLT50b0Zsb2F0
KGV4ZWMpOwogICAgIGZsb2F0IHkgPSBhcmdzLmF0KGV4ZWMsIDEpLT50b0Zsb2F0KGV4ZWMpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlw
ZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgs
IHkpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0
ID0gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46
OmNyZWF0ZShpbXAucm90YXRlRnJvbVZlY3Rvcih4LCB5KSkuZ2V0KCksIG1fY29udGV4dC5nZXQo
KSk7CiAKICAgICBpZiAoeCA9PSAwLjAgfHwgeSA9PSAwLjApCiAgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNWR19JTlZBTElEX1ZBTFVFX0VSUik7CkBAIC05OSwx
OSArOTksMTkgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4OjpmbGlwWChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6ZmxpcFgo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
aW1wKCppbXBsKCkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5mbGlwWCgpKS5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OmZsaXBZKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4OjpmbGlwWShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAo
KmltcGwoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBl
cjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLmZsaXBZKCkpLmdldCgpLCBtX2NvbnRleHQu
Z2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2tld1goRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6c2tld1goRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9y
bSBpbXAoKmltcGwoKSk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJp
eDo6c2tld1goRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnNrZXdYKGFuZ2xlKSku
Z2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3
WShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZH
TWF0cml4Ojpza2V3WShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU1ZHUGF0aFNlZyogb2JqZWN0LCBTVkdF
bGVtZW50KiBjb250ZXh0KQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU1ZHUGF0
aFNlZyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQogewogICAgIGlmICghb2JqZWN0KQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
UGF0aFNlZ0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHUGF0aFNlZ0xpc3Q6OmNsZWFyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAK
QEAgLTQ4LDcgKzQ4LDcgQEAgSlNWYWx1ZSogSlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0
YQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdM
aXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZH
UGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KGV4ZWMsIDApKTsKQEAgLTU3
LDE0ICs1NywxNCBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4CiAK
ICAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmluaXRpYWxpemUobmV3SXRl
bSwgZWMpKTsKIAotICAgIEpTQzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1f
Y29udGV4dC5nZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywg
b2JqLCBtX2NvbnRleHQuZ2V0KCkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAK
ICAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmli
dXRlTmFtZSgpKTsgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdQ
YXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTU1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCkBAIC03
OCwxMiArNzgsMTIgQEAgSlNWYWx1ZSogSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjUwog
ICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGlt
cGwoKSk7CiAgICAgU1ZHUGF0aFNlZyogb2JqID0gV1RGOjpnZXRQdHIoaW1wLT5nZXRJdGVtKGlu
ZGV4LCBlYykpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwg
bV9jb250ZXh0LmdldCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVj
LCBvYmosIG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjppbnNl
cnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
U1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KGV4ZWMsIDApKTsKQEAg
LTk3LDE0ICs5NywxNCBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVm
CiAKICAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3Qq
PihpbXBsKCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6
Z2V0UHRyKGltcC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250
ZXh0LmdldCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6
OmdldFB0cihpbXAtPmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29u
dGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkp
OyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0
OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQ
YXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtMTE4
LDE0ICsxMTgsMTQgQEAgSlNWYWx1ZSogSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRQog
CiAgICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4o
aW1wbCgpKTsKIAotICAgIEpTQzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6Omdl
dFB0cihpbXAtPnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2NvbnRleHQuZ2V0
KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRy
KGltcC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29udGV4dC5nZXQoKSk7
CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29udGV4dC0+c3ZnQXR0
cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVt
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdQ
YXRoU2VnTGlzdDo6cmVtb3ZlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgCkBAIC0xNDAsMjEgKzE0MCwy
MSBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKEV4CiAKICAgICBSZWZQ
dHI8U1ZHUGF0aFNlZz4gb2JqKGltcC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKIAotICAgIEpT
Qzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmouZ2V0KCksIG1fY29udGV4dC5nZXQo
KSk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLmdldCgpLCBt
X2NvbnRleHQuZ2V0KCkpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICBt
X2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFt
ZSgpKTsgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdQYXRoU2Vn
TGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNW
R1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdChleGVjLCAwKSk7CiAKICAg
ICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBs
KCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRy
KGltcC0+YXBwZW5kSXRlbShuZXdJdGVtLCBlYykpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpT
Qzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+YXBwZW5k
SXRlbShuZXdJdGVtLCBlYykpLCBtX2NvbnRleHQuZ2V0KCkpOwogICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAKICAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsgICAgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0eXBlZGVmIFNWR1BPRExpc3RJdGVt
PEZsb2F0UG9pbnQ+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJlZlB0cjxQT0RMaXN0
SXRlbT4gPiBTVkdQb2ludExpc3RCYXNlOwogCi1zdGF0aWMgSlNWYWx1ZSogZmluaXNoR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQs
IFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbSA+IGl0ZW0pCitzdGF0
aWMgSlNWYWx1ZVB0ciBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
JiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRy
PFBPRExpc3RJdGVtID4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTQyLDcgKzQyLDcgQEAgc3RhdGljIEpTVmFsdWUqIGZpbmlz
aEdldHRlcihFeGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdy
YXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGxpc3Qt
PmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3RhdGlj
IEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVj
LCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9E
TGlzdEl0ZW0gPiBpdGVtKQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNoU2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50
TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbSA+IGl0ZW0pCiB7CiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC01Myw3ICs1Myw3IEBA
IHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD46OmNy
ZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMs
IEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxp
c3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5p
c2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVj
LCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9E
TGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0
ZXJSZWFkT25seVJlc3UKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVX
cmFwcGVyPEZsb2F0UG9pbnQ+OjpjcmVhdGUoKml0ZW0pLmdldCgpLCBjb250ZXh0KTsKIH0KIAot
SlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHUG9pbnRMaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwo
KS0+Y2xlYXIoZWMpOwpAQCAtNzIsNyArNzIsNyBAQCBKU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6
Y2xlYXIoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUq
IEpTU1ZHUG9pbnRMaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CkBAIC04MCw3ICs4MCw3
IEBAIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0Ojppbml0aWFsaXplKEV4ZWMKICAgICAgICAgbGlz
dEltcC0+aW5pdGlhbGl6ZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoZXhl
YywgMCkpKSwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OmdldEl0ZW0oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1BvaW50
TGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgYm9vbCBpbmRleE9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdChleGVjLCAwKS0+
dG9VSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC05NSw3ICs5NSw3IEBAIEpTVmFsdWUqIEpTU1ZH
UG9pbnRMaXN0OjpnZXRJdGVtKEV4ZWNTdGEKICAgICAgICAgbGlzdEltcC0+Z2V0SXRlbShpbmRl
eCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcmUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1Bv
aW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgYm9vbCBpbmRleE9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5h
dChleGVjLCAxKS0+dG9VSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xMTAsNyArMTEwLDcgQEAg
SlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6Omluc2VydEl0ZW1CZWZvcgogICAgICAgICBsaXN0SW1w
LT5pbnNlcnRJdGVtQmVmb3JlKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdChl
eGVjLCAwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OnJl
cGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBh
cmdzLmF0KGV4ZWMsIDEpLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTI1LDcgKzEyNSw3
IEBAIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZXBsYWNlSXRlbShFeGUKICAgICAgICAgbGlz
dEltcC0+cmVwbGFjZUl0ZW0oUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KGV4
ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6cmVt
b3ZlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTU1ZHUG9pbnRMaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdz
LmF0KGV4ZWMsIDApLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTQwLDcgKzE0MCw3IEBA
IEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZW1vdmVJdGVtKEV4ZWMKICAgICAgICAgbGlzdElt
cC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6
OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUG9pbnRM
aXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgU1ZHUE9E
TGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiBQT0RMaXN0SXRlbTsKIHR5cGVkZWYgU1ZHTGlzdDxSZWZQ
dHI8UE9ETGlzdEl0ZW0+ID4gU1ZHVHJhbnNmb3JtTGlzdEJhc2U7CiAKLXN0YXRpYyBKU1ZhbHVl
KiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxl
bWVudCogY29udGV4dCwgU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0
SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1M
aXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewogICAgIGlmIChlYykg
ewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtNDIsNyArNDIsNyBAQCBz
dGF0aWMgSlNWYWx1ZSogZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT46OmNy
ZWF0ZShpdGVtLmdldCgpLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKS5nZXQoKSwg
Y29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHVHJhbnNmb3Jt
TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVl
UHRyIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdF
bGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExp
c3RJdGVtPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwpAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVy
KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT46OmNyZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVO
YW1lKS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXJS
ZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVt
ZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJ
dGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQo
RXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwg
U1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKIHsK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTYz
LDcgKzYzLDcgQEAgc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdQogICAg
IHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8U1ZHVHJhbnNmb3Jt
Pjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgY29udGV4dCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHVHJh
bnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwoKS0+Y2xlYXIo
ZWMpOwpAQCAtNzIsNyArNzIsNyBAQCBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFy
KEV4ZWNTCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHVHJh
bnNmb3JtTGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CkBAIC04MCw3ICs4
MCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5pdGlhbGl6ZSgKICAgICAgICAg
bGlzdEltcC0+aW5pdGlhbGl6ZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdz
LmF0KGV4ZWMsIDApKSksIGVjKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6
Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgYm9vbCBpbmRleE9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
cy5hdChleGVjLCAwKS0+dG9VSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC05NSw3ICs5NSw3IEBA
IEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbShFeGUKICAgICAgICAgbGlzdElt
cC0+Z2V0SXRlbShpbmRleCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDEpLT50b1VJbnQzMihleGVjLCBpbmRleE9r
KTsKQEAgLTExMCw3ICsxMTAsNyBAQCBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2Vy
dEl0ZW1CCiAgICAgICAgIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNv
cHkodG9TVkdUcmFuc2Zvcm0oYXJncy5hdChleGVjLCAwKSkpLCBpbmRleCwgZWMpKTsKIH0KIAot
SlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVw
bGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJv
b2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywgMSktPnRvVUlu
dDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTI1LDcgKzEyNSw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJh
bnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0KICAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oUE9E
TGlzdEl0ZW06OmNvcHkodG9TVkdUcmFuc2Zvcm0oYXJncy5hdChleGVjLCAwKSkpLCBpbmRleCwg
ZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVtKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zv
cm1MaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMs
IDApLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBKU1ZhbHVl
KiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oCiAgICAgICAgIGxpc3RJbXAtPnJlbW92
ZUl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBw
ZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHVHJhbnNm
b3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBi
b29sIEpTU3RvcmFnZTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTCiAgICAgcmV0dXJuIGltcGwt
PmNvbnRhaW5zKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTU3RvcmFnZTo6bmFtZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU1N0b3JhZ2U6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU1N0b3JhZ2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4ganNT
dHJpbmdPck51bGwoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXRJdGVtKHByb3BlcnR5TmFtZSkp
OwpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlCiAgICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xvdDxKU1N0b3JhZ2UsIEJhc2U+KGV4ZWMsIHNf
aW5mby5wcm9wSGFzaFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHRo
aXMtPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gdGhpcy0+cHJvdG90
eXBlKCk7CiAgICAgaWYgKHByb3RvdHlwZS0+aXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTc0LDcgKzc0LDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmN1c3RvbUdldFByb3BlcnR5
TmFtZXMoRQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU1N0b3JhZ2U6OmN1c3RvbVB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCitib29sIEpTU3RvcmFnZTo6Y3VzdG9tUHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3Vz
dG9tIHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0
aGlzIG5hbWUuCiAgICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGlu
ZyBjYW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCkBA
IC04Myw3ICs4Myw3IEBAIGJvb2wgSlNTdG9yYWdlOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGUK
ICAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTU3RvcmFnZSwgQmFzZT4oZXhlYywgc19pbmZv
LnByb3BIYXNoVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gdGhpcy0+
cHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUo
KTsKICAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSkt
Pmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogewogICAgIGlmICghc3R5bGVTaGVldCkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgYm9vbCBKU1N0eWxlU2hlZXRMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbQogICAg
IHJldHVybiBzdHlsZVNoZWV0TGlzdC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CiB9CiAK
LUpTVmFsdWUqIEpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWVQdHIgSlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTU3R5bGVTaGVldExpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1N0eWxl
U2hlZXRMaXN0Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgSFRNTFN0eWxlRWxl
bWVudCogZWxlbWVudCA9IHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYx
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUpTVmFsdWUqIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBUZXh0
KiB0ZXh0KQorSlNWYWx1ZVB0ciB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgVGV4
dCogdGV4dCkKIHsKICAgICBpZiAoIXRleHQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgSlNUcmVlV2Fsa2VyOjptYXJrKCkK
ICAgICBET01PYmplY3Q6Om1hcmsoKTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6
cGFyZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBK
U1RyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikK
IHsKICAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wYXJlbnROb2RlKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTQ1LDcgKzQ1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fs
a2VyOjpwYXJlbnROb2RlKEV4ZWNTdAogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQog
ICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
PmZpcnN0Q2hpbGQoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNTMs
NyArNTMsNyBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6
Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBK
U1RyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQog
ewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RDaGlsZChleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCkBAIC02MSw3ICs2MSw3IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtl
cjo6bGFzdENoaWxkKEV4ZWNTdGEKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAg
ICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
Pm5leHRTaWJsaW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTY5
LDcgKzY5LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjUwogICAg
IHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2Vy
OjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWVQdHIgSlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c1NpYmxpbmco
ZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNzcsNyArNzcsNyBAQCBK
U1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFCiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxr
ZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAg
IE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGVjKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6
cHJldmlvdXNOb2RlKEV4ZWMKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAgICAK
LUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgSlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHROb2Rl
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGdldEpTV29ya2VyQ29u
dGUKIAogY29uc3QgQ2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dEJhc2U6OnNfaW5mbyA9IHsgIldv
cmtlckNvbnRleHQiLCAwLCAwLCBnZXRKU1dvcmtlckNvbnRleHRCYXNlVGFibGUgfTsKIAotdm9p
ZCBKU1dvcmtlckNvbnRleHRCYXNlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit2b2lkIEpTV29ya2VyQ29udGV4dEJhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxKU1dvcmtlckNvbnRleHRCYXNlLCBCYXNlPihleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBnZXRKU1dvcmtlckNvbnRleHRCYXNlVGFibGUoZXhlYyks
IHRoaXMsIHNsb3QpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRl
eHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRl
eHRCYXNlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckNvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBKU1dvcmtlckNvbnRleHRCYXNlKFBhc3NSZWZQdHI8SlNDOjpT
dHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+KTsKICAgICAgICAgdmlydHVhbCB+
SlNXb3JrZXJDb250ZXh0QmFzZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0K
ICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDE3ICs2NSwxNyBAQCB2b2lkIEpTV29ya2VyQ29udGV4dDo6
bWFyaygpCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhlY1N0
YXRlKikgY29uc3QKK0pTVmFsdWVQdHIgSlNXb3JrZXJDb250ZXh0OjpzZWxmKEV4ZWNTdGF0ZSop
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGFzVmFsdWUoKTsKIH0KIAotdm9pZCBKU1dvcmtlckNvbnRl
eHQ6OnNldFNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNXb3Jr
ZXJDb250ZXh0OjpzZXRTZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsK
ICAgICBwdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAic2VsZiIpLCB2YWx1ZSk7CiB9CiAKLUpT
VmFsdWUqIEpTV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTV29ya2VyQ29udGV4dDo6YWRkRXZl
bnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
UmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGZpbmRPckNyZWF0
ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkpOwogICAg
IGlmICghbGlzdGVuZXIpCkBAIC04NCw3ICs4NCw3IEBAIEpTVmFsdWUqIEpTV29ya2VyQ29udGV4
dDo6YWRkRXZlbnRMaXN0ZW4KICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogSlNXb3JrZXJDb250ZXh0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNXb3JrZXJDb250ZXh0OjpyZW1vdmVF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSk7CiAgICAgaWYgKCFsaXN0ZW5l
cikKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSlNXb3JrZXI6Om1hcmsoKQogICAgIH0KIH0K
IAotSlNWYWx1ZSogSlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtNzAsNyAr
NzAsNyBAQCBKU1ZhbHVlKiBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTV29ya2VyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4
OSw3IEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6bWFyaygpCiB9CiAKIC8vIEN1c3RvbSBmdW5j
dGlvbnMKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXpl
KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5v
dCBlbm91Z2ggYXJndW1lbnRzIik7CkBAIC0xMTYsNyArMTE2LDcgQEAgSlNWYWx1ZSogSlNYTUxI
dHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwpAQCAtMTI3LDEzICsxMjcs
MTMgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYTUxIdHRw
UmVxdWVzdDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQogICAgICAg
ICBpbXBsKCktPnNlbmQoZWMpOwogICAgIGVsc2UgewotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBh
cmdzLmF0KGV4ZWMsIDApOworICAgICAgICBKU1ZhbHVlUHRyIHZhbCA9IGFyZ3MuYXQoZXhlYywg
MCk7CiAgICAgICAgIGlmICh2YWwtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBp
bXBsKCktPnNlbmQoZWMpOwogICAgICAgICBlbHNlIGlmICh2YWwtPmlzT2JqZWN0KCZKU0RvY3Vt
ZW50OjpzX2luZm8pKQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVl
c3Q6OnNlbmQoRXhlY1N0YXQKICAgICBpbnQgc2lnbmVkTGluZU51bWJlcjsKICAgICBpbnRwdHJf
dCBzb3VyY2VJRDsKICAgICBVU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBKU1ZhbHVlKiBmdW5jdGlv
bjsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uOwogICAgIGV4ZWMtPmludGVycHJldGVyKCktPnJl
dHJpZXZlTGFzdENhbGxlcihleGVjLCBzaWduZWRMaW5lTnVtYmVyLCBzb3VyY2VJRCwgc291cmNl
VVJMLCBmdW5jdGlvbik7CiAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZExpbmVOdW1iZXIoc2lnbmVk
TGluZU51bWJlciA+PSAwID8gc2lnbmVkTGluZU51bWJlciA6IDApOwogICAgIGltcGwoKS0+c2V0
TGFzdFNlbmRVUkwoc291cmNlVVJMKTsKQEAgLTE1NiwxOCArMTU2LDE4IEBAIEpTVmFsdWUqIEpT
WE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1
ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSogaGVhZGVyID0ganNTdHJpbmdPck51bGwo
ZXhlYywgaW1wbCgpLT5nZXRSZXNwb25zZUhlYWRlcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmlu
ZyhleGVjKSwgZWMpKTsKKyAgICBKU1ZhbHVlUHRyIGhlYWRlciA9IGpzU3RyaW5nT3JOdWxsKGV4
ZWMsIGltcGwoKS0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmco
ZXhlYyksIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4g
aGVhZGVyOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1pbWVUeXBl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYTUxI
dHRwUmVxdWVzdDo6b3ZlcnJpZGVNaW1lVHlwZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwpAQCAt
MTc2LDcgKzE3Niw3IEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVQK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVz
dDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTE4OCw3ICsxODgsNyBAQCBK
U1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3RlCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1hNTEh0dHBSZXF1ZXN0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC0yMDAsNyArMjAwLDcgQEAgSlNWYWx1ZSogSlNY
TUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4
ZWMsIGltcGwoKS0+cmVzcG9uc2VUZXh0KCkpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKU1hNTEh0dHBSZXF1
ZXN0VXBsb2FkOjptYXJrKCkKICAgICB9CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3RV
cGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRFdmVudExpc3RlbmVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC04OSw3ICs4
OSw3IEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW4KICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5
NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjppbXBvcnRTdHls
ZXNoZWV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNYU0xUUHJvY2Vzc29yOjppbXBvcnRTdHlsZXNoZWV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBub2RlVmFsID0gYXJncy5hdChleGVjLCAw
KTsKKyAgICBKU1ZhbHVlUHRyIG5vZGVWYWwgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChu
b2RlVmFsLT5pc09iamVjdCgmSlNOb2RlOjpzX2luZm8pKSB7CiAgICAgICAgIEpTTm9kZSogbm9k
ZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+KGFzT2JqZWN0KG5vZGVWYWwpKTsKICAgICAgICAgaW1w
bCgpLT5pbXBvcnRTdHlsZXNoZWV0KG5vZGUtPmltcGwoKSk7CkBAIC01OCwxMCArNTgsMTAgQEAg
SlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjppbXBvcnRTdHlsZXNoZQogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJh
Z21lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIG5vZGVWYWwgPSBhcmdzLmF0KGV4ZWMs
IDApOwotICAgIEpTVmFsdWUqIGRvY1ZhbCA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1
ZVB0ciBub2RlVmFsID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGRvY1ZhbCA9
IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgaWYgKG5vZGVWYWwtPmlzT2JqZWN0KCZKU05vZGU6OnNf
aW5mbykgJiYgZG9jVmFsLT5pc09iamVjdCgmSlNEb2N1bWVudDo6c19pbmZvKSkgewogICAgICAg
ICBXZWJDb3JlOjpOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qobm9k
ZVZhbCkpLT5pbXBsKCk7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPihhc09iamVjdChkb2NWYWwpKS0+aW1wbCgp
KTsKQEAgLTcxLDkgKzcxLDkgQEAgSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1U
b0ZyYQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9j
ZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIG5v
ZGVWYWwgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgbm9kZVZhbCA9IGFyZ3Mu
YXQoZXhlYywgMCk7CiAgICAgaWYgKG5vZGVWYWwtPmlzT2JqZWN0KCZKU05vZGU6OnNfaW5mbykp
IHsKICAgICAgICAgSlNOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qo
bm9kZVZhbCkpOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdERvY3VtZW50ID0gaW1w
bCgpLT50cmFuc2Zvcm1Ub0RvY3VtZW50KG5vZGUtPmltcGwoKSk7CkBAIC04NSw3ICs4NSw3IEBA
IEpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2MKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hTTFRQ
cm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgaWYgKGFyZ3MuYXQoZXhlYywgMSktPmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwg
YXJncy5hdChleGVjLCAyKS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7IC8vIFRocm93IGV4Y2VwdGlvbj8KQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1
ZSogSlNYU0xUUHJvY2Vzc29yOjpzZXRQYXJhbWV0ZXIoRQogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nlc3Nv
cjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMDYsNyArMTA2LDcgQEAgSlNWYWx1ZSogSlNYU0xU
UHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoRQogICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVk
KGV4ZWMsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuYXQoZXhlYywgMSktPmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICsz
OSwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNj
aGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
ZnVuY3Rpb24sIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxl
ZEFjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgZnVuY3Rpb24sIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogewogICAgIEFyZ0xpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7Ci0gICAgZm9yIChBcmdMaXN0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIGZvciAoQXJn
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBtX2FyZ3MuYXBwZW5kKCgqaXQpLmpzVmFsdWUoZXhlYykpOworICAgIH0KIH0K
IAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAqLwog
ICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBTY2hlZHVs
ZWRBY3Rpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNv
bnN0IEpTQzo6QXJnTGlzdCYpOworICAgICAgICBTY2hlZHVsZWRBY3Rpb24oSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciBmdW5jdGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7
CiAgICAgICAgIFNjaGVkdWxlZEFjdGlvbihjb25zdCBTdHJpbmcmIGNvZGUpCiAgICAgICAgICAg
ICA6IG1fY29kZShjb2RlKQogICAgICAgICB7CkBAIC00Niw4ICs0Niw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGV4ZWN1dGUoSlNET01XaW5kb3dT
aGVsbCopOwogCi0gICAgICAgIEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gbV9mdW5j
dGlvbjsKLSAgICAgICAgVmVjdG9yPEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNWYWx1ZT4gPiBt
X2FyZ3M7CisgICAgICAgIEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0ciBtX2Z1bmN0aW9uOworICAg
ICAgICBWZWN0b3I8SlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyPiBtX2FyZ3M7CiAgICAgICAgIFN0
cmluZyBtX2NvZGU7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fs
bFN0YWNrLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhbGxTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgU2NyaXB0Q2Fs
bFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soRXhlY1N0YQogICAgIGludCBzaWduZWRMaW5lTnVtYmVy
OwogICAgIGludHB0cl90IHNvdXJjZUlEOwogICAgIFVTdHJpbmcgdXJsU3RyaW5nOwotICAgIEpT
VmFsdWUqIGZ1bmN0aW9uOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb247CiAKICAgICBleGVjLT5p
bnRlcnByZXRlcigpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwg
c291cmNlSUQsIHVybFN0cmluZywgZnVuY3Rpb24pOwogCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQg
U2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXplKCkKICAgICBpZiAoIW1fY2FsbGVyIHx8IG1faW5p
dGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTVmFsdWUqIGZ1bmMgPSBtX2V4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyKG1fZXhlYywgbV9jYWxsZXIpOworICAgIEpT
VmFsdWVQdHIgZnVuYyA9IG1fZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIobV9l
eGVjLCBtX2NhbGxlcik7CiAgICAgd2hpbGUgKCFmdW5jLT5pc051bGwoKSkgewogICAgICAgICBJ
bnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGZ1
bmMpOwogICAgICAgICBBcmdMaXN0IGVtcHR5QXJnTGlzdDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyAr
Mjk2LDcgQEAgTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdAogICAgIC8v
IENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVudAogICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTVmFsdWUqIGpzRWxlbWVudFZhbHVlID0gdG9KUyhleGVjLCBwbHVnaW4pOwor
ICAgIEpTVmFsdWVQdHIganNFbGVtZW50VmFsdWUgPSB0b0pTKGV4ZWMsIHBsdWdpbik7CiAgICAg
aWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUtPmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxNSArMzksMTUgQEAgY2xhc3Mg
U3RyaW5nOwogCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0VmFsdWUo
SlNDOjpKU1ZhbHVlKiB2YWx1ZSA9IEpTQzo6bm9WYWx1ZSgpKSA6IG1fdmFsdWUodmFsdWUpIHt9
CisgICAgU2NyaXB0VmFsdWUoSlNDOjpKU1ZhbHVlUHRyIHZhbHVlID0gSlNDOjpub1ZhbHVlKCkp
IDogbV92YWx1ZSh2YWx1ZSkge30KIAotICAgIEpTQzo6SlNWYWx1ZSoganNWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKyAgICBKU0M6OkpTVmFsdWVQdHIganNWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KICAgICBib29sIGdldFN0cmluZyhTdHJp
bmcmIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICBib29sIGlz
VW5kZWZpbmVkKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlND
OjpKU1ZhbHVlPiBtX3ZhbHVlOworICAgIEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0ciBtX3ZhbHVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29i
amMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYs
NyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNWYWx1ZSog
ZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5n
KG5hbWUpKSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTI5OSw3ICsyOTksNyBA
QCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5zdGFydFRp
bWVvdXRDaGVjaygpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2Vs
ZiBfaW1wXSwgYXJnTGlzdCk7CiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CkBAIC0zMjQsNyArMzI0LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNT
dGF0ZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgCiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKQEAgLTM4OCw3ICszODgsNyBAQCBzdGF0aWMgdm9p
ZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxv
Y2sgcGVybWFuZW50bHkgaGVsZAogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAg
IAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKGtleSkpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICAgICAg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIHN0YXRpYyB2
b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTUw
NCw3ICs1MDQsNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAg
ICAgcmV0dXJuIHRvUmVmKFtzZWxmIF9pbXBdKTsKIH0KIAotKyAoaWQpX2NvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlOihKU1ZhbHVlKil2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihSb290T2JqZWN0Kilv
cmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFJvb3RPYmplY3QqKXJvb3RPYmplY3QKKysgKGlk
KV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZVB0cil2YWx1ZSBvcmlnaW5Sb290T2Jq
ZWN0OihSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFJvb3RPYmplY3Qq
KXJvb3RPYmplY3QKIHsKICAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCBzdGF0
aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChvYmplY3QtPmNsYXNzSW5mbygpICE9ICZS
dW50aW1lT2JqZWN0SW1wOjpzX2luZm8pIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJ1bnRpbWVP
YmplY3QgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRp
bWVfb2JqZWN0IikpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0ID0gb2Jq
ZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiX19hcHBsZV9ydW50aW1lX29iamVjdCIp
KTsKICAgICAgICAgICAgIGlmIChydW50aW1lT2JqZWN0ICYmIHJ1bnRpbWVPYmplY3QtPmlzT2Jq
ZWN0KCkpCiAgICAgICAgICAgICAgICAgb2JqZWN0ID0gYXNPYmplY3QocnVudGltZU9iamVjdCk7
CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdFByaXZhdGUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIH0KIAogQGludGVyZmFjZSBXZWJTY3JpcHRPYmplY3QgKFBy
aXZhdGUpCi0rIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1ZSopdmFs
dWUgb3JpZ2luUm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9v
dE9iamVjdCByb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0
OworKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVmFsdWVQdHIpdmFsdWUg
b3JpZ2luUm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9vdE9i
amVjdCByb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0Owog
KyAoaWQpc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6KEpTT2JqZWN0UmVmKWpzT2JqZWN0IG9yaWdp
blJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qg
cm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopcm9vdE9iamVjdDsKIC0gKGlk
KV9pbml0OwogLSAoaWQpX2luaXRXaXRoSlNPYmplY3Q6KEpTQzo6SlNPYmplY3QqKWltcCBvcmln
aW5Sb290T2JqZWN0OihQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+KW9yaWdp
blJvb3RPYmplY3Qgcm9vdE9iamVjdDooUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0Pilyb290T2JqZWN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBz
dWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgbXkgQGdldE93blByb3BlcnR5
U2xvdEltcGwgPSAoKTsKIAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTmFtZWROb2RlTWFw
IiBvciAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTENvbGxlY3Rpb24iKSB7Ci0gICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlKiBw
cm90byA9IHByb3RvdHlwZSgpO1xuIik7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlUHRyIHByb3RvID0gcHJvdG90eXBl
KCk7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAo
cHJvdG8tPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVj
dCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4i
KTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJu
IGZhbHNlO1xuXG4iKTsKICAgICB9CkBAIC00NzEsOSArNDcxLDkgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAKICAgICAjIEdldHRlcnMKICAgICBpZiAoJGhhc1NldHRlcikgewotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSopO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzQ3VzdG9tSW5kZXhTZXR0ZXIifTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBib29sIGN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYs
IEpTQzo6SlNWYWx1ZSosIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9OworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlUHRyKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgYm9vbCBjdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9OwogICAgIH0K
IAogICAgICMgQ2xhc3MgaW5mbwpAQCAtNDgzLDEzICs0ODMsMTMgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgIyBTdHJ1Y3R1cmUgSUQKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKLSAgICAgICAgICAgICIgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpT
VmFsdWUqIHByb3RvdHlwZSlcbiIgLgorICAgICAgICAgICAgIiAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5
cGUpXG4iIC4KICAgICAgICAgICAgICIgICAge1xuIiAuCiAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6TmVlZHNUaGlz
Q29udmVyc2lvbikpO1xuIiAuCiAgICAgICAgICAgICAiICAgIH1cblxuIik7CiAgICAgfSBlbHNp
ZiAoJGhhc0dldHRlcikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LAotICAgICAgICAg
ICAgIiAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTQzo6SlNWYWx1ZSogcHJvdG90eXBlKVxuIiAuCisgICAgICAgICAgICAiICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRy
IHByb3RvdHlwZSlcbiIgLgogICAgICAgICAgICAgIiAgICB7XG4iIC4KICAgICAgICAgICAgICIg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUpKTtcbiIgLgogICAgICAgICAgICAgIiAgICB9XG5cbiIpOwpA
QCAtNTIxLDEzICs1MjEsMTMgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqIHNldHRl
ckZ1bmN0aW9uKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bURlZmluZVNldHRlciJ9OwogCiAgICAgIyBDdXN0b20gbG9va3VwR2V0dGVyIGZ1bmN0aW9uCi0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogbG9va3Vw
R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTG9va3Vw
R2V0dGVyIn07CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEpTQzo6SlNW
YWx1ZVB0ciBsb29rdXBHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21Mb29rdXBHZXR0ZXIifTsKIAogICAgICMgQ3VzdG9tIGxvb2t1cFNldHRlciBmdW5j
dGlvbgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUq
IGxvb2t1cFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bUxvb2t1cFNldHRlciJ9OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBK
U0M6OkpTVmFsdWVQdHIgbG9va3VwU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tTG9va3VwU2V0dGVyIn07CiAKICAgICAjIENvbnN0cnVjdG9yIG9iamVj
dCBnZXR0ZXIKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUqIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn07CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGdldENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZW5lcmF0ZUNvbnN0cnVjdG9yIn07CiAKICAgICBteSAkbnVtQ3VzdG9tRnVuY3Rpb25zID0gMDsK
ICAgICBteSAkbnVtQ3VzdG9tQXR0cmlidXRlcyA9IDA7CkBAIC01NDcsMTUgKzU0NywxNSBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRh
dGFOb2RlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9KSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUqICIgLiAkY29kZUdlbmVyYXRv
ci0+V0tfbGNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBKU0M6OkpTVmFsdWVQdHIgIiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsK
ICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+dHlwZSAhfiAvXnJlYWRvbmx5Lykgewot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAu
ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkg
LiAiKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKik7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHNldCIgLiAkY29kZUdlbmVyYXRv
ci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21HZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgSlNDOjpKU1ZhbHVlKiAiIC4gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlUHRy
ICIgLiAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5h
bWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0O1xuIik7CiAgICAgICAgICAgICB9IGVsc2lm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21TZXR0
ZXIifSkgewogICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9u
bHkvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9p
ZCBzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2Rl
R2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTcwLDcgKzU3MCw3IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0
aW9uc30pIHsKICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbSJ9KSB7CiAgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uSW1w
bGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIn0gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xjZmly
c3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRp
b25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWVQdHIg
IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OkFyZ0xpc3QmKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtNjAyLDIxICs2MDIsMjEgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIEluZGV4IGdl
dHRlcgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdl
dHRlciJ9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90
Jik7XG4iKTsKICAgICB9CiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBKU0M6OkpTVmFsdWUqIGdldEJ5SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBp
bmRleCk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFs
dWVQdHIgZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcbiIpOwog
ICAgIH0KICAgICAKICAgICAjIEluZGV4IHNldHRlcgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBp
bmRleCwgSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgIH0KICAgICAjIE5hbWUgZ2V0dGVyCiAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifSB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRl
ciJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcml2YXRlOlxuIik7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgY2FuR2V0SXRlbXNGb3JO
YW1lKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxDbGFzc05hbWUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUqIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZVB0ciBuYW1lR2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTtcbiIpOwogICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKQEAg
LTYzMCwyOCArNjMwLDI4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgaWYgKCEkaGFzUGFy
ZW50IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlVG9KUyJ9KSB7
CiAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTU1ZHUE9EVHlwZVdyYXBw
ZXI8JHBvZFR5cGU+KiwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4i
KTsKICAgICAgICAgfSBlbHNpZiAoSXNTVkdUeXBlTmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIoJGlt
cGxDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKiwgU1ZHRWxlbWVudCogY29u
dGV4dCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFs
dWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosICRpbXBsVHlwZSosIFNWR0VsZW1lbnQqIGNvbnRl
eHQpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKik7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosICRpbXBsVHlwZSopO1xuIik7CiAgICAgICAgIH0KIAogICAgICAg
ICAjIFJlc29sdmUgYW1iaWd1aXR5IHdpdGggRXZlbnRUYXJnZXQgdGhhdCBvdGhlcndpc2UgZXhp
c3RzLgogICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vZGUiKSB7Ci0gICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiaW5saW5lIEpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnZXROb2RlKiBub2RlKSB7IHJldHVybiB0b0pTKGV4ZWMs
IHN0YXRpY19jYXN0PE5vZGUqPihub2RlKSk7IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgImlubGluZSBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgRXZlbnRUYXJnZXROb2RlKiBub2RlKSB7IHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19j
YXN0PE5vZGUqPihub2RlKSk7IH1cbiIpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghJGhh
c1BhcmVudCB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2
ZUNvbnZlcnRlciJ9KSB7CiAgICAgICAgIGlmICgkcG9kVHlwZSkgewotICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiRwb2RUeXBlIHRvJHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFs
dWUqKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRwb2RUeXBlIHRv
JHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgIH0gZWxzaWYg
KCRpbnRlcmZhY2VOYW1lIGVxICJOb2RlRmlsdGVyIikgewotICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTQzo6SlNW
YWx1ZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0
cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRpbXBsQ2xhc3NO
YW1lKiB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVlKik7XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9
KEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgfQogICAgICAgICBpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIk5vZGUiIG9yICRpbnRlcmZhY2VOYW1lIGVxICJFbGVtZW50IiBvciAkaW50ZXJm
YWNlTmFtZSBlcSAiVGV4dCIpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJK
U0M6OkpTVmFsdWUqIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCAkaW50ZXJmYWNl
TmFtZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1Zh
bHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCAkaW50ZXJmYWNlTmFtZSop
O1xuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIik7
CkBAIC02NzEsNyArNjcxLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgaWYgKCRudW1GdW5j
dGlvbnMgPiAwIHx8ICRudW1Db25zdGFudHMgPiAwKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwKLSAgICAgICAgICAgICIgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUqIHByb3Rv
dHlwZSlcbiIgLgorICAgICAgICAgICAgIiAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZVB0ciBwcm90b3R5cGUpXG4iIC4KICAg
ICAgICAgICAgICIgICAge1xuIiAuCiAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
KSk7XG4iIC4KICAgICAgICAgICAgICIgICAgfVxuIik7CkBAIC02ODQsNyArNjg0LDcgQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIi8vIEZ1bmN0aW9u
c1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5j
dGlvbnN9KSB7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3It
PldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5l
cmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogJHtmdW5jdGlvbk5hbWV9KEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSosIGNvbnN0IEpTQzo6
QXJnTGlzdCYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlUHRyICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTVmFsdWVQdHIsIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTY5MiwxNiArNjkyLDE2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBBdHRyaWJ1dGVzXG5cbiIpOwogICAgICAgICBmb3Jl
YWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICAg
ICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8gIkNvbnN0cnVjdG9yIiA6ICIiKTsKLSAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUqICR7Z2V0dGVyfShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpT
VmFsdWVQdHIgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICAgICAgdW5sZXNzICgk
YXR0cmlidXRlLT50eXBlID1+IC9yZWFkb25seS8pIHsKICAgICAgICAgICAgICAgICBteSAkc2V0
dGVyID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29uc3RydWN0b3IiIDogIiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ2b2lkICR7c2V0dGVyfShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJ2b2lkICR7c2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAi
anMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwotICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciAke2dldHRl
cn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlBy
b3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcwOSw3ICs3MDksNyBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gQ29u
c3RhbnRzXG5cbiIpOwogICAgICAgICBmb3JlYWNoIG15ICRjb25zdGFudCAoQHskZGF0YU5vZGUt
PmNvbnN0YW50c30pIHsKICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFj
ZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkY29uc3RhbnQtPm5hbWUpOwotICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogJHtnZXR0ZXJ9KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0
eVNsb3QmKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNW
YWx1ZVB0ciAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
LCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTEwNTYsNyArMTA1Niw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgbXkgJGdldEZ1bmN0aW9uTmFtZSA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICAkY29k
ZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3Rv
ciIgOiAiIik7CiAgICAgICAgICAgICAgICAgbXkgJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUgPSAk
Y29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkbmFtZSk7CiAKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtnZXRGdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAKICAgICAgICAgICAgICAgICBteSAkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lv
biA9ICIiOwpAQCAtMTEyNCwxMCArMTEyNCwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogCiAgICAgICAgICAgICAgICAgICAgIGlmICgkcG9kVHlwZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHBvZFR5cGUgaW1wKCpzdGF0aWNfY2Fz
dDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNW
YWx1ZSogcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbXBsQ2xhc3NOYW1lLCAiIiwgImltcC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZShlYyki
LCAic3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpIikg
LiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAiIiwgImltcC4kaW1wbEdldHRlckZ1bmN0
aW9uTmFtZShlYykiLCAic3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xv
dEJhc2UoKSkpIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFt
ZSogaW1wID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSk7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSogcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBs
Q2xhc3NOYW1lLCAkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbiwgImltcC0+JGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoZWMpIiwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVj
dChzbG90LnNsb3RCYXNlKCkpKSIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9ICIgLiBOYXRp
dmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgJGlt
cGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24sICJpbXAtPiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKGVjKSIsICJzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSkiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
XG4iKTsKQEAgLTExNDAsNyArMTE0MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVD
b25zdHJ1Y3RvciJ9KSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25O
YW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKIAotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtjb25zdHJ1Y3RvckZ1bmN0aW9u
TmFtZX0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1Zh
bHVlUHRyICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKS0+Z2V0Q29uc3RydWN0b3IoZXhlYyk7XG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwpAQCAtMTE1OCw3ICsxMTU4LDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn07CiAKICAgICAg
ICAgaWYgKCRoYXNTZXR0ZXIpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke2NsYXNzTmFtZX06OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifSkgewogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgb2s7XG4iKTsKQEAgLTExODEsNyArMTE4MSw3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CiAKICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSlcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSlcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm47
XG4iKTsKQEAgLTExOTYsNyArMTE5Niw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkcHV0RnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRp
bnRlcmZhY2VOYW1lIC4gICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1lKSAuICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29uc3RydWN0b3Ii
IDogIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGltcGxTZXR0ZXJGdW5jdGlvbk5h
bWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke3B1dEZ1
bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1
ZVB0ciB2YWx1ZSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWluU2VjdXJpdHkifSAmJiAhJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5
In0pIHsKQEAgLTEyODQsNyArMTI4NCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgfQogCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRl
Q29uc3RydWN0b3IifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUqICR7
Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKVxue1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZVB0ciAke2NsYXNzTmFtZX06OmdldENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYylcbntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8JHtjbGFzc05hbWV9Q29uc3RydWN0b3I+
KGV4ZWMpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9
CkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFz
c05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbklt
cGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKIAotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJKU1ZhbHVlKiAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlUHRyICR7ZnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CiAKICAgICAgICAgICAgICRpbXBsS0pTSW5jbHVkZXsiRXJyb3IuaCJ9ID0gMTsKQEAgLTE0MTgs
NyArMTQxOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAk
Z2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJGNvbnN0YW50LT5uYW1lKTsKIAogICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBjYXN0cyBp
bnRvIGludCB0byBtYXRjaCBvdXIgcHJldmlvdXMgYmVoYXZpb3Igd2hpY2ggdHVybmVkIDB4RkZG
RkZGRkYgaW4gLTEgZm9yIE5vZGVGaWx0ZXIuU0hPV19BTEwKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNWYWx1ZSogJHtnZXR0ZXJ9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNWYWx1ZVB0ciAke2dldHRlcn0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JilcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KCIgLiAkY29uc3RhbnQtPnZh
bHVlIC4gIikpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0K
IAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRl
ciJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5KU1ZhbHVlKiAke2NsYXNzTmFt
ZX06OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbkpTVmFsdWVQdHIgJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTtcbiIpOwogICAg
ICAgICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncygkaW1wbENsYXNzTmFtZSkpIHsKQEAg
LTE0NDQsMTEgKzE0NDQsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIGlm
ICgoISRoYXNQYXJlbnQgb3IgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJh
dGVUb0pTIn0pIGFuZCAhVXNlc01hbnVhbFRvSlNJbXBsZW1lbnRhdGlvbigkaW1wbENsYXNzTmFt
ZSkpIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNTVkdQT0RU
eXBlV3JhcHBlcjwkcG9kVHlwZT4qIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIG9iamVjdCwg
U1ZHRWxlbWVudCogY29udGV4dClcbiIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
JGltcGxUeXBlKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpXG4iKTsKKyAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFs
dWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsICRpbXBsVHlwZSogb2JqZWN0KVxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCAkaW1wbFR5cGUqIG9iamVjdClcbiIpOwogICAgICAgICB9CiAKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKQEAgLTE0NjQsOSArMTQ2NCw5IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBpZiAoKCEkaGFzUGFyZW50IG9yICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlTmF0aXZlQ29udmVydGVyIn0pIGFu
ZCAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmF0aXZlQ29udmVydGVy
In0pIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiRwb2RUeXBlIHRvJHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWUqIHZhbHVlKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiRwb2RUeXBlIHRvJHtpbnRlcmZh
Y2VOYW1lfShKU0M6OkpTVmFsdWVQdHIgdmFsdWUpXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJGltcGxDbGFzc05hbWUqIHRvJHtpbnRlcmZh
Y2VOYW1lfShKU0M6OkpTVmFsdWUqIHZhbHVlKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiRpbXBsQ2xhc3NOYW1lKiB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVl
UHRyIHZhbHVlKVxuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwpAQCAtMTUxNSw3ICsxNTE1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25G
dW5jdGlvbkNhbGwoKQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInJl
dHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZSogcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGltcGxDbGFzc05hbWUsICIi
LCAkZnVuY3Rpb25TdHJpbmcsICJjYXN0ZWRUaGlzT2JqIikgLiAiO1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJKU0M6OkpTVmFsdWVQdHIgcmVzdWx0
ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgMSwgJGltcGxDbGFz
c05hbWUsICIiLCAkZnVuY3Rpb25TdHJpbmcsICJjYXN0ZWRUaGlzT2JqIikgLiAiO1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7XG4iKSBpZiBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CiAKICAgICAgICAg
aWYgKCRwb2RUeXBlKSB7CkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0K
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3Rv
KSAKICAgICB7IAogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOyAKICAgICB9CkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlk
Z2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL05Q
X2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgX05Q
Tl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8KICAgICAgICAgSlNMb2NrIGxvY2soZmFs
c2UpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAg
ICAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG9iai0+aW1wOworICAgICAgICBKU1ZhbHVlUHRyIGZ1
bmN0aW9uID0gb2JqLT5pbXA7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAg
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xMjIsNyArMTIyLDcgQEAgYm9v
bCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBnZXRMaXN0RnJv
bVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsK
ICAgICAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVv
dXRDaGVjaygpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHRWID0gY2FsbChleGVjLCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBmdW5jdGlvbiwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFs
dWVQdHIgcmVzdWx0ViA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
ZnVuY3Rpb24sIGFyZ0xpc3QpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hl
Y2soKTsKIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUg
ZnVuY3Rpb24gY2FsbC4KQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBu
cHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSogZnVuY3Rpb24g
PSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVl
LnN0cmluZykpOworICAgICAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChl
eGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rp
b24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5Q
T2JqZWN0KiBvLCBOCiAgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywg
YXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICBQcm90ZWN0ZWRQdHI8SlNH
bG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwog
ICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgICAgIEpTVmFs
dWUqIHJlc3VsdFYgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9i
ai0+aW1wLCBhcmdMaXN0KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHRWID0gY2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJnTGlzdCk7CiAgICAg
ICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAgICAgICAgIC8vIENvbnZl
cnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgpAQCAtMjA2LDcg
KzIwNiw3IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFMKICAgICAg
ICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAgICAgICAgIENvbXBsVHlwZSB0
eXBlID0gY29tcGxldGlvbi5jb21wbFR5cGUoKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgICAgIGlmICh0eXBlID09
IE5vcm1hbCkgewogICAgICAgICAgICAgcmVzdWx0ID0gY29tcGxldGlvbi52YWx1ZSgpOwogICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBfTlBOX0dldFBy
b3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaSA9
IHN0YXRpY19jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4ocHJvcGVydHlOYW1lKTsKICAgICAgICAg
CiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKQogICAg
ICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKICAgICAgICAgZWxzZQpAQCAtMzY0LDcgKzM2NCw3
IEBAIGJvb2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlAKIAogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIEpTVmFsdWUqIGZ1bmMgPSBv
YmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0
cmluZykpOworICAgICAgICBKU1ZhbHVlUHRyIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlk
ZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwogICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMtPmlzVW5kZWZpbmVkKCk7
CiAgICAgfQpAQCAtNDMyLDcgKzQzMiw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9i
amVjdCogbywgY28KICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgICAgICAKICAgICAg
ICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgotICAgICAgICBKU1ZhbHVlKiBjb25z
dHJ1Y3RvciA9IG9iai0+aW1wOworICAgICAgICBKU1ZhbHVlUHRyIGNvbnN0cnVjdG9yID0gb2Jq
LT5pbXA7CiAgICAgICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICAgICAgQ29u
c3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gY29uc3RydWN0b3ItPmdldENvbnN0cnVjdERhdGEo
Y29uc3RydWN0RGF0YSk7CiAgICAgICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVOb25lKQpAQCAtNDQyLDcgKzQ0Miw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9i
amVjdCogbywgY28KICAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBh
cmdDb3VudCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIFByb3RlY3RlZFB0cjxKU0ds
b2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ViA9IGNvbnN0cnVjdChleGVjLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0VHlwZSwg
Y29uc3RydWN0RGF0YSwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ViA9IGNv
bnN0cnVjdChleGVjLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwg
YXJnTGlzdCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwogICAg
ICAgICAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTIgKzc4LDEyIEBAIHZvaWQgSW5zdGFuY2U6OmVuZCgp
CiAgICAgdmlydHVhbEVuZCgpOwogfQogCi1KU1ZhbHVlKiBJbnN0YW5jZTo6Z2V0VmFsdWVPZkZp
ZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGFGaWVsZCkgY29uc3QKK0pTVmFsdWVQ
dHIgSW5zdGFuY2U6OmdldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZpZWxk
KiBhRmllbGQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFGaWVsZC0+dmFsdWVGcm9tSW5zdGFuY2Uo
ZXhlYywgdGhpcyk7CiB9CiAKLXZvaWQgSW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEZpZWxkKiBhRmllbGQsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3QKK3Zv
aWQgSW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEZpZWxk
KiBhRmllbGQsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGFGaWVsZC0+c2V0VmFs
dWVUb0luc3RhbmNlKGV4ZWMsIHRoaXMsIGFWYWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZS5oCShyZXZp
c2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsOCArNTAsOCBAQCB0eXBlZGVmIFZlY3RvcjxNZXRob2QqPiBNZXRob2RMaXN0OwogY2xh
c3MgRmllbGQgewogcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RhbmNlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBj
b25zdCBJbnN0YW5jZSopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0lu
c3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZVB0cikgY29uc3QgPSAw
OwogCiAgICAgdmlydHVhbCB+RmllbGQoKSB7IH0KIH07CkBAIC02OSw3ICs2OSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBGaWVsZCogZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVy
JiwgSW5zdGFuY2UqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBmYWxsYmFja09i
amVjdChFeGVjU3RhdGUqLCBJbnN0YW5jZSosIGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBq
c1VuZGVmaW5lZCgpOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGZhbGxiYWNrT2JqZWN0KEV4
ZWNTdGF0ZSosIEluc3RhbmNlKiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7IH0KIAogICAgIHZpcnR1YWwgfkNsYXNzKCkgeyB9CiB9OwpAQCAtMTA3LDI1ICsxMDcs
MjUgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgQ2xhc3MgKmdldENsYXNzKCkgY29uc3Qg
PSAwOwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0
ZSosIGNvbnN0IEZpZWxkKikgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRWYWx1ZU9m
VW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpIGNvbnN0IHsgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZkZpZWxkKEV4
ZWNTdGF0ZSosIGNvbnN0IEZpZWxkKiwgSlNWYWx1ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNW
YWx1ZVB0ciBnZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgRmllbGQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImKSBjb25zdCB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBGaWVsZCos
IEpTVmFsdWVQdHIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NldFZhbHVlT2ZV
bmRlZmluZWRGaWVsZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1
ZSopIHt9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0cikge30KIAotICAgIHZpcnR1YWwgSlNW
YWx1ZSogaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBB
cmdMaXN0JiBhcmdzKSA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZU1ldGhvZChF
eGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYgYXJncykgPSAwOwog
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VEZWZhdWx0TWV0aG9k
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9Cisg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29u
c3QgQXJnTGlzdCYpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgSlNWYWx1ZSogaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3Qm
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZUNvbnN0cnVjdChF
eGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikgeyByZXR1cm4gbm9WYWx1ZSgpOyB9CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmKSB7IH0KIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNv
bnN0ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlT2YoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdCB7IHJldHVybiBqc1N0cmluZyhleGVjLCBnZXRDbGFzcygpLT5uYW1lKCkpOyB9
CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdCB7
IHJldHVybiBqc1N0cmluZyhleGVjLCBnZXRDbGFzcygpLT5uYW1lKCkpOyB9CiAgICAgCiAgICAg
Um9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwogICAgIApAQCAtMTQ1LDggKzE0NSw4IEBA
IHB1YmxpYzoKICAgICBBcnJheShQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKICAgICB2aXJ0dWFs
IH5BcnJheSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAq
LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEpTVmFs
dWUqIHZhbHVlQXQoRXhlY1N0YXRlICosIHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICosIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlUHRyKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlQXQoRXhlY1N0
YXRlICosIHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBAIFJ1bnRpbWVBcnJh
eTo6UnVudGltZUFycmF5KEV4ZWNTdGF0ZSogZXgKIHsKIH0KIAotSlNWYWx1ZSogUnVudGltZUFy
cmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBSdW50aW1lQXJyYXk6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVu
dGltZUFycmF5Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIHRoaXNPYmotPmdldExlbmd0aCgpKTsKIH0KIAotSlNWYWx1ZSogUnVudGltZUFy
cmF5OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVBcnJheSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0aGlzT2Jq
LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgc2xvdC5pbmRleCgpKTsKQEAgLTgz
LDcgKzgzLDcgQEAgYm9vbCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeAogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KTsK
IH0KIAotdm9pZCBSdW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3ZvaWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKQEAgLTEwMCw3ICsx
MDAsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgCiAgICAgSlNP
YmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBS
dW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoaW5kZXggPj0gZ2V0TGVuZ3Ro
KCkpIHsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yKTsKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSk7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKQEAgLTU2LDE0ICs1NiwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG90eXBl
KCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1
Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIEpTVmFsdWVQdHIgaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgT3duUHRyPEJpbmRpbmdzOjpBcnJh
eT4gX2FycmF5OwogfTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9u
IDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFJ1bnRpbWVNZXRob2Q6OlJ1bnRpbWVNZXRob2QoRXhlY1N0
YXRlKiAKIHsKIH0KIAotSlNWYWx1ZSogUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWVQdHIgUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50
aW1lTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU1ldGhvZCo+KGFzT2JqZWN0
KHNsb3Quc2xvdEJhc2UoKSkpOwogCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgUnVudGltZU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyBK
U1ZhbHVlKiBjYWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpT
VmFsdWVQdHIgY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVu
Y3Rpb24sIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVNZXRob2QqPihmdW5j
dGlvbik7CiAKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEpTVmFsdWUqIGNhbGxSdW50aW1lTWV0
aG9kKEV4ZWNTdAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIHRoaXNPYmogaXMgdGhlIERP
TSBvYmplY3QgZm9yIGEgcGx1Z2luLCBnZXQgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgLy8g
cnVudGltZSBvYmplY3QgZnJvbSB0aGUgRE9NIG9iamVjdC4KLSAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSB0aGlzVmFsdWUtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRp
bWVfb2JqZWN0IikpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gdGhpc1ZhbHVlLT5nZXQo
ZXhlYywgSWRlbnRpZmllcihleGVjLCAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpKTsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc09iamVjdCgmUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgICAgCiAg
ICAgICAgICAgICBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4oYXNPYmplY3Qo
dmFsdWUpKTsKICAgICAgICAgZWxzZQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgSlNWYWx1ZSog
Y2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0CiAgICAgICAgIHJldHVybiBSdW50aW1lT2JqZWN0SW1w
Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKICAgICAgICAgCiAgICAgaW5zdGFuY2Ut
PmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZU1ldGhvZChl
eGVjLCAqbWV0aG9kLT5tZXRob2RzKCksIGFyZ3MpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
aW5zdGFuY2UtPmludm9rZU1ldGhvZChleGVjLCAqbWV0aG9kLT5tZXRob2RzKCksIGFyZ3MpOwog
ICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG90
eXBlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRp
YyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGxlbmd0aEdldHRlcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShD
YWxsRGF0YSYpOwogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFJ1bnRpbWVPYmplY3RJbXA6OmludmFsaWRhdGUoKQog
ICAgIGluc3RhbmNlID0gMDsKIH0KIAotSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6ZmFsbGJh
Y2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgUnVudGltZU9iamVj
dEltcDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50
aW1lT2JqZWN0SW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGFz
T2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2Ug
PSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTc3LDE0ICs3NywxNCBAQCBKU1ZhbHVlKiBSdW50aW1l
T2JqZWN0SW1wOjpmYWxsYmFja09iamVjCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKICAgICBD
bGFzcyAqYUNsYXNzID0gaW5zdGFuY2UtPmdldENsYXNzKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0
ID0gYUNsYXNzLT5mYWxsYmFja09iamVjdChleGVjLCBpbnN0YW5jZS5nZXQoKSwgcHJvcGVydHlO
YW1lKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhl
YywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5TmFtZSk7CiAKICAgICBpbnN0YW5jZS0+ZW5kKCk7
CiAgICAgICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBSdW50aW1l
T2JqZWN0SW1wOjpmaWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBSdW50
aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogeyAgICAKICAgICBS
dW50aW1lT2JqZWN0SW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+
KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFu
Y2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTk2LDE0ICs5NiwxNCBAQCBKU1ZhbHVlKiBSdW50
aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcihFCiAKICAgICBDbGFzcyAqYUNsYXNzID0gaW5zdGFu
Y2UtPmdldENsYXNzKCk7CiAgICAgRmllbGQqIGFGaWVsZCA9IGFDbGFzcy0+ZmllbGROYW1lZChw
cm9wZXJ0eU5hbWUsIGluc3RhbmNlLmdldCgpKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0
YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAorICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gaW5zdGFuY2UtPmdldFZhbHVlT2ZGaWVsZChleGVjLCBhRmllbGQpOyAKICAgICAKICAg
ICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1KU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBSZWZQdHI8
SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBAIC0xMTUsNyArMTE1LDcg
QEAgSlNWYWx1ZSogUnVudGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKAogCiAgICAgQ2xhc3Mg
KmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlz
dCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpOwot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IG5ldyAoZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBwcm9w
ZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gbmV3IChleGVj
KSBSdW50aW1lTWV0aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CiAKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJ1
bnRpbWVPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJ1bnRpbWVPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3ZvaWQgUnVudGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgICB0aHJvd0ludmFsaWRBY2Nl
c3NFcnJvcihleGVjKTsKQEAgLTIwMiwyMyArMjAyLDIzIEBAIGJvb2wgUnVudGltZU9iamVjdElt
cDo6ZGVsZXRlUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUqIFJ1
bnRpbWVPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgaGludCkgY29uc3QKK0pTVmFsdWVQdHIgUnVudGltZU9iamVjdEltcDo6ZGVm
YXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBj
b25zdAogewogICAgIGlmICghaW5zdGFuY2UpCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRB
Y2Nlc3NFcnJvcihleGVjKTsKICAgICAKICAgICBSZWZQdHI8SW5zdGFuY2U+IHByb3RlY3Rvcihp
bnN0YW5jZSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
aW5zdGFuY2UtPmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGluc3RhbmNlLT5kZWZhdWx0VmFsdWUoZXhlYywgaGludCk7CiAgICAgaW5zdGFuY2UtPmVu
ZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsUnVudGlt
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUnVudGltZU9iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRpY19jYXN0
PFJ1bnRpbWVPYmplY3RJbXAqPihmdW5jdGlvbiktPmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAg
ICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmlu
dm9rZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBp
bnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKICAgICBpbnN0YW5jZS0+
ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIEpTT2Jq
ZWN0KiBjYWxsUnVudGltZUNvbnN0cnVjdG9yKEV4ZWNTdGEKIHsKICAgICBSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihjb25zdHJ1Y3Rvcikt
PmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNW
YWx1ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZUNvbnN0cnVjdChleGVjLCBhcmdzKTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VDb25zdHJ1Y3QoZXhlYywgYXJn
cyk7CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIAogICAgIEFTU0VSVChyZXN1bHQpOwotICAg
IHJldHVybiByZXN1bHQtPmlzT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJlc3Vs
dCkgOiBjb25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gcmVzdWx0LT5pc09iamVjdCgpID8gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihyZXN1bHQtPmFzQ2VsbCgpKSA6IGNvbnN0cnVjdG9yOwogfQogCiBD
b25zdHJ1Y3RUeXBlIFJ1bnRpbWVPYmplY3RJbXA6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw5ICszNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SdW50aW1lT2JqZWN0
SW1wKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShD
YWxsRGF0YSYpOwogICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENv
bnN0cnVjdERhdGEmKTsKICAgICAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAg
fQpAQCAtNzAsOSArNzAsOSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KICAgICAKLSAgICBzdGF0
aWMgSlNWYWx1ZSogZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBmaWVsZEdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIEpTVmFsdWUqIG1ldGhvZEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgZmFs
bGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZpZWxkR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZVB0ciBtZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5z
dGFuY2U7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDcgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldAogICAg
IHJldHVybiBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQ7CiB9CiAKLUpTVmFsdWUqIENJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYg
bWV0aG9kTGlzdCwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpp
bnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgYXJl
IG5vdCBhbGxvd2VkIGJ5IE5QT2JqZWN0cy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAgIC8vIG5h
bWUgbWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBK
U1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhCiAgICAgZm9yIChpID0gMDsg
aSA8IGNvdW50OyBpKyspCiAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmY0FyZ3Nb
aV0pOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1
ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFy
aWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkpOwogICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgm
cmVzdWx0VmFyaWFudCk7CiAgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCiAKLUpTVmFsdWUq
IENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFfb2JqZWN0
LT5fY2xhc3MtPmludm9rZURlZmF1bHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpA
QCAtMTMwLDcgKzEzMCw3IEBAIEpTVmFsdWUqIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhv
ZCgKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgX05QTl9SZWxlYXNl
VmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHRWYWx1ZSA9IGNv
bnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5n
ZXQoKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1Zh
bHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5nZXQoKSk7CiAgICAgX05QTl9S
ZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKICAgICByZXR1cm4gcmVzdWx0VmFs
dWU7CiB9CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzQ29uc3Ry
dWN0KCkgY29ucwogICAgIHJldHVybiBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdDsKIH0KICAg
ICAKLUpTVmFsdWUqIENJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghX29i
amVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpA
QCAtMTYzLDEyICsxNjMsMTIgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3Qo
RXhlYwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVh
c2VWYXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlID0g
Y29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0
LmdldCgpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRv
VmFsdWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsKICAgICBfTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwogICAgIHJldHVybiByZXN1bHRW
YWx1ZTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIENJbnN0
YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKICAgICAgICAg
cmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwpAQCAtMTc3LDI2ICsxNzcsMjYgQEAgSlNWYWx1ZSog
Q0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YQogICAgIHJldHVybiB2YWx1ZU9mKGV4ZWMp
OwogfQogCi1KU1ZhbHVlKiBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgY2hhciBidWZbMTAyNF07CiAgICAgc25wcmludGYoYnVmLCBzaXplb2Yo
YnVmKSwgIk5QT2JqZWN0ICVwLCBOUENsYXNzICVwIiwgX29iamVjdCwgX29iamVjdC0+X2NsYXNz
KTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAotSlNWYWx1ZSogQ0luc3Rh
bmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIENJbnN0
YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgogICAgIHJldHVybiBqc051bWJlcihleGVj
LCAwKTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAorSlNW
YWx1ZVB0ciBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUuCiAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxz
ZSk7CiB9CiAKLUpTVmFsdWUqIENJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0IAorSlNWYWx1ZVB0ciBDSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25z
dCAKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiB9CkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDIxIEBAIHB1YmxpYzoKICAgICAKICAgICB2
aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiB2
YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZh
bHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIHZpcnR1
YWwgSlNWYWx1ZVB0ciB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNW
YWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkg
Y29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VNZXRob2QoRXhlY1N0YXRl
KiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBB
cmdMaXN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3Rh
dGUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZURlZmF1
bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52
b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpT
VmFsdWVQdHIgaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5Jik7CiAKLSAgICBKU1ZhbHVlKiBzdHJpbmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsK
LSAgICBKU1ZhbHVlKiBudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVl
KiBib29sZWFuVmFsdWUoKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIHN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWVQdHIgbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29u
c3Q7CisgICAgSlNWYWx1ZVB0ciBib29sZWFuVmFsdWUoKSBjb25zdDsKICAgICAKICAgICBOUE9i
amVjdCAqZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gX29iamVjdDsgfQogCkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
Yy9jX3J1bnRpbWUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19y
dW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjb25zdCBjaGFyKiBD
RmllbGQ6Om5hbWUoKSBjb25zdAogICAgIHJldHVybiBpLT5pc1N0cmluZyA/IGktPnZhbHVlLnN0
cmluZyA6IDA7CiB9CiAKLUpTVmFsdWUqIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKK0pTVmFsdWVQdHIgQ0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0
KSBjb25zdAogewogICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCBDSW5zdGFuY2UqPihpbnN0KTsKICAgICBOUE9iamVjdCogb2JqID0gaW5zdGFuY2UtPmdl
dE9iamVjdCgpOwpAQCAtNjcsNyArNjcsNyBAQCBKU1ZhbHVlKiBDRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKEV4ZWNTCiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVy
dHkob2JqLCBfZmllbGRJZGVudGlmaWVyLCAmcHJvcGVydHkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNvbnZlcnROUFZh
cmlhbnRUb1ZhbHVlKGV4ZWMsICZwcm9wZXJ0eSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4
ZWMsICZwcm9wZXJ0eSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CiAgICAgICAgICAgICBfTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWUoJnByb3BlcnR5KTsKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAgSlNWYWx1ZSogQ0ZpZWxkOjp2YWx1ZUZy
b21JbnN0YW5jZShFeGVjUwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi12b2lkIENG
aWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2Ug
Kmluc3QsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3QKK3ZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5z
dGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdCwgSlNWYWx1ZVB0ciBh
VmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19j
YXN0PGNvbnN0IENJbnN0YW5jZSo+KGluc3QpOwogICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5j
ZS0+Z2V0T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCAr
MzgsOCBAQCBjbGFzcyBDRmllbGQgOiBwdWJsaWMgRmllbGQgewogcHVibGljOgogICAgIENGaWVs
ZChOUElkZW50aWZpZXIgaWRlbnQpIDogX2ZpZWxkSWRlbnRpZmllcihpZGVudCkgeyB9CiAKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IElu
c3RhbmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVj
U3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWVQdHIgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNv
bnN0IEluc3RhbmNlKiwgSlNWYWx1ZVB0cikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiBuYW1lKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfdXRp
bGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYx
NldpdGhMYXRpCiB9CiAKIC8vIFZhcmlhbnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5Q
UmVsZWFzZVZhcmlhbnRWYWx1ZSgpCi12b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQordm9pZCBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIE5Q
VmFyaWFudCogcmVzdWx0KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAtMTA1LDcg
KzEwNSw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICB9
CiB9CiAKLUpTVmFsdWUqIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiByb290T2JqZWN0KQorSlNWYWx1
ZVB0ciBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFy
aWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKICAgICBKU0xvY2sgbG9j
ayhmYWxzZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCAr
NTcsOCBAQCBlbnVtIE5QX1ZhbHVlVHlwZSB7CiB9OwogCiBXZWJDb3JlOjpTdHJpbmcgY29udmVy
dE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyAqc3RyaW5nKTsKLXZvaWQgY29udmVydFZh
bHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIE5QVmFyaWFudCogcmVzdWx0KTsK
LUpTVmFsdWUqIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IE5QVmFy
aWFudCosIFJvb3RPYmplY3QqKTsKK3ZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0
YXRlKiwgSlNWYWx1ZVB0ciwgTlBWYXJpYW50KiByZXN1bHQpOworSlNWYWx1ZVB0ciBjb252ZXJ0
TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBOUFZhcmlhbnQqLCBSb290T2JqZWN0
Kik7CiBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCog
bmFtZSk7CiAKIHN0cnVjdCBQcml2YXRlSWRlbnRpZmllciB7CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBDbGFzcyAq
SmF2YUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0IAogICAgIHJldHVybiBfY2xhc3M7CiB9CiAK
LUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorSlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkBAIC05MiwyMyArOTIsMjMg
QEAgSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjUwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB1KTsKIH0KIAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpudW1iZXJWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFJbnN0YW5jZTo6bnVtYmVy
VmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGpkb3VibGUgZG91YmxlVmFsdWUg
PSBjYWxsSk5JTWV0aG9kPGpkb3VibGU+KF9pbnN0YW5jZS0+X2luc3RhbmNlLCAiZG91YmxlVmFs
dWUiLCAiKClEIik7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGRvdWJsZVZhbHVlKTsKIH0K
IAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAorSlNWYWx1ZVB0
ciBKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAgamJvb2xlYW4gYm9v
bGVhblZhbHVlID0gY2FsbEpOSU1ldGhvZDxqYm9vbGVhbj4oX2luc3RhbmNlLT5faW5zdGFuY2Us
ICJib29sZWFuVmFsdWUiLCAiKClaIik7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihib29sZWFuVmFs
dWUpOwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdz
KQorSlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdzKQogewog
ICAgIGludCBpLCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwogICAgIGp2YWx1ZSAqakFyZ3M7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0VmFsdWU7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZTsKICAgICBN
ZXRob2QgKm1ldGhvZCA9IDA7CiAgICAgc2l6ZV90IG51bU1ldGhvZHMgPSBtZXRob2RMaXN0LnNp
emUoKTsKICAgICAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBKU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZCAoRXhlCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAgICAgaWYgKHJvb3RP
YmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7CiAgICAgICAgIGpvYmplY3Qgb2JqID0gX2luc3RhbmNl
LT5faW5zdGFuY2U7Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9W
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9WYWx1
ZSgpOwogICAgICAgICBjb25zdCBjaGFyICpjYWxsaW5nVVJMID0gMDsgIC8vIEZJWE1FLCBuZWVk
IHRvIHByb3BhZ2F0ZSBjYWxsaW5nIFVSTCB0byBKYXZhCiAgICAgICAgIGhhbmRsZWQgPSBkaXNw
YXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhv
ZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJ
RChvYmopLCBqQXJncywgcmVzdWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7
CiAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgewpAQCAtMjgzLDcgKzI4Myw3IEBA
IEpTVmFsdWUqIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGUKICAgICByZXR1cm4gcmVz
dWx0VmFsdWU7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAorSlNWYWx1ZVB0
ciBKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcp
CiAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKQEAgLTI5OSw3ICsyOTksNyBAQCBK
U1ZhbHVlKiBKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjCiAgICAgcmV0dXJuIHZhbHVl
T2YoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0IAorSlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRl
KiBleGVjKSBjb25zdCAKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiB9CkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTYgKzc3LDE2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0Owog
ICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVPZihFeGVjU3Rh
dGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVl
KiBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2Qs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2QsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpOwogCiAgICAgam9iamVjdCBqYXZhSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBf
aW5zdGFuY2UtPl9pbnN0YW5jZTsgfQogICAgIAotICAgIEpTVmFsdWUqIHN0cmluZ1ZhbHVlKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNv
bnN0OwotICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIEpTVmFsdWVQdHIg
c3RyaW5nVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJWYWx1
ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIGJvb2xlYW5WYWx1ZSgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgZ2V0QmluZGluZ0xhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gSmF2YUxhbmd1YWdlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfanNvYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBz
dGF0aWMganZhbHVlIGludm9rZShKU09iamVjdENhbGxDb250ZXh0Kik7CiAKLSAgICBqb2JqZWN0
IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChKU1ZhbHVlKikgY29uc3Q7Ci0gICAgSlNWYWx1ZSogY29u
dmVydEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSosIGpvYmplY3QpIGNvbnN0OworICAgIGpvYmpl
Y3QgY29udmVydFZhbHVlVG9KT2JqZWN0KEpTVmFsdWVQdHIpIGNvbnN0OworICAgIEpTVmFsdWVQ
dHIgY29udmVydEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSosIGpvYmplY3QpIGNvbnN0OwogICAg
IHZvaWQgZ2V0TGlzdEZyb21KQXJyYXkoRXhlY1N0YXRlKiwgam9iamVjdEFycmF5LCBBcmdMaXN0
JikgY29uc3Q7CiAgICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5Myw3ICsy
OTMsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvCiAgICAgSlNM
b2NrIGxvY2soZmFsc2UpOwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBK
YXZhU3RyaW5nKG1ldGhvZE5hbWUpKTsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IF9pbXAtPmdl
dChleGVjLCBpZGVudGlmaWVyKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gX2ltcC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXIpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICBBcmdMaXN0IGFyZ0xpc3Q7CiAgICAgZ2V0
TGlzdEZyb21KQXJyYXkoZXhlYywgYXJncywgYXJnTGlzdCk7CiAgICAgcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIF9pbXAsIGFyZ0xp
c3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIF9pbXAsIGFyZ0xpc3QpOwogICAgIHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVl
VG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zMTMsNyArMzEzLDcgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIEpTX0xPRyAoInNjcmlwdCA9ICVzXG4iLCBK
YXZhU3RyaW5nKHNjcmlwdCkuVVRGOFN0cmluZygpKTsKICAgICAKLSAgICBKU1ZhbHVlKiByZXN1
bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAg
ICAgCkBAIC0zNDcsNyArMzQ3LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihq
c3RyaW5nIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CiAgICAgCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmco
bWVtYmVyTmFtZSkpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkpKTsKIAogICAgIHJldHVybiBj
b252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KQEAgLTM5Nyw3ICszOTcsNyBAQCBqb2Jq
ZWN0IEphdmFKU09iamVjdDo6Z2V0U2xvdChqaW50IGluZGV4CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5k
ZXgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4KTsKIAog
ICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KQEAgLTQ4NSw3ICs0
ODUsNyBAQCBqbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAgICAgcmV0
dXJuIG5hdGl2ZUhhbmRsZTsKIH0KIAotam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1
ZVRvSk9iamVjdChKU1ZhbHVlKiB2YWx1ZSkgY29uc3QKK2pvYmplY3QgSmF2YUpTT2JqZWN0Ojpj
b252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkgY29uc3QKIHsKICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgCkBAIC01NzEsNyArNTcxLDcgQEAgam9iamVjdCBKYXZhSlNP
YmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iagogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFs
dWUqIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
am9iamVjdCB0aGVPYmplY3QpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFKU09iamVjdDo6Y29udmVy
dEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCB0aGVPYmplY3QpIGNvbnN0
CiB7CiAgICAgLy8gSW5zdGFuY2VzIG9mIG5ldHNjYXBlLmphdmFzY3JpcHQuSlNPYmplY3QgZ2V0
IGNvbnZlcnRlZCBiYWNrIHRvCiAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3RzLiAgQWxsIG90aGVy
IG9iamVjdHMgYXJlIHdyYXBwZWQuICBJdCdzIG5vdApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5p
L2puaV9vYmpjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5t
bQkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGlu
Z3M7CiAgICAgICAgZXhjZXB0aW9uRGVzY3JpcHRpb246KE5TU3RyaW5nICoqKWV4Y2VwdGlvblN0
cmluZzsKIEBlbmQKIAotYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9v
bCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1
ZSogYXJncywganZhbHVlICZyZXN1bHQsIGNvbnN0IGNoYXIqLCBKU1ZhbHVlKiYgZXhjZXB0aW9u
RGVzY3JpcHRpb24pCitib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29s
IGlzU3RhdGljLCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVl
KiBhcmdzLCBqdmFsdWUgJnJlc3VsdCwgY29uc3QgY2hhciosIEpTVmFsdWVQdHImIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKQogewogICAgIGlkIHZpZXcgPSAoaWQpdGFyZ2V0QXBwbGV0VmlldzsKICAg
ICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw3ICs3MCw3IEBAIEphdmFGaWVsZDo6SmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9iamUKICAg
ICBfZmllbGQgPSBuZXcgSk9iamVjdFdyYXBwZXIoYUZpZWxkKTsKIH0KIAotSlNWYWx1ZSogSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFu
T2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmpl
Y3QpCitKU1ZhbHVlUHRyIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0
ZSogZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxS
b290T2JqZWN0PiByb290T2JqZWN0KQogewogICAgIGlmICh0eXBlWzBdICE9ICdbJykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC05Myw3ICs5Myw3IEBAIGp2YWx1ZSBKYXZhRmll
bGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAgICAgICAgewogICAgICAgICAgICAgUm9vdE9i
amVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CiAgICAgICAgICAgICBp
ZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAg
ICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9WYWx1ZSgpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7CiAg
ICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwpAQCAtMTA2LDExICsxMDYsMTEgQEAganZh
bHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUqIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QgCitKU1ZhbHVlUHRyIEphdmFGaWVsZDo6dmFs
dWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3Qg
CiB7CiAgICAgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEphdmFJbnN0YW5jZSAqPihpKTsKIAotICAgIEpTVmFsdWUqIGpzcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKKyAgICBKU1ZhbHVlUHRyIGpzcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICAKICAg
ICBzd2l0Y2ggKF9KTklUeXBlKSB7CiAgICAgICAgIGNhc2UgYXJyYXlfdHlwZToKQEAgLTE3NSw3
ICsxNzUsNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAgICAg
ICAgIHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9v
dE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25EZXNjcmlw
dGlvbiA9IG5vVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uID0gbm9WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJdOwog
ICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgCkBAIC0xODks
NyArMTg5LDcgQEAgdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbgogICAg
IH0KIH0KIAotdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEluc3RhbmNlKiBpLCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0Cit2b2lkIEphdmFG
aWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2Uq
IGksIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGNvbnN0IEphdmFJbnN0YW5jZSAq
aW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UgKj4oaSk7CiAgICAganZh
bHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlIChleGVjLCBhVmFsdWUsIF9KTklU
eXBlLCB0eXBlKCkpOwpAQCAtMzg2LDcgKzM4Niw3IEBAIFJvb3RPYmplY3QqIEphdmFBcnJheTo6
cm9vdE9iamVjdCgpIGNvbnMKICAgICByZXR1cm4gX3Jvb3RPYmplY3QgJiYgX3Jvb3RPYmplY3Qt
PmlzVmFsaWQoKSA/IF9yb290T2JqZWN0LmdldCgpIDogMDsKIH0KIAotdm9pZCBKYXZhQXJyYXk6
OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSogYVZh
bHVlKSBjb25zdAordm9pZCBKYXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgSk5JRW52ICpl
bnYgPSBnZXRKTklFbnYoKTsKICAgICBjaGFyICpqYXZhQ2xhc3NOYW1lID0gMDsKQEAgLTQ1NCw3
ICs0NTQsNyBAQCB2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4CiB9CiAK
IAotSlNWYWx1ZSogSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52
KCk7CiAgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoX3R5
cGVbMV0pOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw4ICsxMTIsOCBAQCBjbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQKIHB1YmxpYzoKICAg
ICBKYXZhRmllbGQgKEpOSUVudiAqZW52LCBqb2JqZWN0IGFGaWVsZCk7CiAKLSAgICB2aXJ0dWFs
IEpTVmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFu
Y2UgKmluc3RhbmNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNl
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBKU1ZhbHVlKiBhVmFs
dWUpIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUZyb21JbnN0YW5jZShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNl
ICppbnN0YW5jZSwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciAqbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lLlVURjhTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF90eXBlLlVURjhT
dHJpbmcoKTsgfQpAQCAtMTY4LDEzICsxNjgsMTMgQEAgcHVibGljOgogCiAgICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3Q7
Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQg
aW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0OworICAg
IHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50
IGluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25z
dDsKICAgICAKICAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS0+
X2luc3RhbmNlOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSogY29udmVydEpPYmplY3RUb0FycmF5
IChFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBh
c3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGNvbnZlcnRKT2Jq
ZWN0VG9BcnJheSAoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFy
KiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8
Sk9iamVjdFdyYXBwZXI+IF9hcnJheTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRp
bGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVy
dEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZh
L2xhbmcvU3RyaW5nIiksCiAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsK
ICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAg
ICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0tPnRvU3RyaW5nKGV4ZWMpOwog
ICAgICAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSxpLAogICAg
ICAgICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpj
aGFyICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKQEAgLTM3Nyw3
ICszNzcsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAg
ICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFy
cmF5KWVudi0+TmV3Qm9vbGVhbkFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0
ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpib29sZWFuIHZh
bHVlID0gKGpib29sZWFuKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVu
di0+U2V0Qm9vbGVhbkFycmF5UmVnaW9uKChqYm9vbGVhbkFycmF5KWphcnJheSwgKGpzaXplKWks
IChqc2l6ZSkxLCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHN0
YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBieXRl
X3R5cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCeXRl
QXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChl
eGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQo
ZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamJ5dGUgdmFsdWUgPSAoamJ5dGUpaXRlbS0+dG9O
dW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oKGpi
eXRlQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAg
ICB9CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFu
Y2VUb0phdgogICAgICAgICBjYXNlIGNoYXJfdHlwZTogewogICAgICAgICAgICAgamFycmF5ID0g
KGpvYmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShsZW5ndGgpOwogICAgICAgICAgICAgZm9y
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIEpTVmFs
dWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAgICBVU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gaXRlbS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAgICAgICAg
amNoYXIgdmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZS5zaXplKCkg
PiAwKQpAQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3Rh
bmNlVG9KYXYKICAgICAgICAgY2FzZSBzaG9ydF90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkg
PSAoam9iamVjdEFycmF5KWVudi0+TmV3U2hvcnRBcnJheShsZW5ndGgpOwogICAgICAgICAgICAg
Zm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIEpT
VmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAgICBq
c2hvcnQgdmFsdWUgPSAoanNob3J0KWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAg
ICAgIGVudi0+U2V0U2hvcnRBcnJheVJlZ2lvbigoanNob3J0QXJyYXkpamFycmF5LCAoanNpemUp
aSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9CkBAIC00MjAsNyArNDIwLDcgQEAg
c3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICBjYXNlIGlu
dF90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3SW50
QXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChl
eGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQo
ZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50KWl0ZW0tPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0SW50QXJyYXlSZWdpb24oKGppbnRB
cnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0K
QEAgLTQzMCw3ICs0MzAsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRv
SmF2CiAgICAgICAgIGNhc2UgbG9uZ190eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9i
amVjdEFycmF5KWVudi0+TmV3TG9uZ0FycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUq
IGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0
ciBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpsb25nIHZh
bHVlID0gKGpsb25nKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+
U2V0TG9uZ0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkx
LCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBqb2Jq
ZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7
CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRBcnJheShs
ZW5ndGgpOwogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
OworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBp
KTsKICAgICAgICAgICAgICAgICBqZmxvYXQgdmFsdWUgPSAoamZsb2F0KWl0ZW0tPnRvTnVtYmVy
KGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZsb2F0
QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9
CkBAIC00NTAsNyArNDUwLDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VU
b0phdgogICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAo
am9iamVjdEFycmF5KWVudi0+TmV3RG91YmxlQXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZv
cih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1Zh
bHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamRv
dWJsZSB2YWx1ZSA9IChqZG91YmxlKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAg
ICAgIGVudi0+U2V0RG91YmxlQXJyYXlSZWdpb24oKGpkb3VibGVBcnJheSlqYXJyYXksIChqc2l6
ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjgsNyBA
QCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiB9CiAKIAotanZhbHVl
IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpO
SVR5cGUgX0pOSVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCitqdmFsdWUgY29udmVy
dFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBKTklUeXBl
IF9KTklUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQogewogICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw3IEBAIEpOSVR5cGUgSk5JVHlwZUZyb21DbGFzc05hbWUoY29uc3QgY2hh
ciAKIEpOSVR5cGUgSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKGNoYXIgdHlwZSk7CiBjb25zdCBj
aGFyICpzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShKTklUeXBlIHR5cGUpOwogCi1qdmFsdWUg
Y29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIEpOSVR5cGUsIGNvbnN0
IGNoYXIqIGphdmFDbGFzc05hbWUpOworanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNT
dGF0ZSosIEpTVmFsdWVQdHIsIEpOSVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpOwog
CiBqdmFsdWUgZ2V0Sk5JRmllbGQoam9iamVjdCBvYmosIEpOSVR5cGUgdHlwZSwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnbmF0dXJlKTsKIApAQCAtMjc3LDcgKzI3Nyw3IEBAIFQg
Y2FsbEpOSVN0YXRpY01ldGhvZChqY2xhc3MgY2xzLCBjb25zdCAKICAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIAotYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgY29uc3Qgdm9pZCog
dGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0
dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSYgcmVzdWx0
LCBjb25zdCBjaGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGVzY3JpcHRpb24p
OworYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgY29uc3Qgdm9pZCogdGFyZ2V0QXBw
bGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwg
am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSYgcmVzdWx0LCBjb25zdCBj
aGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEJpbmRpbmdzCiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvV2ViU2Ny
aXB0T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRP
YmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlw
dE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiArIChOU1N0cmluZyAq
KXdlYlNjcmlwdE5hbWVGb3JLZXk6KGNvbnN0IGNoYXIgKiluYW1lOwogKyAoQk9PTClpc0tleUV4
Y2x1ZGVkRnJvbVdlYlNjcmlwdDooY29uc3QgY2hhciAqKW5hbWU7CiAKLSsgKGlkKV9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKil2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CisrIChpZClfY29udmVydFZhbHVl
VG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1ZVB0cil2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CiAtIF9pbml0V2l0aEpTT2JqZWN0OihK
U0M6OkpTT2JqZWN0KilpbXAgb3JpZ2luUm9vdE9iamVjdDooUGFzc1JlZlB0cjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0PilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8
SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4pcm9vdE9iamVjdDsKIC0gKEpTQzo6SlNPYmplY3Qg
KilfaW1wOwogQGVuZApJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgJKHJldmlzaW9uIDM5
NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2Rz
TmFtZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CiAgICAg
dmlydHVhbCBGaWVsZCAqZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UgKmlu
c3RhbmNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZmFsbGJhY2tPYmplY3QoRXhl
Y1N0YXRlICpleGVjLCBJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSk7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0
ZSAqZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpOwogICAgIAogICAgIENsYXNzU3RydWN0UHRyIGlzYSgpIHsgcmV0dXJuIF9pc2E7IH0KICAg
ICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MubW0JKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQs
NyArMjQ0LDcgQEAgRmllbGQqIE9iamNDbGFzczo6ZmllbGROYW1lZChjb25zdCBJZGVudAogICAg
IHJldHVybiBhRmllbGQ7CiB9CiAKLUpTVmFsdWUqIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkKK0pTVmFsdWVQdHIgT2JqY0NsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lKQogewogICAgIE9iamNJbnN0YW5jZSogb2JqY0luc3RhbmNlID0gc3RhdGljX2Nhc3Q8T2Jq
Y0luc3RhbmNlKj4oaW5zdGFuY2UpOwogICAgIGlkIHRhcmdldE9iamVjdCA9IG9iamNJbnN0YW5j
ZS0+Z2V0T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkocmV2
aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsMjMgKzQ4LDIzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFs
IENsYXNzICpnZXRDbGFzcygpIGNvbnN0OwogICAgICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUq
IHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0
VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmly
dHVhbCBKU1ZhbHVlUHRyIHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBK
U1ZhbHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZU1ldGhvZChFeGVjU3Rh
dGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNW
YWx1ZVB0ciBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0
IEFyZ0xpc3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9k
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNT
dGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlRGVm
YXVsdE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBK
U1ZhbHVlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0cik7CiAgICAgCi0gICAgdmlydHVh
bCBKU1ZhbHVlKiBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHkpIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRWYWx1
ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkp
IGNvbnN0OwogCiAgICAgT2JqZWN0U3RydWN0UHRyIGdldE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IF9pbnN0YW5jZS5nZXQoKTsgfQogICAgIAotICAgIEpTVmFsdWUqIHN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIEpTVmFsdWVQdHIgc3Ry
aW5nVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJWYWx1ZShF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIGJvb2xlYW5WYWx1ZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgZ2V0QmluZGluZ0xhbmd1YWdlKCkgY29uc3Qg
eyByZXR1cm4gT2JqZWN0aXZlQ0xhbmd1YWdlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfaW5zdGFuY2UubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOSArMTI0LDkgQEAgYm9vbCBP
YmpjSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdAogICAgIHJldHVybiBbX2luc3RhbmNl
LmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlRGVmYXVsdE1ldGhvZFdp
dGhBcmd1bWVudHM6KV07CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgQXJn
TGlzdCAmYXJncykKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZh
cmdzKQogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKQEAgLTI0NiwxMiArMjQ2
LDEyIEBAIEpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWMKIAogICAgIC8v
IFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0
IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZAogICAgIC8vIGl0IGNhbid0IGhhbmRsZSBjb3B5aW5n
IGZyb20gYSB2b2xhdGlsZSB0byBub24tdm9sYXRpbGUuCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNWYWx1ZSomPihyZXN1bHQpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWVQdHImPihy
ZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZVB0ciBPYmpjSW5z
dGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
ICZhcmdzKQogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGZhbHNlKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5
IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNl
cHRpb24obmlsKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBKU1ZhbHVlKiBPYmpjSW5zdGFuY2U6Omlu
dm9rZURlZmF1bHRNZXRoCiAKICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVy
c2lvbnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAv
LyBpdCBjYW4ndCBoYW5kbGUgY29weWluZyBmcm9tIGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxl
LgotICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxKU1ZhbHVlUHRyJj4ocmVzdWx0KTsKIH0KIAogYm9vbCBPYmpjSW5zdGFuY2U6
OnN1cHBvcnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKCkKQEAgLTMwOCw3ICszMDgsNyBAQCBi
b29sIE9iamNJbnN0YW5jZTo6c3VwcG9ydHNTZXRWYWx1ZU9mVW5kCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIEpTVmFsdWUqIGFWYWx1ZSkK
K3ZvaWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgSlNWYWx1ZVB0ciBhVmFsdWUpCiB7CiAg
ICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKQEAgLTMzMiw5ICszMzIsOSBAQCB2
b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpCiAgICAgfQogfQogCi1KU1Zh
bHVlKiBPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjSW5z
dGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KSBjb25zdAogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5k
ZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAog
ICAgIGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVjdCgpOwogCkBAIC0zNTgsMTAgKzM1OCwxMCBA
QCBKU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluCiAKICAgICAvLyBXb3Jr
IGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRz
IG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBoYW5kbGUgY29weWluZyBmcm9t
IGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgotICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFs
dWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlUHRyJj4ocmVzdWx0
KTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNJ
bnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSBoaW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKICAgICAg
ICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwpAQCAtMzc0LDI0ICszNzQsMjQgQEAgSlNWYWx1
ZSogT2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlYwogICAgIHJldHVybiB2YWx1ZU9mKGV4
ZWMpOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKGV4
ZWMsIFtnZXRPYmplY3QoKSBkZXNjcmlwdGlvbl0pOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFu
Y2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgT2JqY0lu
c3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIDApOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0
CitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAgICAv
LyBGSVhNRTogIEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUKICAgICByZXR1cm4ganNCb29s
ZWFuKGZhbHNlKTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QgCitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0IAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0
NCw4IEBAIHB1YmxpYzoKICAgICBPYmpjRmllbGQoSXZhclN0cnVjdFB0cik7CiAgICAgT2JqY0Zp
ZWxkKENGU3RyaW5nUmVmIG5hbWUpOwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVG
cm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwg
SlNWYWx1ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUZyb21JbnN0YW5j
ZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlUHRy
KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAg
ICAgICAgCkBAIC03OSwxMyArNzksMTMgQEAgY2xhc3MgT2JqY0FycmF5IDogcHVibGljIEFycmF5
IHsKIHB1YmxpYzoKICAgICBPYmpjQXJyYXkoT2JqZWN0U3RydWN0UHRyLCBQYXNzUmVmUHRyPFJv
b3RPYmplY3Q+KTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhl
YywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgSlNWYWx1ZSogdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNp
Z25lZCBpbnQgaW5kZXgsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWVQdHIgdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CiAgICAgCiAg
ICAgT2JqZWN0U3RydWN0UHRyIGdldE9iamNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS5n
ZXQoKTsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUqIGNvbnZlcnRPYmpjQXJyYXlUb0FycmF5KEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0U3RydWN0UHRyIGFuT2JqZWN0KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBjb252ZXJ0T2JqY0FycmF5VG9BcnJheShFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFN0
cnVjdFB0ciBhbk9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE9iamVjdFN0cnVj
dFB0cj4gX2FycmF5OwpAQCAtMTA0LDE3ICsxMDQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgfQog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBw
dXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwg
UHV0UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIg
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKIApJbmRleDog
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsx
MDgsOSBAQCBjb25zdCBjaGFyKiBPYmpjRmllbGQ6Om5hbWUoKSBjb25zdCAKICAgICByZXR1cm4g
WyhOU1N0cmluZyopX25hbWUuZ2V0KCkgVVRGOFN0cmluZ107CiB9CiAKLUpTVmFsdWUqIE9iamNG
aWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSog
aW5zdGFuY2UpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0CiB7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0
PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwogCkBAIC0xMjgs
MTAgKzEyOCwxMCBAQCBKU1ZhbHVlKiBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4CiAK
ICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJl
IHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBoYW5kbGUg
Y29weWluZyBmcm9tIGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgotICAgIHJldHVybiBjb25z
dF9jYXN0PEpTVmFsdWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVl
UHRyJj4ocmVzdWx0KTsKIH0KIAotc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRv
T2JqY09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgUmVm
UHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVjdChleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCkpOwogICAgIGlmICghcm9vdE9iamVjdCkKQEAgLTEzOSw3ICsxMzksNyBA
QCBzdGF0aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KEV4ZWNTCiAgICAgcmV0dXJuIFt3
ZWJTY3JpcHRPYmplY3RDbGFzcygpIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTp2YWx1ZSBvcmln
aW5Sb290T2JqZWN0OnJvb3RPYmplY3QuZ2V0KCkgcm9vdE9iamVjdDpyb290T2JqZWN0LmdldCgp
XTsKIH0KIAotdm9pZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAordm9p
ZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElu
c3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgaWQgdGFy
Z2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSkt
PmdldE9iamVjdCgpOwogICAgIGlkIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KGV4
ZWMsIGFWYWx1ZSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgT2JqY0FycmF5OjpPYmpjQXJyYXkoT2Jq
ZWN0U3RydWN0UHRyIGEsIAogewogfQogCi12b2lkIE9iamNBcnJheTo6c2V0VmFsdWVBdChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAor
dm9pZCBPYmpjQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQg
aW5kZXgsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGlmICghW19hcnJheS5nZXQo
KSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc2VydE9iamVjdDphdEluZGV4OildKSB7
CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXJyYXkgaXMgbm90IG11dGFi
bGUuIik7CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBPYmpjQXJyYXk6OnNldFZhbHVlQXQoRXhl
Y1N0YXRlKiBleAogICAgIH0KIH0KIAotSlNWYWx1ZSogT2JqY0FycmF5Ojp2YWx1ZUF0KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjQXJy
YXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKGluZGV4ID4gW19hcnJheS5nZXQoKSBjb3VudF0pCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7
CkBAIC0yMjIsMTYgKzIyMiwxNiBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3du
UHJvcGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
OjpwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0
eVNsb3QmKQordm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90JikKIHsKIH0KIAotc3Rh
dGljIEpTVmFsdWUqIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogZnVuY3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUnVudGltZU9iamVjdElt
cDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
IAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgUnVudGltZU9iamVjdEltcCogaW1wID0gc3Rh
dGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIElu
c3RhbmNlKiBpbnN0YW5jZSA9IGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwpAQCAtMjc0LDcg
KzI3NCw3IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWxldGVQcm9wZXIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUqIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVs
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKK0pT
VmFsdWVQdHIgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAogewogICAgIHJldHVybiBfaW5zdGFu
Y2UtPmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChleGVjLCBfaXRlbSk7CiB9CkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY191dGlsaXR5LmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCB0
eXBlZGVmIGVudW0gewogCiBjbGFzcyBSb290T2JqZWN0OwogCi1PYmpjVmFsdWUgY29udmVydFZh
bHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIE9iamNWYWx1ZVR5cGUpOwotSlNW
YWx1ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAq
bnNzdHJpbmcpOwotSlNWYWx1ZSogY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiwg
dm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2JqZWN0Kik7CitPYmpjVmFsdWUgY29u
dmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciwgT2JqY1ZhbHVlVHlw
ZSk7CitKU1ZhbHVlUHRyIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
TlNTdHJpbmcgKm5zc3RyaW5nKTsKK0pTVmFsdWVQdHIgY29udmVydE9iamNWYWx1ZVRvVmFsdWUo
RXhlY1N0YXRlKiwgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2JqZWN0Kik7CiBP
YmpjVmFsdWVUeXBlIG9iamNWYWx1ZVR5cGVGb3JUeXBlKGNvbnN0IGNoYXIgKnR5cGUpOwogCiBi
b29sIGNvbnZlcnRKU01ldGhvZE5hbWVUb09iamMoY29uc3QgY2hhciAqSlNOYW1lLCBjaGFyICpi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGls
aXR5Lm1tCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGls
aXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgYm9vbCBjb252ZXJ0SlNN
ZXRob2ROYW1lVG9PYmpjKGNvbnN0IGNoYQogICAgIFtdLCBvdGhlciAgICAgICBleGNlcHRpb24K
IAogKi8KLU9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCitPYmpjVmFsdWUgY29udmVydFZh
bHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBPYmpjVmFs
dWVUeXBlIHR5cGUpCiB7CiAgICAgT2JqY1ZhbHVlIHJlc3VsdDsKICAgICBkb3VibGUgZCA9IDA7
CkBAIC0xOTQsNyArMTk0LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4
ZWNTdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGNvbnZlcnROU1N0cmluZ1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQorSlNWYWx1ZVB0ciBj
b252ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmlu
ZykKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkBAIC0yMDMsNyArMjAzLDcgQEAg
SlNWYWx1ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YQogICAgIGNoYXJzID0gKHVu
aWNoYXIgKiltYWxsb2Moc2l6ZW9mKHVuaWNoYXIpKmxlbmd0aCk7CiAgICAgW25zc3RyaW5nIGdl
dENoYXJhY3RlcnM6Y2hhcnNdOwogICAgIFVTdHJpbmcgdSgoY29uc3QgVUNoYXIqKWNoYXJzLCBs
ZW5ndGgpOwotICAgIEpTVmFsdWUqIGFWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHUpOworICAgIEpT
VmFsdWVQdHIgYVZhbHVlID0ganNTdHJpbmcoZXhlYywgdSk7CiAgICAgZnJlZSgodm9pZCAqKWNo
YXJzKTsKICAgICByZXR1cm4gYVZhbHVlOwogfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEpTVmFsdWUq
IGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGEKICAgICBpZCAgICAgICAgICAgICAgb2Jq
ZWN0IHdyYXBwZXIKICAgICBvdGhlciAgICAgICAgICAgc2hvdWxkIG5vdCBoYXBwZW4KICovCi1K
U1ZhbHVlKiBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1
ZmZlciwgT2JqY1ZhbHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQorSlNWYWx1
ZVB0ciBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZl
ciwgT2JqY1ZhbHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQogewogICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAg
c3RydWN0IENvbnNvbGVNZXNzYWdlIHsKICAgICBNZXNzYWdlU291cmNlIHNvdXJjZTsKICAgICBN
ZXNzYWdlTGV2ZWwgbGV2ZWw7CiAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgVmVjdG9yPFByb3Rl
Y3RlZFB0cjxKU1ZhbHVlPiA+IHdyYXBwZWRBcmd1bWVudHM7CisgICAgVmVjdG9yPFByb3RlY3Rl
ZEpTVmFsdWVQdHI+IHdyYXBwZWRBcmd1bWVudHM7CiAgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4g
ZnJhbWVzOwogICAgIHVuc2lnbmVkIGxpbmU7CiAgICAgU3RyaW5nIHVybDsKSW5kZXg6IFdlYkNv
cmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw3ICs4OCw3IEBAIEpTT2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2Jq
ZWMKIH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0IGNvZGUgaW4gdGhlIHNjb3BlIG9m
IHRoaXMgZnJhbWUuCi1KU1ZhbHVlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25z
dCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0CitKU1ZhbHVlUHRy
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNW
YWx1ZVB0ciYgZXhjZXB0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAg
IGlmICghbV9pc1ZhbGlkKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJh
bWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBjb25zdCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29u
c3Q7CiAKICAgICAgICAgSlNDOjpKU09iamVjdCogdGhpc09iamVjdCgpIGNvbnN0OwotICAgICAg
ICBKU0M6OkpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IEpTQzo6VVN0cmluZyYgc2NyaXB0LCBKU0M6
OkpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgZXZh
bHVhdGUoY29uc3QgSlNDOjpVU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZVB0ciYgZXhjZXB0
aW9uKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSmF2YVNjcmlwdENh
bGxGcmFtZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1JlZlB0cjxKYXZhU2Ny
aXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZSk7CkluZGV4
OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjc2LDcgKzI3Niw3IEBAIEpTQ2xhc3NSZWYgUHJvZmlsZUNsYXNzKCkKICAgICByZXR1
cm4gcHJvZmlsZUNsYXNzOwogfQogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUHJv
ZmlsZSogcHJvZmlsZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFByb2ZpbGUq
IHByb2ZpbGUpCiB7CiAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmgJKHJldmlzaW9uIDM5NjE2
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9maWxl
Kik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb2Zp
bGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rv
ci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI0LDcgKzIyNCw3IEBAIEpTQ2xhc3NSZWYgUHJvZmlsZU5vZGVDbGFzcygpCiAgICAgcmV0dXJu
IHByb2ZpbGVOb2RlQ2xhc3M7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBQ
cm9maWxlTm9kZSogcHJvZmlsZU5vZGUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBQcm9maWxlTm9kZSogcHJvZmlsZU5vZGUpCiB7CiAgICAgaWYgKCFwcm9maWxlTm9kZSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlw
dFByb2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlw
dFByb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2
YVNjcmlwdFByb2ZpbGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBKU0NsYXNzUmVmIFByb2Zp
bGVOb2RlQ2xhc3MoKTsKLSAgICBKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb2ZpbGVOb2RlKik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb2ZpbGVOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1NCw3ICs5NTQsOCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgCiAgICAgLy8gcmVwb3J0IHRoZSBl
eHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCiAKICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9
IHRvSlNET01XaW5kb3coZG9jdW1lbnQoKS0+ZnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKEpTQzo6
SlNWYWx1ZSogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKndpbmRvdy0+Z2xv
YmFsRGF0YSgpLCB0aGlzKSkKKyAgICAgICAgSlNDOjpKU1ZhbHVlUHRyIHdyYXBwZXIgPSBnZXRD
YWNoZWRET01PYmplY3RXcmFwcGVyKCp3aW5kb3ctPmdsb2JhbERhdGEoKSwgdGhpcyk7CisgICAg
ICAgIGlmICh3cmFwcGVyKQogICAgICAgICAgICAgSlNDOjpIZWFwOjpoZWFwKHdyYXBwZXIpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZVRleHQuc2l6ZSgpICogMik7CiAgICAgfQog
I2VuZGlmCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTAxLTA1ICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSogd2l0aCBu
ZXcgd3JhcHBlciBjbGFzcywgSlNWYWx1ZVB0ci4KKyAgICAgICAgU2VlIEphdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2Fs
bEZyYW1lIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0
Q2FsbEZyYW1lIGV4Y2VwdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZh
bHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAg
ICAoYWVEZXNjRnJvbUpTVmFsdWUpOgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOgorCiAyMDA5LTAxLTAyICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvbWFya3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL3Zpc2libGVfdW5pdHMuaD4K
ICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW1wb3J0IDxydW50aW1lL0pTVmFsdWUuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtODks
NyArOTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiB1c2luZyBKU0M6OkpTR2xv
YmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTVmFsdWU7Cit1c2lu
ZyBKU0M6OkpTVmFsdWVQdHI7CiAKIC8qCiBIZXJlIGlzIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1h
dHJpeCBmb3IgZm91ciB0eXBlcyBvZiBuYXZpZ2F0aW9uczoKQEAgLTY1Niw3ICs2NTcsNyBAQCBz
dGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiB7CiAgICAgQVNTRVJUKF9w
cml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpOwogICAgIAotICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KHN0cmluZywg
Zm9yY2VVc2VyR2VzdHVyZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gX3By
aXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVz
ZXJHZXN0dXJlKS5qc1ZhbHVlKCk7CiAKICAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUpIC8v
IEluIGNhc2UgdGhlIHNjcmlwdCByZW1vdmVkIG91ciBmcmFtZSBmcm9tIHRoZSBwYWdlLgogICAg
ICAgICByZXR1cm4gQCIiOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
TlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRFcnJvckxpbmVOdW1iZQogCiBAaW50ZXJmYWNlIFdl
YlNjcmlwdENhbGxGcmFtZSAoV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUludGVybmFsKQogCi0tIChp
ZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUqKXZhbHVlOworLSAoaWQpX2NvbnZl
cnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlUHRyKXZhbHVlOwogCiBAZW5kCiAKQEAgLTEwOSw3
ICsxMDksNyBAQCBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAgICAg
X3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lID0gMDsKIH0KIAotLSAoaWQpX2NvbnZlcnRWYWx1
ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKil2YWx1ZQorLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlOihKU1ZhbHVlUHRyKXZhbHVlCiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKQEAgLTIwNCw3ICsyMDQsNyBAQCBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9y
TGluZU51bWJlCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiBuaWw7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVidWdn
ZXJDYWxsRnJhbWUtPmV4Y2VwdGlvbigpOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uID0gX3By
aXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5leGNlcHRpb24oKTsKICAgICByZXR1cm4gZXhjZXB0
aW9uID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOmV4Y2VwdGlvbl0gOiBuaWw7CiB9
CiAKQEAgLTIyMSw4ICsyMjEsOCBAQCBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGlu
ZU51bWJlCiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRp
b24gPSBub1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lLT5ldmFsdWF0ZShTdHJpbmcoc2NyaXB0KSwgZXhjZXB0aW9uKTsKKyAgICBKU1Zh
bHVlUHRyIGV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IF9w
cml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoU3RyaW5nKHNjcmlwdCksIGV4Y2Vw
dGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpleGNlcHRpb25dOwogICAgIHJldHVybiByZXN1bHQgPyBbc2VsZiBf
Y29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0XSA6IG5pbDsKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvRGF0
ZUluc3RhbmNlLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNp
bXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW1wb3J0IDxydW50aW1lL0pTVmFsdWUuaD4KICNp
bXBvcnQgPG1hY2gtby9keWxkLmg+CiAjaW1wb3J0IDxvYmpjL29iamMtYXV0by5oPgogI2ltcG9y
dCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KQEAgLTM2MjMsNyArMzYyNCw3IEBAIHN0YXRpYyBXZWJG
cmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUKICAgICByZXR1cm4gY29yZUZyYW1lLT5zaG91
bGRDbG9zZSgpOwogfQogCi1zdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJv
bUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBqc1ZhbHVlKQorc3RhdGljIE5TQXBw
bGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZVB0ciBqc1ZhbHVlKQogewogICAgIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzYyA9
IDA7CiAgICAgaWYgKGpzVmFsdWUtPmlzQm9vbGVhbigpKQpAQCAtMzY2NSw3ICszNjY2LDcgQEAg
c3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICAgICAgICAg
IHJldHVybiBhZURlc2M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1
ZSogcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2Ny
aXB0b3JdOwpAQCAtMzY4NSw3ICszNjg2LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0
b3IqIGFlRGVzY0ZybwogICAgICAgICByZXR1cm4gbmlsOwogICAgIGlmICghY29yZUZyYW1lLT5k
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNv
cmVGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2Ny
aXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwogICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTog
cGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26447</attachid>
            <date>2009-01-05 17:06:51 -0800</date>
            <delta_ts>2009-01-06 12:00:51 -0800</delta_ts>
            <desc>revert emitLoad function name change &amp; fix typo in ChangeLog.</desc>
            <filename>patch.JSValuePtr.phase2616.txt</filename>
            <type>text/plain</type>
            <size>918789</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODgyIEBACisyMDA5LTAxLTA1ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSog
d2l0aCBhIG5ldyBzbWFydCBwb2ludGVyIHR5cGUsIEpTVmFsdWVQdHIuCisgICAgICAgIAorICAg
ICAgICBBIEphdmFTY3JpcHQgdmFsdWUgbWF5IGJlIGEgaGVhcCBvYmplY3Qgb3IgYm94ZWQgcHJp
bWl0aXZlLCByZXByZXNlbnRlZCBieSBhCisgICAgICAgIHBvaW50ZXIsIG9yIG1heSBiZSBhbiB1
bmJveGVkIGltbWVkaWF0ZSB2YWx1ZSwgc3VjaCBhcyBhbiBpbnRlZ2VyLiAgU2luY2UgYQorICAg
ICAgICB2YWx1ZSBtYXkgZHluYW1pY2FsbHkgbmVlZCB0byBjb250YWluIGVpdGhlciBhIHBvaW50
ZXIgdmFsdWUgb3IgYW4gaW1tZWRpYXRlLAorICAgICAgICB3ZSBlbmNvZGUgaW1tZWRpYXRlcyBh
cyBwb2ludGVyIHZhbHVlcyAoc2luY2UgYWxsIHZhbGlkIEpTQ2VsbCBwb2ludGVycyBhcmUKKyAg
ICAgICAgYWxsb2NhdGVkIGF0IGFsbGlnbmVkIGFkZGVzc2VzLCB1bmFsaWduZWQgYWRkcmVzc2Vz
IGFyZSBhdmFpbGFibGUgdG8gZW5jb2RlCisgICAgICAgIGltbWVkaWF0ZXMpLiAgQXMgc3VjaCBh
bGwgSmF2YVNjcmlwdCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIHVzaW5nIGEgSlNWYWx1ZSouCisK
KyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbmN1bWJlcmVkIGJ5IGEgbnVtYmVyIG9m
IGNvbnN0cmFpbnRzLiAgSXQgdGllcyB0aGUKKyAgICAgICAgSlNWYWx1ZSByZXByZXNlbnRhdGlv
biB0byB0aGUgc2l6ZSBvZiBwb2ludGVyIG9uIHRoZSBwbGF0Zm9ybSwgd2hpY2gsIGZvcgorICAg
ICAgICBleGFtcGxlLCBtZWFucyB0aGF0IHdlIGN1cnJlbnRseSBjYW4gcmVwcmVzZW50IGRpZmZl
cmVudCByYW5nZXMgb2YgaW50ZWdlcnMKKyAgICAgICAgYXMgaW1tZWRpYXRlcyBvbiB4ODYgYW5k
IHg4Ni02NC4gIEl0IGFsc28gcHJldmVudHMgdXMgZnJvbSBvdmVybG9hZGluZyB0aGUKKyAgICAg
ICAgdG8tYm9vbGVhbiBjb252ZXJzaW9uIHVzZWQgdG8gdGVzdCBmb3Igbm9WYWx1ZSgpIC0gZWZm
ZWN0aXZlbHkgZm9yY2luZyB1cworICAgICAgICB0byByZXByZXNlbnQgbm9WYWx1ZSgpIGFzIDAu
ICBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGJlIHByb2JsZW1hdGljIHdlcmUgd2UKKyAgICAgICAg
dG8gd2lzaCB0byBlbmNvZGUgaW50ZWdlciB2YWx1ZXMgZGlmZmVyZW50bHkgKGUuZy4gd2VyZSB3
ZSB0byB1c2UgdGhlIHY4CisgICAgICAgIGVuY29kaW5nLCB3aGVyZSBwb2ludGVycyBhcmUgdGFn
Z2VkIHdpdGggMSBhbmQgaW50ZWdlcnMgd2l0aCAwLCB0aGVuIHRoZQorICAgICAgICBpbW1lZGlh
dGUgaW50ZWdlciAwIHdvdWxkIGNvbmZsaWN0IHdpdGggbm9WYWx1ZSgpKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHJlcGxhY2VzIGFsbCB1c2FnZSBvZiBKU1ZhbHVlKiB3aXRoIGEgbmV3IGNsYXNz
LCBKU1ZhbHVlUHRyLAorICAgICAgICB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIHBvaW50ZXIuICBK
U1ZhbHVlUHRyIG1haW50YWlucyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMKKyAgICAgICAgSlNWYWx1
ZSosIG92ZXJsb2FkaW5nIG9wZXJhdG9yLT4gYW5kIG9wZXJhdG9yIGJvb2wgc3VjaCB0aGF0IHBy
ZXZpb3VzCisgICAgICAgIG9wZXJhdGlvbnMgaW4gdGhlIGNvZGUgb24gdmFyaWFibGVzIG9mIHR5
cGUgSlNWYWx1ZSogYXJlIHN0aWxsIHN1cHBvcnRlZC4KKworICAgICAgICBJbiBvcmRlciB0byBw
cm92aWRlIGEgUHJvdGVjdFB0cjw+IHR5cGUgd2l0aCBzdXBwb3J0IGZvciB0aGUgbmV3IHZhbHVl
CisgICAgICAgIHJlcHJlc2VudGF0aW9uICh3aXRob3V0IHVzaW5nIHRoZSBpbnRlcm5hbCBKU1Zh
bHVlIHR5cGUgZGlyZWN0bHkpLCBhIG5ldworICAgICAgICBQcm90ZWN0SlNWYWx1ZVB0ciB0eXBl
IGhhcyBiZWVuIGFkZGVkLCBlcXVpdmFsZW50IHRvIHRoZSBwcmV2aW91cyB0eXBlCisgICAgICAg
IFByb3RlY3RQdHI8SlNWYWx1ZT4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBsaWtlbHkgdGhl
IGZpcnN0IGluIGEgc2VxdWVuY2Ugb2YgdGhyZWUgY2hhbmdlcy4gIFdpdGggdGhlCisgICAgICAg
IHZhbHVlIG5vdyBlbmNhcHN1bGFlZCBpdCB3aWxsIGxpa2VseSBtYWtlIHNlbnNlIHRvIG1pZ3Jh
dGUgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgZnJvbSBKU1ZhbHVlIGludG8gSlNWYWx1ZVB0
ciwgc3VjaCB0aGF0IHRoZSBpbnRlcm5hbCBwb2ludGVyIHJlcHJlc2VudGF0aW9uCisgICAgICAg
IG5lZWQgbm90IGJlIGV4cG9zZWQuICBUaHJvdWdoIG1pZ3JhdGluZyB0aGUgZnVuY3Rpb25hbGl0
eSB0byB0aGUgd3JhcHBlcgorICAgICAgICBjbGFzcyB0aGUgZXhpc3RpbmcgSlNWYWx1ZSBzaG91
bGQgYmUgcmVuZGVyZWQgcmVkdW5kYW50LCBhbmQgdGhlIGNsYXNzIGlzCisgICAgICAgIGxpa2Vs
eSB0byBiZSByZW1vdmVkICh0aGUgSlNWYWx1ZVB0ciBub3cgd3JhcHBpbmcgYSBwb2ludGVyIHRv
IGEgSlNDZWxsKS4KKyAgICAgICAgQXQgdGhpcyBzdGFnZSBpdCB3aWxsIGxpa2VseSBtYWtlIHNl
bnNlIHRvIHJlbmFtZSBKU1ZhbHVlUHRyIHRvIEpTVmFsdWUuCisKKyAgICAgICAgKiBBUEkvQVBJ
Q2FzdC5oOgorICAgICAgICAodG9KUyk6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJ
L0pTQmFzZS5jcHA6CisgICAgICAgIChKU0V2YWx1YXRlU2NyaXB0KToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAg
KiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
YXNDYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6
OjpoYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6Ojo6Y2FsbCk6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljVmFsdWVHZXR0ZXIpOgorICAgICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0aW9uR2V0dGVy
KToKKyAgICAgICAgKEpTQzo6OjpjYWxsYmFja0dldHRlcik6CisgICAgICAgICogQVBJL0pTQ29u
dGV4dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpT
T2JqZWN0TWFrZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJvdG90eXBlKToK
KyAgICAgICAgKEpTT2JqZWN0R2V0UHJvcGVydHkpOgorICAgICAgICAoSlNPYmplY3RTZXRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5QXRJbmRleCk6CisgICAgICAgIChK
U09iamVjdFNldFByb3BlcnR5QXRJbmRleCk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3Bw
OgorICAgICAgICAoSlNWYWx1ZUdldFR5cGUpOgorICAgICAgICAoSlNWYWx1ZUlzVW5kZWZpbmVk
KToKKyAgICAgICAgKEpTVmFsdWVJc051bGwpOgorICAgICAgICAoSlNWYWx1ZUlzQm9vbGVhbik6
CisgICAgICAgIChKU1ZhbHVlSXNOdW1iZXIpOgorICAgICAgICAoSlNWYWx1ZUlzU3RyaW5nKToK
KyAgICAgICAgKEpTVmFsdWVJc09iamVjdCk6CisgICAgICAgIChKU1ZhbHVlSXNPYmplY3RPZkNs
YXNzKToKKyAgICAgICAgKEpTVmFsdWVJc0VxdWFsKToKKyAgICAgICAgKEpTVmFsdWVJc1N0cmlj
dEVxdWFsKToKKyAgICAgICAgKEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChKU1ZhbHVlVG9Cb29sZWFuKToKKyAgICAgICAgKEpTVmFsdWVUb051bWJlcik6CisgICAg
ICAgIChKU1ZhbHVlVG9TdHJpbmdDb3B5KToKKyAgICAgICAgKEpTVmFsdWVUb09iamVjdCk6Cisg
ICAgICAgIChKU1ZhbHVlUHJvdGVjdCk6CisgICAgICAgIChKU1ZhbHVlVW5wcm90ZWN0KToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6dmFsdWVUb1NvdXJjZVN0cmluZyk6CisgICAgICAgIChKU0M6
OmNvbnN0YW50TmFtZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFVuZXhwZWN0ZWRDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5leHBlY3RlZENvbnN0YW50KToKKyAgICAgICAg
KiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6
OmdldCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFVuZXhwZWN0ZWRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TG9hZEpTVik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0U2NvcGVkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRTY29wZWRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Vy
cm9yKToKKyAgICAgICAgKEpTQzo6a2V5Rm9ySW1tZWRpYXRlU3dpdGNoKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OkpTVmFsdWVIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6SlNWYWx1ZUhhc2hUcmFpdHM6OmlzRGVsZXRl
ZFZhbHVlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OkRlYnVnZ2VyQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV4
Y2VwdGlvbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjp0aGlzVmFsdWUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxG
cmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNldEV4Y2VwdGlvbik6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpl
eGNlcHRpb25TbG90KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoYWRFeGNlcHRpb24pOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZmFz
dElzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6ZmFzdFRvSW50MzIpOgorICAgICAgICAoSlNDOjpm
YXN0VG9VSW50MzIpOgorICAgICAgICAoSlNDOjpqc0xlc3MpOgorICAgICAgICAoSlNDOjpqc0xl
c3NFcSk6CisgICAgICAgIChKU0M6OmpzQWRkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpqc0Fk
ZCk6CisgICAgICAgIChKU0M6OmpzVHlwZVN0cmluZ0ZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6
anNJc09iamVjdFR5cGUpOgorICAgICAgICAoSlNDOjpqc0lzRnVuY3Rpb25UeXBlKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6cmVzb2x2ZVNraXApOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmVzb2x2ZUdsb2Jh
bCk6CisgICAgICAgIChKU0M6OmlubGluZVJlc29sdmVCYXNlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnJlc29sdmVCYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29s
dmVCYXNlQW5kUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmVzb2x2ZUJh
c2VBbmRGdW5jKToKKyAgICAgICAgKEpTQzo6aXNOb3RPYmplY3QpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5k
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y2hlY2tUaW1lb3V0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNyZWF0
ZUV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6Y2FjaGVQcm90b3R5cGVDaGFpbik6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlND
Ojpjb3VudFByb3RvdHlwZUNoYWluRW50cmllc0FuZENoZWNrRm9yUHJveGllcyk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0
cmlldmVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVDYWxs
ZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cmV0cmlldmVMYXN0Q2FsbGVyKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRyeUNUSUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjp0cnlDVElDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXR1
cm5Ub1Rocm93VHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bf
Y29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9pbmMpOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzcyk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y3RpX29wX2dldF9ieV9pZF9nZW5lcmljKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9zZWNvbmQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9zZWxmX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9wcm90b19saXN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdF9mdWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9v
cF9nZXRfYnlfaWRfcHJvdG9fZmFpbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpj
dGlfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZGVs
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXNvbHZlX2Z1bmMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3Rp
X29wX3N1Yik6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX3RydWUpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y3RpX29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bf
cmVzb2x2ZV9iYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZl
X3NraXApOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFs
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9kaXYpOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9kZWMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y3RpX29wX2psZXNzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9ub3Qp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0X2luYyk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpjdGlfb3BfZXEpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xzaGlm
dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9yc2hpZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y3RpX29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bf
cmVzb2x2ZV93aXRoX2Jhc2UpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX21v
ZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbGVzcyk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmN0aV9vcF9wb3N0X2RlYyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfdXJz
aGlmdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYml0eG9yKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcik6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfdHlwZW9mKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc191bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6Y3RpX29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y3RpX29wX2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bf
aXNfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zdHJpY3RlcSk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpjdGlfb3BfbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmN0aV9vcF90b19qc251bWJlcik6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bf
aW4pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9pbW0pOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZXdfZXJyb3IpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX3ZtX3Ro
cm93KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6aXNKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6Omlz
SlNTdHJpbmcpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyOjopOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6UmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpSZWdpc3Rlcjo6anNWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyOjpn
ZXRKU1ZhbHVlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6KToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6KToKKyAg
ICAgICAgKEpTQzo6SklUOjpleGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9yc2hpZnQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhTbG93X29wX3JzaGlmdCk6CisgICAgICAg
ICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnVubGlua0NhbGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0
aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmdldENvbnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
aXNPcGVyYW5kQ29uc3RhbnQzMUJpdEltbWVkaWF0ZUludCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SW5pdFJlZ2lzdGVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpyZXNpemVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6
OnBhdGNoR2V0QnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpKSVQ6OnBhdGNoUHV0QnlJZFJlcGxh
Y2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGYpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5SWRSZXBsYWNlKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25Q
cmludCk6CisgICAgICAgIChmdW5jdGlvbkRlYnVnKToKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgor
ICAgICAgICAoZnVuY3Rpb25WZXJzaW9uKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuKToKKyAgICAg
ICAgKGZ1bmN0aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvblJlYWRsaW5lKToKKyAgICAgICAg
KGZ1bmN0aW9uUXVpdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6TnVsbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Vm9pZE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OkNvbnN0RGVjbE5vZGU6OmVtaXRDb2RlU2luZ2xlKToKKyAgICAgICAgKEpTQzo6UmV0dXJu
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6cHJvY2Vzc0NsYXVzZUxpc3QpOgor
ICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvbGVTdGFy
dCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpQcm9m
aWxlcjo6d2lsbEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6ZGlkRXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcik6CisgICAgICAg
ICogcHJvZmlsZXIvUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ0xpc3QuY3BwOgor
ICAgICAgICAoSlNDOjpBcmdMaXN0OjpzbG93QXBwZW5kKToKKyAgICAgICAgKiBydW50aW1lL0Fy
Z0xpc3QuaDoKKyAgICAgICAgKEpTQzo6QXJnTGlzdDo6YXQpOgorICAgICAgICAoSlNDOjpBcmdM
aXN0OjphcHBlbmQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAg
KEpTQzo6QXJndW1lbnRzOjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmg6Cisg
ICAgICAgIChKU0M6OkFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
YXNBcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNhbGxBcnJheUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpwdXRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmND
b25jYXQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1BvcCk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmV2ZXJz
ZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTb3J0KToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jSW5kZXhPZik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2Yp
OgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2FsbEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEJvb2xl
YW5Gcm9tSW1tZWRpYXRlQm9vbGVhbik6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6YXNCb29sZWFuT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAo
SlNDOjpib29sZWFuUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEu
aDoKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
OnByb3RlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjp1bnByb3RlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjpoZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICog
cnVudGltZS9Db2xsZWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpldmFsdWF0ZSk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6
CisgICAgICAgIChKU0M6OkNvbXBsZXRpb246OkNvbXBsZXRpb24pOgorICAgICAgICAoSlNDOjpD
b21wbGV0aW9uOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXRpb246OnNldFZhbHVlKToK
KyAgICAgICAgKEpTQzo6Q29tcGxldGlvbjo6aXNWYWx1ZUNvbXBsZXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdCk6Cisg
ICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmg6CisgICAgICAgICogcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAg
KEpTQzo6Y2FsbERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUGFyc2UpOgorICAgICAgICAoSlND
OjpkYXRlTm93KToKKyAgICAgICAgKEpTQzo6ZGF0ZVVUQyk6CisgICAgICAgICogcnVudGltZS9E
YXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6YXNEYXRlSW5zdGFuY2UpOgorICAgICAgICAq
IHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNU
b1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRl
UHJvdG9GdW5jVG9UaW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNHZXRUaW1lKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKToK
KyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldE1vbnRoKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXREYXkpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDRGF5KToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY0dldEhvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0hv
dXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNHZXRTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKToKKyAgICAg
ICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyk6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRUaW1lKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MpOgor
ICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21EYXRlQXJncyk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
U2V0VVRDTWlsbGlzZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFNlY29u
ZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY1NldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0SG91cnMp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jU2V0RGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRV
VENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldE1vbnRoKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY1NldEZ1bGxZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZ
ZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jR2V0WWVhcik6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBl
Lmg6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEVy
cm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmNyZWF0ZUVycm9yKToKKyAgICAgICAg
KEpTQzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVW5k
ZWZpbmVkVmFyaWFibGVFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZUVycm9yTWVzc2FnZSk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUludmFsaWRQYXJhbUVycm9yKToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcik6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2Fs
bEZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAo
SlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Q
cm90b0Z1bmNBcHBseSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk6Cisg
ICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpGdW5j
dGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0dldHRl
clNldHRlci5jcHA6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6dG9QcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAg
ICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKEpTQzo6YXNHZXR0ZXJTZXR0ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgICog
cnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzSW50ZXJuYWxGdW5jdGlvbik6
CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Fj
dGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlv
bjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpwdXRXaXRoQXR0cmlidXRlcyk6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAg
KiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzQWN0aXZhdGlvbik6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6c3RvcmFnZVNpemUpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6cHV0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpw
b3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6bWFyayk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpK
U0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNoZWNr
Q29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheSk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldEluZGV4KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6c2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0FycmF5KToKKyAgICAgICAgKiBydW50
aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6cHV0KToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRKU051bWJlcik6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAg
ICAgICAgKEpTQzo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9QcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRKU051bWJl
cik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRl
cik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdldHRlcik6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnB1dCk6Cisg
ICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OmFzRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxE
YXRhLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6Om1hcmtJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6cmVzZXRQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm86Okdsb2JhbFByb3Bl
cnR5SW5mbyk6CisgICAgICAgIChKU0M6OmFzR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpwcm90b3R5cGVGb3JMb29rdXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjplbmNvZGUpOgorICAgICAgICAo
SlNDOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisgICAgICAgIChK
U0M6Omdsb2JhbEZ1bmNQYXJzZUludCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNQYXJzZUZs
b2F0KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0lzTmFOKToKKyAgICAgICAgKEpTQzo6Z2xv
YmFsRnVuY0lzRmluaXRlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0RlY29kZVVSSSk6Cisg
ICAgICAgIChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAoSlND
OjpnbG9iYWxGdW5jRW5jb2RlVVJJKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VuY29kZVVS
SUNvbXBvbmVudCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFc2NhcGUpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jVW5lc2NhcGUpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jSlNDUHJp
bnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTSW1tZWRpYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6
OnRvVGhpc09iamVjdCk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp0b09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpwcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU0lt
bWVkaWF0ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbW1lZGlhdGUuaDoKKyAg
ICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6OmlzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzUG9zaXRp
dmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzVW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKEpTQzo6
SlNJbW1lZGlhdGU6OmlzTmVnYXRpdmUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aXNF
aXRoZXJJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aXNBbnlJbW1lZGlh
dGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAg
IChKU0M6OkpTSW1tZWRpYXRlOjphbmRJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6
SlNJbW1lZGlhdGU6OnhvckltbWVkaWF0ZU51bWJlcnMpOgorICAgICAgICAoSlNDOjpKU0ltbWVk
aWF0ZTo6b3JJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnJp
Z2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmNh
bkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjph
ZGRJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnN1YkltbWVk
aWF0ZU51bWJlcnMpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aW5jSW1tZWRpYXRlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJlcik6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlVmFsdWUpOgorICAgICAgICAoSlNDOjpKU0lt
bWVkaWF0ZTo6bWFrZUludCk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlQm9vbCk6
CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjptYWtlVW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SlNJbW1lZGlhdGU6Om1ha2VOdWxsKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omlu
dFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnVpbnRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkpTSW1tZWRpYXRlOjpib29sVmFsdWUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0
ZTo6cmF3VmFsdWUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSk6
CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSk6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjp1bmRlZmluZWRJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU0lt
bWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp6ZXJv
SW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSk6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUpOgorICAgICAgICAoSlND
OjpKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omdl
dFRydW5jYXRlZFVJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpmcm9tKToKKyAg
ICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKToKKyAgICAgICAgKEpT
Qzo6SlNJbW1lZGlhdGU6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omdl
dFVJbnQzMik6CisgICAgICAgIChKU0M6OmpzTnVsbCk6CisgICAgICAgIChKU0M6OmpzQm9vbGVh
bik6CisgICAgICAgIChKU0M6OmpzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
aXNVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc051bGwpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmlzQm9vbGVhbik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldEJvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjp0b0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9VSW50
MzIpOgorICAgICAgICAoSlNDOjp0b0ludDMyKToKKyAgICAgICAgKEpTQzo6dG9VSW50MzIpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTm90
QW5PYmplY3Q6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Z2V0
UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6cHV0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTTnVtYmVyQ2VsbC5j
cHA6CisgICAgICAgIChKU0M6OkpTTnVtYmVyQ2VsbDo6dG9QcmltaXRpdmUpOgorICAgICAgICAo
SlNDOjpKU051bWJlckNlbGw6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpT
TnVtYmVyQ2VsbDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAoSlNDOjpqc051bWJlckNlbGwpOgor
ICAgICAgICAoSlNDOjpqc05hTik6CisgICAgICAgICogcnVudGltZS9KU051bWJlckNlbGwuaDoK
KyAgICAgICAgKEpTQzo6SlNOdW1iZXJDZWxsOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjphc051bWJlckNlbGwpOgorICAgICAgICAoSlNDOjpqc051bWJlcik6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OnRvSlNOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bWFyayk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0V2l0aEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoSlNDOjpjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmF1
bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Omxvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpsb29rdXBTZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6dG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9TdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdExvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6Om9mZnNldEZvckxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmxvY2F0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90Rm9yV3JpdGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9QcmltaXRpdmUpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjpnZXQpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXQpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VJbmxpbmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKiBydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6bmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNT
dGF0aWNTY29wZU9iamVjdDo6cHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdGF0aWNTY29wZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0
OjpKU1N0YXRpY1Njb3BlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNTdHJp
bmc6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzU3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6
bWFrZUltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OmltbWVkaWF0ZVZhbHVl
KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6SlNWYWx1ZVB0cik6CisgICAgICAgIChKU0M6
OkpTVmFsdWVQdHI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjpoYXNW
YWx1ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlUHRyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6
ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6ZGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6YXNWYWx1ZSk6CisgICAgICAgIChKU0M6Om5vVmFsdWUpOgorICAgICAgICAo
SlNDOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6b3BlcmF0b3IhPSk6CisgICAgICAgICog
cnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmpl
Y3Q6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6c3lt
Ym9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6Om1hcmspOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9i
amVjdDo6aW50ZXJuYWxWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTV3JhcHBlck9iamVjdDo6c2V0
SW50ZXJuYWxWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3BwOgorICAgICAgICAo
SlNDOjpzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAu
aDoKKyAgICAgICAgKEpTQzo6bG9va3VwUHV0KToKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQWJzKToKKyAgICAgICAgKEpTQzo6
bWF0aFByb3RvRnVuY0FDb3MpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVNpbik6Cisg
ICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNBVGFuKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3Rv
RnVuY0FUYW4yKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NlaWwpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jQ29zKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0V4cCk6
CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNGbG9vcik6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNMb2cpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jTWF4KToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY01pbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNQb3cp
OgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUmFuZG9tKToKKyAgICAgICAgKEpTQzo6bWF0
aFByb3RvRnVuY1JvdW5kKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1Npbik6CisgICAg
ICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTcXJ0KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVu
Y1Rhbik6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6CisgICAgICAgIChKU0M6Ok1h
dGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKToKKyAgICAgICAgKEpTQzo6bnVtYmVyQ29u
c3RydWN0b3JOZWdJbmZpbml0eSk6CisgICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yUG9z
SW5maW5pdHkpOgorICAgICAgICAoSlNDOjpudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6bnVtYmVyQ29uc3RydWN0b3JNaW5WYWx1ZSk6CisgICAgICAgIChKU0M6OmNh
bGxOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ok51bWJl
ck9iamVjdDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3ROdW1iZXJGcm9t
SW1tZWRpYXRlTnVtYmVyKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVy
UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAg
ICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJv
dG9GdW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvUHJl
Y2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6Y2FsbE9iamVjdENvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6Om9iamVjdFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90
b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0lzUHJv
dG90eXBlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIpOgorICAgICAgICAoSlND
OjpvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90
b0Z1bmNMb29rdXBTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0
eUlzRW51bWVyYWJsZSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAq
IHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6ZXF1YWwpOgorICAgICAgICAoSlNDOjplcXVhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6c3RyaWN0RXF1YWwpOgorICAgICAgICAoSlNDOjpzdHJpY3RFcXVh
bFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6dGhyb3dPdXRPZk1lbW9yeUVycm9yKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6ZXF1YWxTbG93Q2FzZUlu
bGluZSk6CisgICAgICAgIChKU0M6OnN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUpOgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90
OjpmdW5jdGlvbkdldHRlcik6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpwdXRW
YWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWVTbG90KToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
U2xvdDo6c2V0Q3VzdG9tKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b21J
bmRleCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2xvdEJhc2UpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVNsb3Q6OnNldEJhc2UpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6
Oik6CisgICAgICAgICogcnVudGltZS9Qcm90ZWN0Lmg6CisgICAgICAgIChKU0M6OmdjUHJvdGVj
dCk6CisgICAgICAgIChKU0M6OmdjVW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVk
UHRyOjpQcm90ZWN0ZWRQdHIpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRQdHI6Om9wZXJhdG9y
IEpTVmFsdWVQdHIpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpQcm90ZWN0
ZWRKU1ZhbHVlUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cjo6Z2V0KToK
KyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cjo6b3BlcmF0b3IgSlNWYWx1ZVB0cik6
CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6Om9wZXJhdG9yLT4pOgorICAgICAg
ICAoSlNDOjo6OlByb3RlY3RlZFB0cik6CisgICAgICAgIChKU0M6Ojo6flByb3RlY3RlZFB0cik6
CisgICAgICAgIChKU0M6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRKU1Zh
bHVlUHRyOjp+UHJvdGVjdGVkSlNWYWx1ZVB0cik6CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpT
VmFsdWVQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYpOgorICAg
ICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFzdFBhcmVuKToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwQ29uc3RydWN0b3I6OmdldExlZnRDb250ZXh0KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwQ29uc3RydWN0b3I6OmdldFJpZ2h0Q29udGV4dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENv
bnN0cnVjdG9yRG9sbGFyMSk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFy
Mik6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyk6CisgICAgICAgIChK
U0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0
cnVjdG9yRG9sbGFyNSk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNik6
CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVj
dG9yRG9sbGFyOSk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9ySW5wdXQpOgorICAg
ICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZSk6CisgICAgICAgIChKU0M6OnJl
Z0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0
b3JMYXN0UGFyZW4pOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0
KToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQpOgorICAgICAg
ICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6cHV0KToKKyAgICAgICAgKEpTQzo6c2V0UmVnRXhw
Q29uc3RydWN0b3JJbnB1dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVs
dGlsaW5lKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhwKToKKyAgICAgICAgKEpTQzo6
Y2FsbFJlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjphc1JlZ0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6
OnB1dCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpyZWdFeHBPYmplY3RHbG9iYWwpOgorICAgICAgICAoSlNDOjpyZWdFeHBPYmplY3RJZ25vcmVD
YXNlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0TXVsdGlsaW5lKToKKyAgICAgICAgKEpT
Qzo6cmVnRXhwT2JqZWN0U291cmNlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0TGFzdElu
ZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpz
ZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnRl
c3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmV4ZWMpOgorICAgICAgICAoSlNDOjpj
YWxsUmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OmFzUmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1Rlc3QpOgorICAgICAgICAoSlNDOjpyZWdF
eHBQcm90b0Z1bmNFeGVjKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50
aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNoYXJD
b2RlU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUpOgorICAgICAg
ICAoSlNDOjpjYWxsU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXQpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNTdHJpbmdPYmplY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQXQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSW5k
ZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTWF0Y2gpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNTZWFyY2gpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbGljZSk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NwbGl0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jU3Vic3RyKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UpOgorICAgICAgICAoSlND
OjpzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY0xvY2FsZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCaWcpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbWFsbCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0JsaW5rKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQm9sZCk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZpeGVkKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jSXRhbGljcyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0cmlrZSk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1Yik6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY1N1cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcik6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jQW5jaG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGlu
ayk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90
eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlQ2FjaGVkUHJv
dG90eXBlQ2hhaW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVk
UHJvdG90eXBlKToKKwogMjAwOS0wMS0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDkgKzEwMCw5IEBAIF9fWk4z
SlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzkKIF9fWk4zSlNDMTB0aHJvd0Vycm9y
RVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVFUEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQ
TlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzExSlNJ
bW1lZGlhdGUxMm5vbklubGluZU5hTkV2Ci1fX1pOM0pTQzExSlNJbW1lZGlhdGU4dG9PYmplY3RF
UE5TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvU3Ry
aW5nRVBOU183SlNWYWx1ZUUKLV9fWk4zSlNDMTFKU0ltbWVkaWF0ZTlwcm90b3R5cGVFUE5TXzdK
U1ZhbHVlRVBOU185RXhlY1N0YXRlRQorX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0RU5T
XzEwSlNWYWx1ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b1N0
cmluZ0VOU18xMEpTVmFsdWVQdHJFCitfX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRU5T
XzEwSlNWYWx1ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTFQcm9maWxlTm9kZTRzb3J0
RVBGYlJLTjNXVEY2UmVmUHRySVMwX0VFUzVfRQogX19aTjNKU0MxMWNoZWNrU3ludGF4RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMkRhdGVJbnN0YW5jZTRpbmZv
RQpAQCAtMTIwLDcgKzEyMCw3IEBAIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxNHRvVGhpc0pTU3Ry
aW5nRVAKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVj
U3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MThn
ZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEy
UHJvcGVydHlTbG90RQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE4Z2V0T3duUHJvcGVydHlTbG90
RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOM0pTQzEyU3RyaW5nT2Jq
ZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5T
XzE1UHV0UHJvcGVydHlTbG90RQorX19aTjNKU0MxMlN0cmluZ09iamVjdDNwdXRFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1dFByb3BlcnR5
U2xvdEUKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3Q0aW5mb0UKIF9fWk4zSlNDMTJTdHJpbmdPYmpl
Y3RDMkVQTlNfOUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU185U3RydWN0dXJlRUVFUktO
U183VVN0cmluZ0UKIF9fWk4zSlNDMTJqc051bWJlckNlbGxFUE5TXzlFeGVjU3RhdGVFZApAQCAt
MTMxLDkgKzEzMSw5IEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEyZGVmaW5lR2V0dGVyRVAK
IF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDEyZGVmaW5lU2V0dGVyRVBOU185RXhlY1N0YXRlRVJL
TlNfMTBJZGVudGlmaWVyRVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Qx
NHNldFRpbWVvdXRUaW1lRWoKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE2c3RvcFRpbWVvdXRD
aGVja0V2Ci1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqCitfX1pOM0pTQzE0SlNH
bG9iYWxPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN3N0YXJ0
VGltZW91dENoZWNrRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDNwdXRFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUK
K19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTRK
U0dsb2JhbE9iamVjdDRpbml0RVBOU184SlNPYmplY3RFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmpl
Y3Q0bWFya0V2CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3REMkV2CkBAIC0xNTIsMTMgKzE1Miwx
MyBAQCBfX1pOM0pTQzE2UGFyc2VyUmVmQ291bnRlZDNyZWZFdgogX19aTjNKU0MxNlBhcnNlclJl
ZkNvdW50ZWQ1ZGVyZWZFdgogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMjFzZXREdW1wc0dl
bmVyYXRlZENvZGVFYgogX19aTjNKU0MxN1Byb3BlcnR5TmFtZUFycmF5M2FkZEVQTlNfN1VTdHJp
bmczUmVwRQotX19aTjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183
SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVNCX1JLTlNfN0FyZ0xpc3RFRQotX19aTjNKU0MxN1By
b3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUE5T
XzdKU1ZhbHVlRVMyX1BOU184SlNPYmplY3RFUzdfUktOU183QXJnTGlzdEVFCitfX1pOM0pTQzE3
UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU185
U3RydWN0dXJlRUVFaVJLTlNfMTBJZGVudGlmaWVyRVBGTlNfMTBKU1ZhbHVlUHRyRVMyX1BOU184
SlNPYmplY3RFU0FfUktOU183QXJnTGlzdEVFCitfX1pOM0pTQzE3UHJvdG90eXBlRnVuY3Rpb25D
MUVQTlNfOUV4ZWNTdGF0ZUVpUktOU18xMElkZW50aWZpZXJFUEZOU18xMEpTVmFsdWVQdHJFUzJf
UE5TXzhKU09iamVjdEVTNl9SS05TXzdBcmdMaXN0RUUKIF9fWk4zSlNDMTdjb25zdHJ1Y3RGdW5j
dGlvbkVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNf
N1VTdHJpbmdFaQogX19aTjNKU0MxOWNvbnN0cnVjdEVtcHR5QXJyYXlFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOM0pTQzE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM0pTQzIwY29uc3RydWN0RW1w
dHlPYmplY3RFUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmdFUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEVQTlNfN0pTVmFsdWVFUktOU183QXJnTGlz
dEUKK19fWk4zSlNDMjNvYmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQTlNf
OEpTT2JqZWN0RU5TXzEwSlNWYWx1ZVB0ckVSS05TXzdBcmdMaXN0RQogX19aTjNKU0MyM3NldFVw
U3RhdGljRnVuY3Rpb25TbG90RVBOU185RXhlY1N0YXRlRVBLTlNfOUhhc2hFbnRyeUVQTlNfOEpT
T2JqZWN0RVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDNEhl
YXAxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNGFsbG9jYXRlTnVtYmVyRW0KQEAgLTE3
MCwxNCArMTcwLDE0IEBAIF9fWk4zSlNDNEhlYXAyMHByb3RlY3RlZE9iamVjdENvdW50RXYKIF9f
Wk4zSlNDNEhlYXAyNHNldEdDUHJvdGVjdE5lZWRzTG9ja2luZ0V2CiBfX1pOM0pTQzRIZWFwMjVw
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzRXYKIF9fWk4zSlNDNEhlYXAyNnByb3RlY3RlZEdsb2Jh
bE9iamVjdENvdW50RXYKLV9fWk4zSlNDNEhlYXA0aGVhcEVQTlNfN0pTVmFsdWVFCitfX1pOM0pT
QzRIZWFwNGhlYXBFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M0SGVhcDZpc0J1c3lFdgogX19a
TjNKU0M0SGVhcDdjb2xsZWN0RXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2Ci1fX1pOM0pTQzRI
ZWFwN3Byb3RlY3RFUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzEwSlNW
YWx1ZVB0ckUKIF9fWk4zSlNDNEhlYXA4YWxsb2NhdGVFbQotX19aTjNKU0M0SGVhcDl1bnByb3Rl
Y3RFUE5TXzdKU1ZhbHVlRQotX19aTjNKU0M0Y2FsbEVQTlNfOUV4ZWNTdGF0ZUVQTlNfN0pTVmFs
dWVFTlNfOENhbGxUeXBlRVJLTlNfOENhbGxEYXRhRVMzX1JLTlNfN0FyZ0xpc3RFCitfX1pOM0pT
QzRIZWFwOXVucHJvdGVjdEVOU18xMEpTVmFsdWVQdHJFCitfX1pOM0pTQzRjYWxsRVBOU185RXhl
Y1N0YXRlRU5TXzEwSlNWYWx1ZVB0ckVOU184Q2FsbFR5cGVFUktOU184Q2FsbERhdGFFUzJfUktO
U183QXJnTGlzdEUKIF9fWk4zSlNDNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVMzXwogX19aTjNK
U0M2SlNDZWxsMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNKU0M2SlNDZWxsMTFn
ZXRKU051bWJlckV2CkBAIC0xODcsOCArMTg3LDggQEAgX19aTjNKU0M2SlNDZWxsMTR0b1RoaXNK
U1N0cmluZ0VQTlNfOUV4ZQogX19aTjNKU0M2SlNDZWxsMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18x
M0NvbnN0cnVjdERhdGFFCiBfX1pOM0pTQzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pT
QzZKU0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVy
dHlTbG90RQotX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRp
ZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQotX19aTjNKU0M2SlNDZWxs
M3B1dEVQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M2SlNDZWxsM3B1dEVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVOU18xMEpTVmFsdWVQdHJFUk5TXzE1UHV0
UHJvcGVydHlTbG90RQorX19aTjNKU0M2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVqTlNfMTBK
U1ZhbHVlUHRyRQogX19aTjNKU0M2SlNDZWxsOWdldE9iamVjdEV2CiBfX1pOM0pTQzZKU0NlbGxu
d0VtUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzZKU0xvY2sxMkRyb3BBbGxMb2Nrc0MxRVBOU185
RXhlY1N0YXRlRQpAQCAtMTk5LDcgKzE5OSw3IEBAIF9fWk4zSlNDNkpTTG9jazZ1bmxvY2tFYgog
X19aTjNKU0M2SlNMb2NrOWxvY2tDb3VudEV2CiBfX1pOM0pTQzZKU0xvY2tDMUVQTlNfOUV4ZWNT
dGF0ZUUKIF9fWk4zSlNDNlBhcnNlcjVwYXJzZUVQTlNfMTJKU0dsb2JhbERhdGFFUGlQTlNfN1VT
dHJpbmdFCi1fX1pOM0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRVBOU183SlNWYWx1ZUUKK19fWk4z
SlNDN0FyZ0xpc3QxMHNsb3dBcHBlbmRFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M3Q1N0cmlu
Z0QxRXYKIF9fWk4zSlNDN0NTdHJpbmdhU0VSS1MwXwogX19aTjNKU0M3SlNBcnJheTRpbmZvRQpA
QCAtMjIxLDcgKzIyMSw3IEBAIF9fWk4zSlNDOERlYnVnZ2VyNmF0dGFjaEVQTlNfMTRKU0dsb2Jh
bE8KIF9fWk4zSlNDOERlYnVnZ2VyNmRldGFjaEVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk4z
SlNDOERlYnVnZ2VyQzJFdgogX19aTjNKU0M4RGVidWdnZXJEMkV2Ci1fX1pOM0pTQzhKU09iamVj
dDExaGFzSW5zdGFuY2VFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1ZhbHVlRVM0XworX19aTjNKU0M4
SlNPYmplY3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRU5TXzEwSlNWYWx1ZVB0ckVTM18K
IF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElk
ZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVQUzBfCiBfX1pOM0pTQzhKU09iamVjdDEybG9va3VwR2V0
dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQpAQCAtMjMyLDE5ICsyMzIsMTkg
QEAgX19aTjNKU0M4SlNPYmplY3QxNXVud3JhcHBlZE9iamVjdEV2CiBfX1pOM0pTQzhKU09iamVj
dDE2Z2V0UHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJh
eUUKIF9fWk4zSlNDOEpTT2JqZWN0MTdjcmVhdGVJbmhlcml0b3JJREV2CiBfX1pOM0pTQzhKU09i
amVjdDE3cHV0RGlyZWN0RnVuY3Rpb25FUE5TXzlFeGVjU3RhdGVFUE5TXzE2SW50ZXJuYWxGdW5j
dGlvbkVqCi1fX1pOM0pTQzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3Rh
dGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWoKLV9fWk4zSlNDOEpTT2JqZWN0MTdw
dXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWoKK19fWk4zSlND
OEpTT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRp
ZmllckVOU18xMEpTVmFsdWVQdHJFagorX19aTjNKU0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1
dGVzRVBOU185RXhlY1N0YXRlRWpOU18xMEpTVmFsdWVQdHJFagogX19aTjNKU0M4SlNPYmplY3Qx
OGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQot
X19aTjNKU0M4SlNPYmplY3QxOGdldFByaW1pdGl2ZU51bWJlckVQTlNfOUV4ZWNTdGF0ZUVSZFJQ
TlNfN0pTVmFsdWVFCi1fX1pOM0pTQzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVS
TlNfMTJQcm9wZXJ0eVNsb3RFUFBOU183SlNWYWx1ZUUKK19fWk4zSlNDOEpTT2JqZWN0MThnZXRQ
cmltaXRpdmVOdW1iZXJFUE5TXzlFeGVjU3RhdGVFUmRSTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNK
U0M4SlNPYmplY3QyMmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3RFUk5TXzEyUHJvcGVydHlTbG90RVBO
U18xMEpTVmFsdWVQdHJFCiBfX1pOM0pTQzhKU09iamVjdDIzYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2VFbW0KLV9fWk4zSlNDOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRp
ZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQotX19aTjNKU0M4SlNPYmpl
Y3QzcHV0RVBOU185RXhlY1N0YXRlRWpQTlNfN0pTVmFsdWVFCitfX1pOM0pTQzhKU09iamVjdDNw
dXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18x
NVB1dFByb3BlcnR5U2xvdEUKK19fWk4zSlNDOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVq
TlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M4SlNPYmplY3Q0bWFya0V2CiBfX1pOM0pTQzhQcm9m
aWxlcjEzc3RvcFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNK
U0M4UHJvZmlsZXIxNHN0YXJ0UHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdF
CiBfX1pOM0pTQzhQcm9maWxlcjhwcm9maWxlckV2Ci1fX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4
ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNfMTBTb3VyY2VDb2RlRVBOU183SlNWYWx1ZUUK
K19fWk4zSlNDOGV2YWx1YXRlRVBOU185RXhlY1N0YXRlRVJOU18xMFNjb3BlQ2hhaW5FUktOU18x
MFNvdXJjZUNvZGVFTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M4anNTdHJpbmdFUE5TXzEySlNH
bG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0pTQzlDb2RlQmxvY2tEMUV2CiBfX1pOM0pT
QzlDb2RlQmxvY2tEMkV2CkBAIC0yNTIsMTMgKzI1MiwxMyBAQCBfX1pOM0pTQzlTdHJ1Y3R1cmUx
N3N0b3BJZ25vcmluZ0xlYWtzRXYKIF9fWk4zSlNDOVN0cnVjdHVyZTE4c3RhcnRJZ25vcmluZ0xl
YWtzRXYKIF9fWk4zSlNDOVN0cnVjdHVyZTIxYWRkUHJvcGVydHlUcmFuc2l0aW9uRVBTMF9SS05T
XzEwSWRlbnRpZmllckVqUm0KIF9fWk4zSlNDOVN0cnVjdHVyZTIybWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcEV2Ci1fX1pOM0pTQzlTdHJ1Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUFMw
X1BOU183SlNWYWx1ZUUKK19fWk4zSlNDOVN0cnVjdHVyZTI1Y2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbkVQUzBfTlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M5U3RydWN0dXJlMjhhZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uRVJLTlNfMTBJZGVudGlmaWVyRWoKIF9fWk4zSlNDOVN0cnVjdHVy
ZTNnZXRFUktOU18xMElkZW50aWZpZXJFUmoKIF9fWk4zSlNDOVN0cnVjdHVyZTQwYWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUVQUzBfUktOU18xMElkZW50aWZpZXJFalJt
Ci1fX1pOM0pTQzlTdHJ1Y3R1cmVDMUVQTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FCitfX1pO
M0pTQzlTdHJ1Y3R1cmVDMUVOU18xMEpTVmFsdWVQdHJFUktOU184VHlwZUluZm9FCiBfX1pOM0pT
QzlTdHJ1Y3R1cmVEMUV2Ci1fX1pOM0pTQzljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUE5TXzdK
U1ZhbHVlRU5TXzEzQ29uc3RydWN0VHlwZUVSS05TXzEzQ29uc3RydWN0RGF0YUVSS05TXzdBcmdM
aXN0RQorX19aTjNKU0M5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRU5TXzEwSlNWYWx1ZVB0ckVO
U18xM0NvbnN0cnVjdFR5cGVFUktOU18xM0NvbnN0cnVjdERhdGFFUktOU183QXJnTGlzdEUKIF9f
Wk4zSlNDZXFFUktOU183VVN0cmluZ0VQS2MKIF9fWk4zSlNDZXFFUktOU183VVN0cmluZ0VTMl8K
IF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KQEAgLTMwNSw3ICszMDUsNyBAQCBfX1pOM1dU
RjhDb2xsYXRvckMxRVBLYwogX19aTjNXVEY4Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhmYXN0RnJl
ZUVQdgogX19aTkszSlNDMTFJbnRlcnByZXRlcjE0cmV0cmlldmVDYWxsZXJFUE5TXzlFeGVjU3Rh
dGVFUE5TXzE2SW50ZXJuYWxGdW5jdGlvbkUKLV9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJp
ZXZlTGFzdENhbGxlckVQTlNfOUV4ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJQTlNfN0pTVmFs
dWVFCitfX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVj
U3RhdGVFUmlSbFJOU183VVN0cmluZ0VSTlNfMTBKU1ZhbHVlUHRyRQogX19aTkszSlNDMTJEYXRl
SW5zdGFuY2U3Z2V0VGltZUVSZFJpCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDEydG9UaGlzU3Ry
aW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDMTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5T
XzlFeGVjU3RhdGVFCkBAIC0zMTYsNyArMzE2LDcgQEAgX19aTkszSlNDMTZKU1ZhcmlhYmxlT2Jq
ZWN0MjFnZXRQcm9wZXJ0eQogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEwdGhpc09iamVj
dEV2CiBfX1pOSzNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lMTJmdW5jdGlvbk5hbWVFdgogX19aTksz
SlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTR0eXBlRXYKLV9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJh
bWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSUE5TXzdKU1ZhbHVlRQorX19aTkszSlNDMTdEZWJ1
Z2dlckNhbGxGcmFtZThldmFsdWF0ZUVSS05TXzdVU3RyaW5nRVJOU18xMEpTVmFsdWVQdHJFCiBf
X1pOSzNKU0M0SGVhcDEwc3RhdGlzdGljc0V2CiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNPYmpl
Y3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNTdHJpbmdFUE5TXzlF
eGVjU3RhdGVFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTQgKzY3LDE0IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiBzdGF0aWMgdm9pZCBjbGVhbnVwR2xvYmFsRGF0YShKU0dsb2JhbERhdGEqKTsKIHN0
YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgVVN0cmluZyYgZmls
ZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsKIAotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9u
UHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uR0MoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0
aW9uTG9hZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25RdWl0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvbkRlYnVnKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgZnVuY3Rpb25HQyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uVmVyc2lvbihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUXVpdChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogc3RydWN0IE9w
dGlvbnMgewogICAgIE9wdGlvbnMoKQpAQCAtMTc0LDcgKzE3NCw3IEBAIEdsb2JhbE9iamVjdDo6
R2xvYmFsT2JqZWN0KGNvbnN0IFZlY3RvcjwKICAgICBwdXREaXJlY3QoSWRlbnRpZmllcihnbG9i
YWxFeGVjKCksICJhcmd1bWVudHMiKSwgYXJyYXkpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblBy
aW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoaSAhPSAwKQpAQCAt
MTg4LDI3ICsxODgsMjcgQEAgSlNWYWx1ZSogZnVuY3Rpb25QcmludChFeGVjU3RhdGUqIGV4ZWMs
IAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvbkRlYnVn
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwg
Ii0tPiAlc1xuIiwgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygp
LmNfc3RyKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBmdW5j
dGlvbkdDKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAg
ICBleGVjLT5oZWFwKCktPmNvbGxlY3QoKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotSlNWYWx1ZSogZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBXZSBu
ZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBKUyB0
ZXN0cyBidXQgZm9yIG5vdwogICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGRvIGFueSB2ZXJzaW9u
LXNwZWNpZmljIGhhbmRsaW5nCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFs
dWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgU3Rv
cFdhdGNoIHN0b3BXYXRjaDsKICAgICBVU3RyaW5nIGZpbGVOYW1lID0gYXJncy5hdChleGVjLCAw
KS0+dG9TdHJpbmcoZXhlYyk7CkBAIC0yMjUsNyArMjI1LDcgQEAgSlNWYWx1ZSogZnVuY3Rpb25S
dW4oRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIHJldHVybiBqc051bWJlcihnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKIH0KIAotSlNWYWx1ZSog
ZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJp
bmcgZmlsZU5hbWUgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKICAgICBWZWN0
b3I8Y2hhcj4gc2NyaXB0OwpAQCAtMjM4LDcgKzIzOCw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uTG9h
ZChFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogZnVuY3Rpb25SZWFkbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBW
ZWN0b3I8Y2hhciwgMjU2PiBsaW5lOwogICAgIGludCBjOwpAQCAtMjUyLDcgKzI1Miw3IEBAIEpT
VmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgbGluZS5kYXRhKCkpOwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICBjbGVhbnVwR2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkv
QVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTIgKzI2LDE1IEBACiAjaWZuZGVmIEFQSUNhc3RfaAogI2RlZmluZSBBUElD
YXN0X2gKIAorI2luY2x1ZGUgIkpTVmFsdWUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogICAgIGNsYXNzIEpT
R2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOworICAg
IGNsYXNzIEpTVmFsdWVQdHI7CiB9CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29u
dGV4dEdyb3VwKiBKU0NvbnRleHRHcm91cFJlZjsKQEAgLTUzLDkgKzU2LDkgQEAgaW5saW5lIEpT
Qzo6RXhlY1N0YXRlKiB0b0pTKEpTR2xvYmFsQ29udAogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEpTQzo6RXhlY1N0YXRlKj4oYyk7CiB9CiAKLWlubGluZSBKU0M6OkpTVmFsdWUqIHRvSlMo
SlNWYWx1ZVJlZiB2KQoraW5saW5lIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTVmFsdWVSZWYgdikK
IHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpTVmFsdWUqPihjb25zdF9jYXN0
PE9wYXF1ZUpTVmFsdWUqPih2KSk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZVB0cjo6ZGVjb2Rl
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KGNvbnN0X2Nh
c3Q8T3BhcXVlSlNWYWx1ZSo+KHYpKSk7CiB9CiAKIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pT
KEpTT2JqZWN0UmVmIG8pCkBAIC03MywxNCArNzYsMTQgQEAgaW5saW5lIEpTQzo6SlNHbG9iYWxE
YXRhKiB0b0pTKEpTQ29udGV4dAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6SlNH
bG9iYWxEYXRhKj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKIH0KIAot
aW5saW5lIEpTVmFsdWVSZWYgdG9SZWYoSlNDOjpKU1ZhbHVlKiB2KQoraW5saW5lIEpTVmFsdWVS
ZWYgdG9SZWYoSlNDOjpKU1ZhbHVlUHRyIHYpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZVJlZj4odik7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJl
Zj4oSlNDOjpKU1ZhbHVlUHRyOjplbmNvZGUodikpOwogfQogCi1pbmxpbmUgSlNWYWx1ZVJlZiog
dG9SZWYoSlNDOjpKU1ZhbHVlKiogdikKK2lubGluZSBKU1ZhbHVlUmVmKiB0b1JlZihKU0M6OkpT
VmFsdWVQdHIqIHYpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZio+
KGNvbnN0X2Nhc3Q8Y29uc3QgSlNDOjpKU1ZhbHVlKio+KHYpKTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmKj4odik7CiB9CiAKIGlubGluZSBKU09iamVjdFJlZiB0b1Jl
ZihKU0M6OkpTT2JqZWN0KiBvKQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVi
bGljOgogICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CiAgICAgCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsgCiAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNDYWxsYmFja0Z1bmN0aW9uOjpKU0NhbGxiYWNr
RnVuY3Rpb24oRQogewogfQogCi1KU1ZhbHVlKiBKU0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYWxsYmFja0Z1bmN0aW9uOjpj
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0NvbnRleHRSZWYgZXhl
Y1JlZiA9IHRvUmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9SZWYo
ZnVuY3Rpb25PYmplY3QpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rp
b24uaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIEludGVybmFsRnVuY3Rpb24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1bmN0
aW9uIGJlaGF2aW9yIC0tIHdlIHNob3VsZCAKICAgICAvLyByZWZhY3RvciB0aGUgY29kZSBzbyB0
aGlzIG92ZXJyaWRlIGlzbid0IG5lY2Vzc2FyeQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7
IAogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVj
dFR5cGUsIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7IAogICAgIH0KQEAgLTQ4LDcg
KzQ4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxE
YXRhJik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAgc3RhdGljIEpTVmFsdWVQ
dHIgY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKIAogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBtX2NhbGxiYWNrOwogfTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBKU0NsYXNzUmVmIGNsYXNzUmVmKCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsYmFja09iamVjdERhdGEtPmpzQ2xhc3M7IH0KICAgICBib29sIGlu
aGVyaXRzKEpTQ2xhc3NSZWYpIGNvbnN0OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsg
CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0
VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UpKTsgCiAg
ICAgfQpAQCAtNTksMTIgKzU5LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNp
Z25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQ
dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpOwogCi0gICAgdmlydHVhbCBib29sIGhhc0lu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRy
IHZhbHVlLCBKU1ZhbHVlUHRyIHByb3RvKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKQEAgLTc3LDE0ICs3Nywx
NCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSopOwogIAotICAgIHN0YXRp
YyBKU0NhbGxiYWNrT2JqZWN0KiBhc0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUqKTsKKyAgICBzdGF0
aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1ZhbHVlUHRyKTsKICAKLSAg
ICBzdGF0aWMgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCogZnVuY3Rpb25PYmpl
Y3QsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1Zh
bHVlUHRyIGNhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogICAgIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYp
OwogICAgCi0gICAgc3RhdGljIEpTVmFsdWUqIHN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBjYWxsYmFja0dldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIEpTVmFsdWVQdHIgc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsYmFja0dldHRlcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAg
ICBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgewogICAgICAgICBKU0NhbGxiYWNrT2JqZWN0
RGF0YSh2b2lkKiBwcml2YXRlRGF0YSwgSlNDbGFzc1JlZiBqc0NsYXNzKQpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1w
bGF0ZSA8Y2xhc3MgQmFzZT4KLWlubGluZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+KiBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+Ojphc0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQoraW5saW5l
IEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT4qIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmFzQ2FsbGJh
Y2tPYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUp
LT5pbmhlcml0cygmaW5mbykpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8QmFzZT46OmdldE93blByb3BlCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgot
dm9pZCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEpTQ29udGV4dFJlZiBjdHggPSB0b1JlZihleGVjKTsK
ICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpcyk7CkBAIC0yNzcsNyArMjc3LDcg
QEAgSlNPYmplY3QqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNvbnN0cgogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZT4KLWJvb2wgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6aGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSopCitib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8QmFzZT46Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2
YWx1ZSwgSlNWYWx1ZVB0cikKIHsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4
ZWMpOwogICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzKTsKQEAgLTMwNCw3ICsz
MDQsNyBAQCBDYWxsVHlwZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpnZXRDYWxsCiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBCYXNlPgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2Fs
bChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbGxiYWNrT2JqZWN0
PEJhc2U+OjpjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0NvbnRl
eHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVm
ID0gdG9SZWYoZnVuY3Rpb25PYmplY3QpOwpAQCAtNDI3LDcgKzQyNyw3IEBAIGJvb2wgSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6aW5oZXJpdHMoSlMKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+
Ci1KU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNWYWx1ZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNW
YWx1ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRo
aXNPYmogPSBhc0NhbGxiYWNrT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgCkBAIC00NDks
NyArNDQ5LDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVgogfQog
CiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46
OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTQ2Fs
bGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IGFzQ2FsbGJhY2tPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKTsKICAgICAKQEAgLTQ3NCw3ICs0NzQsNyBAQCBKU1ZhbHVlKiBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgotSlNW
YWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWVQdHIgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FsbGJhY2tHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0gYXND
YWxsYmFja09iamVjdChzbG90LnNsb3RCYXNlKCkpOwogICAgIApJbmRleDogSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNHbG9i
YWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxK
U0dsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0Q2xhc3MpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IGds
b2JhbE9iamVjdENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5
cGUgPSBnbG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOwogICAgIGlmICghcHJvdG90
eXBlKQogICAgICAgICBwcm90b3R5cGUgPSBqc051bGwoKTsKICAgICBnbG9iYWxPYmplY3QtPnJl
c2V0UHJvdG90eXBlKHByb3RvdHlwZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmpl
Y3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5j
cHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0
TWFrZUNvbnN0cnVjdG9yKEpTQ28KICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3Rl
clRocmVhZCgpOwogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNQcm90
b3R5cGUgPSBqc0NsYXNzIAorICAgIEpTVmFsdWVQdHIganNQcm90b3R5cGUgPSBqc0NsYXNzIAog
ICAgICAgICA/IGpzQ2xhc3MtPnByb3RvdHlwZShleGVjKQogICAgICAgICA6IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgCkBAIC0yMzMsNyArMjMz
LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3RvdHlwZShKU0NvbnRleAogdm9pZCBKU09i
amVjdFNldFByb3RvdHlwZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1
ZVJlZiB2YWx1ZSkKIHsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0g
ICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1
ZSA9IHRvSlModmFsdWUpOwogCiAgICAganNPYmplY3QtPnNldFByb3RvdHlwZShqc1ZhbHVlLT5p
c09iamVjdCgpID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBK
U1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHkoSlNDb250ZXh0CiAKICAgICBKU09iamVjdCog
anNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0ganNPYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEo
KSkpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJvcGVy
dHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpl
eGNlcHRpb24gPSB0b1JlZihleGVjLT5leGNlcHRpb24oKSk7CkBAIC0yNzQsNyArMjc0LDcgQEAg
dm9pZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdAogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIElkZW50aWZpZXIgbmFtZShwcm9wZXJ0eU5h
bWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkpOwotICAgIEpTVmFsdWUqIGpzVmFs
dWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsK
IAogICAgIGlmIChhdHRyaWJ1dGVzICYmICFqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgbmFt
ZSkpCiAgICAgICAgIGpzT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRlcyhleGVjLCBuYW1lLCBqc1Zh
bHVlLCBhdHRyaWJ1dGVzKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0
R2V0UHJvcGVydHlBdEluZGV4KEpTCiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9i
amVjdCk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9w
ZXJ0eUluZGV4KTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMs
IHByb3BlcnR5SW5kZXgpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAg
ICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMtPmV4
Y2VwdGlvbigpKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvcGVydHlB
dEluZGV4KEpTQ29udGV4CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKICAgICBKU09iamVjdCog
anNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFs
dWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIGpz
T2JqZWN0LT5wdXQoZXhlYywgcHJvcGVydHlJbmRleCwganNWYWx1ZSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZp
c2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogCiBKU1R5cGUgSlNWYWx1ZUdldFR5cGUoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTQzo6SlNWYWx1ZSoganNWYWx1ZSA9
IHRvSlModmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7
CiAgICAgaWYgKGpzVmFsdWUtPmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBrSlNUeXBl
VW5kZWZpbmVkOwogICAgIGlmIChqc1ZhbHVlLT5pc051bGwoKSkKQEAgLTYyLDQzICs2Miw0MyBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOyAvLyBwbGFjZWQgaGVyZSB0byBhCiAKIGJvb2wgSlNWYWx1
ZUlzVW5kZWZpbmVkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU1Zh
bHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9K
Uyh2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVmFsdWUtPmlzVW5kZWZpbmVkKCk7CiB9CiAKIGJvb2wg
SlNWYWx1ZUlzTnVsbChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc051bGwoKTsKIH0KIAogYm9vbCBKU1Zh
bHVlSXNCb29sZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU1Zh
bHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9K
Uyh2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVmFsdWUtPmlzQm9vbGVhbigpOwogfQogCiBib29sIEpT
VmFsdWVJc051bWJlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc051bWJlcigpOwogfQogCiBib29sIEpT
VmFsdWVJc1N0cmluZyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc1N0cmluZygpOwogfQogCiBib29sIEpT
VmFsdWVJc09iamVjdChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc09iamVjdCgpOwogfQogCiBib29sIEpT
VmFsdWVJc09iamVjdE9mQ2xhc3MoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU0Ns
YXNzUmVmIGpzQ2xhc3MpCiB7Ci0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOwor
ICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIGlmIChKU09i
amVjdCogbyA9IGpzVmFsdWUtPmdldE9iamVjdCgpKSB7CiAgICAgICAgIGlmIChvLT5pbmhlcml0
cygmSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmluZm8pKQpAQCAtMTE1LDggKzEx
NSw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlMKICAgICBleGVj
LT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBsb2NrKGV4
ZWMpOwogCi0gICAgSlNWYWx1ZSoganNBID0gdG9KUyhhKTsKLSAgICBKU1ZhbHVlKiBqc0IgPSB0
b0pTKGIpOworICAgIEpTVmFsdWVQdHIganNBID0gdG9KUyhhKTsKKyAgICBKU1ZhbHVlUHRyIGpz
QiA9IHRvSlMoYik7CiAKICAgICBib29sIHJlc3VsdCA9IGVxdWFsKGV4ZWMsIGpzQSwganNCKTsg
Ly8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewpAQCAtMTI5LDggKzEyOSw4IEBAIGJvb2wgSlNWYWx1ZUlzRXF1YWwoSlNDb250
ZXh0UmVmIGN0eCwgSlMKIAogYm9vbCBKU1ZhbHVlSXNTdHJpY3RFcXVhbChKU0NvbnRleHRSZWYs
IEpTVmFsdWVSZWYgYSwgSlNWYWx1ZVJlZiBiKQogewotICAgIEpTVmFsdWUqIGpzQSA9IHRvSlMo
YSk7Ci0gICAgSlNWYWx1ZSoganNCID0gdG9KUyhiKTsKKyAgICBKU1ZhbHVlUHRyIGpzQSA9IHRv
SlMoYSk7CisgICAgSlNWYWx1ZVB0ciBqc0IgPSB0b0pTKGIpOwogICAgIAogICAgIGJvb2wgcmVz
dWx0ID0gc3RyaWN0RXF1YWwoanNBLCBqc0IpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDIs
NyArMTQyLDcgQEAgYm9vbCBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoSlNDbwogICAg
IGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxv
Y2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNW
YWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgSlNPYmplY3QqIGpzQ29uc3RydWN0
b3IgPSB0b0pTKGNvbnN0cnVjdG9yKTsKICAgICBpZiAoIWpzQ29uc3RydWN0b3ItPnN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xOTEsNyArMTkxLDcgQEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN0cmluZyhK
U0NvbnRleHRSZQogYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCkBA
IC0yMDEsNyArMjAxLDcgQEAgZG91YmxlIEpTVmFsdWVUb051bWJlcihKU0NvbnRleHRSZWYgY3R4
LAogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNM
b2NrIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7Cisg
ICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAKICAgICBkb3VibGUgbnVtYmVy
ID0ganNWYWx1ZS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CkBAIC0yMTksNyArMjE5LDcgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShK
U0NvbnRleAogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAg
ICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1
ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgCiAgICAgUmVm
UHRyPE9wYXF1ZUpTU3RyaW5nPiBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZShqc1Zh
bHVlLT50b1N0cmluZyhleGVjKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpA
QCAtMjM3LDcgKzIzNyw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVUb09iamVjdChKU0NvbnRleHRS
ZWYKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpT
TG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOwor
ICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIEpTT2JqZWN0
UmVmIG9iamVjdFJlZiA9IHRvUmVmKGpzVmFsdWUtPnRvT2JqZWN0KGV4ZWMpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIEpTVmFsdWVQ
cm90ZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAu
cmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUq
IGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZh
bHVlKTsKICAgICBnY1Byb3RlY3QoanNWYWx1ZSk7CiB9CiAKQEAgLTI2NSw2ICsyNjUsNiBAQCB2
b2lkIEpTVmFsdWVVbnByb3RlY3QoSlNDb250ZXh0UmVmIGN0eCwgCiAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAot
ICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFs
dWUgPSB0b0pTKHZhbHVlKTsKICAgICBnY1VucHJvdGVjdChqc1ZhbHVlKTsKIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHN0YXRpYyBVU3RyaW5nIGVzY2FwZVF1b3Rlcyhjb25zdCBVU3RyaW4KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgVVN0cmluZyB2YWx1ZVRvU291cmNlU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsKQorc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJj
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsKQogewogICAgIGlmICh2YWwt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgVVN0cmluZyByZXN1bHQoIlwiIik7CkBAIC03NCw3ICs3
NCw3IEBAIHN0YXRpYyBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikKICAgICByZXR1cm4gKFVT
dHJpbmcoInIiKSArIFVTdHJpbmc6OmZyb20ocikpLlVURjhTdHJpbmcoKTsKIH0KIAotc3RhdGlj
IENTdHJpbmcgY29uc3RhbnROYW1lKEV4ZWNTdGF0ZSogZXhlYywgaW50IGssIEpTVmFsdWUqIHZh
bHVlKQorc3RhdGljIENTdHJpbmcgY29uc3RhbnROYW1lKEV4ZWNTdGF0ZSogZXhlYywgaW50IGss
IEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZVRvU291cmNlU3RyaW5nKGV4
ZWMsIHZhbHVlKSArICIoQGsiICsgVVN0cmluZzo6ZnJvbShrKSArICIpIikuVVRGOFN0cmluZygp
OwogfQpAQCAtNzAzLDcgKzcwMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsOiB7CiAg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KCgrK2l0KS0+dS5qc0NlbGwpOworICAg
ICAgICAgICAgSlNWYWx1ZVB0ciBzY29wZSA9IEpTVmFsdWVQdHIoKCsraXQpLT51LmpzQ2VsbCk7
CiAgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBw
cmludGYoIlslNGRdIHJlc29sdmVfZ2xvYmFsXHQgJXMsICVzLCAlc1xuIiwgbG9jYXRpb24sIHJl
Z2lzdGVyTmFtZShyMCkuY19zdHIoKSwgdmFsdWVUb1NvdXJjZVN0cmluZyhleGVjLCBzY29wZSku
YXNjaWkoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5jX3N0cigpKTsKICAgICAg
ICAgICAgIGl0ICs9IDI7CkBAIC03MjUsMTMgKzcyNSwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfZ2xv
YmFsX3ZhcjogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBKU1ZhbHVlKiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUqPigoKytpdCktPnUu
anNDZWxsKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgc2NvcGUgPSBKU1ZhbHVlUHRyKCgrK2l0
KS0+dS5qc0NlbGwpOwogICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIGdldF9nbG9iYWxfdmFyXHQgJXMsICVzLCAlZFxu
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSwgdmFsdWVUb1NvdXJjZVN0cmlu
ZyhleGVjLCBzY29wZSkuYXNjaWkoKSwgaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAgSlNW
YWx1ZSogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oKCsraXQpLT51LmpzQ2VsbCk7Cisg
ICAgICAgICAgICBKU1ZhbHVlUHRyIHNjb3BlID0gSlNWYWx1ZVB0cigoKytpdCktPnUuanNDZWxs
KTsKICAgICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRd
IHB1dF9nbG9iYWxfdmFyXHQgJXMsICVkLCAlc1xuIiwgbG9jYXRpb24sIHZhbHVlVG9Tb3VyY2VT
dHJpbmcoZXhlYywgc2NvcGUpLmFzY2lpKCksIGluZGV4LCByZWdpc3Rlck5hbWUocjApLmNfc3Ry
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1Miw3ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBp
bmRleCA+PSBtX251bVZhcnMgJiYgaW5kZXggPCBtX251bVZhcnMgKyBtX251bUNvbnN0YW50czsK
ICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogZ2V0Q29uc3RhbnQo
aW50IGluZGV4KQorICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgZ2V0Q29uc3RhbnQo
aW50IGluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyc1tpbmRleCAtIG1fbnVtVmFyc10uZ2V0SlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0zODgs
OCArMzg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9u
KEZ1bmNEZWNsTm9kZSogbikgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVk
IHNpemUgPSBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9ucy5zaXplKCk7IG1fcmFyZURhdGEtPm1fZnVu
Y3Rpb25zLmFwcGVuZChuKTsgcmV0dXJuIHNpemU7IH0KICAgICAgICAgRnVuY0RlY2xOb2RlKiBm
dW5jdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9mdW5jdGlvbnNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICAgICAgdW5zaWduZWQg
YWRkVW5leHBlY3RlZENvbnN0YW50KEpTVmFsdWUqIHYpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSgpOyB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRz
LnNpemUoKTsgbV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLmFwcGVuZCh2KTsgcmV0
dXJuIHNpemU7IH0KLSAgICAgICAgSlNWYWx1ZSogdW5leHBlY3RlZENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3VuZXhw
ZWN0ZWRDb25zdGFudHNbaW5kZXhdOyB9CisgICAgICAgIHVuc2lnbmVkIGFkZFVuZXhwZWN0ZWRD
b25zdGFudChKU1ZhbHVlUHRyIHYpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1bnNp
Z25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLnNpemUoKTsgbV9y
YXJlRGF0YS0+bV91bmV4cGVjdGVkQ29uc3RhbnRzLmFwcGVuZCh2KTsgcmV0dXJuIHNpemU7IH0K
KyAgICAgICAgSlNWYWx1ZVB0ciB1bmV4cGVjdGVkQ29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7
IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0
YW50c1tpbmRleF07IH0KIAogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKiByKSB7
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEt
Pm1fcmVnZXhwcy5zaXplKCk7IG1fcmFyZURhdGEtPm1fcmVnZXhwcy5hcHBlbmQocik7IHJldHVy
biBzaXplOyB9CiAgICAgICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBBU1NF
UlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3JlZ2V4cHNbaW5kZXhdLmdldCgp
OyB9CkBAIC00OTMsNyArNDkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgIC8v
IFJhcmUgQ29uc3RhbnRzCiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEZ1bmNEZWNsTm9kZT4g
PiBtX2Z1bmN0aW9uczsKLSAgICAgICAgICAgIFZlY3RvcjxKU1ZhbHVlKj4gbV91bmV4cGVjdGVk
Q29uc3RhbnRzOworICAgICAgICAgICAgVmVjdG9yPEpTVmFsdWVQdHI+IG1fdW5leHBlY3RlZENv
bnN0YW50czsKICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8UmVnRXhwPiA+IG1fcmVnZXhwczsK
IAogICAgICAgICAgICAgLy8gSnVtcCBUYWJsZXMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUNhY2hlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXZhbENvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbENvZGVDYWNoZSB7CiAgICAgcHVibGljOgot
ICAgICAgICBQYXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBV
U3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSom
IGV4Y2VwdGlvblZhbHVlKQorICAgICAgICBQYXNzUmVmUHRyPEV2YWxOb2RlPiBnZXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBldmFsU291cmNlLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGU7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MDUsMjIgKzcwNSwyMiBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQ29uc3RhbnQoCiAgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kOwogfQog
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoSlNWYWx1ZSogdikK
K1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudChKU1ZhbHVlUHRyIHYp
CiB7Ci0gICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9qc1Zh
bHVlTWFwLmFkZCh2LCBtX25leHRDb25zdGFudEluZGV4KTsKKyAgICBwYWlyPEpTVmFsdWVNYXA6
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWVQdHI6OmVu
Y29kZSh2KSwgbV9uZXh0Q29uc3RhbnRJbmRleCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpIHsK
ICAgICAgICAgUmVnaXN0ZXJJRCYgY29uc3RhbnQgPSBtX2NhbGxlZVJlZ2lzdGVyc1ttX25leHRD
b25zdGFudEluZGV4XTsKICAgICAgICAgCiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRJbmRleDsK
IAotICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRSZWdpc3Rlcih2KTsKKyAgICAgICAg
bV9jb2RlQmxvY2stPmFkZENvbnN0YW50UmVnaXN0ZXIoSlNWYWx1ZVB0cih2KSk7CiAgICAgICAg
IHJldHVybiAmY29uc3RhbnQ7CiAgICAgfQogCiAgICAgcmV0dXJuICZyZWdpc3RlckZvcihyZXN1
bHQuZmlyc3QtPnNlY29uZCk7CiB9CiAKLXVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRV
bmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZSogdikKK3Vuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRVbmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZVB0ciB2KQogewogICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+YWRkVW5leHBlY3RlZENvbnN0YW50KHYpOwogfQpAQCAtODY3LDcgKzg2Nyw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCgKICAgICAvLyBMYXRlciB3
ZSBjYW4gZG8gdGhlIGV4dHJhIHdvcmsgdG8gaGFuZGxlIHRoYXQgbGlrZSB0aGUgb3RoZXIgY2Fz
ZXMuCiAgICAgaWYgKG51bWJlciA9PSBIYXNoVHJhaXRzPGRvdWJsZT46OmVtcHR5VmFsdWUoKSB8
fCBIYXNoVHJhaXRzPGRvdWJsZT46OmlzRGVsZXRlZFZhbHVlKG51bWJlcikpCiAgICAgICAgIHJl
dHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVyKSk7Ci0gICAg
SlNWYWx1ZSomIHZhbHVlSW5NYXAgPSBtX251bWJlck1hcC5hZGQobnVtYmVyLCBub1ZhbHVlKCkp
LmZpcnN0LT5zZWNvbmQ7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAu
YWRkKG51bWJlciwgbm9WYWx1ZSgpKS5maXJzdC0+c2Vjb25kOwogICAgIGlmICghdmFsdWVJbk1h
cCkKICAgICAgICAgdmFsdWVJbk1hcCA9IGpzTnVtYmVyKGdsb2JhbERhdGEoKSwgbnVtYmVyKTsK
ICAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZUluTWFwKTsKQEAgLTg3NSwxMyArODc1LDEz
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCgKIAogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBKU1N0cmluZyomIHZhbHVlSW5NYXAgPSBtX3N0
cmluZ01hcC5hZGQoaWRlbnRpZmllci51c3RyaW5nKCkucmVwKCksIDApLmZpcnN0LT5zZWNvbmQ7
CisgICAgSlNWYWx1ZVB0ciB2YWx1ZUluTWFwID0gbV9zdHJpbmdNYXAuYWRkKGlkZW50aWZpZXIu
dXN0cmluZygpLnJlcCgpLCAwKS5maXJzdC0+c2Vjb25kOwogICAgIGlmICghdmFsdWVJbk1hcCkK
ICAgICAgICAgdmFsdWVJbk1hcCA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRGF0YSgpLCBpZGVudGlm
aWVyLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CiB9
CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIEpTVmFsdWUqIHYpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQo
UmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlUHRyIHYpCiB7CiAgICAgUmVnaXN0ZXJJRCogY29uc3Rh
bnRJRCA9IGFkZENvbnN0YW50KHYpOwogICAgIGlmIChkc3QpCkBAIC04ODksMTIgKzg4OSw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCgKICAgICByZXR1cm4gY29u
c3RhbnRJRDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJl
Z2lzdGVySUQqIGRzdCwgSlNDZWxsKiBjZWxsKQotewotICAgIEpTVmFsdWUqIHZhbHVlID0gY2Vs
bDsKLSAgICByZXR1cm4gZW1pdExvYWQoZHN0LCB2YWx1ZSk7Ci19Ci0KIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5leHBlY3RlZExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29s
IGIpCiB7CiAgICAgZW1pdE9wY29kZShvcF91bmV4cGVjdGVkX2xvYWQpOwpAQCAtMTAxNyw3ICsx
MDExLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgIHJl
dHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U2Nv
cGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IGRlcHRoLCBpbnQgaW5kZXgsIEpTVmFsdWUq
IGdsb2JhbE9iamVjdCkKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U2Nv
cGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IGRlcHRoLCBpbnQgaW5kZXgsIEpTVmFsdWVQ
dHIgZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgZW1p
dE9wY29kZShvcF9nZXRfZ2xvYmFsX3Zhcik7CkBAIC0xMDM0LDcgKzEwMjgsNyBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFNjCiAgICAgcmV0dXJuIGRzdDsKIH0KIAot
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTY29wZWRWYXIoc2l6ZV90IGRl
cHRoLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVlKiBnbG9iYWxPYmplY3Qp
CitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFNjb3BlZFZhcihzaXplX3Qg
ZGVwdGgsIGludCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsdWUsIEpTVmFsdWVQdHIgZ2xvYmFsT2Jq
ZWN0KQogewogICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9w
dXRfZ2xvYmFsX3Zhcik7CkBAIC0xNjAyLDcgKzE1OTYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENhdGNoCiAgICAgcmV0dXJuIHRhcmdldFJlZ2lzdGVyOwogfQogCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRz
dCwgRXJyb3JUeXBlIHR5cGUsIEpTVmFsdWUqIG1lc3NhZ2UpCitSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRzdCwgRXJyb3JUeXBlIHR5cGUs
IEpTVmFsdWVQdHIgbWVzc2FnZSkKIHsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19lcnJvcik7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMzk2
MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQwLDggKzI0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYpOwot
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUqKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU0NlbGwqKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlUHRy
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuZXhwZWN0ZWRMb2FkKFJlZ2lzdGVySUQqIGRz
dCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmV4cGVjdGVkTG9hZChSZWdpc3Rl
cklEKiBkc3QsIGRvdWJsZSk7CiAKQEAgLTI3MCw4ICsyNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEluKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
cHJvcGVydHksIFJlZ2lzdGVySUQqIGJhc2UpIHsgcmV0dXJuIGVtaXRCaW5hcnlPcChvcF9pbiwg
ZHN0LCBwcm9wZXJ0eSwgYmFzZSwgT3BlcmFuZFR5cGVzKCkpOyB9CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdFJlc29sdmUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTY29wZWRWYXIoUmVnaXN0ZXJJRCog
ZHN0LCBzaXplX3Qgc2tpcCwgaW50IGluZGV4LCBKU1ZhbHVlKiBnbG9iYWxPYmplY3QpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0UHV0U2NvcGVkVmFyKHNpemVfdCBza2lwLCBpbnQgaW5kZXgs
IFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVlKiBnbG9iYWxPYmplY3QpOworICAgICAgICBSZWdp
c3RlcklEKiBlbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQqIGRzdCwgc2l6ZV90IHNraXAsIGlu
dCBpbmRleCwgSlNWYWx1ZVB0ciBnbG9iYWxPYmplY3QpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UHV0U2NvcGVkVmFyKHNpemVfdCBza2lwLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVl
LCBKU1ZhbHVlUHRyIGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJl
c29sdmVCYXNlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVdpdGhCYXNlKFJlZ2lzdGVySUQqIGJhc2VE
c3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsKQEAg
LTMwOSw3ICszMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Q2F0Y2goUmVnaXN0ZXJJRCosIExhYmVsKiBzdGFydCwgTGFiZWwqIGVuZCk7CiAgICAgICAg
IHZvaWQgZW1pdFRocm93KFJlZ2lzdGVySUQqIGV4YykgeyBlbWl0VW5hcnlOb0RzdE9wKG9wX3Ro
cm93LCBleGMpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdFcnJvcihSZWdpc3RlcklE
KiBkc3QsIEVycm9yVHlwZSB0eXBlLCBKU1ZhbHVlKiBtZXNzYWdlKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRzdCwgRXJyb3JUeXBlIHR5cGUsIEpTVmFs
dWVQdHIgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklE
KiBkc3QsIElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdFB1c2hTY29wZShSZWdpc3RlcklEKiBzY29wZSk7CkBAIC0zMzks
MTIgKzMzOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBQYXNzUmVmUHRyPExhYmVs
PiBlbWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWwqIHRhcmdldCwgQ29udHJvbEZsb3dDb250ZXh0
KiB0b3BTY29wZSwgQ29udHJvbEZsb3dDb250ZXh0KiBib3R0b21TY29wZSk7CiAKLSAgICAgICAg
c3RydWN0IEpTVmFsdWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxKU1ZhbHVlKj4gewotICAgICAg
ICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTVmFsdWUqJiBzbG90KSB7
IHNsb3QgPSBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCk7IH0KLSAgICAgICAgICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEpTVmFsdWUqIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCk7IH0KKyAgICAgICAgc3RydWN0IEpTVmFs
dWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+IHsKKyAg
ICAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciomIHNsb3QpIHsgc2xvdCA9IEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0
ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOyB9CisgICAgICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09
IEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOyB9CiAg
ICAgICAgIH07CiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTVmFsdWUqLCB1bnNpZ25lZCwg
UHRySGFzaDxKU1ZhbHVlKj4sIEpTVmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOworICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqLCB1bnNpZ25lZCwgUHRy
SGFzaDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+LCBKU1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1
ZU1hcDsKIAogICAgICAgICBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyB7CiAg
ICAgICAgICAgICB0eXBlZGVmIGludCBUcmFpdFR5cGU7CkBAIC0zNTYsNyArMzU1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxVU3RyaW5nOjpSZXA+LCBpbnQsIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJlZlB0
cjxVU3RyaW5nOjpSZXA+ID4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZp
ZXJNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWUqPiBOdW1iZXJN
YXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWVQdHI+IE51bWJlck1h
cDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFVTdHJpbmc6OlJlcCosIEpTU3RyaW5nKiwgSWRl
bnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJpbmdNYXA7CiAKICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywg
UmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBBcmd1bWVudHNOb2RlKiwgdW5zaWduZWQgZGl2b3Qs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwpAQCAtNDA2LDggKzQw
NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChGdW5j
RGVjbE5vZGUqKTsKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoRnVuY0V4cHJOb2RlKik7
CiAgICAgICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAg
ICAgUmVnaXN0ZXJJRCogYWRkQ29uc3RhbnQoSlNWYWx1ZSopOwotICAgICAgICB1bnNpZ25lZCBh
ZGRVbmV4cGVjdGVkQ29uc3RhbnQoSlNWYWx1ZSopOworICAgICAgICBSZWdpc3RlcklEKiBhZGRD
b25zdGFudChKU1ZhbHVlUHRyKTsKKyAgICAgICAgdW5zaWduZWQgYWRkVW5leHBlY3RlZENvbnN0
YW50KEpTVmFsdWVQdHIpOwogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKik7CiAK
ICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNyArNjMsNyBAQCBKU09iamVjdCogRGVidWdnZXJDYWxsRnJhbWU6OnRoaXNPYmplY3QoCiAg
ICAgcmV0dXJuIGFzT2JqZWN0KG1fY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiB9CiAKLUpTVmFs
dWUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpT
VmFsdWUqJiBleGNlcHRpb24pIGNvbnN0CitKU1ZhbHVlUHRyIERlYnVnZ2VyQ2FsbEZyYW1lOjpl
dmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWVQdHImIGV4Y2VwdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJu
IG5vVmFsdWUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxs
RnJhbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1Z2dlckNhbGxGcmFt
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogZXhjZXB0aW9uKQorICAgICAgICBEZWJ1
Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciBleGNlcHRpb24p
CiAgICAgICAgICAgICA6IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICAgICAgICAgICwgbV9l
eGNlcHRpb24oZXhjZXB0aW9uKQogICAgICAgICB7CkBAIC01NCwxMiArNTQsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFVTdHJpbmcqIGZ1bmN0aW9uTmFtZSgpIGNvbnN0Owog
ICAgICAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qo
KSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoY29uc3QgVVN0cmluZyYsIEpTVmFs
dWUqJiBleGNlcHRpb24pIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25z
dCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgICAgICBKU1ZhbHVlUHRyIGV2YWx1YXRlKGNv
bnN0IFVTdHJpbmcmLCBKU1ZhbHVlUHRyJiBleGNlcHRpb24pIGNvbnN0OworICAgICAgICBKU1Zh
bHVlUHRyIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1lOwotICAgICAgICBKU1ZhbHVl
KiBtX2V4Y2VwdGlvbjsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX2V4Y2VwdGlvbjsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1KU1ZhbHVlKiBDYWxsRnJhbWU6OnRoaXNWYWx1ZSgpCitKU1ZhbHVlUHRy
IENhbGxGcmFtZTo6dGhpc1ZhbHVlKCkKIHsKICAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+
dGhpc1JlZ2lzdGVyKCldLmpzVmFsdWUodGhpcyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6OkNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygp
OyB9CiAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4g
dGhpc1tSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW5dLlJlZ2lzdGVyOjpzY29wZUNoYWluKCk7IH0K
IAotICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUoKTsKIAogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBi
ZWdhbi4KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QoKTsKQEAg
LTczLDExICs3MywxMSBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIHBvaW50ZXIsIHNv
IHRoZXNlIGFyZSBpbmVmZmljaWVudCwgYW5kIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBpbiBu
ZXcgY29kZS4KICAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55IHBsYWNlcyBpbiBs
ZWdhY3kgY29kZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGltZSBzb29uLgogCi0g
ICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpTVmFsdWUqIGV4Y2VwdGlvbikgeyBnbG9iYWxEYXRh
KCkuZXhjZXB0aW9uID0gZXhjZXB0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKEpT
VmFsdWVQdHIgZXhjZXB0aW9uKSB7IGdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBleGNlcHRpb247
IH0KICAgICAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgZ2xvYmFsRGF0YSgpLmV4Y2VwdGlv
biA9IG5vVmFsdWUoKTsgfQotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb24oKSBjb25zdCB7IHJl
dHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9Ci0gICAgICAgIEpTVmFsdWUqKiBleGNlcHRp
b25TbG90KCkgeyByZXR1cm4gJmdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KLSAgICAgICAgYm9v
bCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAhIWdsb2JhbERhdGEoKS5leGNlcHRpb247
IH0KKyAgICAgICAgSlNWYWx1ZVB0ciBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxE
YXRhKCkuZXhjZXB0aW9uOyB9CisgICAgICAgIEpTVmFsdWVQdHIqIGV4Y2VwdGlvblNsb3QoKSB7
IHJldHVybiAmZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQorICAgICAgICBib29sIGhhZEV4Y2Vw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KIAogICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICpnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lczsgfQogICAgICAgICBjb25zdCBBcmdMaXN0JiBl
bXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLmVtcHR5TGlzdDsgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgaW50IGRlcHRoKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTCiAKIC8vIEZJWE1FOiBUaGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgY2Fs
bGVkICJnZXROdW1iZXIiLCBub3QgImlzTnVtYmVyIiAoYXMgaXQgaXMgaW4gSlNWYWx1ZS5oKS4K
IC8vIEZJWE1FOiBUaGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSBhICJzbG93IiB2ZXJzaW9uIG9mIHRo
aXMuIEFsbCB2ZXJzaW9ucyBzaG91bGQgYmUgZmFzdC4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgZmFzdElzTnVtYmVyKEpTVmFsdWUqIHZhbHVlLCBkb3VibGUmIGFyZykKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgZmFzdElzTnVtYmVyKEpTVmFsdWVQdHIgdmFsdWUsIGRvdWJsZSYgYXJn
KQogewogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpKQogICAgICAgICBhcmcg
PSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsdWUpOwpAQCAtMTE4LDggKzExOCw4
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdElzTnVtYmVyKEoKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotLy8gRklYTUU6IFdoeSBkb2Vzbid0IEpTVmFsdWUqOjp0b0ludDMyIGhhdmUg
dGhlIEhlYXA6OmlzTnVtYmVyIG9wdGltaXphdGlvbj8KLXN0YXRpYyBib29sIGZhc3RUb0ludDMy
KEpTVmFsdWUqIHZhbHVlLCBpbnQzMl90JiBhcmcpCisvLyBGSVhNRTogV2h5IGRvZXNuJ3QgSlNW
YWx1ZVB0cjo6dG9JbnQzMiBoYXZlIHRoZSBIZWFwOjppc051bWJlciBvcHRpbWl6YXRpb24/Citz
dGF0aWMgYm9vbCBmYXN0VG9JbnQzMihKU1ZhbHVlUHRyIHZhbHVlLCBpbnQzMl90JiBhcmcpCiB7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkpCiAgICAgICAgIGFyZyA9IEpT
SW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWx1ZSk7CkBAIC0xMzAsNyArMTMwLDcgQEAg
c3RhdGljIGJvb2wgZmFzdFRvSW50MzIoSlNWYWx1ZSogdmFsdWUsIAogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RUb1VJbnQzMihKU1ZhbHVlKiB2
YWx1ZSwgdWludDMyX3QmIGFyZykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZmFzdFRvVUlu
dDMyKEpTVmFsdWVQdHIgdmFsdWUsIHVpbnQzMl90JiBhcmcpCiB7CiAgICAgaWYgKEpTSW1tZWRp
YXRlOjppc051bWJlcih2YWx1ZSkpIHsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRUcnVu
Y2F0ZWRVSW50MzIodmFsdWUsIGFyZykpCkBAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgYm9vbCBmYXN0VG9VSW50MzIoSgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wganNMZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwg
SlNWYWx1ZSogdjIpCitzdGF0aWMgaW5saW5lIGJvb2wganNMZXNzKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewogICAgIGlmIChKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2MSkgPCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVk
SW50MzIodjIpOwpAQCAtMTU5LDggKzE1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3Mo
Q2FsbEZyYW1lKiBjYWwKICAgICBpZiAoaW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcodjEpICYmIGlu
dGVycHJldGVyLT5pc0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHYxKS0+
dmFsdWUoKSA8IGFzU3RyaW5nKHYyKS0+dmFsdWUoKTsKIAotICAgIEpTVmFsdWUqIHAxOwotICAg
IEpTVmFsdWUqIHAyOworICAgIEpTVmFsdWVQdHIgcDE7CisgICAgSlNWYWx1ZVB0ciBwMjsKICAg
ICBib29sIHdhc05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGNhbGxGcmFtZSwg
bjEsIHAxKTsKICAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0aXZlTnVtYmVy
KGNhbGxGcmFtZSwgbjIsIHAyKTsKIApAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBqc0xlc3MoQ2FsbEZyYW1lKiBjYWwKICAgICByZXR1cm4gYXNTdHJpbmcocDEpLT52YWx1
ZSgpIDwgYXNTdHJpbmcocDIpLT52YWx1ZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wganNM
ZXNzRXEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0
ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGVOdW1iZXJzKHYxLCB2MikpCiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkSW50MzIodjEpIDw9IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2Mik7CkBA
IC0xODQsOCArMTg0LDggQEAgc3RhdGljIGlubGluZSBib29sIGpzTGVzc0VxKENhbGxGcmFtZSog
YwogICAgIGlmIChpbnRlcnByZXRlci0+aXNKU1N0cmluZyh2MSkgJiYgaW50ZXJwcmV0ZXItPmlz
SlNTdHJpbmcodjIpKQogICAgICAgICByZXR1cm4gIShhc1N0cmluZyh2MiktPnZhbHVlKCkgPCBh
c1N0cmluZyh2MSktPnZhbHVlKCkpOwogCi0gICAgSlNWYWx1ZSogcDE7Ci0gICAgSlNWYWx1ZSog
cDI7CisgICAgSlNWYWx1ZVB0ciBwMTsKKyAgICBKU1ZhbHVlUHRyIHAyOwogICAgIGJvb2wgd2Fz
Tm90U3RyaW5nMSA9IHYxLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1lLCBuMSwgcDEpOwog
ICAgIGJvb2wgd2FzTm90U3RyaW5nMiA9IHYyLT5nZXRQcmltaXRpdmVOdW1iZXIoY2FsbEZyYW1l
LCBuMiwgcDIpOwogCkBAIC0xOTUsMTEgKzE5NSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNM
ZXNzRXEoQ2FsbEZyYW1lKiBjCiAgICAgcmV0dXJuICEoYXNTdHJpbmcocDIpLT52YWx1ZSgpIDwg
YXNTdHJpbmcocDEpLT52YWx1ZSgpKTsKIH0KIAotc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVl
KiBqc0FkZFNsb3dDYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1
ZSogdjIpCitzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIganNBZGRTbG93Q2FzZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICAv
LyBleGNlcHRpb24gZm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBpbiBkZWZhdWx0VmFsdWUoKQotICAg
IEpTVmFsdWUqIHAxID0gdjEtPnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgSlNWYWx1ZSog
cDIgPSB2Mi0+dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIHAxID0gdjEt
PnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciBwMiA9IHYyLT50b1ByaW1p
dGl2ZShjYWxsRnJhbWUpOwogCiAgICAgaWYgKHAxLT5pc1N0cmluZygpIHx8IHAyLT5pc1N0cmlu
ZygpKSB7CiAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUo
cDEtPnRvU3RyaW5nKGNhbGxGcmFtZSkucmVwKCksIHAyLT50b1N0cmluZyhjYWxsRnJhbWUpLnJl
cCgpKTsKQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpz
QWRkU2xvd0NhCiAvLyAgICAxMzk2MiAgIEFkZCBjYXNlOiA1IDMKIC8vICAgIDQwMDAgICAgQWRk
IGNhc2U6IDMgNQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc0FkZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZVB0ciBqc0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciB2
MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQg
PSAwLjA7CkBAIC0yNTEsNyArMjUxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
anNBZGQoQ2FsbAogICAgIHJldHVybiBqc0FkZFNsb3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsK
IH0KIAotc3RhdGljIEpTVmFsdWUqIGpzVHlwZVN0cmluZ0ZvclZhbHVlKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlKiB2KQorc3RhdGljIEpTVmFsdWVQdHIganNUeXBlU3RyaW5nRm9yVmFs
dWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAodi0+aXNV
bmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUs
ICJ1bmRlZmluZWQiKTsKQEAgLTI3Myw3ICsyNzMsNyBAQCBzdGF0aWMgSlNWYWx1ZSoganNUeXBl
U3RyaW5nRm9yVmFsdWUoQ2FsCiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJh
bWUsICJvYmplY3QiKTsKIH0KIAotc3RhdGljIGJvb2wganNJc09iamVjdFR5cGUoSlNWYWx1ZSog
dikKK3N0YXRpYyBib29sIGpzSXNPYmplY3RUeXBlKEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpKQogICAgICAgICByZXR1cm4gdi0+aXNOdWxsKCk7
CkBAIC0yOTEsNyArMjkxLDcgQEAgc3RhdGljIGJvb2wganNJc09iamVjdFR5cGUoSlNWYWx1ZSog
dikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wganNJc0Z1bmN0aW9uVHlwZShK
U1ZhbHVlKiB2KQorc3RhdGljIGJvb2wganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlUHRyIHYpCiB7
CiAgICAgaWYgKHYtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBA
IC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIGJvb2wganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlKiB2
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6
OnJlc29sdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSkKK05FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZl
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyJiBleGNl
cHRpb25WYWx1ZSkKIHsKICAgICBpbnQgZHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IHByb3BlcnR5ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7CkBAIC0zMTcsMTEgKzMxNywxMSBA
QCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZShDCiAgICAgICAgIEpTT2Jq
ZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBp
ZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aWRlbnQpOwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5leGNlcHRpb247CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1
bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoKytpdGVyICE9
IGVuZCk7CkBAIC0zMjksNyArMzI5LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6
OnJlc29sdmUoQwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSW50
ZXJwcmV0ZXI6OnJlc29sdmVTa2lwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiog
dlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnBy
ZXRlcjo6cmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMs
IEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIApAQCAtMzUwLDExICszNTAsMTEgQEAgTkVWRVJf
SU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVTawogICAgICAgICBKU09iamVjdCogbyA9
ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdl
dFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAg
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsK
ICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhj
ZXB0aW9uOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OworICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKCsraXRlciAhPSBlbmQpOwpA
QCAtMzYyLDcgKzM2Miw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZl
U2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIEludGVycHJldGVy
OjpyZXNvbHZlR2xvYmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBK
U1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6
cmVzb2x2ZUdsb2JhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNW
YWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGRzdCA9ICh2UEMgKyAxKS0+dS5v
cGVyYW5kOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U0dsb2JhbE9iamVjdCo+KCh2UEMgKyAyKS0+dS5qc0NlbGwpOwpAQCAtMzcyLDcgKzM3Miw3IEBA
IE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlR2wKICAgICBpbnQgb2Zmc2V0
ID0gKHZQQyArIDUpLT51Lm9wZXJhbmQ7CiAKICAgICBpZiAoc3RydWN0dXJlID09IGdsb2JhbE9i
amVjdC0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBnbG9iYWxPYmpl
Y3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpT
VmFsdWVQdHIoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzgwLDIxICszODAsMjEgQEAgTkVWRVJfSU5MSU5F
IGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVHbAogICAgIElkZW50aWZpZXImIGlkZW50ID0gY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9i
YWxPYmplY3QpOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJh
bWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
KCkgJiYgIWdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAg
ICAgICAgICBpZiAodlBDWzRdLnUuc3RydWN0dXJlKQogICAgICAgICAgICAgICAgIHZQQ1s0XS51
LnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJl
KCktPnJlZigpOwogICAgICAgICAgICAgdlBDWzRdID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUo
KTsKICAgICAgICAgICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IAogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbjsKICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKKyAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtNDAyLDcgKzQwMiw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNv
bHZlR2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGlubGluZVJlc29sdmVCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCitzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlUHRyIGlubGluZVJlc29sdmVCYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4pCiB7CiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwogICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBuZXh0ID0gaXRlcjsKQEAgLTQyOSwxMCArNDI5LDEwIEBAIE5FVkVSX0lOTElO
RSB2b2lkIEludGVycHJldGVyOjpyZXNvbHZlQmEKIHsKICAgICBpbnQgZHN0ID0gKHZQQyArIDEp
LT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BlcnR5ID0gKHZQQyArIDIpLT51Lm9wZXJhbmQ7Ci0g
ICAgY2FsbEZyYW1lW2RzdF0gPSBpbmxpbmVSZXNvbHZlQmFzZShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpLCBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKSk7CisgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGlubGluZVJlc29sdmVCYXNl
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSks
IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpKSk7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIEludGVy
cHJldGVyOjpyZXNvbHZlQmFzZUFuZFByb3BlcnR5KENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0
cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgYm9v
bCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAg
aW50IGJhc2VEc3QgPSAodlBDICsgMSktPnUub3BlcmFuZDsKICAgICBpbnQgcHJvcERzdCA9ICh2
UEMgKyAyKS0+dS5vcGVyYW5kOwpAQCAtNDUzLDEyICs0NTMsMTIgQEAgTkVWRVJfSU5MSU5FIGJv
b2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOwogICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlT
bG90KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAg
ICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb247CiAg
ICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgY2FsbEZyYW1lW3Byb3BEc3RdID0gcmVzdWx0OwotICAgICAgICAg
ICAgY2FsbEZyYW1lW2Jhc2VEc3RdID0gYmFzZTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtwcm9w
RHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtiYXNlRHN0
XSA9IEpTVmFsdWVQdHIoYmFzZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICArK2l0ZXI7CkBAIC00NjgsNyArNDY4LDcgQEAgTkVWRVJfSU5MSU5FIGJvb2wg
SW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTkVWRVJfSU5M
SU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJf
SU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7
CiAgICAgaW50IGJhc2VEc3QgPSAodlBDICsgMSktPnUub3BlcmFuZDsKICAgICBpbnQgZnVuY0Rz
dCA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwpAQCAtNDk3LDEzICs0OTcsMTMgQEAgTkVWRVJfSU5M
SU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYQogICAgICAgICAgICAgLy8gdGhhdCBpbiBo
b3N0IG9iamVjdHMgeW91IGFsd2F5cyBnZXQgYSB2YWxpZCBvYmplY3QgZm9yIHRoaXMuCiAgICAg
ICAgICAgICAvLyBXZSBhbHNvIGhhbmRsZSB3cmFwcGVyIHN1YnN0aXR1dGlvbiBmb3IgdGhlIGds
b2JhbCBvYmplY3QgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gYmFzZS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAg
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRp
b247CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjYWxsRnJhbWVbYmFzZURzdF0gPSB0aGlzT2JqOwot
ICAgICAgICAgICAgY2FsbEZyYW1lW2Z1bmNEc3RdID0gcmVzdWx0OworICAgICAgICAgICAgY2Fs
bEZyYW1lW2Jhc2VEc3RdID0gSlNWYWx1ZVB0cih0aGlzT2JqKTsKKyAgICAgICAgICAgIGNhbGxG
cmFtZVtmdW5jRHN0XSA9IEpTVmFsdWVQdHIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKQEAgLTU1MCw3ICs1NTAsNyBAQCBBTFdB
WVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0ZXI6OnNsCiAgICAgcmV0dXJuIENhbGxGcmFt
ZTo6Y3JlYXRlKHIpOwogfQogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3Qo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGJvb2wgZm9ySW5zdGFuY2VPZiwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiYg
ZXhjZXB0aW9uRGF0YSkKK3N0YXRpYyBORVZFUl9JTkxJTkUgYm9vbCBpc05vdE9iamVjdChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgYm9vbCBmb3JJbnN0YW5jZU9mLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNWYWx1ZVB0ciYg
ZXhjZXB0aW9uRGF0YSkKIHsKICAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTU1OCwxMiArNTU4LDEyIEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgYm9v
bCBpc05vdE9iamVjdChDYWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIEpT
VmFsdWUqIEludGVycHJldGVyOjpjYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0
ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYywgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgSlNWYWx1
ZVB0ciBJbnRlcnByZXRlcjo6Y2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVy
RmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rl
ck9mZnNldCwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgaWYgKGFyZ2MgPCAy
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUqIHByb2dyYW0g
PSBhcmd2WzFdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIHByb2dyYW0gPSBh
cmd2WzFdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgIGlmICghcHJvZ3JhbS0+aXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuIHByb2dyYW07CkBAIC01NzQsNyArNTc0LDcgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUqIEludGVycHJldGVyOjpjYWxsRQogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2Rl
ID0gY29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0KGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJj
ZSwgc2NvcGVDaGFpbiwgZXhjZXB0aW9uVmFsdWUpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAg
ICAgaWYgKGV2YWxOb2RlKQogICAgICAgICByZXN1bHQgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKSwgY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSAtIHJlZ2lzdGVyRmlsZS0+c3RhcnQoKSArIHJlZ2lzdGVyT2Zmc2V0LCBzY29wZUNo
YWluLCAmZXhjZXB0aW9uVmFsdWUpOwogCkBAIC03MjgsNyArNzI4LDcgQEAgYm9vbCBJbnRlcnBy
ZXRlcjo6aXNPcGNvZGUoT3Bjb2RlIG9wY29kZQogI2VuZGlmCiB9CiAKLU5FVkVSX0lOTElORSBi
b29sIEludGVycHJldGVyOjp1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBK
U1ZhbHVlKiBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxv
Y2sqJiBjb2RlQmxvY2spCitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2Fs
bEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZVB0ciBleGNlcHRpb25WYWx1ZSwg
dW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjb2RlQmxvY2spCiB7CiAgICAg
Q29kZUJsb2NrKiBvbGRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKQEAgLTc3MSw3ICs3NzEsNyBA
QCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLU5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhj
ZXB0aW9uKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCBleHBsaWNpdFRocm93KQorTkVWRVJfSU5MSU5F
IEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYgY2Fs
bEZyYW1lLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIGJvb2wgZXhwbGljaXRUaHJvdykKIHsKICAgICAvLyBTZXQgdXAgdGhlIGV4Y2VwdGlvbiBv
YmplY3QKIApAQCAtODU1LDcgKzg1NSw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50
ZXJwcmV0ZXI6OnQKICAgICByZXR1cm4gaGFuZGxlcjsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVl
KiogZXhjZXB0aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9k
ZSogcHJvZ3JhbU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgSlNPYmplY3QqIHRoaXNPYmosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbikKIHsKICAg
ICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlvbik7CiAKQEAgLTg4MCw3
ICs4ODAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kCiAgICAg
Z2xvYmFsT2JqZWN0LT5jb3B5R2xvYmFsc1RvKG1fcmVnaXN0ZXJGaWxlKTsKIAogICAgIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOwot
ICAgIG5ld0NhbGxGcmFtZVtjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpXSA9IHRoaXNPYmo7Cisg
ICAgbmV3Q2FsbEZyYW1lW2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCldID0gSlNWYWx1ZVB0cih0
aGlzT2JqKTsKICAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWlu
LCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIDAsIDAsIDApOwogCiAgICAgaWYgKGNvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbigpKQpAQCAtODkwLDcgKzg5MCw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpleGVjdXRlKFByb2dyYW1Ob2QKICAgICBpZiAoKnByb2ZpbGVyKQogICAgICAgICAo
KnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBwcm9ncmFtTm9kZS0+c291cmNl
VVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxS
ZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIpOwogCkBAIC05MTYsNyArOTE2LDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0
aW9uQm9keU5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBB
cmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciogZXhj
ZXB0aW9uKQogewogICAgIEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9u
KTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEZ1
bmN0aW9uQm8KIAogICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUob2xkRW5kKTsKICAgICBzaXplX3QgZHN0ID0gMDsKLSAgICBuZXdDYWxsRnJhbWVbMF0gPSB0
aGlzT2JqOworICAgIG5ld0NhbGxGcmFtZVswXSA9IEpTVmFsdWVQdHIodGhpc09iaik7CiAgICAg
QXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKICAgICBmb3IgKEFyZ0xp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgIG5ld0NhbGxGcmFtZVsrK2RzdF0gPSAqaXQ7CkBAIC05NTYsNyArOTU2LDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRnVuY3Rpb25CbwogICAgIGlmICgqcHJvZmlsZXIp
CiAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1bmN0aW9u
KTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICB7
CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlcik7
CiAKQEAgLTk3OCwxMiArOTc4LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEZ1
bmN0aW9uQm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVj
dCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRp
b24pCitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKQogewogICAgIHJldHVybiBleGVjdXRl
KGV2YWxOb2RlLCBjYWxsRnJhbWUsIHRoaXNPYmosIG1fcmVnaXN0ZXJGaWxlLnNpemUoKSArIGV2
YWxOb2RlLT5ieXRlY29kZShzY29wZUNoYWluKS5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvbik7CiB9CiAKLUpT
VmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorSlNWYWx1
ZVB0ciBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0LCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKQogewogICAg
IEFTU0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKIApAQCAtMTAzOCw3
ICsxMDM4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIAogICAg
IENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobV9yZWdpc3RlckZp
bGUuc3RhcnQoKSArIGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKIAogICAgIC8vIGEgMCBjb2RlQmxv
Y2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCi0gICAgbmV3Q2FsbEZyYW1lW2NvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyKCldID0gdGhpc09iajsKKyAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2Nr
LT50aGlzUmVnaXN0ZXIoKV0gPSBKU1ZhbHVlUHRyKHRoaXNPYmopOwogICAgIG5ld0NhbGxGcmFt
ZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxG
cmFtZUZsYWcoKSwgMCwgMCwgMCk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKCkpCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShFdmFsTm9kZSogCiAgICAgaWYgKCpwcm9maWxlcikKICAgICAgICAgKCpwcm9maWxlcikt
PndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBldmFsTm9k
ZS0+bGluZU5vKCkpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVz
dWx0OwogICAgIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQo
bV9zYW1wbGVyKTsKIApAQCAtMTE0OSwxNCArMTE0OSwxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGdldENQVVRpbWUoKQogCiAvLyBXZSBoYXZlIHRvIHJldHVybiBhIEpTVmFsdWUgaGVyZSwg
Z2NjIHNlZW1zIHRvIHByb2R1Y2Ugd29yc2UgY29kZSBpZiAKIC8vIHdlIGF0dGVtcHQgdG8gcmV0
dXJuIGEgYm9vbAotQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y2hlY2tUaW1l
b3V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitBTFdBWVNfSU5MSU5FIGJvb2wgSW50
ZXJwcmV0ZXI6OmNoZWNrVGltZW91dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIHVuc2lnbmVkIGN1cnJlbnRUaW1lID0gZ2V0Q1BVVGltZSgpOwogICAgIAogICAgIGlmICgh
bV90aW1lQXRMYXN0Q2hlY2tUaW1lb3V0KSB7CiAgICAgICAgIC8vIFN1c3BpY2lvdXMgYW1vdW50
IG9mIGxvb3BpbmcgaW4gYSBzY3JpcHQgLS0gc3RhcnQgdGltaW5nIGl0CiAgICAgICAgIG1fdGlt
ZUF0TGFzdENoZWNrVGltZW91dCA9IGN1cnJlbnRUaW1lOwotICAgICAgICByZXR1cm4gbm9WYWx1
ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHRp
bWVEaWZmID0gY3VycmVudFRpbWUgLSBtX3RpbWVBdExhc3RDaGVja1RpbWVvdXQ7CkBAIC0xMTc3
LDEyICsxMTc3LDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmNoZWMK
ICAgICAKICAgICBpZiAobV90aW1lb3V0VGltZSAmJiBtX3RpbWVFeGVjdXRpbmcgPiBtX3RpbWVv
dXRUaW1lKSB7CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPnNob3VsZEludGVycnVwdFNjcmlw
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOyAvLyBBcHBlYXNpbmcgR0NDLCBhbGwg
d2UgbmVlZCBpcyBhIG5vbi1udWxsIGpzIHZhbHVlLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIAogICAgICAgICByZXNldFRpbWVvdXRDaGVjaygpOwogICAgIH0KICAgICAKLSAg
ICByZXR1cm4gbm9WYWx1ZSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogTkVWRVJfSU5MSU5F
IFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcjo6Y3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiB2UEMpCkBAIC0xMTkwLDE2ICsxMTkw
LDE2IEBAIE5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXIKICAgICBpbnQg
ZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcigoKyt2UEMpLT51Lm9wZXJhbmQpOwotICAgIEpTVmFsdWUqIHZhbHVlID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgIEpT
VmFsdWVQdHIgdmFsdWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAgICAgSlNPYmplY3QqIHNjb3BlID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGlj
U2NvcGVPYmplY3QoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIERvbnREZWxldGUpOwotICAg
IGNhbGxGcmFtZVtkc3RdID0gc2NvcGU7CisgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRy
KHNjb3BlKTsKIAogICAgIHJldHVybiBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChzY29w
ZSk7CiB9CiAKIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVQcm90b3R5cGVDaGFpbihDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgSlNWYWx1ZSog
cHJvdG90eXBlID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKKyAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNh
bGxGcmFtZSk7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShwcm90b3R5cGUpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U3RydWN0dXJlQ2hhaW4+IGNoYWluID0gU3Ry
dWN0dXJlQ2hhaW46OmNyZWF0ZShhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSk7CkBA
IC0xMjA3LDcgKzEyMDcsNyBAQCBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNhY2hlUHJvdG90eXBl
Q2hhCiAgICAgcmV0dXJuIHN0cnVjdHVyZS0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFs
dWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5F
IHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHIgYmFzZVZh
bHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgLy8gUmVjdXJzaXZlIGlu
dm9jYXRpb24gbWF5IGFscmVhZHkgaGF2ZSBzcGVjaWFsaXplZCB0aGlzIGluc3RydWN0aW9uLgog
ICAgIGlmICh2UENbMF0udS5vcGNvZGUgIT0gZ2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkpCkBAIC0x
Mjg0LDEzICsxMjg0LDEzIEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp1bmNhY2hl
UHUKICAgICB2UENbNF0gPSAwOwogfQogCi1zdGF0aWMgc2l6ZV90IGNvdW50UHJvdG90eXBlQ2hh
aW5FbnRyaWVzQW5kQ2hlY2tGb3JQcm94aWVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
KiBiYXNlVmFsdWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3N0YXRpYyBzaXplX3QgY291
bnRQcm90b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNDZWxsKiBjZWxsID0gYXNDZWxsKGJhc2VWYWx1ZSk7CiAgICAgc2l6ZV90IGNvdW50
ID0gMDsKIAogICAgIHdoaWxlIChzbG90LnNsb3RCYXNlKCkgIT0gY2VsbCkgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gY2VsbC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBl
Rm9yTG9va3VwKGNhbGxGcmFtZSk7CiAKICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgc2xv
dEJhc2UgaW4gYmFzZVZhbHVlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIGJhc2VWYWx1ZQogICAg
ICAgICAvLyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgpAQCAtMTMxNSw3ICsx
MzE1LDcgQEAgc3RhdGljIHNpemVfdCBjb3VudFByb3RvdHlwZUNoYWluRW50cmllcwogICAgIHJl
dHVybiBjb3VudDsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNhY2hl
R2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3Ry
dWN0aW9uKiB2UEMsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitORVZFUl9JTkxJTkUgdm9pZCBJbnRl
cnByZXRlcjo6dHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIC8vIFJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG1heSBhbHJlYWR5IGhhdmUgc3BlY2lhbGl6ZWQg
dGhpcyBpbnN0cnVjdGlvbi4KICAgICBpZiAodlBDWzBdLnUub3Bjb2RlICE9IGdldE9wY29kZShv
cF9nZXRfYnlfaWQpKQpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50
ZXJwcmV0ZXI6OnVuY2FjaGVHZQogICAgIHZQQ1s0XSA9IDA7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikK
K0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxh
ZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlUHRyKiBleGNlcHRpb24pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Yg
b3VyIGFkZHJlc3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKICAgICAvLyBoZXJl
IGJlY2F1c2Ugb3VyIGxhYmVscyBhcmUgb25seSBpbiBzY29wZSBpbnNpZGUgdGhpcyBmdW5jdGlv
bi4KQEAgLTE0NDUsNyArMTQ0NSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICNlbmRpZgogCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpOwotICAgIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlID0gbm9WYWx1
ZSgpOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uVmFsdWUgPSBub1ZhbHVlKCk7CiAgICAgSGFu
ZGxlckluZm8qIGhhbmRsZXIgPSAwOwogCiAgICAgSW5zdHJ1Y3Rpb24qIHZQQyA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0xNDY2LDggKzE0NjYs
MTAgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAjZGVmaW5l
IENIRUNLX0ZPUl9USU1FT1VUKCkgXAogICAgIGlmICghLS10aWNrQ291bnQpIHsgXAotICAgICAg
ICBpZiAoKGV4Y2VwdGlvblZhbHVlID0gY2hlY2tUaW1lb3V0KGNhbGxGcmFtZS0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpKSkpIFwKKyAgICAgICAgaWYgKGNoZWNrVGltZW91dChjYWxsRnJhbWUtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSkpIHsgXAorICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBq
c051bGwoKTsgXAogICAgICAgICAgICAgZ290byB2bV90aHJvdzsgXAorICAgICAgICB9IFwKICAg
ICAgICAgdGlja0NvdW50ID0gbV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjazsgXAogICAgIH0K
ICAgICAKQEAgLTE1MDYsNyArMTUwOCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGUKICAgICAgICAgICAgY29uc3RydWN0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQg
aW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGNhbGxGcmFtZSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihjb25zdHJ1
Y3RFbXB0eU9iamVjdChjYWxsRnJhbWUpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwpAQCAtMTUyMyw3ICsxNTI1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgZmlyc3RBcmcgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CiAgICAgICAgIGludCBhcmdDb3VudCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAg
ICAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBmaXJzdEFyZywgYXJn
Q291bnQpOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGNvbnN0cnVjdEFycmF5KGNhbGxGcmFt
ZSwgYXJncyk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihjb25zdHJ1Y3RB
cnJheShjYWxsRnJhbWUsIGFyZ3MpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwpAQCAtMTUzNyw3ICsxNTM5LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnRXhwID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCks
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlZ2V4cChyZWdFeHApKTsKKyAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBKU1ZhbHVlUHRyKG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KGNhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPnJlZ2V4cChyZWdFeHApKSk7CiAKICAgICAgICAgKyt2UEM7
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTE1NjIsMTIgKzE1NjQsMTIgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBhcyBhIGJv
b2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMy
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAg
ICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRp
YXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHNyYzEgPT0gc3JjMik7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2UoY2Fs
bEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
Qm9vbGVhbihlcXVhbFNsb3dDYXNlKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBy
ZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE1ODIsNyArMTU4NCw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRo
ZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAg
ICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoc3JjLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAg
ICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbih0cnVlKTsKQEAgLTE2MDIsMTIg
KzE2MDQsMTIgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAg
ICAgICAgICByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8K
ICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSog
c3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
LSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygr
K3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwg
c3JjMikpCiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihzcmMxICE9IHNy
YzIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9v
bGVhbighZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAgICAgICAgICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKCFlcXVhbFNsb3dDYXNlKGNhbGxGcmFtZSwg
c3JjMSwgc3JjMikpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE2MjIsNyArMTYy
NCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAg
ICAgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVy
IGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYyA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoc3JjLT5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9v
bGVhbihmYWxzZSk7CkBAIC0xNjQyLDggKzE2NDQsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVn
aXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1l
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlKHNyYzEsIHNyYzIpKQogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jv
b2xlYW4oc3JjMSA9PSBzcmMyKTsKICAgICAgICAgZWxzZSBpZiAoSlNJbW1lZGlhdGU6OmlzRWl0
aGVySW1tZWRpYXRlKHNyYzEsIHNyYzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1l
ZGlhdGUoKSkgJiAoc3JjMiAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkKQEAgLTE2
NjIsOCArMTY2NCw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0
ZShzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFuKHNy
YzEgIT0gc3JjMik7CkBAIC0xNjgzLDkgKzE2ODUsOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzQm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgICAgIEpTVmFs
dWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
Qm9vbGVhbihqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAKQEAgLTE3
MDAsOSArMTcwMiw5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzQm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
anNCb29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCkBA
IC0xNzE2LDExICsxNzE4LDExIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGUKICAgICAgICAgICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCiAgICAgICAgICovCiAg
ICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAg
aWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModikpCi0gICAgICAg
ICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjppbmNJbW1lZGlhdGVOdW1iZXIo
dik7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlh
dGU6OmluY0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB2LT50b051bWJlcihjYWxsRnJh
bWUpICsgMSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxG
cmFtZSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIDEpOwogICAgICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSByZXN1bHQ7CiAg
ICAgICAgIH0KQEAgLTE3MzUsMTEgKzE3MzcsMTEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBiYWNrIGluIHJlZ2lzdGVyIHNyY0RzdC4KICAg
ICAgICAgKi8KICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUp
OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2
KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmRlY0ltbWVk
aWF0ZU51bWJlcih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0
cihKU0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHYtPnRvTnVt
YmVyKGNhbGxGcmFtZSkgLSAxKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNO
dW1iZXIoY2FsbEZyYW1lLCB2LT50b051bWJlcihjYWxsRnJhbWUpIC0gMSk7CiAgICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9
IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTc1NiwxNSArMTc1OCwxNSBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3Qg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2
ZU9wZXJhdGlvbnModikpIHsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gdjsKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51bWJl
cih2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVk
aWF0ZTo6aW5jSW1tZWRpYXRlTnVtYmVyKHYpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUqIG51bWJlciA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1l
KS0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBudW1iZXIg
PSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvSlNOdW1iZXIoY2FsbEZy
YW1lKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0gbnVtYmVyOwotICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBq
c051bWJlcihjYWxsRnJhbWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJh
bWUsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICArK3ZQQzsKQEAgLTE3NzksMTUgKzE3ODEsMTUgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRp
b25zKHYpKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHY7Ci0gICAgICAgICAgICBj
YWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIodik7Cisg
ICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlhdGU6OmRl
Y0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiBudW1iZXIgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvSlNO
dW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgbnVtYmVyID0gY2FsbEZy
YW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IG51bWJlcjsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSk7CisgICAgICAgICAg
ICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBudW1i
ZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpOwogICAgICAgICB9CiAKICAgICAgICAgKyt2
UEM7CkBAIC0xODAyLDEyICsxODA0LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGUKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAg
ICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBzcmNW
YWwgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgc3JjVmFsID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAg
IGlmIChMSUtFTFkoc3JjVmFsLT5pc051bWJlcigpKSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gY2FsbEZyYW1lW3NyY107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gc3JjVmFsLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IHNyY1ZhbC0+dG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE4MjIsMTMgKzE4MjQsMTMgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICByZXN1bHQgaW4gcmVnaXN0
ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjID0gY2FsbEZyYW1lWygr
K3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICArK3ZQQzsKICAg
ICAgICAgZG91YmxlIHY7CiAgICAgICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjLCB2KSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCAtdik7CisgICAgICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCAtdikp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgLXNyYy0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1Zh
bHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgLXNyYy0+dG9OdW1iZXIoY2FsbEZy
YW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTg0MywxMiArMTg0NSwxMiBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIG51
bWVyaWMgYWRkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGVzIG9mIHRoZSBvcGVyYW5kcy4pCiAgICAg
ICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxG
cmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0
aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHNy
YzIpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6YWRkSW1tZWRp
YXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNW
YWx1ZVB0cihKU0ltbWVkaWF0ZTo6YWRkSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNBZGQoY2FsbEZy
YW1lLCBzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNBZGQo
Y2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0x
ODYyLDIxICsxODY0LDIxIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShF
eGUKICAgICAgICAgICAgbnVtYmVycyksIGFuZCBwdXRzIHRoZSBwcm9kdWN0IGluIHJlZ2lzdGVy
IGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBz
cmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJsZSBsZWZ0OwogICAgICAgICBkb3VibGUg
cmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
c3JjMSwgc3JjMikpIHsKICAgICAgICAgICAgIGludDMyX3QgbGVmdCA9IEpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRJbnQzMihzcmMxKTsKICAgICAgICAgICAgIGludDMyX3QgcmlnaHQgPSBKU0lt
bWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoc3JjMik7CiAgICAgICAgICAgICBpZiAoKGxlZnQg
fCByaWdodCkgPj4gMTUgPT0gMCkKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpz
TnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAqIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0ICogcmlnaHQpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVt
YmVyKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihsZWZ0KSAqIHN0YXRpY19jYXN0PGRv
dWJsZT4ocmlnaHQpKTsKKyAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQ
dHIoanNOdW1iZXIoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxkb3VibGU+KGxlZnQpICogc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyaWdodCkpKTsKICAgICAgICAgfSBlbHNlIGlmIChmYXN0SXNOdW1iZXIo
c3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0ICogcmlnaHQpOworICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVm
dCAqIHJpZ2h0KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpICogc3JjMi0+
dG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAqIHNyYzItPnRvTnVt
YmVyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE4OTIsMTQg
KzE4OTQsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAg
ICAgICAgICBxdW90aWVudCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGlu
dCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGRpdmlkZW5kID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAg
ICBKU1ZhbHVlKiBkaXZpc29yID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGRpdmlkZW5kID0gY2FsbEZyYW1lWygr
K3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IGRpdmlzb3IgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CiAgICAgICAgIGRvdWJsZSBsZWZ0OwogICAgICAgICBkb3VibGUgcmlnaHQ7CiAgICAgICAg
IGlmIChmYXN0SXNOdW1iZXIoZGl2aWRlbmQsIGxlZnQpICYmIGZhc3RJc051bWJlcihkaXZpc29y
LCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFt
ZSwgbGVmdCAvIHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0
cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgLyByaWdodCkpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgZGl2aWRlbmQt
PnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBkaXZpc29yLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAg
ICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBkaXZpZGVu
ZC0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIGRpdmlzb3ItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwog
ICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE5MTcsMTcgKzE5MTksMTcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgZGl2aWRlbmQg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkaXZpc29yID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGRpdmlkZW5kVmFsdWUgPSBjYWxsRnJhbWVbZGl2
aWRlbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogZGl2aXNvclZhbHVl
ID0gY2FsbEZyYW1lW2Rpdmlzb3JdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBkaXZpZGVuZFZhbHVlID0gY2FsbEZyYW1lW2RpdmlkZW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZGl2aXNvclZhbHVlID0gY2FsbEZyYW1lW2Rpdmlzb3Jd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJ
bW1lZGlhdGVOdW1iZXJzKGRpdmlkZW5kVmFsdWUsIGRpdmlzb3JWYWx1ZSkgJiYgZGl2aXNvclZh
bHVlICE9IEpTSW1tZWRpYXRlOjpmcm9tKDApKSB7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IEpTSW1tZWRpYXRlOjpmcm9tKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihkaXZp
ZGVuZFZhbHVlKSAlIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihkaXZpc29yVmFsdWUp
KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6
ZnJvbShKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aWRlbmRWYWx1ZSkgJSBKU0lt
bWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVlKSkpOwogICAgICAgICAgICAg
Kyt2UEM7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBkb3VibGUgZCA9IGRpdmlkZW5kVmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSk7Ci0gICAg
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgZm1vZChkLCBkaXZpc29y
VmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSkpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBqc051bWJlcihjYWxsRnJhbWUsIGZtb2QoZCwgZGl2aXNvclZhbHVlLT50b051bWJlcihjYWxs
RnJhbWUpKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwpAQCAtMTk0MSwxNiArMTk0MywxNiBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHJl
Z2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGRvdWJsZSBsZWZ0OwogICAgICAgICBk
b3VibGUgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVP
cGVyYXRpb25zKHNyYzEpICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlv
bnMoc3JjMikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpzdWJJ
bW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSBKU1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIp
KTsKICAgICAgICAgZWxzZSBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051
bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgbGVmdCAtIHJpZ2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgLSByaWdodCkpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwg
c3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEt
PnRvTnVtYmVyKGNhbGxGcmFtZSkgLSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xOTY1LDE2ICsxOTY3LDE2IEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbCA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJfdCBsZWZ0OwogICAgICAgICB1aW50MzJfdCBy
aWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2
YWwsIHNoaWZ0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZy
YW1lLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSk7CisgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBKU0ltbWVkaWF0ZTo6Z2V0
VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihz
aGlmdCkgJiAweDFmKSkpOwogICAgICAgICBlbHNlIGlmIChmYXN0VG9JbnQzMih2YWwsIGxlZnQp
ICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2Rz
dF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpOworICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVm
dCA8PCAocmlnaHQgJiAweDFmKSkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUp
KSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CisgICAgICAgICAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+dG9JbnQzMihjYWxs
RnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTk5MCwxNiArMTk5MiwxNiBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRz
IHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2YWwgPSBjYWxsRnJhbWVb
KCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUq
IHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzaGlmdCA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50MzJf
dCBsZWZ0OwogICAgICAgICB1aW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRl
OjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRp
YXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7CiAgICAgICAgIGVs
c2UgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdo
dCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVm
dCA+PiAocmlnaHQgJiAweDFmKSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFs
dWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0ID4+IChyaWdodCAmIDB4MWYpKSk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZy
YW1lLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZy
YW1lKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIo
Y2FsbEZyYW1lLCAodmFsLT50b0ludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIo
Y2FsbEZyYW1lKSAmIDB4MWYpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
ICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0yMDE1
LDEyICsyMDE3LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgdWludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHZhbCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+
dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2ZSh2YWwpKQotICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0
ZU51bWJlcnModmFsLCBzaGlmdCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFs
dWVQdHIoSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihjYWxsRnJhbWUsICh2YWwtPnRvVUludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50
MzIoY2FsbEZyYW1lKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
anNOdW1iZXIoY2FsbEZyYW1lLCAodmFsLT50b1VJbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQt
PnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAg
fQpAQCAtMjAzNiwxNiArMjAzOCwxNiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlCiAgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAg
ICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAg
ICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAg
ICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpT
SW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKLSAgICAgICAg
ICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnMoc3Jj
MSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1l
ZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogICAgICAgICBlbHNlIGlm
IChmYXN0VG9JbnQzMihzcmMxLCBsZWZ0KSAmJiBmYXN0VG9JbnQzMihzcmMyLCByaWdodCkpCi0g
ICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAmIHJp
Z2h0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihj
YWxsRnJhbWUsIGxlZnQgJiByaWdodCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJh
bWUpICYgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgJiBz
cmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAg
LTIwNjEsMTYgKzIwNjMsMTYgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZQogICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGlu
dCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpT
VmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBp
bnQzMl90IGxlZnQ7CiAgICAgICAgIGludDMyX3QgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCi0gICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNy
YzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRpYXRl
Ojp4b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKICAgICAgICAgZWxzZSBpZiAoZmFz
dFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgXiByaWdodCk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZy
YW1lLCBsZWZ0IF4gcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1lKSBe
IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIF4gc3JjMi0+
dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
ICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0yMDg2
LDE2ICsyMDg4LDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAg
aW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNh
bGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAg
SlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IGludDMyX3QgbGVmdDsKICAgICAgICAgaW50MzJfdCByaWdodDsKICAgICAgICAgaWYgKEpTSW1t
ZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKLSAgICAgICAgICAg
IGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBz
cmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0
ZTo6b3JJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKICAgICAgICAgZWxzZSBpZiAoZmFz
dFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgfCByaWdodCk7
CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZy
YW1lLCBsZWZ0IHwgcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1lKSB8
IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpIHwgc3JjMi0+
dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
ICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0yMTEw
LDEyICsyMTEyLDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAg
ICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFs
dWUqIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgdmFsdWU7CiAgICAgICAgIGlm
IChmYXN0VG9JbnQzMihzcmMsIHZhbHVlKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
anNOdW1iZXIoY2FsbEZyYW1lLCB+dmFsdWUpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgfnZhbHVlKSk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB+c3Jj
LT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c051bWJlcihjYWxsRnJhbWUsIH5zcmMtPnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJl
c3VsdDsKICAgICAgICAgfQpAQCAtMjEzMCw3ICsyMTMyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZVtzcmNdLmpzVmFs
dWUoY2FsbEZyYW1lKS0+dG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgICAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpLT50
b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAKQEAgLTIxNTUsNyArMjE1Nyw3IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGJhc2Ug
PSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgYmFzZVByb3RvID0gdlBDWzRdLnUub3Bl
cmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsID0gY2FsbEZyYW1lW2Jh
c2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoaXNOb3RPYmplY3QoY2FsbEZy
YW1lLCB0cnVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2UEMsIGJhc2VWYWwsIGV4Y2VwdGlv
blZhbHVlKSkKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CkBAIC0yMTc0LDcgKzIxNzYsNyBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAg
ICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNUeXBlU3RyaW5n
Rm9yVmFsdWUoY2FsbEZyYW1lLCBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwor
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNUeXBlU3RyaW5nRm9yVmFsdWUo
Y2FsbEZyYW1lLCBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFtZSkpKTsKIAogICAgICAg
ICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMjE4OCw3ICsyMTkwLDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwog
ICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY10u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbc3Jj
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNCb29sZWFu
KEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVkKCkgOiB2LT5hc0Nl
bGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKTsK
IAogICAgICAgICArK3ZQQzsKQEAgLTIyNzcsMTMgKzIyNzksMTMgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJvcGVydHkgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBiYXNlID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0g
ICAgICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWwgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1
ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoaXNOb3RPYmplY3QoY2FsbEZyYW1lLCBmYWxzZSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgdlBDLCBiYXNlVmFsLCBleGNlcHRpb25WYWx1ZSkpCiAg
ICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0g
YXNPYmplY3QoYmFzZVZhbCk7CiAKLSAgICAgICAgSlNWYWx1ZSogcHJvcE5hbWUgPSBjYWxsRnJh
bWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm9w
TmFtZSA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAg
IHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChwcm9wTmFtZS0+Z2V0VUludDMyKGkpKQpAQCAtMjM2
Myw3ICsyMzY1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICBpbnQgaW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1
ZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIHNjb3BlLT5yZWdpc3Rl
ckF0KGluZGV4KSA9IGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBKU1ZhbHVlUHRyKGNhbGxGcmFtZVt2YWx1ZV0u
anNWYWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKICAgICB9ICAgICAgICAgICAgCkBAIC0yNDExLDcgKzI0MTMsNyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAKICAgICAgICAgQVNTRVJUKCgqaXRl
ciktPmlzVmFyaWFibGVPYmplY3QoKSk7CiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHNjb3Bl
ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KCppdGVyKTsKLSAgICAgICAgc2NvcGUt
PnJlZ2lzdGVyQXQoaW5kZXgpID0gY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CisgICAgICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KSA9IEpTVmFsdWVQdHIoY2FsbEZyYW1l
W3ZhbHVlXS5qc1ZhbHVlKGNhbGxGcmFtZSkpOwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwogICAgIH0KQEAgLTI0NzksOSArMjQ4MSw5IEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKLSAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKKyAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90
KTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCiAgICAgICAgIHRyeUNhY2hlR2V0
QnlJRChjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsK
QEAgLTI0OTgsNyArMjUwMCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGUKICAgICAgICAgICAgb3BfZ2V0X2J5X2lkLgogICAgICAgICAqLwogICAgICAgICBpbnQg
YmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNh
bGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBp
ZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSkpIHsKICAgICAg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBhc0NlbGwoYmFzZVZhbHVlKTsKQEAgLTI1MTEsNyAr
MjUxMyw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzVdLnUub3BlcmFuZDsKIAogICAgICAgICAgICAg
ICAgIEFTU0VSVChiYXNlT2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pZGVudGlmaWVyKHZQQ1szXS51Lm9wZXJhbmQpKSA9PSBiYXNlT2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBiYXNl
T2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIoYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkp
OwogCiAgICAgICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwpAQCAtMjUyOSw3ICsyNTMxLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KICAg
ICAgICAgKi8KICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBK
U1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwor
ICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRl
KGJhc2VWYWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXNDZWxsKGJh
c2VWYWx1ZSk7CkBAIC0yNTQ1LDcgKzI1NDcsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbNl0u
dS5vcGVyYW5kOwogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+Z2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcih2UENbM10udS5v
cGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zm
c2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1
ZVB0cihwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CkBAIC0yNTc4LDcgKzI1ODAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlCiAgICAgICAgICAgIHJldmVydHMgdG8gb3BfZ2V0X2J5X2lkLgogICAgICAgICAq
LwogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKIAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZh
bHVlKSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBhc0NlbGwoYmFzZVZhbHVl
KTsKQEAgLTI2MDAsNyArMjYwMiw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSB2UENbN10udS5v
cGVyYW5kOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcih2UENbM10udS5v
cGVyYW5kKSkgPT0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBiYXNlT2JqZWN0LT5nZXREaXJlY3RP
ZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
SlNWYWx1ZVB0cihiYXNlT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgTkVY
VF9JTlNUUlVDVElPTigpOwpAQCAtMjYyMyw5ICsyNjI1LDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbM10udS5v
cGVyYW5kOwogCiAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIg
YmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
YmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CisgICAgICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CiAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJl
c3VsdDsKQEAgLTI2NDEsMTAgKzI2NDMsMTAgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJh
bWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoTElLRUxZKGlzSlNBcnJh
eShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgYXNBcnJh
eShiYXNlVmFsdWUpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpT
VmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBhc0FycmF5KGJhc2VWYWx1ZSktPmxlbmd0aCgp
KSk7CiAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKICAgICAgICAgfQpAQCAtMjY2MSwxMCArMjY2MywxMCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAKICAgICAgICAgaW50IGJhc2UgPSB2
UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVb
YmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChMSUtFTFko
aXNKU1N0cmluZyhiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFt
ZSwgYXNTdHJpbmcoYmFzZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkpOworICAgICAgICAgICAgY2Fs
bEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkpKTsKICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkBAIC0yNjg3LDcgKzI2ODksNyBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCB2
YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBj
YWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJh
c2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIElk
ZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGJhc2VWYWx1ZS0+cHV0KGNhbGxGcmFt
ZSwgaWRlbnQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpLCBzbG90KTsKQEAg
LTI3MTAsNyArMjcxMiw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShF
eGUKICAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgICAqLwogICAgICAgICBp
bnQgYmFzZSA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIg
YmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUp
KSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFzQ2VsbChiYXNlVmFsdWUpOwpA
QCAtMjcyMyw3ICsyNzI1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZQogCiAgICAgICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4qIGl0ID0gdlBDWzZdLnUu
c3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKIAotICAgICAgICAgICAgICAgIEpTVmFsdWUqIHByb3Rv
ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgd2hp
bGUgKCFwcm90by0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KGFzT2JqZWN0KHByb3RvKS0+c3RydWN0dXJlKCkgIT0gKCppdCkuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmNhY2hlUHV0QnlJRChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCB2
UEMpOwpAQCAtMjc2MCw3ICsyNzYyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgKi8KICAg
ICAgICAgaW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNl
VmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAK
ICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkp
KSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXNDZWxsKGJhc2VWYWx1ZSk7CkBA
IC0yNzk2LDcgKzI3OTgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgIGludCBwcm9wZXJ0eSA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCB2YWx1ZSA9IHZQQ1szXS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVl
ID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIo
cHJvcGVydHkpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYmFzZVZh
bHVlLT5wdXQoY2FsbEZyYW1lLCBpZGVudCwgY2FsbEZyYW1lW3ZhbHVlXS5qc1ZhbHVlKGNhbGxG
cmFtZSksIHNsb3QpOwpAQCAtMjgxOSw3ICsyODIxLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gY2FsbEZy
YW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9PYmplY3QoY2FsbEZyYW1lKTsKICAgICAg
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KHByb3BlcnR5KTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmot
PmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCBpZGVu
dCkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmVzdWx0OwogICAgICAgICArK3ZQQzsKQEAgLTI4MzcsMTAgKzI4MzksMTAgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgYmFzZSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1l
W2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0g
Y2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVQdHIg
cmVzdWx0OwogICAgICAgICB1bnNpZ25lZCBpOwogCiAgICAgICAgIGJvb2wgaXNVSW50MzIgPSBK
U0ltbWVkaWF0ZTo6Z2V0VUludDMyKHN1YnNjcmlwdCwgaSk7CkBAIC0yODgwLDggKzI4ODIsOCBA
QCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBw
cm9wZXJ0eSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHZhbHVlID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVti
YXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9IGNh
bGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CiAKICAgICAgICAgdW5zaWduZWQgaTsKIApAQCAtMjkyMSw4ICsyOTIzLDggQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIEpTT2JqZWN0
KiBiYXNlT2JqID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9PYmplY3Qo
Y2FsbEZyYW1lKTsgLy8gbWF5IHRocm93CiAKLSAgICAgICAgSlNWYWx1ZSogc3Vic2NyaXB0ID0g
Y2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBjYWxsRnJhbWVbcHJvcGVy
dHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAg
ICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihpKSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxs
RnJhbWUsIGkpKTsKQEAgLTMwNTAsNyArMzA1Miw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogc3JjVmFsdWUgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjVmFsdWUgPSBjYWxsRnJhbWVbc3JjXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyY1ZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgp
IHx8ICghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHNyY1ZhbHVlKSAmJiBzcmNWYWx1ZS0+YXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSkp
IHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CkBAIC0zMDY4LDcgKzMwNzAsNyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAg
IGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyY1ZhbHVlID0gY2FsbEZyYW1lW3Ny
Y10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyY1ZhbHVlID0gY2Fs
bEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmICghc3JjVmFsdWUt
PmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoc3JjVmFs
dWUpICYmICFzcmNWYWx1ZS0+YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQoKSkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CkBAIC0z
MDg5LDggKzMwOTEsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1p
bmF0ZSBKUyBleGVjdXRpb24gaXMKICAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hl
ZC4KICAgICAgICAgICovCi0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBD
KS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQgdGFyZ2V0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICAKICAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xl
c3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTMxMTYsOCArMzExOCw4IEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgQWRkaXRpb25hbGx5
IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBtYXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcwogICAg
ICAgICAgICB0aGUgSlMgdGltZW91dCBpcyByZWFjaGVkLgogICAgICAgICAqLwotICAgICAgICBK
U1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgaW50IHRhcmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAg
ICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMy
KTsKQEAgLTMxNDAsOCArMzE0Miw4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24s
IGlmIGFuZCBvbmx5IGlmIHRoZSAKICAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29u
IGlzIGZhbHNlLgogICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1l
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVl
KiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50IHRh
cmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVz
cyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwpAQCAtMzE2Niw3ICszMTY4LDcgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgKi8KICAgICAgICAgaW50
IHRhYmxlSW5kZXggPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkZWZhdWx0T2Zm
c2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoIUpTSW1tZWRpYXRlOjppc051bWJlcihzY3J1
dGluZWUpKQogICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgIGVsc2Ug
ewpAQCAtMzE4Niw3ICszMTg4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAgKi8KICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc2NydXRpbmVlID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBpZiAoIXNjcnV0aW5lZS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0
T2Zmc2V0OwogICAgICAgICBlbHNlIHsKQEAgLTMyMDksNyArMzIxMSw3IEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICovCiAgICAgICAgIGludCB0
YWJsZUluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9mZnNl
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBK
U1ZhbHVlUHRyIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFzY3J1dGluZWUtPmlzU3RyaW5nKCkpCiAgICAg
ICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAgZWxzZSAKQEAgLTMyNjUsMTUg
KzMyNjcsMTUgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAg
ICAgICBpbnQgYXJnQ291bnQgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGZ1bmNWYWwg
PSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IGZ1bmNWYWwgPSBjYWxsRnJhbWVbZnVuY10uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAg
IFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0
ZXJPZmZzZXQ7CiAgICAgICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7Ci0gICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2Jh
bE9iamVjdCgpOwogCiAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0gZ2xvYmFsT2JqZWN0ICYmIGZ1
bmNWYWwgPT0gZ2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gY2FsbEV2YWwoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3YsIGFy
Z0NvdW50LCByZWdpc3Rlck9mZnNldCwgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBjYWxsRXZhbChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwg
YXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKICAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwpAQCAtMzMwMiw3ICszMzA0LDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgYXJnQ291
bnQgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2UENb
NF0udS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbZnVuY10uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbZnVuY10u
anNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IHYtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKQEAgLTMzNDAs
MTggKzMzNDIsMTggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICAgICAgQXJnTGlzdCBhcmdzKHRoaXNSZWdpc3RlciArIDEsIGFyZ0NvdW50IC0gMSk7
CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgaG9zdCBtZXRob2RzIHNob3VsZCBiZSBjYWxs
aW5nIHRvVGhpc09iamVjdCwgYnV0IHRoaXMgaXMgbm90IHByZXNlbnRseSB0aGUgY2FzZS4KLSAg
ICAgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IHRoaXNSZWdpc3Rlci0+anNWYWx1ZShjYWxs
RnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB0aGlzVmFsdWUgPSB0aGlzUmVnaXN0ZXIt
PmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0ganNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFs
dWUoKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBK
U1ZhbHVlUHRyIHJldHVyblZhbHVlOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNh
bXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIpOwogICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxG
cmFtZSwgYXNPYmplY3QodiksIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQ
dHIocmV0dXJuVmFsdWUpOwogCiAgICAgICAgICAgICB2UEMgKz0gNTsKICAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM0MTgsNyArMzQyMCw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKICAgICAgICAgICAgIGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5kZXJlZigpOwogCi0gICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gY2FsbEZy
YW1lW3Jlc3VsdF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHJldHVy
blZhbHVlID0gY2FsbEZyYW1lW3Jlc3VsdF0uanNWYWx1ZShjYWxsRnJhbWUpOwogCiAgICAgICAg
IHZQQyA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKTsKICAgICAgICAgaW50IGRzdCA9IGNhbGxGcmFt
ZS0+cmV0dXJuVmFsdWVSZWdpc3RlcigpOwpAQCAtMzQyNyw3ICszNDI5LDcgQEAgSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpZiAoY2FsbEZyYW1lLT5o
YXNIb3N0Q2FsbEZyYW1lRmxhZygpKQogICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmV0dXJuVmFsdWU7CisgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gSlNWYWx1ZVB0cihyZXR1cm5WYWx1ZSk7CiAKICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwogICAgIH0KQEAgLTM0OTcsOSArMzQ5OSw5IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KIAogICAgICAgICBpbnQgdGhpc1JlZ2lz
dGVyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsID0gY2Fs
bEZyYW1lW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHRo
aXNWYWwgPSBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXS5nZXRKU1ZhbHVlKCk7CiAgICAgICAgIGlm
ICh0aGlzVmFsLT5uZWVkc1RoaXNDb252ZXJzaW9uKCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVb
dGhpc1JlZ2lzdGVyXSA9IHRoaXNWYWwtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOworICAgICAg
ICAgICAgY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0gPSBKU1ZhbHVlUHRyKHRoaXNWYWwtPnRvVGhp
c09iamVjdChjYWxsRnJhbWUpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwpAQCAtMzU0NCw3ICszNTQ2LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQgcHJvdG8gPSB2UENbNV0udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gdlBDWzZdLnUub3BlcmFuZDsKIAotICAgICAgICBK
U1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAg
ICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgICAgIENvbnN0cnVjdFR5cGUg
Y29uc3RydWN0VHlwZSA9IHYtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSk7CkBAIC0z
NTU1LDE0ICszNTU3LDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShF
eGUKICAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5v
ZGUtPmJ5dGVjb2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7CiAKICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlOwotICAgICAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gY2FsbEZyYW1l
W3Byb3RvXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHByb3Rv
dHlwZSA9IGNhbGxGcmFtZVtwcm90b10uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICAgICAg
aWYgKHByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBh
c09iamVjdChwcm90b3R5cGUpLT5pbmhlcml0b3JJRCgpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGNhbGxEYXRhU2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0
KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgICAgICBKU09iamVjdCogbmV3T2Jq
ZWN0ID0gbmV3IChnbG9iYWxEYXRhKSBKU09iamVjdChzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAg
ICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IG5ld09iamVjdDsgLy8gInRoaXMiIHZhbHVlCisg
ICAgICAgICAgICBjYWxsRnJhbWVbdGhpc1JlZ2lzdGVyXSA9IEpTVmFsdWVQdHIobmV3T2JqZWN0
KTsgLy8gInRoaXMiIHZhbHVlCiAKICAgICAgICAgICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxs
RnJhbWUgPSBjYWxsRnJhbWU7CiAKQEAgLTM1OTAsMTMgKzM1OTIsMTMgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdD
YWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIDcs
IHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgMCk7CiAKLSAgICAgICAgICAg
IEpTVmFsdWUqIHJldHVyblZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXR1cm5WYWx1
ZTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxs
UmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyKTsKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSwgYXNPYmplY3Qo
diksIGFyZ3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXR1cm5WYWx1ZTsKKyAgICAgICAg
ICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXR1cm5WYWx1ZSk7CiAKICAgICAgICAg
ICAgIHZQQyArPSA3OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzYzNCwx
MSArMzYzNiwxMSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAg
ICAgICAgICAgIGFyZSByZXBsYWNlZCBieSB0aGUgcmVzdWx0IG9mIHRvT2JqZWN0IGNvbnZlcnNp
b24gb2YgdGhlIHNjb3BlLgogICAgICAgICAqLwogICAgICAgICBpbnQgc2NvcGUgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc2NvcGVdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3Njb3BlXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIEpTT2JqZWN0KiBvID0gdi0+dG9PYmplY3QoY2Fs
bEZyYW1lKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCi0gICAgICAgIGNhbGxG
cmFtZVtzY29wZV0gPSBvOworICAgICAgICBjYWxsRnJhbWVbc2NvcGVdID0gSlNWYWx1ZVB0cihv
KTsKICAgICAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFp
bigpLT5wdXNoKG8pKTsKIAogICAgICAgICArK3ZQQzsKQEAgLTM2ODMsOSArMzY4NSw5IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHRhcmdl
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAogICAgICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBpdCA9IGNhbGxGcmFtZVtpdGVyXS5wcm9wZXJ0eU5hbWVJdGVyYXRvcigpOwotICAgICAgICBp
ZiAoSlNWYWx1ZSogdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKEpT
VmFsdWVQdHIgdGVtcCA9IGl0LT5uZXh0KGNhbGxGcmFtZSkpIHsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9USU1FT1VUKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHRlbXA7CisgICAg
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIodGVtcCk7CiAgICAgICAgICAgICB2
UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9
CkBAIC0zNzc3LDcgKzM3NzksNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dW5leHBlY3RlZENvbnN0YW50KHNyYyk7
CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT51bmV4cGVjdGVkQ29uc3RhbnQoc3JjKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAg
IE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM3OTUsNyArMzc5Nyw3IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IG1lc3NhZ2UgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEVycm9yOjpjcmVhdGUoY2Fs
bEZyYW1lLCAoRXJyb3JUeXBlKXR5cGUsIGNvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KG1l
c3NhZ2UpLT50b1N0cmluZyhjYWxsRnJhbWUpLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldCh2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpLCBjb2Rl
QmxvY2stPm93bmVyTm9kZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPm93bmVyTm9kZSgpLT5z
b3VyY2VVUkwoKSk7CisgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihFcnJvcjo6
Y3JlYXRlKGNhbGxGcmFtZSwgKEVycm9yVHlwZSl0eXBlLCBjb2RlQmxvY2stPnVuZXhwZWN0ZWRD
b25zdGFudChtZXNzYWdlKS0+dG9TdHJpbmcoY2FsbEZyYW1lKSwgY29kZUJsb2NrLT5saW5lTnVt
YmVyRm9yQnl0ZWNvZGVPZmZzZXQodlBDIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpKSwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25l
ck5vZGUoKS0+c291cmNlVVJMKCkpKTsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwpAQCAtMzk1Niw3ICszOTU4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICN1bmRlZiBDSEVDS19GT1JfVElNRU9VVAogfQogCi1K
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKSBjb25zdAorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6
cmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uKSBjb25zdAogewogICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBmaW5kRnVu
Y3Rpb25DYWxsRnJhbWUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAgICAgaWYgKCFmdW5jdGlvbkNh
bGxGcmFtZSkKQEAgLTM5ODAsNyArMzk4Miw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpyZXRy
aWV2ZUFyZ3VtZW50cygKICAgICByZXR1cm4gYXJndW1lbnRzOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cmV0cmlldmVDYWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uKSBjb25zdAorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6cmV0cmlldmVD
YWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uKSBj
b25zdAogewogICAgIENhbGxGcmFtZSogZnVuY3Rpb25DYWxsRnJhbWUgPSBmaW5kRnVuY3Rpb25D
YWxsRnJhbWUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAgICAgaWYgKCFmdW5jdGlvbkNhbGxGcmFt
ZSkKQEAgLTM5OTAsMTQgKzM5OTIsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnJldHJpZXZl
Q2FsbGVyKENhbAogICAgIGlmIChjYWxsZXJGcmFtZS0+aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNWYWx1ZSogY2FsbGVyID0gY2FsbGVy
RnJhbWUtPmNhbGxlZSgpOworICAgIEpTVmFsdWVQdHIgY2FsbGVyID0gY2FsbGVyRnJhbWUtPmNh
bGxlZSgpOwogICAgIGlmICghY2FsbGVyKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAg
ICByZXR1cm4gY2FsbGVyOwogfQogCi12b2lkIEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxs
ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJj
ZUlELCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5jdGlvbikgY29uc3QKK3ZvaWQg
SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgaW50
JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNW
YWx1ZVB0ciYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgZnVuY3Rpb24gPSBub1ZhbHVlKCk7CiAg
ICAgbGluZU51bWJlciA9IC0xOwpAQCAtNDAzMSw3ICs0MDMzLDcgQEAgQ2FsbEZyYW1lKiBJbnRl
cnByZXRlcjo6ZmluZEZ1bmN0aW9uQ2FsbAogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9Q
RVJUWV9BQ0NFU1MpCiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWNo
ZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lk
KiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKK05FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWNoZVB1dEJ5
SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiByZXR1
cm5BZGRyZXNzLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIC8vIFRoZSBpbnRlcnByZXRlciBjaGVja3MgZm9yIHJlY3Vyc2lvbiBoZXJl
OyBJIGRvIG5vdCBiZWxpZXZlIHRoaXMgY2FuIG9jY3VyIGluIENUSS4KIApAQCAtNDA4OCw3ICs0
MDkwLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OnRyeUNUSUNhYwogI2VuZGlm
CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWNoZUdldEJ5SUQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiByZXR1cm5B
ZGRyZXNzLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0
ZXI6OnRyeUNUSUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sg
Zm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAvLyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2Vz
LCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCkBAIC00MjgzLDcgKzQyODUsNyBAQCBK
U09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb252ZXJ0X3RoCiB7CiAgICAgQkVHSU5fU1RV
Ql9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdjEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVl
UHRyIHYxID0gQVJHX3NyYzE7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IHYxLT50b1RoaXNPYmplY3QoY2FsbEZyYW1l
KTsKQEAgLTQzMDAsMTkgKzQzMDIsMTkgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX2VuZChT
VFVCX0FSR1MpCiAgICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9hZGQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIElu
dGVycHJldGVyOjpjdGlfb3BfYWRkKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2MSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHYyID0g
QVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciB2MSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
djIgPSBBUkdfc3JjMjsKIAogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodCA9IDAu
MDsKIAogICAgIGJvb2wgcmlnaHRJc051bWJlciA9IGZhc3RJc051bWJlcih2MiwgcmlnaHQpOwog
ICAgIGlmIChyaWdodElzTnVtYmVyICYmIGZhc3RJc051bWJlcih2MSwgbGVmdCkpCi0gICAgICAg
IHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCArIHJpZ2h0KTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAr
IHJpZ2h0KSk7CiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OwogCkBAIC00MzI0LDcgKzQzMjYsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2Fk
ZChTVFVCX0FSCiAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhBUkdfZ2xvYmFsRGF0YSwgdmFsdWUucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc1N0cmluZyhBUkdfZ2xvYmFs
RGF0YSwgdmFsdWUucmVsZWFzZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIg
JiBsZWZ0SXNTdHJpbmcpIHsKQEAgLTQzMzYsMjUgKzQzMzgsMjUgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9hZGQoU1RVQl9BUgogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4ganNTdHJpbmcoQVJHX2dsb2JhbERhdGEsIHZhbHVlLnJlbGVh
c2UoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNTdHJpbmcoQVJHX2ds
b2JhbERhdGEsIHZhbHVlLnJlbGVhc2UoKSkpOwogICAgIH0KIAogICAgIC8vIEFsbCBvdGhlciBj
YXNlcyBhcmUgcHJldHR5IHVuY29tbW9uCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNBZGRTbG93
Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0FkZFNs
b3dDYXNlKGNhbGxGcmFtZSwgdjEsIHYyKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9pbmMoU1RVQl9B
UkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2lu
YyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1
ZSogdiA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgdiA9IEFSR19zcmMxOwogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051bWJlcihjYWxsRnJhbWUpICsgMSk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1i
ZXIoY2FsbEZyYW1lKSArIDEpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKIGludCBJbnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2soU1RVQl9BUkdTKQpAQCAt
NDM4OCw4ICs0MzkwLDggQEAgaW50IEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKFNU
VQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBB
Ukdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBz
cmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgYm9vbCByZXN1bHQgPSBq
c0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTQ0MDEsOCArNDQwMyw4IEBAIGludCBJ
bnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKFMKIHsKICAgICBCRUdJTl9TVFVCX0ZV
TkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSog
c3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpT
VmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKIAogICAgIGJvb2wgcmVzdWx0ID0ganNMZXNzRXEoY2FsbEZyYW1lLCBzcmMx
LCBzcmMyKTsKQEAgLTQ0MjYsMTkgKzQ0MjgsMTkgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29w
X3B1dF9ieV9pZF9nZW5lcgogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAK
LUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMoU1RVQl9BUkdT
KQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBp
ZGVudCA9ICpBUkdfaWQyOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7Cisg
ICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5n
ZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FU
X0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29k
ZShyZXN1bHQpOwogfQogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1Mp
CkBAIC00NDgxLDUwICs0NDgzLDUwIEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlf
aWRfZmFpbCgKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCi1KU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWQoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKICAgICBJZGVudGlmaWVyJiBpZGVudCA9ICpBUkdfaWQyOwogCi0gICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUg
PSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xv
dCk7CiAKICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVT
UywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9ieV9pZF9zZWNvbmQpKTsKIAog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKFNUVUJfQVJH
UykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsK
IAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFz
ZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRl
bnQsIHNsb3QpOwogCiAgICAgQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT50cnlDVElDYWNo
ZUdldEJ5SUQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX3NlbGZfZmFpbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsKIAotICAgIEpTVmFsdWUq
IGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3Ny
YzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCiAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCkBAIC00NTU4LDcgKzQ1NjAsNyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwogICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZ2V0UG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGludCYg
bGlzdEluZGV4KQpAQCAtNDU5MCwyMSArNDU5MiwyMSBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgcmV0dXJuIHByb3RvdHlwZVN0cnVjdHVyZUxpc3Q7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RV
Ql9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04o
KTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpT
VmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0g
QVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgKkFSR19pZDIs
IHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCiAgICAgaWYgKEpTSW1tZWRp
YXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUpIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkgfHwgYXND
ZWxsKGJhc2VWYWx1ZSktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsK
ICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFzQ2VsbChiYXNlVmFsdWUpLT5z
dHJ1Y3R1cmUoKTsKQEAgLTQ2NDgsNjcgKzQ2NTAsNjcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfcAogICAgIH0gZWxzZQogICAgICAgICBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19s
aXN0X2Z1bGwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAg
IEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVl
ID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xv
dCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChBUkdfY2FsbEZyYW1l
LCAqQVJHX2lkMiwgc2xvdCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWls
KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVl
UHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwg
KkFSR19pZDIsIHNsb3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQo
QVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlf
aWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpCiB7CiAgICAgQkVH
SU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7
CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFS
R19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJh
c2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKIAogICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogYmFzZVZh
bHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJh
c2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90
KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNlbmRpZgog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTKQorSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaW5zdGFuY2VvZihTVFVC
X0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHZhbHVlID0gQVJHX3NyYzE7
Ci0gICAgSlNWYWx1ZSogYmFzZVZhbCA9IEFSR19zcmMyOwotICAgIEpTVmFsdWUqIHByb3RvID0g
QVJHX3NyYzM7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgYmFzZVZhbCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBBUkdfc3JjMzsK
IAogICAgIC8vIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBjaGVja3MgbXVzdCBoYXZlIGZhaWxlZCB0
byBnZXQgdG8gdGhlIHNsb3cgY2FzZQogICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNBbnlJbW1l
ZGlhdGUodmFsdWUsIGJhc2VWYWwsIHByb3RvKSAKQEAgLTQ3MjQsNyArNDcyNiw3IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfaW5zdGFuY2VvZigKICAgICB9CiAKICAgICBpZiAoIWFz
T2JqZWN0KGJhc2VWYWwpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5z
dGFuY2UoKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKICAgICBpZiAoIXByb3Rv
LT5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93RXJyb3IoY2FsbEZyYW1lLCBUeXBlRXJyb3Is
ICJpbnN0YW5jZW9mIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIHByb3RvdHlw
ZSBwcm9wZXJ0eS4iKTsKQEAgLTQ3MzIsMTUgKzQ3MzQsMTUgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKAogICAgIH0KICAgICAgICAgCiAgICAgaWYgKCF2YWx1ZS0+
aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZVZhbCktPmhhc0luc3RhbmNlKGNhbGxG
cmFtZSwgdmFsdWUsIHByb3RvKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4o
YXNPYmplY3QoYmFzZVZhbCktPmhhc0luc3RhbmNlKGNhbGxGcmFtZSwgdmFsdWUsIHByb3RvKSk7
CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQoU1RVQl9BUkdTKQogewogICAg
IEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIApAQCAtNDc0OCwyNyArNDc1MCwyNyBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9pZChTCiAgICAgCiAgICAgSlNPYmplY3QqIGJh
c2VPYmogPSBBUkdfc3JjMS0+dG9PYmplY3QoY2FsbEZyYW1lKTsKIAotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzQm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsICpBUkdf
aWQyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRl
UHJvcGVydHkoY2FsbEZyYW1lLCAqQVJHX2lkMikpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05f
QVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbXVsKFNUVUJf
QVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX211bChT
VFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSog
c3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1Zh
bHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsK
IAogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsKICAgICBpZiAoZmFzdElzTnVt
YmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgIHJl
dHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAqIHJpZ2h0KTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAqIHJp
Z2h0KSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVy
KGNhbGxGcmFtZSkgKiBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJh
bWUpICogc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogSlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1
bmMoU1RVQl9BUkdTKQpAQCAtNDg3OSwxMSArNDg4MSwxMSBAQCBKU09iamVjdCogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wdXNoX2FjdGl2CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKFNUVUJfQVJHUykKK0pT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGdW5j
dGlvbihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNW
YWx1ZSogZnVuY1ZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgZnVuY1ZhbCA9IEFSR19z
cmMxOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBm
dW5jVmFsLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC00OTAyLDEyICs0OTA0LDEyIEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0YKICAgICAgICAgUmVnaXN0ZXIq
IGFyZ3YgPSBBUkdfY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwogICAgICAgICBBcmdMaXN0IGFyZ0xpc3QoYXJndiAr
IDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWU7CisgICAg
ICAgIEpTVmFsdWVQdHIgcmV0dXJuVmFsdWU7CiAgICAgICAgIHsKICAgICAgICAgICAgIFNhbXBs
aW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7CiAKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBBbGwgaG9zdCBtZXRob2RzIHNob3VsZCBiZSBjYWxsaW5nIHRvVGhp
c09iamVjdCwgYnV0IHRoaXMgaXMgbm90IHByZXNlbnRseSB0aGUgY2FzZS4KLSAgICAgICAgICAg
IEpTVmFsdWUqIHRoaXNWYWx1ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICAgICAgSlNWYWx1ZVB0ciB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIGlmICh0aGlzVmFsdWUgPT0ganNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
dGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFsdWUoKTsKIApAQCAtNDkxNiw3ICs0
OTE4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRgogICAgICAg
ICBBUkdfc2V0Q2FsbEZyYW1lKHByZXZpb3VzQ2FsbEZyYW1lKTsKICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwogCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXR1cm5WYWx1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJU
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CkBAIC00OTkzLDcgKzQ5OTUsNyBAQCBKU09iamVj
dCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfYXJyYXkoCiAgICAgcmV0dXJuIGNvbnN0cnVjdEFy
cmF5KEFSR19jYWxsRnJhbWUsIGFyZ0xpc3QpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6
Y3RpX29wX3Jlc29sdmUoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCkBAIC01MDA5LDkgKzUwMTEsOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Jlc29sdmUoU1RVCiAgICAgICAgIEpTT2JqZWN0KiBvID0gKml0ZXI7CiAgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90KG8pOwogICAgICAgICBpZiAoby0+Z2V0UHJvcGVydHlTbG90KGNhbGxG
cmFtZSwgaWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgICAgIH0KICAg
ICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKIApAQCAtNTAzOCwxMyArNTA0MCwxMyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfCiAgICAgcmV0dXJuIG5ldyAoQVJH
X2dsb2JhbERhdGEpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KFNUVUJfQVJHUykKK0pTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0
cnVjdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogY29uc3Ry
VmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBjb25zdHJWYWwgPSBBUkdfc3JjMTsKICAg
ICBpbnQgYXJnQ291bnQgPSBBUkdfaW50MzsKICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gQVJHX2lu
dDU7CiAKQEAgLTUwNTQsMTQgKzUwNTYsMTQgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9jb25zdHJ1Y3RfTgogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0
KSB7CiAgICAgICAgIEFyZ0xpc3QgYXJnTGlzdChjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgdGhp
c1JlZ2lzdGVyICsgMSwgYXJnQ291bnQgLSAxKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR1cm5WYWx1ZTsKICAgICAgICAgewogICAgICAg
ICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVS
KTsKICAgICAgICAgICAgIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24oY2FsbEZyYW1lLCBhc09iamVjdChjb25zdHJWYWwpLCBhcmdMaXN0KTsKICAgICAgICAgfQog
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJldHVyblZhbHVlKTsKICAg
ICB9CiAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7CkBA
IC01MDcyLDE3ICs1MDc0LDE3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY29uc3Ry
dWN0X04KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTKQogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBBUkdfZ2xvYmFsRGF0YS0+aW50
ZXJwcmV0ZXI7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKLSAgICBKU1Zh
bHVlKiBzdWJzY3JpcHQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFS
R19zcmMxOworICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gQVJHX3NyYzI7CiAKLSAgICBKU1Zh
bHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgdW5zaWduZWQgaTsKIAog
ICAgIGJvb2wgaXNVSW50MzIgPSBKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKHN1YnNjcmlwdCwgaSk7
CkBAIC01MTAzLDcgKzUxMDUsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV92YWwoCiAgICAgfQogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2Z1bmMoU1RVQl9BUkdT
KQpAQCAtNTEzNCwxMCArNTEzNiwxMCBAQCBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfCiAgICAgICAgICAgICAvLyB0aGF0IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlz
IGdldCBhIHZhbGlkIG9iamVjdCBmb3IgdGhpcy4KICAgICAgICAgICAgIC8vIFdlIGFsc28gaGFu
ZGxlIHdyYXBwZXIgc3Vic3RpdHV0aW9uIGZvciB0aGUgZ2xvYmFsIG9iamVjdCBhdCB0aGUgc2Ft
ZSB0aW1lLgogICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBiYXNlLT50b1RoaXNPYmpl
Y3QoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFs
dWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNs
b3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OX0FUX0VORCgpOwogCi0gICAgICAgICAgICBSRVRVUk5fUEFJUih0aGlzT2JqLCBhc1Bv
aW50ZXIocmVzdWx0KSk7CisgICAgICAgICAgICBSRVRVUk5fUEFJUih0aGlzT2JqLCBKU1ZhbHVl
UHRyOjplbmNvZGUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyOwogICAgIH0g
d2hpbGUgKGl0ZXIgIT0gZW5kKTsKQEAgLTUxNDgsMjIgKzUxNTAsMjIgQEAgVm9pZFB0clBhaXIg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlXwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl8yKCk7
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bfc3ViKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N1YihTVFVCX0FSR1MpCiB7
CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19z
cmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEg
PSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIGRvdWJs
ZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsKICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxl
ZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJl
cihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAtIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAtIHJpZ2h0KSk7CiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkg
LSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUpIC0gc3JjMi0+
dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0
KTsKIH0KIAogdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTKQpA
QCAtNTE3Myw5ICs1MTc1LDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwo
U1RVQgogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBJbnRl
cnByZXRlciogaW50ZXJwcmV0ZXIgPSBBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXI7CiAKLSAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzdWJzY3JpcHQg
PSBBUkdfc3JjMjsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IEFSR19zcmMzOworICAgIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzdWJzY3JpcHQgPSBBUkdf
c3JjMjsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gQVJHX3NyYzM7CiAKICAgICB1bnNpZ25lZCBp
OwogCkBAIC01MjA2LDkgKzUyMDgsOSBAQCB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5
X3ZhbF9hcnJhCiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAK
LSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VW
YWx1ZSA9IEFSR19zcmMxOwogICAgIGludCBpID0gQVJHX2ludDI7Ci0gICAgSlNWYWx1ZSogdmFs
dWUgPSBBUkdfc3JjMzsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlID0gQVJHX3NyYzM7CiAKICAgICBB
U1NFUlQoQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5pc0pTQXJyYXkoYmFzZVZhbHVlKSk7
CiAKQEAgLTUyMjYsMjEgKzUyMjgsMjEgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV92YWxfYXJyYQogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfbGVzc2VxKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcShTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdf
Y2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3NFcShjYWxs
RnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNC
b29sZWFuKGpzTGVzc0VxKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogaW50IEludGVycHJldGVyOjpjdGlf
b3BfbG9vcF9pZl90cnVlKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0g
QVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAK
QEAgLTUyNDksMzAgKzUyNTEsMzAgQEAgaW50IEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl90
cnVlKFNUVQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfbmVnYXRlKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElP
TigpOwogCi0gICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMg
PSBBUkdfc3JjMTsKIAogICAgIGRvdWJsZSB2OwogICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjLCB2
KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAtdik7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC12KSk7
CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIC1zcmMtPnRvTnVtYmVyKGNhbGxG
cmFtZSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IC1zcmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9iYXNl
KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfYmFzZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
Ci0gICAgcmV0dXJuIGlubGluZVJlc29sdmVCYXNlKEFSR19jYWxsRnJhbWUsICpBUkdfaWQxLCBB
UkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNv
ZGUoaW5saW5lUmVzb2x2ZUJhc2UoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDEsIEFSR19jYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jl
c29sdmVfc2tpcChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXNvbHZlX3NraXAoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIApAQCAtNTI5Myw5ICs1Mjk1LDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9yZXNvbHZlX3NraQogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxs
RnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAg
ICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CiAKQEAgLTUzMDUsNyArNTMwNyw3IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9za2kKICAgICBWTV9USFJPV19FWENFUFRJ
T04oKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbChT
VFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9y
ZXNvbHZlX2dsb2JhbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
CkBAIC01MzE3LDcgKzUzMTksNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29s
dmVfZ2xvCiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOwogICAgIGlmIChn
bG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQp
OworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBp
ZGVudCk7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIWdsb2JhbE9iamVjdC0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgICAgICBHbG9iYWxSZXNvbHZl
SW5mbyYgZ2xvYmFsUmVzb2x2ZUluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nbG9iYWxS
ZXNvbHZlSW5mbyhnbG9iYWxSZXNvbHZlSW5mb0luZGV4KTsKICAgICAgICAgICAgIGlmIChnbG9i
YWxSZXNvbHZlSW5mby5zdHJ1Y3R1cmUpCkBAIC01MzI1LDExICs1MzI3LDExIEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG8KICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCktPnJlZigpOwogICAgICAgICAgICAgZ2xvYmFsUmVzb2x2ZUluZm8uc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIGdsb2JhbFJl
c29sdmVJbmZvLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogICAgICAgICB9CiAKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gQVJHX2NhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmdldEJ5dGVjb2RlSW5kZXgoU1RVQl9SRVRVUk5fQUREUkVTUyk7CkBAIC01
MzM3LDQyICs1MzM5LDQyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9n
bG8KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9kaXYoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfZGl2KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFS
R19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
c3JjMiA9IEFSR19zcmMyOwogCiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0Owog
ICAgIGlmIChmYXN0SXNOdW1iZXIoc3JjMSwgbGVmdCkgJiYgZmFzdElzTnVtYmVyKHNyYzIsIHJp
Z2h0KSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0IC8gcmln
aHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCBsZWZ0IC8gcmlnaHQpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0
YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAvIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEt
PnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRl
cjo6Y3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIElu
dGVycHJldGVyOjpjdGlfb3BfcHJlX2RlYyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9G
VU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdiA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
diA9IEFSR19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1l
OwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB2LT50b051
bWJlcihjYWxsRnJhbWUpIC0gMSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihB
UkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIDEpOwogICAgIENIRUNLX0ZP
Ul9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNW
YWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2ps
ZXNzKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1Zh
bHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAg
IEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19z
cmMyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJv
b2wgcmVzdWx0ID0ganNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CkBAIC01MzgwLDI0ICs1
MzgyLDI0IEBAIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKFNUVUJfQVJHUykKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX25vdChTVFVC
X0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9ub3Qo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUq
IHNyYyA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjID0gQVJHX3NyYzE7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc0Jvb2xlYW4oIXNyYy0+dG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBpbnQgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9qdHJ1ZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0g
ICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19z
cmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCkBAIC01
NDEwLDEwMyArNTQxMiwxMDMgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0
X2luYwogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHYgPSBB
Ukdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBBUkdfc3JjMTsKIAogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIG51bWJlciA9IHYtPnRv
SlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG51bWJlciA9IHYtPnRvSlNOdW1i
ZXIoY2FsbEZyYW1lKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogCi0gICAg
UkVUVVJOX1BBSVIoYXNQb2ludGVyKG51bWJlciksIGFzUG9pbnRlcihqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpKSk7CisgICAgUkVUVVJO
X1BBSVIoSlNWYWx1ZVB0cjo6ZW5jb2RlKG51bWJlciksIEpTVmFsdWVQdHI6OmVuY29kZShqc051
bWJlcihBUkdfZ2xvYmFsRGF0YSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpKSk7
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZXEoU1RVQl9BUkdTKQorSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZXEoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3Jj
MTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0g
QVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBBU1NFUlQoIUpTSW1tZWRpYXRl
OjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2VJbmxpbmUoY2FsbEZyYW1lLCBzcmMxLCBzcmMy
KSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWxTbG93Q2FzZUlubGlu
ZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xzaGlmdChTVFVCX0FS
R1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hpZnQo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUq
IHZhbCA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CisgICAgSlNW
YWx1ZVB0ciB2YWwgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0gQVJHX3NyYzI7
CiAKICAgICBpbnQzMl90IGxlZnQ7CiAgICAgdWludDMyX3QgcmlnaHQ7CiAgICAgaWYgKEpTSW1t
ZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkKLSAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50
MzIodmFsKSA8PCAoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFm
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih2YWwpIDw8IChKU0ltbWVkaWF0
ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHNoaWZ0KSAmIDB4MWYpKSk7CiAgICAgaWYgKGZhc3RUb0lu
dDMyKHZhbCwgbGVmdCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgIHJl
dHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA8PCAocmlnaHQgJiAweDFmKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFs
RGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNhbGxG
cmFtZSkgJiAweDFmKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA8PCAoc2hpZnQtPnRvVUludDMyKGNh
bGxGcmFtZSkgJiAweDFmKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsK
IH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRhbmQoU1RVQl9BUkdTKQorSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKFNUVUJfQVJH
UykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0g
QVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIg
c3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAg
aW50MzJfdCBsZWZ0OwogICAgIGludDMyX3QgcmlnaHQ7CiAgICAgaWYgKGZhc3RUb0ludDMyKHNy
YzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICYgcmlnaHQpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ICYgcmlnaHQpKTsK
IAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJh
bWUpICYgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkgJiBzcmMy
LT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KFNUVUJfQVJHUykK
K0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3JzaGlmdChTVFVC
X0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdmFs
ID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVl
UHRyIHZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBBUkdfc3JjMjsKIAog
ICAgIGludDMyX3QgbGVmdDsKICAgICB1aW50MzJfdCByaWdodDsKICAgICBpZiAoSlNJbW1lZGlh
dGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKQotICAgICAgICByZXR1cm4g
SlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1t
ZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7CiAgICAgaWYgKGZhc3RUb0ludDMyKHZhbCwgbGVm
dCkgJiYgZmFzdFRvVUludDMyKHNoaWZ0LCByaWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJl
cihBUkdfZ2xvYmFsRGF0YSwgbGVmdCA+PiAocmlnaHQgJiAweDFmKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgPj4gKHJp
Z2h0ICYgMHgxZikpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZhbC0+
dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAweDFm
KSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgKHZh
bC0+dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAw
eDFmKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfYml0bm90KFNUVUJfQVJHUykKIHsKICAgICBC
RUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKKyAg
ICBKU1ZhbHVlUHRyIHNyYyA9IEFSR19zcmMxOwogCiAgICAgaW50IHZhbHVlOwogICAgIGlmIChm
YXN0VG9JbnQzMihzcmMsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCB+dmFsdWUpOwotICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRy
OjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH52YWx1ZSkpOworCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+c3JjLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIH5zcmMtPnRvSW50MzIo
Y2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAog
Vm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZShTVFVCX0FS
R1MpCkBAIC01NTI5LDEwICs1NTMxLDEwIEBAIFZvaWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlf
b3BfcmVzb2x2ZV8KICAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlKTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRW
YWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICAgICAgICAgIFJFVFVSTl9QQUlSKGJhc2UsIGFzUG9p
bnRlcihyZXN1bHQpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QQUlSKGJhc2UsIEpTVmFsdWVQdHI6
OmVuY29kZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgICAgICArK2l0ZXI7CiAgICAgfSB3aGls
ZSAoaXRlciAhPSBlbmQpOwpAQCAtNTU1MCw4OSArNTU1Miw4OSBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19lCiAgICAgcmV0dXJuIEFSR19mdW5jZXhwMS0+bWFrZUZ1
bmN0aW9uKEFSR19jYWxsRnJhbWUsIEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSk7CiB9CiAK
LUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbW9kKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX21vZChTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogZGl2aWRlbmRWYWx1ZSA9IEFS
R19zcmMxOwotICAgIEpTVmFsdWUqIGRpdmlzb3JWYWx1ZSA9IEFSR19zcmMyOworICAgIEpTVmFs
dWVQdHIgZGl2aWRlbmRWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgZGl2aXNvclZh
bHVlID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAgICAgZG91YmxlIGQgPSBkaXZpZGVuZFZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpOwot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBmbW9kKGQsIGRp
dmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0
ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGZtb2QoZCwgZGl2aXNvclZhbHVlLT50b051bWJl
cihjYWxsRnJhbWUpKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sZXNzKFNUVUJfQVJHUykKK0pTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3MoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzKGNh
bGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwgQVJHX3NyYzEsIEFSR19zcmMyKSk7CiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZXEoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfbmVxKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFS
R19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
c3JjMiA9IEFSR19zcmMyOwogCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVk
aWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBB
UkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWxTbG93
Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzQm9vbGVhbighZXF1YWxTbG93Q2FzZUlubGluZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIp
KTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBWb2lkUHRyUGFp
ciBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfZGVjKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9T
VFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2ID0gQVJHX3NyYzE7CisgICAgSlNWYWx1
ZVB0ciB2ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAKLSAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7
CisgICAgSlNWYWx1ZVB0ciBudW1iZXIgPSB2LT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgIFJFVFVSTl9QQUlSKGFzUG9pbnRl
cihudW1iZXIpLCBhc1BvaW50ZXIoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIG51bWJlci0+dW5j
aGVja2VkR2V0TnVtYmVyKCkgLSAxKSkpOworICAgIFJFVFVSTl9QQUlSKEpTVmFsdWVQdHI6OmVu
Y29kZShudW1iZXIpLCBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEs
IG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqIEludGVycHJldGVyOjpjdGlfb3BfdXJzaGlmdChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdmFsID0gQVJHX3NyYzE7Ci0gICAgSlNW
YWx1ZSogc2hpZnQgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHZhbCA9IEFSR19zcmMxOwor
ICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBBUkdfc3JjMjsKIAogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVk
aWF0ZU51bWJlcnModmFsLCBzaGlmdCkgJiYgIUpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKHZhbCkp
Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnMo
dmFsLCBzaGlmdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlh
dGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwt
PnRvVUludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZyYW1lKSAmIDB4
MWYpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0
YSwgKHZhbC0+dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJh
bWUpICYgMHgxZikpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgfQogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhvcihT
VFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9i
aXR4b3IoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpT
VmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7Cisg
ICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJH
X3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQz
MihjYWxsRnJhbWUpIF4gc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMyKGNhbGxGcmFt
ZSkgXiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05f
QVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19yZWdl
eHAoU1RVQl9BUkdTKQpAQCAtNTY0MiwyMSArNTY0NCwyMSBAQCBKU09iamVjdCogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9uZXdfcmVnZXhwCiAgICAgcmV0dXJuIG5ldyAoQVJHX2dsb2JhbERhdGEpIFJl
Z0V4cE9iamVjdChBUkdfY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0
cnVjdHVyZSgpLCBBUkdfcmVnZXhwMSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfYml0b3IoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVy
OjpjdGlfb3BfYml0b3IoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJH
X3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBz
cmMyID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3Jj
MS0+dG9JbnQzMihjYWxsRnJhbWUpIHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b0ludDMy
KGNhbGxGcmFtZSkgfCBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1
ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bf
Y2FsbF9ldmFsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRl
cjo6Y3RpX29wX2NhbGxfZXZhbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElP
TigpOwogCkBAIC01NjY1LDI5ICs1NjY3LDI5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfY2FsbF9ldmFsKFMKIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IEFSR19nbG9i
YWxEYXRhLT5pbnRlcnByZXRlcjsKICAgICAKLSAgICBKU1ZhbHVlKiBmdW5jVmFsID0gQVJHX3Ny
YzE7CisgICAgSlNWYWx1ZVB0ciBmdW5jVmFsID0gQVJHX3NyYzE7CiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gQVJHX2ludDI7CiAgICAgaW50IGFyZ0NvdW50ID0gQVJHX2ludDM7CiAKICAgICBS
ZWdpc3RlciogbmV3Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVy
T2Zmc2V0OwogICAgIFJlZ2lzdGVyKiBhcmd2ID0gbmV3Q2FsbEZyYW1lIC0gUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQ7Ci0gICAgSlNWYWx1ZSogdGhpc1ZhbHVl
ID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciB0aGlzVmFsdWUg
PSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpOwogCiAgICAg
aWYgKHRoaXNWYWx1ZSA9PSBnbG9iYWxPYmplY3QgJiYgZnVuY1ZhbCA9PSBnbG9iYWxPYmplY3Qt
PmV2YWxGdW5jdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvblZhbHVlID0gbm9W
YWx1ZSgpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnRlcnByZXRlci0+Y2FsbEV2YWwo
Y2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3YsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwg
ZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvblZhbHVlID0gbm9W
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGludGVycHJldGVyLT5jYWxsRXZh
bChjYWxsRnJhbWUsIHJlZ2lzdGVyRmlsZSwgYXJndiwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0
LCBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShleGNlcHRpb25WYWx1ZSAh
PSBub1ZhbHVlKCkpKSB7CiAgICAgICAgICAgICBBUkdfZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0g
ZXhjZXB0aW9uVmFsdWU7CiAgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6
aW1wb3NzaWJsZVZhbHVlKCk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVk
aWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Rocm93KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRl
cjo6Y3RpX29wX3Rocm93KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKQEAgLTU2OTYsMjEgKzU2OTgsMjEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF90
aHJvdyhTVFVCXwogCiAgICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmdldEJ5dGVj
b2RlSW5kZXgoU1RVQl9SRVRVUk5fQUREUkVTUyk7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb25W
YWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uVmFsdWUgPSBBUkdfc3Jj
MTsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwogCiAgICAgSGFuZGxlckluZm8qIGhhbmRs
ZXIgPSBBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnRocm93RXhjZXB0aW9uKGNhbGxGcmFt
ZSwgZXhjZXB0aW9uVmFsdWUsIHZQQ0luZGV4LCB0cnVlKTsKIAogICAgIGlmICghaGFuZGxlcikg
ewogICAgICAgICAqQVJHX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwotICAgICAgICByZXR1
cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQ
dHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpKTsKICAgICB9CiAKICAgICBB
Ukdfc2V0Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgdm9pZCogY2F0Y2hSb3V0aW5lID0gaGFu
ZGxlci0+bmF0aXZlQ29kZTsKICAgICBBU1NFUlQoY2F0Y2hSb3V0aW5lKTsKICAgICBTVFVCX1NF
VF9SRVRVUk5fQUREUkVTUyhjYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBleGNlcHRpb25WYWx1
ZTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGV4Y2VwdGlvblZhbHVlKTsKIH0KIAog
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfcG5hbWVzKFNU
VUJfQVJHUykKQEAgLTU3MjAsMTUgKzU3MjIsMTUgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
SW50ZXJwcmV0ZXI6OmN0aQogICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVh
dGUoQVJHX2NhbGxGcmFtZSwgQVJHX3NyYzEpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6
Y3RpX29wX25leHRfcG5hbWUoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIElu
dGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RV
Ql9GVU5DVElPTigpOwogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogaXQgPSBBUkdfcG5p
MTsKLSAgICBKU1ZhbHVlKiB0ZW1wID0gaXQtPm5leHQoQVJHX2NhbGxGcmFtZSk7CisgICAgSlNW
YWx1ZVB0ciB0ZW1wID0gaXQtPm5leHQoQVJHX2NhbGxGcmFtZSk7CiAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICBpdC0+aW52YWxpZGF0ZSgpOwotICAgIHJldHVybiB0ZW1wOworICAgIHJldHVybiBK
U1ZhbHVlUHRyOjplbmNvZGUodGVtcCk7CiB9CiAKIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1c2hfc2NvcGUoU1RVQl9BUkdTKQpAQCAtNTc0OCwxMDIgKzU3NTAsMTAyIEBAIHZvaWQg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2NvcGUoU1RVQl8KICAgICBBUkdfY2FsbEZyYW1lLT5z
ZXRTY29wZUNoYWluKEFSR19jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cG9wKCkpOwogfQogCi1K
U1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZihTVFVCX0FSR1MpCitKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF90eXBlb2YoU1RVQl9BUkdTKQogewog
ICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc1R5cGVTdHJpbmdGb3JW
YWx1ZShBUkdfY2FsbEZyYW1lLCBBUkdfc3JjMSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVu
Y29kZShqc1R5cGVTdHJpbmdGb3JWYWx1ZShBUkdfY2FsbEZyYW1lLCBBUkdfc3JjMSkpOwogfQog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX3VuZGVmaW5lZChTVFVCX0FSR1MpCitK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc191bmRlZmluZWQo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUq
IHYgPSBBUkdfc3JjMTsKLSAgICByZXR1cm4ganNCb29sZWFuKEpTSW1tZWRpYXRlOjppc0ltbWVk
aWF0ZSh2KSA/IHYtPmlzVW5kZWZpbmVkKCkgOiB2LT5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBB
Ukdfc3JjMTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDogdi0+YXNDZWxsKCktPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSkpOwogfQogCi1K
U1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9BUkdTKQorSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaXNfYm9vbGVhbihTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVh
bihBUkdfc3JjMS0+aXNCb29sZWFuKCkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
anNCb29sZWFuKEFSR19zcmMxLT5pc0Jvb2xlYW4oKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2lzX251bWJlcihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19udW1iZXIoU1RVQl9BUkdTKQogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX3NyYzEtPmlzTnVt
YmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKEFSR19zcmMx
LT5pc051bWJlcigpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfc3Ry
aW5nKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2lzX3N0cmluZyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwog
Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmlzSlNT
dHJpbmcoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVh
bihBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcoQVJHX3NyYzEpKSk7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfaXNfb2JqZWN0KFNUVUJfQVJHUykKK0pT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX29iamVjdChTVFVC
X0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzQm9v
bGVhbihqc0lzT2JqZWN0VHlwZShBUkdfc3JjMSkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUoanNCb29sZWFuKGpzSXNPYmplY3RUeXBlKEFSR19zcmMxKSkpOwogfQogCi1KU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Z1bmN0aW9uKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Z1bmN0aW9uKFNUVUJfQVJHUykK
IHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICByZXR1cm4ganNCb29sZWFuKGpz
SXNGdW5jdGlvblR5cGUoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzQm9vbGVhbihqc0lzRnVuY3Rpb25UeXBlKEFSR19zcmMxKSkpOwogfQogCi1KU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX3N0cmljdGVxKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N0cmljdGVxKFNUVUJfQVJHUykKIHsKICAgICBC
RUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0g
ICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19z
cmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAgLy8gaGFuZGxlZCBp
bmxpbmUgYXMgZmFzdCBjYXNlcwogICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGUoc3JjMSwgc3JjMikpOwogICAgIEFTU0VSVCghKEpTSW1tZWRpYXRlOjppc0VpdGhlcklt
bWVkaWF0ZShzcmMxLCBzcmMyKSAmIChzcmMxICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRl
KCkpICYgKHNyYzIgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKIAotICAgIHJl
dHVybiBqc0Jvb2xlYW4oc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShzcmMxLCBzcmMyKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oc3RyaWN0RXF1YWxTbG93Q2Fz
ZUlubGluZShzcmMxLCBzcmMyKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29w
X25zdHJpY3RlcShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9uc3RyaWN0ZXEoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJ
T04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMy
ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1
ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICAvLyBoYW5kbGVkIGlubGluZSBhcyBmYXN0IGNh
c2VzCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZShzcmMxLCBzcmMy
KSk7CiAgICAgQVNTRVJUKCEoSlNJbW1lZGlhdGU6OmlzRWl0aGVySW1tZWRpYXRlKHNyYzEsIHNy
YzIpICYgKHNyYzEgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkgJiAoc3JjMiAhPSBK
U0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkpOwogICAgIAotICAgIHJldHVybiBqc0Jvb2xl
YW4oIXN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoc3JjMSwgc3JjMikpOworICAgIHJldHVybiBK
U1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKCFzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKHNy
YzEsIHNyYzIpKSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfdG9fanNudW1i
ZXIoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlf
b3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IAotICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjID0gQVJH
X3NyYzE7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAg
SlNWYWx1ZSogcmVzdWx0ID0gc3JjLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBzcmMtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2luKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2luKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogYmFzZVZh
bCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbCA9IEFSR19zcmMyOwogCiAgICAg
aWYgKCFiYXNlVmFsLT5pc09iamVjdCgpKSB7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gQVJHX2NhbGxGcmFtZTsKQEAgLTU4NTMsMTYgKzU4NTUsMTYgQEAgSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9pbihTVFVCX0FSRwogICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsK
ICAgICB9CiAKLSAgICBKU1ZhbHVlKiBwcm9wTmFtZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgcHJvcE5hbWUgPSBBUkdfc3JjMTsKICAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0
KGJhc2VWYWwpOwogCiAgICAgdWludDMyX3QgaTsKICAgICBpZiAocHJvcE5hbWUtPmdldFVJbnQz
MihpKSkKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxs
RnJhbWUsIGkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4o
YmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBpKSkpOwogCiAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHByb3BOYW1lLT50b1N0cmluZyhjYWxsRnJhbWUpKTsKICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihiYXNlT2JqLT5oYXNQ
cm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVu
Y29kZShqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eSkp
KTsKIH0KIAogSlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUoU1RV
Ql9BUkdTKQpAQCAtNTkwMyw3ICs1OTA1LDcgQEAgdm9pZCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9z
d2l0Y2hfaW1tKFNUVQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFs
dWUqIHNjcnV0aW5lZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc2NydXRpbmVlID0gQVJH
X3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19pbnQyOwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC01OTIwLDcgKzU5MjIsNyBAQCB2b2lkKiBJbnRl
cnByZXRlcjo6Y3RpX29wX3N3aXRjaF9jaGFyKFNUCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElP
TigpOwogCi0gICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0
ciBzY3J1dGluZWUgPSBBUkdfc3JjMTsKICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gQVJHX2lu
dDI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKQEAgLTU5NDAsNyArNTk0
Miw3IEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX3N0cmluZygKIHsKICAgICBC
RUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzY3J1dGluZWUgPSBBUkdfc3Jj
MTsKKyAgICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9IEFSR19zcmMxOwogICAgIHVuc2lnbmVkIHRh
YmxlSW5kZXggPSBBUkdfaW50MjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwpAQCAtNTk1NSwxNyArNTk1NywxNyBAQCB2b2lkKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRj
aF9zdHJpbmcoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9kZWxfYnlfdmFsKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NU
VUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
YmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBiYXNlVmFsdWUt
PnRvT2JqZWN0KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwogCi0gICAgSlNWYWx1ZSogc3Vic2Ny
aXB0ID0gQVJHX3NyYzI7Ci0gICAgSlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgc3Vi
c2NyaXB0ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgdWludDMyX3Qg
aTsKICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkpCiAgICAgICAgIHJlc3VsdCA9IGpz
Qm9vbGVhbihiYXNlT2JqLT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsIGkpKTsKQEAgLTU5Nzcs
NyArNTk3OSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCgKICAg
ICB9CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiB2b2lkIElu
dGVycHJldGVyOjpjdGlfb3BfcHV0X2dldHRlcihTVFVCX0FSR1MpCkBAIC02MDExLDcgKzYwMTMs
NyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZXJyb3IoCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCB0eXBlID0gQVJHX2ludDE7
Ci0gICAgSlNWYWx1ZSogbWVzc2FnZSA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgbWVzc2Fn
ZSA9IEFSR19zcmMyOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSBBUkdfaW50MzsKIAogICAg
IHJldHVybiBFcnJvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RXJyb3JUeXBlPih0
eXBlKSwgbWVzc2FnZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSwgbGluZU51bWJlciwgY29kZUJsb2Nr
LT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNl
VVJMKCkpOwpAQCAtNjAzMCw3ICs2MDMyLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX2Rl
YnVnKFNUVUJfQVJHUwogICAgIEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+ZGVidWcoY2Fs
bEZyYW1lLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUs
IGxhc3RMaW5lKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdyhTVFVC
X0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV92bV90aHJv
dyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCkBAIC02MDQwLDcg
KzYwNDIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX3ZtX3Rocm93KFNUVUJfCiAKICAg
ICB1bnNpZ25lZCB2UENJbmRleCA9IGNvZGVCbG9jay0+Z2V0Qnl0ZWNvZGVJbmRleChnbG9iYWxE
YXRhLT5leGNlcHRpb25Mb2NhdGlvbik7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9
IGdsb2JhbERhdGEtPmV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvblZhbHVlID0g
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uOwogICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7CiAgICAg
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gbm9WYWx1ZSgpOwogCkBAIC02MDQ4LDE0ICs2MDUwLDE0
IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfdm1fdGhyb3coU1RVQl8KIAogICAgIGlmICgh
aGFuZGxlcikgewogICAgICAgICAqQVJHX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwotICAg
ICAgICByZXR1cm4gSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpKTsKICAgICB9
CiAKICAgICBBUkdfc2V0Q2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgdm9pZCogY2F0Y2hSb3V0
aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZTsKICAgICBBU1NFUlQoY2F0Y2hSb3V0aW5lKTsKICAg
ICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhjYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBleGNl
cHRpb25WYWx1ZTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGV4Y2VwdGlvblZhbHVl
KTsKIH0KIAogI3VuZGVmIFNUVUJfUkVUVVJOX0FERFJFU1MKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTMg
KzE0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzT3Bjb2RlKE9wY29k
ZSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgQ2Fs
bEZyYW1lKiwgU2NvcGVDaGFpbk5vZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIENh
bGxGcmFtZSosIEpTRnVuY3Rpb24qLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgQXJnTGlzdCYg
YXJncywgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKLSAgICAgICAgSlNW
YWx1ZSogZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0
aW9uKTsKLQotICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJhbWUqLCBK
U0Z1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIHJldHJpZXZlQ2FsbGVyKENhbGxG
cmFtZSosIEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKLSAgICAgICAgdm9pZCByZXRyaWV2ZUxh
c3RDYWxsZXIoQ2FsbEZyYW1lKiwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQs
IFVTdHJpbmcmIHNvdXJjZVVSTCwgSlNWYWx1ZSomIGZ1bmN0aW9uKSBjb25zdDsKKyAgICAgICAg
SlNWYWx1ZVB0ciBleGVjdXRlKFByb2dyYW1Ob2RlKiwgQ2FsbEZyYW1lKiwgU2NvcGVDaGFpbk5v
ZGUqLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqLCBDYWxsRnJhbWUqLCBKU0Z1bmN0
aW9uKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5O
b2RlKiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGVjdXRl
KEV2YWxOb2RlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbik7CisKKyAg
ICAgICAgSlNWYWx1ZVB0ciByZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJhbWUqLCBKU0Z1bmN0aW9u
KikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgcmV0cmlldmVDYWxsZXIoQ2FsbEZyYW1lKiwg
SW50ZXJuYWxGdW5jdGlvbiopIGNvbnN0OworICAgICAgICB2b2lkIHJldHJpZXZlTGFzdENhbGxl
cihDYWxsRnJhbWUqLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBzb3VyY2VJRCwgVVN0cmlu
ZyYgc291cmNlVVJMLCBKU1ZhbHVlUHRyJiBmdW5jdGlvbikgY29uc3Q7CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiomLCBwdHJk
aWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKTsK
ICAgICAgICAgdm9pZCBzZXRUaW1lb3V0VGltZSh1bnNpZ25lZCB0aW1lb3V0VGltZSkgeyBtX3Rp
bWVvdXRUaW1lID0gdGltZW91dFRpbWU7IH0KQEAgLTE4Myw4ICsxODMsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9jb252ZXJ0
X3RoaXMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX2Vu
ZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2Fk
ZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3By
ZV9pbmMoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBKSVRfU1RVQiBjdGlfb3BfYWRkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3ByZV9pbmMoU1RVQl9BUkdTKTsKICAg
ICAgICAgc3RhdGljIGludCBKSVRfU1RVQiBjdGlfb3BfbG9vcF9pZl9sZXNzKFNUVUJfQVJHUyk7
CiAgICAgICAgIHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2xvb3BfaWZfbGVzc2VxKFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19vYmpl
Y3QoU1RVQl9BUkdTKTsKQEAgLTE5MiwyMiArMTkyLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX3NlY29uZChTVFVCX0FS
R1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9i
eV9pZF9mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRf
U1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKFNUVUJfQVJHUyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFp
bChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dl
dF9ieV9pZF9wcm90b19saXN0KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVsbChTVFVCX0FSR1MpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWls
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0
X2J5X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9BUkdTKTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlfaWQoU1RVQl9BUkdTKTsKLSAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJH
Uyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbXVsKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX2dldF9ieV9pZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKFNUVUJfQVJHUyk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dl
dF9ieV9pZF9nZW5lcmljKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Rf
ZnVsbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
IEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbChTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlf
aWRfYXJyYXlfZmFpbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfZGVsX2J5X2lkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbXVsKFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19mdW5j
KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9K
U0Z1bmN0aW9uKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBWb2lkUHRyUGFpciBKSVRfU1RV
QiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKFNUVUJfQVJHUyk7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBj
dGlfb3BfY3JlYXRlX2FyZ3VtZW50cyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBK
SVRfU1RVQiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMoU1RVQl9BUkdTKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RV
Ql9BUkdTKTsKQEAgLTIxNiw3MSArMjE2LDcxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHJvZmlsZV9kaWRfY2FsbChTVFVCX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcmV0X3Njb3BlQ2hhaW4oU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2FycmF5
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfcmVz
b2x2ZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29w
X3Jlc29sdmVfZ2xvYmFsKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Jlc29sdmUoU1RVQl9BUkdTKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9n
bG9iYWwoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlf
b3BfY29uc3RydWN0X0pTQ29uc3RydWN0KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KFNUVUJfQVJHUyk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVC
X0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVC
IGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QoU1RVQl9BUkdTKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChT
VFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgSklUX1NUVUIgY3RpX29wX3Jl
c29sdmVfZnVuYyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIg
Y3RpX29wX3N1YihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9zdWIoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfYXJyYXkoU1RVQl9BUkdTKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9sZXNzZXEoU1RVQl9BUkdTKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbGVz
c2VxKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2xvb3Bf
aWZfdHJ1ZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX3Jlc29sdmVfYmFzZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklU
X1NUVUIgY3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX3Jlc29sdmVfc2tpcChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2RpdihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9iYXNl
KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklU
X1NUVUIgY3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3NraXAoU1RVQl9BUkdTKTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bf
ZGl2KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SklUX1NUVUIgY3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIGludCBK
SVRfU1RVQiBjdGlfb3Bfamxlc3MoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IEpJVF9TVFVCIGN0aV9vcF9ub3QoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bfbm90KFNUVUJfQVJHUyk7CiAgICAgICAg
IHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2p0cnVlKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0
YXRpYyBWb2lkUHRyUGFpciBKSVRfU1RVQiBjdGlfb3BfcG9zdF9pbmMoU1RVQl9BUkdTKTsKLSAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9lcShTVFVCX0FSR1MpOwotICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2xzaGlmdChTVFVCX0FSR1MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2JpdGFuZChTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3JzaGlmdChTVFVCX0FS
R1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2JpdG5vdChTVFVC
X0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVC
IGN0aV9vcF9lcShTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9sc2hpZnQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfYml0YW5kKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX3JzaGlmdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1Bv
aW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXRub3QoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGlj
IFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZShTVFVCX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfZnVuY19leHAo
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9tb2Qo
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9sZXNz
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbmVx
KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklU
X1NUVUIgY3RpX29wX21vZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9sZXNzKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX25lcShTVFVCX0FS
R1MpOwogICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgSklUX1NUVUIgY3RpX29wX3Bvc3RfZGVj
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfdXJz
aGlmdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29w
X2JpdHhvcihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqIEpJVF9TVFVCIGN0aV9vcF91cnNoaWZ0KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2JpdHhvcihTVFVCX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfcmVnZXhwKFNU
VUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfYml0b3Io
U1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9jYWxs
X2V2YWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9v
cF90aHJvdyhTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXRvcihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2V2YWwoU1RVQl9BUkdT
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlf
b3BfdGhyb3coU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IqIEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbmV4dF9wbmFtZShTVFVCX0FSR1MpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9uZXh0X3Bu
YW1lKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29w
X3B1c2hfc2NvcGUoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3Rp
X29wX3BvcF9zY29wZShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NU
VUIgY3RpX29wX3R5cGVvZihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklU
X1NUVUIgY3RpX29wX2lzX3VuZGVmaW5lZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogSklUX1NUVUIgY3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9BUkdTKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19udW1iZXIoU1RVQl9BUkdTKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19zdHJpbmcoU1RVQl9BUkdTKTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19vYmplY3QoU1RVQl9B
UkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19mdW5jdGlv
bihTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3N0
cmljdGVxKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlf
b3BfbnN0cmljdGVxKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RV
QiBjdGlfb3BfdG9fanNudW1iZXIoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF90eXBlb2YoU1RVQl9BUkdTKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaXNfdW5k
ZWZpbmVkKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSklUX1NUVUIgY3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaXNfbnVtYmVyKFNUVUJf
QVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIg
Y3RpX29wX2lzX3N0cmluZyhTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9pc19vYmplY3QoU1RVQl9BUkdTKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaXNfZnVu
Y3Rpb24oU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBKSVRfU1RVQiBjdGlfb3Bfc3RyaWN0ZXEoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbnN0cmljdGVxKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX3RvX2pzbnVtYmVyKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2luKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRp
YyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX3B1c2hfbmV3X3Njb3BlKFNUVUJfQVJHUyk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9qbXBfc2NvcGVzKFNUVUJfQVJHUyk7
CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaW5kZXgoU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfaW1tKFNU
VUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bfc3dpdGNoX2No
YXIoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0
Y2hfc3RyaW5nKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBj
dGlfb3BfZGVsX2J5X3ZhbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlfdmFsKFNUVUJfQVJHUyk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyKFNUVUJfQVJHUyk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfc2V0dGVyKFNUVUJfQVJHUyk7
CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19lcnJvcihTVFVC
X0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfZGVidWcoU1RVQl9B
UkdTKTsKIAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX3ZtX3Rocm93KFNU
VUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NU
VUIgY3RpX3ZtX3Rocm93KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RV
QiBjdGlfdm1fZG9udExhenlMaW5rQ2FsbChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9p
ZCogSklUX1NUVUIgY3RpX3ZtX2xhenlMaW5rQ2FsbChTVFVCX0FSR1MpOwogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX2FjdGl2YXRpb24oU1RVQl9BUkdTKTsK
QEAgLTI5MCw0MyArMjkwLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBEZWZhdWx0
IG51bWJlciBvZiB0aWNrcyBiZWZvcmUgYSB0aW1lb3V0IGNoZWNrIHNob3VsZCBiZSBkb25lLgog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJlc2hvbGQgPSAxMDI0
OwogCi0gICAgICAgIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUqIHYpIHsgcmV0dXJuICFKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUodikgJiYgdi0+YXNDZWxsKCktPnZwdHIoKSA9PSBtX2pzQXJyYXlW
cHRyOyB9Ci0gICAgICAgIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVlKiB2KSB7IHJldHVybiAhSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0gbV9qc1N0
cmluZ1ZwdHI7IH0KKyAgICAgICAgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZVB0ciB2KSB7IHJldHVy
biAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0g
bV9qc0FycmF5VnB0cjsgfQorICAgICAgICBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZVB0ciB2KSB7
IHJldHVybiAhSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRy
KCkgPT0gbV9qc1N0cmluZ1ZwdHI7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gRXhl
Y3V0aW9uRmxhZyB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9OwogCi0gICAgICAgIE5F
VkVSX0lOTElORSBKU1ZhbHVlKiBjYWxsRXZhbChDYWxsRnJhbWUqLCBSZWdpc3RlckZpbGUqLCBS
ZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9mZnNldCwgSlNWYWx1ZSomIGV4
Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIENhbGxG
cmFtZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQsIFNj
b3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIE5FVkVSX0lOTElO
RSBKU1ZhbHVlUHRyIGNhbGxFdmFsKENhbGxGcmFtZSosIFJlZ2lzdGVyRmlsZSosIFJlZ2lzdGVy
KiBhcmd2LCBpbnQgYXJnYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBKU1ZhbHVlUHRyJiBleGNlcHRp
b25WYWx1ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgZXhlY3V0ZShFdmFsTm9kZSosIENhbGxGcmFt
ZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQsIFNjb3Bl
Q2hhaW5Ob2RlKiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9uKTsKIAogICAgICAgICBORVZFUl9JTkxJ
TkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50
IGxhc3RMaW5lKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlKENhbGxGcmFt
ZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgTkVW
RVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1Zh
bHVlKiYgZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZl
R2xvYmFsKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVl
KTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZShDYWxsRnJhbWUqLCBJbnN0cnVj
dGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgTkVWRVJfSU5MSU5F
IGJvb2wgcmVzb2x2ZVNraXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyJiBl
eGNlcHRpb25WYWx1ZSk7CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVHbG9iYWwo
Q2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CiAg
ICAgICAgIE5FVkVSX0lOTElORSB2b2lkIHJlc29sdmVCYXNlKENhbGxGcmFtZSosIEluc3RydWN0
aW9uKiB2UEMpOwotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlQmFzZUFuZFByb3Bl
cnR5KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsK
KyAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShDYWxsRnJh
bWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAg
TkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGVFeGNlcHRpb25TY29wZShDYWxsRnJh
bWUqLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUgYm9v
bCB1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYsIEpTVmFsdWUqLCB1bnNpZ25lZCYgYnl0ZWNv
ZGVPZmZzZXQsIENvZGVCbG9jayomKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiB0aHJvd0V4Y2VwdGlvbihDYWxsRnJhbWUqJiwgSlNWYWx1ZSomLCB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgYm9vbCk7Ci0gICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5k
RnVuYyhDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7
CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwg
SlNWYWx1ZVB0ciwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJik7CisgICAg
ICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYs
IEpTVmFsdWVQdHImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCk7CisgICAgICAgIE5F
VkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5kRnVuYyhDYWxsRnJhbWUqLCBJbnN0cnVjdGlv
biosIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKTsKIAogICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBDYWxsRnJhbWUqIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayos
IFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIHNpemVfdCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z2MpOwogCiAgICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIGZpbmRGdW5jdGlvbkNhbGxGcmFtZShD
YWxsRnJhbWUqLCBJbnRlcm5hbEZ1bmN0aW9uKik7CiAKLSAgICAgICAgSlNWYWx1ZSogcHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1
ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWVQdHIgcHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aW9uRmxhZywgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZVB0ciogZXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAgICAgICAgIHZv
aWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKIAotICAgICAgICBKU1ZhbHVlKiBjaGVja1Rp
bWVvdXQoSlNHbG9iYWxPYmplY3QqKTsKKyAgICAgICAgYm9vbCBjaGVja1RpbWVvdXQoSlNHbG9i
YWxPYmplY3QqKTsKICAgICAgICAgdm9pZCByZXNldFRpbWVvdXRDaGVjaygpOwogCi0gICAgICAg
IHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0aW9u
KiwgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJh
bWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgICAg
ICB2b2lkIHVuY2FjaGVHZXRCeUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpOwotICAg
ICAgICB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVj
dGlvbiosIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIEluc3RydWN0
aW9uKiwgSlNWYWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICB2b2lkIHVuY2FjaGVQdXRCeUlEKENvZGVCbG9jayosIEluc3RydWN0aW9uKiB2UEMpOwog
ICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhbGxCeXRlY29kZShPcGNvZGUgb3Bjb2RlKSB7IHJl
dHVybiBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NhbGwpIHx8IG9wY29kZSA9PSBnZXRPcGNvZGUo
b3BfY29uc3RydWN0KSB8fCBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NhbGxfZXZhbCk7IH0KQEAg
LTMzNCw4ICszMzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBzdGF0aWMgdm9pZCB0aHJvd1N0YWNrT3ZlcmZsb3dQcmV2aW91c0ZyYW1lKENhbGxGcmFtZSoq
LCBKU0dsb2JhbERhdGEqLCB2b2lkKiYgcmV0dXJuQWRkcmVzcyk7CiAKLSAgICAgICAgdm9pZCB0
cnlDVElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRk
cmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHRyeUNUSUNhY2hlUHV0QnlJRChD
YWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlKiBiYXNl
VmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHRyeUNUSUNhY2hl
R2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1Zh
bHVlUHRyIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlDVElDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1l
KiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZVB0ciBiYXNlVmFsdWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOwogI2VuZGlmCiAKICAgICAgICAgU2FtcGxpbmdUb29s
KiBtX3NhbXBsZXI7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksMTAgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVyKCk7Ci0gICAgICAg
IFJlZ2lzdGVyKEpTVmFsdWUqKTsKKyAgICAgICAgUmVnaXN0ZXIoSlNWYWx1ZVB0cik7CiAKLSAg
ICAgICAgSlNWYWx1ZSoganNWYWx1ZShDYWxsRnJhbWUqKSBjb25zdDsKLSAgICAgICAgSlNWYWx1
ZSogZ2V0SlNWYWx1ZSgpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGpzVmFsdWUoQ2FsbEZy
YW1lKikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0SlNWYWx1ZSgpIGNvbnN0OwogCiAg
ICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgbWFyaygpOwpAQCAtODks
NyArODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
aW50cHRyX3QgaTsKICAgICAgICAgICAgIHZvaWQqIHY7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2
YWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiB2YWx1ZTsKIAogICAg
ICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOwogICAgICAgICAgICAgQXJndW1lbnRz
KiBhcmd1bWVudHM7CkBAIC0xMzUsMjkgKzEzNSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBTRVRfVFlQRShFbXB0eVR5cGUpOwotICAgICAgICAq
dGhpcyA9IG5vVmFsdWUoKTsKKyAgICAgICAgdS52YWx1ZSA9IEpTVmFsdWVQdHI6OmVuY29kZShu
b1ZhbHVlKCkpOwogI2VuZGlmCiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6
UmVnaXN0ZXIoSlNWYWx1ZSogdikKKyAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyOjpSZWdpc3Rl
cihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBTRVRfVFlQRShWYWx1ZVR5cGUpOwotICAg
ICAgICB1LnZhbHVlID0gdjsKKyAgICAgICAgdS52YWx1ZSA9IEpTVmFsdWVQdHI6OmVuY29kZSh2
KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNjYWZmb2xkaW5nIGZvciBsZWdh
Y3kgY2xpZW50cy4gSXQgd2lsbCBldmVudHVhbGx5IGdvIGF3YXkuCi0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBSZWdpc3Rlcjo6anNWYWx1ZShDYWxsRnJhbWUqKSBjb25zdAorICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZVB0ciBSZWdpc3Rlcjo6anNWYWx1ZShDYWxsRnJhbWUqKSBjb25zdAog
ICAgIHsKICAgICAgICAgLy8gT25jZSByZWdpc3RlcnMgaG9sZCBkb3VibGVzLCB0aGlzIGZ1bmN0
aW9uIHdpbGwgYWxsb2NhdGUgYSBKU1ZhbHVlKgogICAgICAgICAvLyBpZiB0aGUgcmVnaXN0ZXIg
ZG9lc24ndCBob2xkIG9uZSBhbHJlYWR5LiAKICAgICAgICAgQVNTRVJUX1RZUEUoVmFsdWVUeXBl
KTsKLSAgICAgICAgcmV0dXJuIHUudmFsdWU7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjpk
ZWNvZGUodS52YWx1ZSk7CiAgICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
UmVnaXN0ZXI6OmdldEpTVmFsdWUoKSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0
ciBSZWdpc3Rlcjo6Z2V0SlNWYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfVFlQ
RShKU1ZhbHVlVHlwZSk7Ci0gICAgICAgIHJldHVybiB1LnZhbHVlOworICAgICAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZGVjb2RlKHUudmFsdWUpOwogICAgIH0KICAgICAKICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgUmVnaXN0ZXI6Om1hcmtlZCgpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUp
ICI6IiAKIAogZXh0ZXJuICJDIiB7CiAgICAgCi0gICAgX19kZWNsc3BlYyhuYWtlZCkgSlNWYWx1
ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBK
U1ZhbHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKQorICAgIF9fZGVj
bHNwZWMobmFrZWQpIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBjdGlUcmFtcG9saW5lKHZvaWQq
IGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbiwg
UHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKICAgICB7CiAgICAgICAgIF9fYXNtIHsKICAgICAg
ICAgICAgIHB1c2ggZWJwOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShJbnN0cnVjdGlvbioKICAgICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0J1dE5vdEVx
dWFsID0gam5lMzIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKIAogICAgIC8vIFRoZXkgYXJlIGVxdWFs
IC0gc2V0IHRoZSByZXN1bHQgdG8gdHJ1ZS4gKE9yIGZhbHNlLCBpZiBuZWdhdGVkKS4KLSAgICBt
b3ZlKEltbVB0cihqc0Jvb2xlYW4oIW5lZ2F0ZWQpKSwgWDg2OjplYXgpOworICAgIG1vdmUoSW1t
UHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oIW5lZ2F0ZWQpKSksIFg4Njo6ZWF4KTsK
ICAgICBKdW1wIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsID0ganVtcCgpOwogCiAgICAgLy8g
ZWF4IHdhcyBub3QgYW4gaW1tZWRpYXRlLCB3ZSBoYXZlbid0IHlldCBjaGVja2VkIGVkeC4KQEAg
LTIzNSwxOSArMjM1LDE5IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlv
bioKICAgICAvLyBvdGhlcndpc2UgdGhlc2UgdmFsdWVzIGFyZSBub3QgZXF1YWwuCiAgICAgZmly
c3ROb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwo
WDg2OjplZHgpOwotICAgIGFkZFNsb3dDYXNlKGplUHRyKFg4Njo6ZWR4LCBJbW1QdHIoSlNJbW1l
ZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShqZVB0cihYODY6OmVk
eCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgp
KSkpKTsKICAgICBKdW1wIGZpcnN0V2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAgICAgLy8g
ZWF4IHdhcyBhbiBpbW1lZGlhdGUsIGJ1dCBlZHggd2Fzbid0LgogICAgIC8vIElmIGVheCBpcyAw
IGp1bXAgdG8gYSBzbG93IGNhc2UsIG90aGVyd2lzZSB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBlcXVh
bC4KICAgICBzZWNvbmROb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShq
ZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7Cisg
ICAgYWRkU2xvd0Nhc2UoamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUo
SlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKSk7CiAKICAgICAvLyBXZSBnZXQgaGVyZSBp
ZiB0aGUgdHdvIHZhbHVlcyBhcmUgZGlmZmVyZW50IGltbWVkaWF0ZXMsIG9yIG9uZSBpcyAwIGFu
ZCB0aGUgb3RoZXIgaXMgYSBKU0NlbGwuCiAgICAgLy8gVmFlbHVlcyBhcmUgbm90IGVxdWFsLCBz
ZXQgdGhlIHJlc3VsdCB0byBmYWxzZS4KICAgICBib3RoV2VyZUltbWVkaWF0ZXNCdXROb3RFcXVh
bC5saW5rKHRoaXMpOwogICAgIGZpcnN0V2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShJbW1QdHIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOworICAgIG1vdmUoSW1t
UHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4obmVnYXRlZCkpKSwgWDg2OjplYXgpOwog
ICAgIAogICAgIGJvdGhXZXJlSW1tZWRpYXRlc0FuZEVxdWFsLmxpbmsodGhpcyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1OdW0oWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoamxQdHIoWDg2Ojpl
YXgsIEltbVB0cihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpLCB0YXJnZXQgKyAzKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGpsUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBY
ODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpsZVB0cihYODY6OmVh
eCwgSW1tUHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSksIHRhcmdldCArIDMpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoamxlUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBY
ODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsgLy8gcmVsb2FkIHBy
b3RvCiAKICAgICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGxvYWQgdHJ1ZSByZXN1bHQKLSAg
ICAgICAgICAgIG1vdmUoSW1tUHRyKGpzQm9vbGVhbih0cnVlKSksIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
WDg2OjplYXgpOwogCiAgICAgICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwogCkBAIC00MjksOSAr
NDI5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAg
ICBKdW1wIGV4aXQgPSBqZVB0cihYODY6OmVjeCwgWDg2OjplZHgpOwogCi0gICAgICAgICAgICBq
bmVQdHIoWDg2OjplY3gsIEltbVB0cihqc051bGwoKSksIGxvb3ApOworICAgICAgICAgICAgam5l
UHRyKFg4Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSksIGxvb3Ap
OwogCi0gICAgICAgICAgICBtb3ZlKEltbVB0cihqc0Jvb2xlYW4oZmFsc2UpKSwgWDg2OjplYXgp
OworICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSwgWDg2OjplYXgpOwogCiAgICAgICAgICAgICBleGl0LmxpbmsodGhpcyk7CiAKQEAg
LTYxOCwxMSArNjE4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBq
ZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKTsKKyAg
ICAgICAgICAgIEp1bXAgaXNaZXJvID0gamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRy
OjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKICAgICAgICAgICAgIGFk
ZEp1bXAoam56MzIoWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdl
cikpLCB0YXJnZXQgKyAyKTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwg
SW1tUHRyKGpzQm9vbGVhbih0cnVlKSkpLCB0YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbihmYWxzZSkpKSk7CisgICAg
ICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSkpKSk7CiAKICAgICAgICAgICAgIGlzWmVyby5saW5rKHRoaXMpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbG9vcF9pZl90cnVlKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpnZVB0cihY
ODY6OmVheCwgSW1tUHRyKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSksIHRhcmdldCArIDMpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoamdlUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0
cjo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSkpLCB0YXJnZXQgKyAzKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
b3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVkeCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTcxMiwxMSArNzEyLDExIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4
KTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRp
YXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRKdW1w
KGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjp6
ZXJvSW1tZWRpYXRlKCkpKSksIHRhcmdldCArIDIpOwogICAgICAgICAgICAgSnVtcCBpc05vblpl
cm8gPSBqbnozMihYODY6OmVheCwgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2Vy
KSk7CiAKLSAgICAgICAgICAgIGFkZEp1bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihqc0Jvb2xl
YW4oZmFsc2UpKSksIHRhcmdldCArIDIpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoam5lUHRy
KFg4Njo6ZWF4LCBJbW1QdHIoanNCb29sZWFuKHRydWUpKSkpOworICAgICAgICAgICAgYWRkSnVt
cChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSkpLCB0YXJnZXQgKyAyKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6
OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwogCiAg
ICAgICAgICAgICBpc05vblplcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2pmYWxzZSk7CkBAIC03MzYsNyArNzM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2Vz
IC0gdW5kZWZpbmVkICYgbnVsbAogICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
ICAgICAgICAgICAgIGFuZDMyKEltbTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRl
ZmluZWQpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJ
bW1QdHIoanNOdWxsKCkpKSwgdGFyZ2V0ICsgMik7ICAgICAgICAgICAgCisgICAgICAgICAgICBh
ZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgp
KSkpLCB0YXJnZXQgKyAyKTsgICAgICAgICAgICAKIAogICAgICAgICAgICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZXFfbnVsbCk7CkBA
IC03NTYsNyArNzU2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAogICAgICAgICAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICAgICAgICAgIGFu
ZDMyKEltbTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBhZGRKdW1wKGpuZVB0cihYODY6OmVheCwgSW1tUHRyKGpzTnVsbCgp
KSksIHRhcmdldCArIDIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkSnVtcChqbmVQdHIo
WDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCAr
IDIpOyAgICAgICAgICAgIAogCiAgICAgICAgICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2puZXFfbnVsbCk7CkBAIC03NjYsOCArNzY2
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcG9zdF9pbmMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdW5leHBl
Y3RlZF9sb2FkOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2ID0gbV9jb2RlQmxvY2stPnVuZXhw
ZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIG1vdmUoSW1tUHRyKHYpLCBYODY6OmVheCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBtX2NvZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKHYp
KSwgWDg2OjplYXgpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Vu
ZXhwZWN0ZWRfbG9hZCk7CiAgICAgICAgIH0KQEAgLTgzMywxMSArODMzLDExIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsK
IAotICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1t
ZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKTsKKyAgICAgICAgICAgIEp1bXAgaXNaZXJvID0gamVQ
dHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9J
bW1lZGlhdGUoKSkpKTsKICAgICAgICAgICAgIGFkZEp1bXAoam56MzIoWDg2OjplYXgsIEltbTMy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlcikpLCB0YXJnZXQgKyAyKTsKIAotICAgICAg
ICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbih0cnVlKSkpLCB0
YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0cihYODY6OmVheCwgSW1t
UHRyKGpzQm9vbGVhbihmYWxzZSkpKSk7CisgICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6
ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0
ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihK
U1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAKICAgICAgICAgICAgIGlz
WmVyby5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfanRydWUpOwpAQCAt
MTA1Niw5ICsxMDU2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3NldHRlcik7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG1lc3NhZ2UgPSBtX2Nv
ZGVCbG9jay0+dW5leHBlY3RlZENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBtZXNzYWdlID0gbV9jb2RlQmxvY2stPnVuZXhw
ZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCwgMSk7Ci0gICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0NvbnN0YW50KG1lc3NhZ2Us
IDIpOworICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChKU1ZhbHVlUHRyOjpl
bmNvZGUobWVzc2FnZSksIDIpOwogICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFu
dChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KG1fYnl0ZWNvZGVJbmRl
eCksIDMpOwogICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdf
ZXJyb3IpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKQEAgLTEyODgsMTIgKzEyODgsMTIgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xzaGlm
dCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVt
ZXJpY0FyZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlm
IChzcmMyaW1tKSB7CisgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AyKSkgewogICAgICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAgICAg
ICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQsIDIsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1
YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIob3AyLCAyLCBYODY6OmVjeCk7CiAgICAgICAgICAgICAg
ICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOwogICAgICAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGpuejMyKFg4Njo6ZWF4KSwgdGFyZ2V0ICsgMyk7
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTMxNSw5ICsxMzE1LDkgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9i
eV9pZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTogeworICAg
ICAgICAgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlh
dGVOdW1lcmljQXJnKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaWYgKHNyYzJpbW0pIHsKKyAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAg
ICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAg
ICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgMiwgWDg2OjplY3gpOwpAQCAtMTM3NSw5ICsxMzc1LDkgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3ByZV9kZWMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwog
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0
ZU51bWVyaWNBcmcoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpZiAoc3JjMmltbSkgeworICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlSW50KG9wMikpIHsKICAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAg
ICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYXgsIDEpOwogICAgICAgICAgICAg
ICAgIGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kLCAyLCBYODY6OmVjeCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTcgKzQ5LDE3IEBACiAKICNkZWZpbmUgQVJHX2NhbGxGcmFtZSBzdGF0aWNfY2FzdDxDYWxsRnJh
bWUqPihBUkdTW1NUVUJfQVJHU19jYWxsRnJhbWVdKQogI2RlZmluZSBBUkdfcmVnaXN0ZXJGaWxl
IHN0YXRpY19jYXN0PFJlZ2lzdGVyRmlsZSo+KEFSR1NbU1RVQl9BUkdTX3JlZ2lzdGVyRmlsZV0p
Ci0jZGVmaW5lIEFSR19leGNlcHRpb24gc3RhdGljX2Nhc3Q8SlNWYWx1ZSoqPihBUkdTW1NUVUJf
QVJHU19leGNlcHRpb25dKQorI2RlZmluZSBBUkdfZXhjZXB0aW9uIHN0YXRpY19jYXN0PEpTVmFs
dWVQdHIqPihBUkdTW1NUVUJfQVJHU19leGNlcHRpb25dKQogI2RlZmluZSBBUkdfcHJvZmlsZXJS
ZWZlcmVuY2Ugc3RhdGljX2Nhc3Q8UHJvZmlsZXIqKj4oQVJHU1tTVFVCX0FSR1NfcHJvZmlsZXJS
ZWZlcmVuY2VdKQogI2RlZmluZSBBUkdfZ2xvYmFsRGF0YSBzdGF0aWNfY2FzdDxKU0dsb2JhbERh
dGEqPihBUkdTW1NUVUJfQVJHU19nbG9iYWxEYXRhXSkKIAogI2RlZmluZSBBUkdfc2V0Q2FsbEZy
YW1lKG5ld0NhbGxGcmFtZSkgKEFSR1NbU1RVQl9BUkdTX2NhbGxGcmFtZV0gPSAobmV3Q2FsbEZy
YW1lKSkKIAotI2RlZmluZSBBUkdfc3JjMSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1sxXSkK
LSNkZWZpbmUgQVJHX3NyYzIgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbMl0pCi0jZGVmaW5l
IEFSR19zcmMzIHN0YXRpY19jYXN0PEpTVmFsdWUqPihBUkdTWzNdKQotI2RlZmluZSBBUkdfc3Jj
NCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1s0XSkKLSNkZWZpbmUgQVJHX3NyYzUgc3RhdGlj
X2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbNV0pCisjZGVmaW5lIEFSR19zcmMxIEpTVmFsdWVQdHI6OmRl
Y29kZShzdGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KEFSR1NbMV0pKQorI2Rl
ZmluZSBBUkdfc3JjMiBKU1ZhbHVlUHRyOjpkZWNvZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqPihBUkdTWzJdKSkKKyNkZWZpbmUgQVJHX3NyYzMgSlNWYWx1ZVB0cjo6ZGVj
b2RlKHN0YXRpY19jYXN0PEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKj4oQVJHU1szXSkpCisjZGVm
aW5lIEFSR19zcmM0IEpTVmFsdWVQdHI6OmRlY29kZShzdGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlcio+KEFSR1NbNF0pKQorI2RlZmluZSBBUkdfc3JjNSBKU1ZhbHVlUHRyOjpkZWNv
ZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihBUkdTWzVdKSkKICNkZWZp
bmUgQVJHX2lkMSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1sxXSkKICNkZWZpbmUgQVJH
X2lkMiBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1syXSkKICNkZWZpbmUgQVJHX2lkMyBz
dGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oQVJHU1szXSkKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDsKICAg
ICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiAKLSAgICB0eXBlZGVmIEpTVmFsdWUqIChKSVRf
U1RVQiAqQ1RJSGVscGVyX2opKFNUVUJfQVJHUyk7CisgICAgdHlwZWRlZiBKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogKEpJVF9TVFVCICpDVElIZWxwZXJfaikoU1RVQl9BUkdTKTsKICAgICB0eXBl
ZGVmIEpTT2JqZWN0KiAoSklUX1NUVUIgKkNUSUhlbHBlcl9vKShTVFVCX0FSR1MpOwogICAgIHR5
cGVkZWYgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogKEpJVF9TVFVCICpDVElIZWxwZXJfcCkoU1RV
Ql9BUkdTKTsKICAgICB0eXBlZGVmIHZvaWQgKEpJVF9TVFVCICpDVElIZWxwZXJfdikoU1RVQl9B
UkdTKTsKQEAgLTE5MywxMyArMTkzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAg
ICBleHRlcm4gIkMiIHsKLSAgICAgICAgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSgKKyAgICAgICAg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIGN0aVRyYW1wb2xpbmUoCiAjaWYgUExBVEZPUk0oWDg2
XzY0KQogICAgICAgICAgICAgLy8gRklYTUU6IChidWcgIzIyOTEwKSB0aGlzIHdpbGwgZm9yY2Ug
YWxsIGFyZ3VtZW50cyBvbnRvIHRoZSBzdGFjayAocmVncGFybSgwKSBkb2VzIG5vdCBhcHBlYXIg
dG8gaGF2ZSBhbnkgZWZmZWN0KS4KICAgICAgICAgICAgIC8vIFdlIGNhbiBhbGxvdyByZWdpc3Rl
ciBwYXNzaW5nIGhlcmUsIGFuZCBtb3ZlIHRoZSB3cml0ZXMgb2YgdGhlc2UgdmFsdWVzIGludG8g
dGhlIHRyYW1wb2xpbmUuCiAgICAgICAgICAgICB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwg
dm9pZCosIHZvaWQqLAogI2VuZGlmCi0gICAgICAgICAgICB2b2lkKiBjb2RlLCBSZWdpc3RlckZp
bGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2Jh
bERhdGEqKTsKKyAgICAgICAgICAgIHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFt
ZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKik7CiAg
ICAgICAgIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKTsKICAgICB9OwogCkBAIC0zNDEsMTMg
KzM0MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwo
SlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgdm9pZCogY3Rp
Q29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIHVubGlua0NhbGwoQ2FsbExpbmtJbmZvKik7CiAKLSAgICAgICAg
aW5saW5lIHN0YXRpYyBKU1ZhbHVlKiBleGVjdXRlKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSog
cmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorICAgICAgICBpbmxpbmUgc3RhdGljIEpTVmFsdWVQ
dHIgZXhlY3V0ZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZVB0ciogZXhj
ZXB0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY3RpVHJhbXBvbGluZSgKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjpkZWNvZGUoY3RpVHJhbXBvbGluZSgKICNpZiBQ
TEFURk9STShYODZfNjQpCiAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwKICNlbmRp
ZgotICAgICAgICAgICAgICAgIGNvZGUsIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCBleGNlcHRp
b24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICAgICAgY29kZSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwg
UHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC00MzIsOCArNDMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZh
bHVlLCBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KTsKICAgICAgICAg
dm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvKTsKIAotICAgICAgICBKU1ZhbHVlKiBnZXRD
b25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKTsKLSAgICAgICAgSlNWYWx1
ZSogZ2V0Q29uc3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYyk7CisgICAgICAgIEpTVmFsdWVQdHIg
Z2V0Q29uc3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYyk7CiAgICAgICAgIGludDMyX3QgZ2V0Q29u
c3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYyk7CiAgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudDMxQml0SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYyk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTEg
KzkzLDExIEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9sc2hpZnQKIAogdm9p
ZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWdu
ZWQgb3AxLCB1bnNpZ25lZCBvcDIpCiB7Ci0gICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29u
c3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKG9wMikpIHsKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgWDg2OjplYXgpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2Ojpl
YXgpOwogICAgICAgICAvLyBNYXNrIHdpdGggMHgxZiBhcyBwZXIgZWNtYS0yNjIgMTEuNy4yIHN0
ZXAgNy4KLSAgICAgICAgcnNoaWZ0UHRyKEltbTMyKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRV
SW50MzIodmFsdWUpICYgMHgxZiksIFg4Njo6ZWF4KTsKKyAgICAgICAgcnNoaWZ0UHRyKEltbTMy
KEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikp
ICYgMHgxZiksIFg4Njo6ZWF4KTsKICAgICB9IGVsc2UgewogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIFg4Njo6ZWF4LCBvcDIsIFg4Njo6ZWN4KTsKICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4KTsKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9yc2hpZnQodW5zCiB2b2lkIEpJVDo6Y29tcGlsZUZh
c3RBcml0aFNsb3dfb3BfcnNoaWZ0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQsIHVuc2lnbmVk
IG9wMiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7Ci0gICAgaWYgKGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhv
cDIpKQorICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKQogICAgICAg
ICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIob3AyLCAyLCBYODY6OmVjeCk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgSklUOjp1bmxpbmtD
YWxsKENhbGxMaW5rSW5mbyogY2FsbEwKICAgICAvLyBXaGVuIHRoZSBKU0Z1bmN0aW9uIGlzIGRl
bGV0ZWQgdGhlIHBvaW50ZXIgZW1iZWRkZWQgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbSB3aWxs
IG5vIGxvbmdlciBiZSB2YWxpZAogICAgIC8vIChhbmQsIGlmIGEgbmV3IEpTRnVuY3Rpb24gaGFw
cGVuZWQgdG8gYmUgY29uc3RydWN0ZWQgYXQgdGhlIHNhbWUgbG9jYXRpb24sIHdlIGNvdWxkIGdl
dCBhIGZhbHNlIHBvc2l0aXZlCiAgICAgLy8gbWF0Y2gpLiAgUmVzZXQgdGhlIGNoZWNrIHNvIGl0
IG5vIGxvbmdlciBtYXRjaGVzLgotICAgIERhdGFMYWJlbFB0cjo6cGF0Y2goY2FsbExpbmtJbmZv
LT5ob3RQYXRoQmVnaW4sIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSk7CisgICAgRGF0
YUxhYmVsUHRyOjpwYXRjaChjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgSlNWYWx1ZVB0cjo6
ZW5jb2RlKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSkpOwogfQogCiB2b2lkIEpJVDo6
bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywg
dm9pZCogY3RpQ29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdD
b3VudCkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXpl
Q2FsbEZyYQogCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChTY29wZUNoYWluLCBtX25vZGUp
KSwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCiAKLSAgICBzdG9yZVB0cihJbW1QdHIobm9W
YWx1ZSgpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpPcHRpb25h
bENhbGxlZUFyZ3VtZW50cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKG5vVmFsdWUoKSkpLCBBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1l
bnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRy
KFg4Njo6ZWN4LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihY
ODY6OmVkeCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogfQpAQCAtMjExLDE0
ICsyMTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAg
ICAgICBjb21waWxlT3BDYWxsRXZhbFNldHVwQXJncyhpbnN0cnVjdGlvbik7CiAKICAgICAgICAg
ZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2V2YWwpOwotICAgICAgICB3YXNF
dmFsID0gam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1
ZSgpKSk7CisgICAgICAgIHdhc0V2YWwgPSBqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVl
UHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSkpOwogICAgIH0KIAog
ICAgIC8vIFRoaXMgcGxhbnRzIGEgY2hlY2sgZm9yIGEgY2FjaGVkIEpTRnVuY3Rpb24gdmFsdWUs
IHNvIHdlIGNhbiBwbGFudCBhIGZhc3QgbGluayB0byB0aGUgY2FsbGVlLgogICAgIC8vIFRoaXMg
ZGVsaWJlcmF0ZWx5IGxlYXZlcyB0aGUgY2FsbGVlIGluIGVjeCwgdXNlZCB3aGVuIHNldHRpbmcg
dXAgdGhlIHN0YWNrIGZyYW1lIGJlbG93CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIFg4Njo6ZWN4KTsKICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKLSAgICBKdW1wIGp1bXBUb1Nsb3cgPSBqbmVQdHJXaXRoUGF0Y2goWDg2OjplY3gsIGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIEltbVB0cihKU0ltbWVkaWF0ZTo6aW1wb3NzaWJs
ZVZhbHVlKCkpKTsKKyAgICBKdW1wIGp1bXBUb1Nsb3cgPSBqbmVQdHJXaXRoUGF0Y2goWDg2Ojpl
Y3gsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIEltbVB0cihKU1ZhbHVlUHRyOjplbmNv
ZGUoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSkpOwogICAgIGFkZFNsb3dDYXNlKGp1
bXBUb1Nsb3cpOwogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihhZGRyZXNzT2ZMaW5rZWRG
dW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSA9PSBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1
bXApOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CkBAIC0y
MzksNyArMjM5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQog
CiAgICAgLy8gRmFzdCB2ZXJzaW9uIG9mIHN0YWNrIGZyYW1lIGluaXRpYWxpemF0aW9uLCBkaXJl
Y3RseSByZWxhdGl2ZSB0byBlZGkuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb21pdHMgdG8gc2V0
IHVwIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBzZXQgaW4gdGhlIGNhbGxlZQot
ICAgIHN0b3JlUHRyKEltbVB0cihub1ZhbHVlKCkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRz
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBzdG9yZVB0cihJ
bW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKG5vVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJn
dW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9y
ZVB0cihYODY6OmVjeCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKEpTRnVu
Y3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbiwgbV9ub2RlKSks
IFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgogICAgIHN0b3JlMzIoSW1tMzIoYXJnQ291bnQp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkFyZ3VtZW50Q291bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAzOTYx
NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDggKzUzLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZQogCiAgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxy
ZWFkeSBpbiByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQog
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewotICAg
ICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAg
ICAgICBtb3ZlKEltbVB0cih2YWx1ZSksIGRzdCk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUg
PSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgbW92ZShJbW1QdHIoSlNW
YWx1ZVB0cjo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMiwxNiArMTEyLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcgogICAgIHBlZWsoZHN0LCBhcmd1
bWVudE51bWJlcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSklUOjpnZXRDb25zdGFu
dEltbWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKQotewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICByZXR1cm4gSlNJbW1l
ZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSA/IHZhbHVlIDogbm9WYWx1ZSgpOwotICAgIH0KLSAgICBy
ZXR1cm4gbm9WYWx1ZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKHVuc2lnbmVkIHNyYykKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKSVQ6
OmdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpCiB7CiAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKICAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CkBAIC0xNDIsNyArMTMzLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogICAgIGlmICghbV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTVmFs
dWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyk7CisgICAgSlNWYWx1ZVB0ciB2YWx1
ZSA9IGdldENvbnN0YW50T3BlcmFuZChzcmMpOwogCiAjaWYgVVNFKEFMVEVSTkFURV9KU0lNTUVE
SUFURSkKICAgICBpZiAoIUpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkpCkBAIC0xNTksOCAr
MTUwLDggQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHVu
c2lnbmVkIHNyYywgdW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
IHsKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
LSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
LSAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudCh2YWx1ZSwgYXJndW1lbnROdW1iZXIp
OworICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CisgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KHZhbHVlKSwgYXJndW1lbnROdW1iZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIHNjcmF0
Y2gpOwogICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhzY3JhdGNoLCBhcmd1bWVudE51bWJlcik7
CkBAIC0yMTAsNyArMjAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1
YWxSZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVk
IGRzdCkKIHsKLSAgICBzdG9yZVB0cihJbW1QdHIoanNVbmRlZmluZWQoKSksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBzdG9yZVB0cihJ
bW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIC8vIEZJWE1FOiAjaWZu
ZGVmIE5ERUJVRywgV3JpdGUgdGhlIGNvcnJlY3QgbV90eXBlIHRvIHRoZSByZWdpc3Rlci4KIH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MiwxMCArMTgyLDEwIEBAIHZvaWQgSklUOjpjb21waWxlUHV0QnlJ
ZFNsb3dDYXNlKGludCBiYXMKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsK
IH0KIAotc3RhdGljIEpTVmFsdWUqIHJlc2l6ZVByb3BlcnR5U3RvcmFnZShKU09iamVjdCogYmFz
ZU9iamVjdCwgaW50MzJfdCBvbGRTaXplLCBpbnQzMl90IG5ld1NpemUpCitzdGF0aWMgSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIHJlc2l6ZVByb3BlcnR5U3RvcmFnZShKU09iamVjdCogYmFzZU9i
amVjdCwgaW50MzJfdCBvbGRTaXplLCBpbnQzMl90IG5ld1NpemUpCiB7CiAgICAgYmFzZU9iamVj
dC0+YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAgcmV0dXJu
IGJhc2VPYmplY3Q7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShiYXNlT2JqZWN0KTsK
IH0KIAogc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9j
KFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTIx
MSw3ICsyMTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAg
ICAgLy8gZWN4ID0gYmFzZU9iamVjdC0+bV9zdHJ1Y3R1cmUKICAgICBmb3IgKFJlZlB0cjxTdHJ1
Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewogICAgICAgICAvLyBudWxs
IGNoZWNrIHRoZSBwcm90b3R5cGUKLSAgICAgICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChqZVB0cihY
ODY6OmVjeCwgSW1tUHRyKGpzTnVsbCgpKSkpOworICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5k
KGplUHRyKFg4Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSkpKTsK
IAogICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlIGlkCiAgICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoam5lUHRyKEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1f
c3RydWN0dXJlKSksIEltbVB0cihpdC0+Z2V0KCkpKSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogCiAgICAgLy8gd3JpdGUgdGhl
IHZhbHVlCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNPYmpl
Y3QsIG1fcHJvcGVydHlTdG9yYWdlKSksIFg4Njo6ZWF4KTsKLSAgICBzdG9yZVB0cihYODY6OmVk
eCwgQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSkpOwor
ICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBz
aXplb2YoSlNWYWx1ZVB0cikpKTsKIAogICAgIHJldCgpOwogICAgIApAQCAtMjg5LDcgKzI4OSw3
IEBAIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKFN0cnVjdHVyZVN0dWIKICAgICB2b2lkKiBz
dHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBwYXRjaE9mZnNldEdldEJ5SWRT
dHJ1Y3R1cmUpOwogICAgIHZvaWQqIGRpc3BsYWNlbWVudEFkZHJlc3MgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJl
Z2luKSArIHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKICAgICBEYXRhTGFi
ZWxQdHI6OnBhdGNoKHN0cnVjdHVyZUFkZHJlc3MsIHN0cnVjdHVyZSk7Ci0gICAgRGF0YUxhYmVs
MzI6OnBhdGNoKGRpc3BsYWNlbWVudEFkZHJlc3MsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlKikpOworICAgIERhdGFMYWJlbDMyOjpwYXRjaChkaXNwbGFjZW1lbnRBZGRyZXNzLCBjYWNo
ZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hQdXRC
eUlkUmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQpAQCAtMzAyLDcg
KzMwMiw3IEBAIHZvaWQgSklUOjpwYXRjaFB1dEJ5SWRSZXBsYWNlKFN0cnVjdHVyZVMKICAgICB2
b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3R1YkluZm8t
PmhvdFBhdGhCZWdpbikgKyBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmU7CiAgICAgdm9pZCog
ZGlzcGxhY2VtZW50QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4pICsgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CiAgICAg
RGF0YUxhYmVsUHRyOjpwYXRjaChzdHJ1Y3R1cmVBZGRyZXNzLCBzdHJ1Y3R1cmUpOwotICAgIERh
dGFMYWJlbDMyOjpwYXRjaChkaXNwbGFjZW1lbnRBZGRyZXNzLCBjYWNoZWRPZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSopKTsKKyAgICBEYXRhTGFiZWwzMjo6cGF0Y2goZGlzcGxhY2VtZW50QWRkcmVz
cywgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKTsKIH0KIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCh2b2lkKiByZXR1cm5BZGRyZXNzKQpAQCAt
MzU0LDcgKzM1NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKFN0cnUK
IAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKICAgICBsb2FkUHRy
KEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3Jh
Z2UpKSwgWDg2OjplYXgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
WDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSksIFg4Njo6ZWF4KTsK
ICAgICByZXQoKTsKIAogICAgIHZvaWQqIGNvZGUgPSBtX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29w
eShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogI2VuZGlmCiAKICAgICAvLyBD
aGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4
Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2OjplYXgpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQ
dHIpKSwgWDg2OjplYXgpOwogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCkBAIC00MzEs
NyArNDMxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAg
IEp1bXAgZmFpbHVyZUNhc2VzMyA9IGpuZVB0cihBYnNvbHV0ZUFkZHJlc3MocHJvdG90eXBlU3Ry
dWN0dXJlQWRkcmVzcyksIEltbVB0cihwcm90b3R5cGVTdHJ1Y3R1cmUpKTsKIAogICAgIC8vIENo
ZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0
cikpLCBYODY6OmVheCk7CiAKICAgICByZXQoKTsKIApAQCAtNDUzLDcgKzQ1Myw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKIHsKICAgICBKdW1wIGZhaWx1cmVD
YXNlID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdl
KSksIFg4Njo6ZWF4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9mZnNl
dCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4
Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCiAgICAgdm9pZCogY29kZSA9IG1fYXNzZW1ibGVy
LmV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKQEAgLTUwMCw3
ICs1MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAjZW5k
aWYKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKLSAgICBsb2Fk
UHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpLCBY
ODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBz
aXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1w
KCk7CiAKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW5MaXN0CiAKICAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0g
JnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKICAgICBsb2FkUHRyKHByb3RvUHJvcGVy
dHlTdG9yYWdlLCBYODY6OmVkeCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNo
ZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2Ojpl
YXgpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAogICAgIHZvaWQqIGNvZGUgPSBtX2Fz
c2VtYmxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBA
IC02MTQsNyArNjE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cgogCiAgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09i
amVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgbG9hZFB0cihwcm90b1Byb3BlcnR5U3RvcmFn
ZSwgWDg2OjplZHgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0
ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSksIFg4Njo6ZWF4KTsKICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIu
ZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwpAQCAtNjY0LDcg
KzY2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKIAogICAg
IFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1f
cHJvcGVydHlTdG9yYWdlOwogICAgIGxvYWRQdHIocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UsIFg4Njo6
ZWR4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVv
ZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAgICAgcmV0KCk7
CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOwpAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5SWRSZXBsYWNlKFMKIAogICAgIC8vIGNoZWNrcyBvdXQgb2theSEgLSBw
dXREaXJlY3RPZmZzZXQKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNF
VChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpKSwgWDg2OjplYXgpOwotICAgIHN0b3JlUHRy
KFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1
ZSopKSk7CisgICAgc3RvcmVQdHIoWDg2OjplZHgsIEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9m
ZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSkpOwogICAgIHJldCgpOwogCiAgICAgdm9pZCogY29k
ZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9v
bCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgUHJvZmls
ZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc28KICAgICBpbnQgbGluZU51bWJlcjsKICAgICBp
bnRwdHJfdCBzb3VyY2VJRDsKICAgICBVU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBKU1ZhbHVlKiBm
dW5jdGlvbjsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uOwogCiAgICAgZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIGxpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGZ1bmN0aW9uKTsKICAgICBtX2N1cnJlbnROb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0
ZShQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgZnVu
Y3Rpb24gPyBmdW5jdGlvbi0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogMCwgc291cmNlVVJMLCBsaW5l
TnVtYmVyKSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvUHJvCiAgICAgfQogfQogCi12b2lk
IFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGZ1bmN0aW9u
KQordm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRy
IGZ1bmN0aW9uKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsK
IApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0
ZSogZXgKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywg
JlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjYWxsSWRlbnRpZmllciwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6
OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlvbikKK3ZvaWQgUHJv
ZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGZ1bmN0aW9uKQog
ewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIApAQCAtMTMxLDcg
KzEzMSw3IEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBk
aXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5l
cmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCksIG5vVmFsdWUoKSwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAotQ2FsbElkZW50aWZpZXIg
UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBk
ZWZhdWx0TGluZU51bWJlcikKK0NhbGxJZGVudGlmaWVyIFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRl
bnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWVQdHIgZnVuY3Rpb24sIGNv
bnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZhdWx0TGluZU51bWJlcikKIHsK
ICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoR2xvYmFs
Q29kZUV4ZWN1dGlvbiwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEpT
R2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU09iamVjdDsKKyAgICBjbGFzcyBKU1ZhbHVlUHRyOwog
ICAgIGNsYXNzIFByb2ZpbGVHZW5lcmF0b3I7CiAgICAgY2xhc3MgVVN0cmluZzsKIApAQCAtNTEs
MTQgKzUyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IFByb2ZpbGVyKiBwcm9maWxlcigpOyAKLSAgICAgICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNy
ZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUqLCBjb25zdCBVU3RyaW5n
JiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAgICAgICAgc3RhdGljIENhbGxJZGVudGlm
aWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFsdWVQdHIsIGNvbnN0
IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZvaWQgc3Rh
cnRQcm9maWxpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgdGl0bGUpOwogICAgICAgICBQ
YXNzUmVmUHRyPFByb2ZpbGU+IHN0b3BQcm9maWxpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmlu
ZyYgdGl0bGUpOwogCi0gICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSogZnVuY3Rpb24pOworICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIEpTVmFs
dWVQdHIgZnVuY3Rpb24pOwogICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgICAg
IHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiBmdW5jdGlvbik7CisgICAgICAg
IHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIGZ1bmN0aW9uKTsKICAgICAg
ICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAKICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQ
cm9maWxlR2VuZXJhdG9yPiA+JiBjdXJyZW50UHJvZmlsZXMoKSB7IHJldHVybiBtX2N1cnJlbnRQ
cm9maWxlczsgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQXJnTGlzdDo6bWFya0xpc3RzKExpc3RTZXQmIG1h
cmtTZXQKICAgICB9CiB9CiAKLXZvaWQgQXJnTGlzdDo6c2xvd0FwcGVuZChKU1ZhbHVlKiB2KQor
dm9pZCBBcmdMaXN0OjpzbG93QXBwZW5kKEpTVmFsdWVQdHIgdikKIHsKICAgICAvLyBBcyBsb25n
IGFzIG91ciBzaXplIHN0YXlzIHdpdGhpbiBvdXIgVmVjdG9yJ3MgaW5saW5lIAogICAgIC8vIGNh
cGFjaXR5LCBhbGwgb3VyIHZhbHVlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgYW5kIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemU7
IH0KIAotICAgICAgICBKU1ZhbHVlKiBhdChFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpKSBjb25z
dAorICAgICAgICBKU1ZhbHVlUHRyIGF0KEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IGkpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpIDwgbV9zaXplKQogICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1ZmZlcltpXS5qc1ZhbHVlKGV4ZWMpOwpAQCAtOTksNyArOTksNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fc2l6ZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGFwcGVuZChKU1ZhbHVlKiB2KQorICAgICAgICB2b2lkIGFwcGVuZChKU1ZhbHVlUHRy
IHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9pc1JlYWRPbmx5KTsKICAgICAg
ICAgICAgIApAQCAtMTI1LDcgKzEyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0
aWMgdm9pZCBtYXJrTGlzdHMoTGlzdFNldCYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCBzbG93QXBwZW5kKEpTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBzbG93QXBwZW5kKEpTVmFsdWVQ
dHIpOwogICAgICAgICAKICAgICAgICAgUmVnaXN0ZXIqIG1fYnVmZmVyOwogICAgICAgICBzaXpl
X3QgbV9zaXplOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNp
b24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NSwyOCArMTQ1LDI4IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1MKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEFyZ3VtZW50czo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3ZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKGkgPCBk
LT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJn
dW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAg
ICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gdmFsdWU7Cisg
ICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gSlNW
YWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQtPmV4dHJhQXJndW1l
bnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVlOworICAgICAgICAgICAgZC0+ZXh0cmFB
cmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBKU09iamVjdDo6cHV0KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgVVN0cmluZzo6ZnJvbShpKSksIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBBcmd1bWVu
dHM6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgQXJndW1lbnRzOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBib29sIGlzQXJyYXlJ
bmRleDsKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmaXNBcnJh
eUluZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMgJiYg
KCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAg
ICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBkLT5yZWdpc3RlcnNb
ZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gdmFsdWU7CisgICAgICAgICAgICBkLT5yZWdp
c3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJh
bWV0ZXJzXSA9IHZhbHVlOworICAgICAgICAgICAgZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51
bVBhcmFtZXRlcnNdID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZC0+cmVnaXN0ZXJzID0g
JmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUp
IAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlUHRyIHByb3RvdHlwZSkgCiAgICAgICAgIHsgCiAgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7IAogICAgICAg
ICB9CkBAIC04Miw4ICs4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGdldEFy
Z3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFy
YW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKTsKICAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAKQEAgLTk0LDkgKzk0LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxBcmd1bWVudHNEYXRhPiBkOwogICAgIH07CiAKLSAg
ICBBcmd1bWVudHMqIGFzQXJndW1lbnRzKEpTVmFsdWUqKTsKKyAgICBBcmd1bWVudHMqIGFzQXJn
dW1lbnRzKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEFyZ3VtZW50cyogYXNBcmd1bWVudHMo
SlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEFyZ3VtZW50cyogYXNBcmd1bWVudHMoSlNWYWx1
ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVy
aXRzKCZBcmd1bWVudHM6OmluZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFyZ3Vt
ZW50cyo+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NyBAQCBDb25zdHJ1Y3RUeXBlIEFycmF5Q29uc3RydWN0b3I6OmdldENvbnN0CiAgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbEFycmF5Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhleGVjLCBhcmdzKTsKIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwyNSArMzYsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9D
TEFTU19GSVRTX0lOX0NFTEwoQXJyYXlQcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
Sm9pbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
UHVzaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1NoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVBy
b3RvRnVuY1NvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNMYXN0
SW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5j
Q29uY2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJy
YXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1No
aWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5
UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNF
dmVyeShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNNYXAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9CiAKQEAgLTEwNCw3
ICsxMDQsNyBAQCBib29sIEFycmF5UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gSGVscGVyIGZ1bmN0aW9uCi1zdGF0aWMgSlNWYWx1ZSog
Z2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqLCB1bnNpZ25lZCBpbmRl
eCkKK3N0YXRpYyBKU1ZhbHVlUHRyIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iaiwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqKTsK
ICAgICBpZiAoIW9iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkKQEAgLTEx
MiwxMyArMTEyLDEzIEBAIHN0YXRpYyBKU1ZhbHVlKiBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGUK
ICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiB9CiAKLXN0YXRpYyB2b2lk
IHB1dFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyB2b2lkIHB1dFByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
OwogICAgIG9iai0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1K
U1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBhcnJheVBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZKU0FycmF5OjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFs
dWUqIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CisgICAgICAgIEpTVmFsdWVQdHIg
ZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYgKGVsZW1lbnQtPmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTYyLDcgKzE2
Miw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXQKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJCdWZmZXIuZGF0YSgpLCBzdHJCdWZmZXIuZGF0
YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDApKTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmSlNBcnJh
eTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBA
IC0xODcsMTIgKzE4NywxMiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGVs
ZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CisgICAgICAgIEpTVmFsdWVQdHIgZWxlbWVu
dCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYgKGVsZW1lbnQtPmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBKU09iamVjdCog
byA9IGVsZW1lbnQtPnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBKU1ZhbHVlKiBjb252ZXJzaW9u
RnVuY3Rpb24gPSBvLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3Ry
aW5nKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBjb252ZXJzaW9uRnVuY3Rpb24gPSBvLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKICAgICAgICAgVVN0cmlu
ZyBzdHI7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGNvbnZlcnNpb25GdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwpAQCAtMjE0
LDcgKzIxNCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXgKICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJCdWZmZXIuZGF0YSgpLCBzdHJCdWZm
ZXIuZGF0YSgpID8gc3RyQnVmZmVyLnNpemUoKSA6IDApKTsKIH0KIAotSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jSm9pbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhp
c09iamVjdChleGVjKTsKIApAQCAtMjQxLDcgKzI0MSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jSm9pbihFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgSlNWYWx1ZSogZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICBpZiAo
ZWxlbWVudC0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBA
IC0yNjAsMTEgKzI2MCwxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRl
KiBlCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwg
c3RyQnVmZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0FycmF5KiBhcnIgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMpOwogICAgIGludCBuID0gMDsKLSAgICBKU1ZhbHVlKiBjdXJBcmcgPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlUHRyIGN1ckFyZyA9IHRo
aXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gYXJncy5iZWdpbigpOwogICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFy
Z3MuZW5kKCk7CiAgICAgd2hpbGUgKDEpIHsKQEAgLTI3Miw3ICsyNzIsNyBAQCBKU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqCiAgICAgICAgICAgICBKU0FycmF5KiBjdXJB
cnJheSA9IGFzQXJyYXkoY3VyQXJnKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGN1
ckFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBs
ZW5ndGg7ICsraykgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0UHJvcGVy
dHkoZXhlYywgY3VyQXJyYXksIGspKQorICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlUHRyIHYg
PSBnZXRQcm9wZXJ0eShleGVjLCBjdXJBcnJheSwgaykpCiAgICAgICAgICAgICAgICAgICAgIGFy
ci0+cHV0KGV4ZWMsIG4sIHYpOwogICAgICAgICAgICAgICAgIG4rKzsKICAgICAgICAgICAgIH0K
QEAgLTI4OSwxMyArMjg5LDEzIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNT
dGF0ZSoKICAgICByZXR1cm4gYXJyOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1BvcChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAo
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+aXNKU0FycmF5KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biBhc0FycmF5KHRoaXNWYWx1ZSktPnBvcCgpOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBp
ZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSk7CkBAIC0z
MDgsNyArMzA4LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiBleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1B1c2goRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5pc0pTQXJyYXkodGhpc1ZhbHVlKSAmJiBhcmdz
LnNpemUoKSA9PSAxKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzVmFs
dWUpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUHVzaChFeGVj
U3RhdGUqIGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbGVuZ3RoKTsKIH0KIAotSlNWYWx1
ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y1JldmVyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+
dG9UaGlzT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CkBAIC0z
MzMsOCArMzMzLDggQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZQog
CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IG1pZGRsZTsgaysrKSB7CiAgICAgICAgIHVu
c2lnbmVkIGxrMSA9IGxlbmd0aCAtIGsgLSAxOwotICAgICAgICBKU1ZhbHVlKiBvYmoyID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgbGsxKTsKLSAgICAgICAgSlNWYWx1ZSogb2JqID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CisgICAgICAgIEpTVmFsdWVQdHIgb2JqMiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGxrMSk7CisgICAgICAgIEpTVmFsdWVQdHIgb2JqID0g
Z2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7CiAKICAgICAgICAgaWYgKG9iajIpCiAgICAg
ICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgaywgb2JqMik7CkBAIC0zNDksMTAgKzM0OSwxMCBA
QCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIHRo
aXNPYmo7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU09iamVjdCogdGhpc09i
aiA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdDsK
KyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmot
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7
CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CkBAIC0zNjEsNyArMzYxLDcgQEAgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNTaGlmdChFeGVjU3RhdGUqIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3Vs
dCA9IHRoaXNPYmotPmdldChleGVjLCAwKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMTsg
ayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogb2JqID0gZ2V0UHJv
cGVydHkoZXhlYywgdGhpc09iaiwgaykpCisgICAgICAgICAgICBpZiAoSlNWYWx1ZVB0ciBvYmog
PSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrKSkKICAgICAgICAgICAgICAgICB0aGlzT2Jq
LT5wdXQoZXhlYywgayAtIDEsIG9iaik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgayAtIDEpOwpAQCAtMzcyLDcgKzM3Miw3
IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIGh0
dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2RvY3MvbWFudWFscy9qcy9jbGllbnQvanNyZWYv
YXJyYXkuaHRtIzExOTM3MTMgb3IgMTUuNC40LjEwCiAKQEAgLTM4MCw3ICszODAsNyBAQCBKU1Zh
bHVlKiBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogCiAKICAgICAvLyBXZSByZXR1cm4g
YSBuZXcgYXJyYXkKICAgICBKU0FycmF5KiByZXNPYmogPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlc09iajsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IHJlc09iajsKICAgICBkb3VibGUgYmVnaW4gPSBhcmdzLmF0KGV4ZWMsIDApLT50b0ludGVn
ZXIoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVjKTsKICAgICBpZiAoYmVnaW4g
Pj0gMCkgewpAQCAtNDEwLDE4ICs0MTAsMTggQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGlj
ZShFeGVjU3RhdGUqIAogICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50PihiZWdpbik7CiAgICAg
aW50IGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGVuZCk7CiAgICAgZm9yIChpbnQgayA9IGI7IGsgPCBl
OyBrKyssIG4rKykgewotICAgICAgICBpZiAoSlNWYWx1ZSogdiA9IGdldFByb3BlcnR5KGV4ZWMs
IHRoaXNPYmosIGspKQorICAgICAgICBpZiAoSlNWYWx1ZVB0ciB2ID0gZ2V0UHJvcGVydHkoZXhl
YywgdGhpc09iaiwgaykpCiAgICAgICAgICAgICByZXNPYmotPnB1dChleGVjLCBuLCB2KTsKICAg
ICB9CiAgICAgcmVzT2JqLT5zZXRMZW5ndGgobik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5
UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0g
YXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVj
LCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1
bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAKQEAgLTQ0MSwxMSArNDQxLDExIEBAIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGUKICAgICAvLyAiTWluIiBzb3J0
LiBOb3QgdGhlIGZhc3Rlc3QsIGJ1dCBkZWZpbml0ZWx5IGxlc3MgY29kZSB0aGFuIGhlYXBzb3J0
CiAgICAgLy8gb3IgcXVpY2tzb3J0LCBhbmQgbXVjaCBsZXNzIHN3YXBwaW5nIHRoYW4gYnViYmxl
c29ydC9pbnNlcnRpb25zb3J0LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgg
LSAxOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSogaU9iaiA9IHRoaXNPYmotPmdldChleGVjLCBp
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBpT2JqID0gdGhpc09iai0+Z2V0KGV4ZWMsIGkpOwogICAg
ICAgICB1bnNpZ25lZCB0aGVtaW4gPSBpOwotICAgICAgICBKU1ZhbHVlKiBtaW5PYmogPSBpT2Jq
OworICAgICAgICBKU1ZhbHVlUHRyIG1pbk9iaiA9IGlPYmo7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGkgKyAxOyBqIDwgbGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIGpP
YmogPSB0aGlzT2JqLT5nZXQoZXhlYywgaik7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIGpPYmog
PSB0aGlzT2JqLT5nZXQoZXhlYywgaik7CiAgICAgICAgICAgICBkb3VibGUgY29tcGFyZVJlc3Vs
dDsKICAgICAgICAgICAgIGlmIChqT2JqLT5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IGNvbXBhcmVSZXN1bHQgPSAxOyAvLyBkb24ndCBjaGVjayBtaW5PYmogYmVjYXVzZSB0aGVyZSdz
IG5vIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSA9PSAoMCkgZnJvbSA+ICgxKQpAQCAtNDczLDEzICs0
NzMsMTMgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSogZQogICAgIHJl
dHVybiB0aGlzT2JqOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAog
ICAgIC8vIDE1LjQuNC4xMgogICAgIEpTQXJyYXkqIHJlc09iaiA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gcmVzT2JqOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0gcmVzT2JqOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgaWYg
KCFhcmdzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00OTYsNyAr
NDk2LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKgogICAgICAg
ICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGJlZ2luOwogCiAgICAgZm9yICh1bnNpZ25lZCBrID0g
MDsgayA8IGRlbGV0ZUNvdW50OyBrKyspIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pKQorICAgICAgICBpZiAoSlNWYWx1ZVB0
ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKSkKICAgICAgICAgICAg
IHJlc09iai0+cHV0KGV4ZWMsIGssIHYpOwogICAgIH0KICAgICByZXNPYmotPnNldExlbmd0aChk
ZWxldGVDb3VudCk7CkBAIC01MDUsNyArNTA1LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNT
cGxpY2UoRXhlY1N0YXRlKgogICAgIGlmIChhZGRpdGlvbmFsQXJncyAhPSBkZWxldGVDb3VudCkg
ewogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxldGVDb3VudCkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBsZW5ndGggLSBkZWxldGVDb3VudDsgKytr
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0
aGlzT2JqLCBrICsgZGVsZXRlQ291bnQpKQorICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlUHRy
IHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgZGVsZXRlQ291bnQpKQogICAgICAg
ICAgICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgayArIGFkZGl0aW9uYWxBcmdzLCB2KTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0
ZVByb3BlcnR5KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJncyk7CkBAIC01MTQsNyArNTE0LDcgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKgogICAgICAgICAgICAgICAg
IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsgLSAxKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0aCAtIGRlbGV0ZUNvdW50OyAoaW50
KWsgPiBiZWdpbjsgLS1rKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUqIG9iaiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBkZWxldGVDb3VudCAtIDEpKQorICAgICAgICAg
ICAgICAgIGlmIChKU1ZhbHVlUHRyIG9iaiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsg
KyBkZWxldGVDb3VudCAtIDEpKQogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhl
YywgayArIGFkZGl0aW9uYWxBcmdzIC0gMSwgb2JqKTsKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsgKyBhZGRp
dGlvbmFsQXJncyAtIDEpOwpAQCAtNTI4LDcgKzUyOCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBh
cnJheVByb3RvRnVuY1VuU2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCkBAIC01MzcsNyArNTM3LDcgQEAgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZQogICAgIHVuc2lnbmVkIG5yQXJncyA9IGFy
Z3Muc2l6ZSgpOwogICAgIGlmIChuckFyZ3MpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0g
bGVuZ3RoOyBrID4gMDsgLS1rKSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogdiA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgLSAxKSkKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlUHRy
IHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrIC0gMSkpCiAgICAgICAgICAgICAgICAg
dGhpc09iai0+cHV0KGV4ZWMsIGsgKyBuckFyZ3MgLSAxLCB2KTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrICsgbnJBcmdz
IC0gMSk7CkBAIC01NDUsMTYgKzU0NSwxNiBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1VuU2hp
ZnQoRXhlY1N0YXRlCiAgICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7
ICsraykKICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGssIGFyZ3MuYXQoZXhlYywgaykpOwot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCArIG5yQXJncyk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihleGVjLCBsZW5ndGggKyBuckFyZ3MpOwog
ICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNGaWx0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1Ro
aXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywg
MCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC01
NzEsNyArNTcxLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKgog
ICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBrLCBzbG90KSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVl
KGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGsp
OwogCiAgICAgICAgIEFyZ0xpc3QgZWFjaEFyZ3VtZW50czsKIApAQCAtNTc5LDcgKzU3OSw3IEBA
IEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSoKICAgICAgICAgZWFjaEFy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAgICBlYWNoQXJndW1lbnRz
LmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7
CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwogCiAgICAgICAgIGlmIChy
ZXN1bHQtPnRvQm9vbGVhbihleGVjKSkKICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5wdXQoZXhl
YywgZmlsdGVySW5kZXgrKywgdik7CkBAIC01ODcsMTEgKzU4NywxMSBAQCBKU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogfQog
Ci1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJh
eVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0g
YXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVj
LCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1
bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkKQEAgLTYwOCw3ICs2MDgsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChF
eGVjU3RhdGUqIGV4CiAgICAgICAgIGlmICghdGhpc09iai0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGssIHNsb3QpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgSlNWYWx1ZSogdiA9
IHNsb3QuZ2V0VmFsdWUoZXhlYywgayk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgayk7CiAKICAgICAgICAgQXJnTGlzdCBlYWNoQXJndW1lbnRzOwogCkBAIC02
MTYsNyArNjE2LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleAog
ICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihleGVjLCBrKSk7CiAgICAgICAg
IGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCi0gICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBl
YWNoQXJndW1lbnRzKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyk7CiAg
ICAgICAgIHJlc3VsdEFycmF5LT5wdXQoZXhlYywgaywgcmVzdWx0KTsKICAgICB9CiAKQEAgLTYy
OCwxMSArNjI4LDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXgK
IC8vIGh0dHA6Ly9kZXZlbG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNj
cmlwdF8xLjVfUmVmZXJlbmNlOk9iamVjdHM6QXJyYXk6Zm9yRWFjaAogLy8gaHR0cDovL2RldmVs
b3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVu
Y2U6T2JqZWN0czpBcnJheTpzb21lCiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsK
IAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVl
UHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTY0MCw3ICs2NDAsNyBAQCBK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0ZSogCiAKICAgICBKU09iamVjdCog
YXBwbHlUaGlzID0gYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRPck51bGwoKSA/IGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdChleGVjLCAxKS0+dG9PYmplY3QoZXhlYyk7CiAK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMp
OwogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpOyArK2spIHsKQEAgLTY2NiwxMSArNjY2LDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jRXZlcnkoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBh
cnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNW
YWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdz
LmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDAp
OwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rp
b24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKQpAQCAtNjk0LDExICs2OTQsMTEgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNGb3JFYWNo
KEV4ZWNTdGF0ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBhcnJh
eVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNTb21l
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9U
aGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMs
IDApOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENh
bGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAt
NzA2LDcgKzcwNiw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGUK
IAogICAgIEpTT2JqZWN0KiBhcHBseVRoaXMgPSBhcmdzLmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5l
ZE9yTnVsbCgpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiBhcmdzLmF0KGV4ZWMsIDEpLT50
b09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7
CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc0Jvb2xlYW4oZmFsc2UpOwogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLT50b1VJbnQzMihleGVjKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3Ro
ICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7CkBAIC03MjksNyArNzI5LDcgQEAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEphdmFT
Y3JpcHQgMS41IEV4dGVuc2lvbiBieSBNb3ppbGxhCiAgICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0
cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVm
ZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5OmluZGV4T2YKQEAgLTc0OCw5ICs3NDgsOSBAQCBK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlCiAgICAgICAgICAgICBpbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlKiBzZWFy
Y2hFbGVtZW50ID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHNlYXJjaEVsZW1l
bnQgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRl
eCkgewotICAgICAgICBKU1ZhbHVlKiBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5k
ZXgpOworICAgICAgICBKU1ZhbHVlUHRyIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBp
bmRleCk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoc3RyaWN0RXF1YWwoc2VhcmNoRWxlbWVudCwgZSkpCkBAIC03NjAsNyArNzYwLDcgQEAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZQogICAgIHJldHVybiBqc051bWJl
cihleGVjLCAtMSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgLy8gSmF2YVNjcmlwdCAxLjYgRXh0ZW5zaW9uIGJ5IE1vemlsbGEKICAgICAv
LyBEb2N1bWVudGF0aW9uOiBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29y
ZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6QXJyYXk6bGFzdEluZGV4
T2YKQEAgLTc3OSw5ICs3NzksOSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTCiAgICAgaWYgKGQgPCBsZW5ndGgpCiAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8
aW50PihkKTsKIAotICAgIEpTVmFsdWUqIHNlYXJjaEVsZW1lbnQgPSBhcmdzLmF0KGV4ZWMsIDAp
OworICAgIEpTVmFsdWVQdHIgc2VhcmNoRWxlbWVudCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAg
Zm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSogZSA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBlID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0cmljdEVxdWFsKHNlYXJjaEVsZW1lbnQsIGUp
KQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgQ29uc3RydWN0VHlw
ZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbgogfQogCiAvLyBFQ01BIDE1LjYuMQotc3RhdGlj
IEpTVmFsdWUqIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2Fs
bEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNCb29sZWFuKGFyZ3MuYXQo
ZXhlYywgMCktPnRvQm9vbGVhbihleGVjKSk7CiB9CkBAIC02OCw3ICs2OCw3IEBAIENhbGxUeXBl
IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0
OwogfQogCi1KU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogaW1tZWRpYXRlQm9vbGVhblZhbHVlKQorSlNPYmplY3Qq
IGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWVQdHIgaW1tZWRpYXRlQm9vbGVhblZhbHVlKQogewogICAgIEJvb2xlYW5PYmplY3QqIG9i
aiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGlt
bWVkaWF0ZUJvb2xlYW5WYWx1ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xl
YW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShD
YWxsRGF0YSYpOwogICAgIH07CiAKLSAgICBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsKKyAgICBKU09iamVjdCogY29u
c3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIp
OwogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5PYmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIH07CiAK
LSAgICBCb29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZSopOworICAgIEJvb2xl
YW5PYmplY3QqIGFzQm9vbGVhbk9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBCb29s
ZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEJv
b2xlYW5PYmplY3QqIGFzQm9vbGVhbk9iamVjdChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6Omlu
Zm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJvb2xlYW5PYmplY3QqPihhc09iamVj
dCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEJvb2xlYW5Qcm90b3R5cGUpOwogCiAv
LyBGdW5jdGlvbnMKLXN0YXRpYyBKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGJvb2xlYW5Qcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiAvLyBFQ01BIDE1
LjYuNAogCkBAIC01MCw3ICs1MCw3IEBAIEJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5
cGUoRXhlY1MKIAogLy8gRUNNQSAxNS42LjQuMiArIDE1LjYuNC4zCiAKLUpTVmFsdWUqIGJvb2xl
YW5Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYm9vbGVhblByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKHRoaXNWYWx1ZSA9PSBqc0Jvb2xlYW4oZmFsc2Up
KQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmYWxzZSIpOwpAQCAt
NjgsNyArNjgsNyBAQCBKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0CiAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAidHJ1ZSIpOwogfQogCi1KU1ZhbHVl
KiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYm9vbGVhblByb3Rv
RnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzQm9vbGVhbih0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhpc1ZhbHVlOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBm
dW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0
YSwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBj
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkKICAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjLCBhc09iamVj
dChmdW5jdGlvbk9iamVjdCksIHRoaXNWYWx1ZSwgYXJncyk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTQgKzI5LDEzIEBACiAjaWZuZGVmIENh
bGxEYXRhX2gKICNkZWZpbmUgQ2FsbERhdGFfaAogCi0jaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIK
LQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmdMaXN0OwogICAgIGNsYXNzIEV4ZWNT
dGF0ZTsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwogICAgIGNsYXNzIEpTT2JqZWN0Owor
ICAgIGNsYXNzIEpTVmFsdWVQdHI7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBl
bnVtIENhbGxUeXBlIHsKQEAgLTQ1LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IENhbGxUeXBlSlMKICAgICB9OwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlKiAoKk5hdGl2ZUZ1bmN0
aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOworICAgIHR5cGVkZWYgSlNWYWx1ZVB0ciAoKk5hdGl2ZUZ1bmN0aW9uKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAK
ICAgICB1bmlvbiBDYWxsRGF0YSB7CiAgICAgICAgIHN0cnVjdCB7CkBAIC01Nyw3ICs1Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9IGpzOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiBj
YWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1Zh
bHVlUHRyIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxl
Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xs
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBIZWFwOjpz
ZXRHQ1Byb3RlY3ROZWVkc0xvY2tpbmcoKQogICAgICAgICBtX3Byb3RlY3RlZFZhbHVlc011dGV4
LnNldChuZXcgTXV0ZXgpOwogfQogCi12b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSogaykKK3Zv
aWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlUHRyIGspCiB7CiAgICAgQVNTRVJUKGspOwogICAgIEFT
U0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSk7CkBAIC04MjAsNyArODIwLDcgQEAgdm9pZCBIZWFwOjpwcm90
ZWN0KEpTVmFsdWUqIGspCiAgICAgICAgIG1fcHJvdGVjdGVkVmFsdWVzTXV0ZXgtPnVubG9jaygp
OwogfQogCi12b2lkIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlKiBrKQordm9pZCBIZWFwOjp1bnBy
b3RlY3QoSlNWYWx1ZVB0ciBrKQogewogICAgIEFTU0VSVChrKTsKICAgICBBU1NFUlQoSlNMb2Nr
OjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UpOwpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSGVhcDo6dW5wcm90ZWN0KEpTVmFs
dWUqIGspCiAgICAgICAgIG1fcHJvdGVjdGVkVmFsdWVzTXV0ZXgtPnVubG9jaygpOwogfQogCi1I
ZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWUqIHYpCitIZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWVQdHIg
dikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpKQogICAgICAgICByZXR1
cm4gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIENvbGxlY3Rvcl9oCiAjZGVmaW5lIENvbGxlY3Rvcl9o
CiAKLSNpbmNsdWRlICJKU0ltbWVkaWF0ZS5oIgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgpAQCAtNDQsNiAr
NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb2xsZWN0b3JCbG9jazsKICAgICBj
bGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOworICAgIGNsYXNzIEpTVmFsdWVQ
dHI7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2Nh
dGlvbiwgQ29sbGVjdGlvbiB9OwogICAgIGVudW0gSGVhcFR5cGUgeyBQcmltYXJ5SGVhcCwgTnVt
YmVySGVhcCB9OwpAQCAtOTYsMTAgKzk2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
dGF0aXN0aWNzIHN0YXRpc3RpY3MoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldEdDUHJvdGVj
dE5lZWRzTG9ja2luZygpOwotICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSopOwotICAgICAg
ICB2b2lkIHVucHJvdGVjdChKU1ZhbHVlKik7CisgICAgICAgIHZvaWQgcHJvdGVjdChKU1ZhbHVl
UHRyKTsKKyAgICAgICAgdm9pZCB1bnByb3RlY3QoSlNWYWx1ZVB0cik7CiAKLSAgICAgICAgc3Rh
dGljIEhlYXAqIGhlYXAoSlNWYWx1ZSopOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFsdWVzCisgICAg
ICAgIHN0YXRpYyBIZWFwKiBoZWFwKEpTVmFsdWVQdHIpOyAvLyAwIGZvciBpbW1lZGlhdGUgdmFs
dWVzCiAKICAgICAgICAgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7CiAgICAgICAgIHNpemVf
dCBwcm90ZWN0ZWRPYmplY3RDb3VudCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgQ29tcGxldGlvbiBj
aGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1h
bCk7CiB9CiAKLUNvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
JiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHRoaXNWYWx1
ZSkKK0NvbXBsZXRpb24gZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluJiBzY29w
ZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlKQog
ewogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAgIApAQCAtNjMsOCArNjMsOCBAQCBDb21wbGV0
aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvCiAKICAgICBKU09iamVjdCogdGhpc09i
aiA9ICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS0+aXNVbmRlZmluZWRPck51bGwoKSkgPyBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCkgOiB0aGlzVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogCi0g
ICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gbm9WYWx1ZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUocHJvZ3JhbU5vZGUuZ2V0KCksIGV4ZWMsIHNj
b3BlQ2hhaW4ubm9kZSgpLCB0aGlzT2JqLCAmZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlUHRyIGV4
Y2VwdGlvbiA9IG5vVmFsdWUoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGV4ZWMtPmludGVy
cHJldGVyKCktPmV4ZWN1dGUocHJvZ3JhbU5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4ubm9k
ZSgpLCB0aGlzT2JqLCAmZXhjZXB0aW9uKTsKIAogICAgIGlmIChleGNlcHRpb24pIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbi0+aXNPYmplY3QoKSAmJiBhc09iamVjdChleGNlcHRpb24pLT5pc1dh
dGNoZG9nRXhjZXB0aW9uKCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAko
cmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMjQgKzM5LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAq
LwogICAgIGNsYXNzIENvbXBsZXRpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgQ29tcGxldGlv
bihDb21wbFR5cGUgdHlwZSA9IE5vcm1hbCwgSlNWYWx1ZSogdmFsdWUgPSBub1ZhbHVlKCkpCisg
ICAgICAgIENvbXBsZXRpb24oQ29tcGxUeXBlIHR5cGUgPSBOb3JtYWwsIEpTVmFsdWVQdHIgdmFs
dWUgPSBub1ZhbHVlKCkpCiAgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBDb21wbFR5
cGUgY29tcGxUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIEpTVmFsdWUq
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgICAgICB2b2lkIHNldFZhbHVl
KEpTVmFsdWUqIHYpIHsgbV92YWx1ZSA9IHY7IH0KLSAgICAgICAgYm9vbCBpc1ZhbHVlQ29tcGxl
dGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFZhbHVlKEpT
VmFsdWVQdHIgdikgeyBtX3ZhbHVlID0gdjsgfQorICAgICAgICBib29sIGlzVmFsdWVDb21wbGV0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Q29tcGxUeXBlIG1fdHlwZTsKLSAgICAgICAgSlNWYWx1ZSogbV92YWx1ZTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBtX3ZhbHVlOwogICAgIH07CiAKICAgICBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW4mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSogdGhpc1Zh
bHVlID0gbm9WYWx1ZSgpKTsKKyAgICBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW4mLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUgPSBub1Zh
bHVlKCkpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiBvYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTT2Jq
ZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIG9iamVjdCwgQ29uc3Ry
dWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRh
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0
cnVjdFR5cGVIb3N0KQogICAgICAgICByZXR1cm4gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24oZXhlYywgYXNPYmplY3Qob2JqZWN0KSwgYXJncyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0cnVjdERhdGEuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0cnVjdERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTQgKzI5LDEzIEBA
CiAjaWZuZGVmIENvbnN0cnVjdERhdGFfaAogI2RlZmluZSBDb25zdHJ1Y3REYXRhX2gKIAotI2lu
Y2x1ZGUgIkpTSW1tZWRpYXRlLmgiIC8vIHRlbXBvcmFyeSB1bnRpbCBKU1ZhbHVlKiBiZWNvbWVz
IGEgY2xhc3Mgd2UgY2FuIGZvcndhcmQtZGVjbGFyZQotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFyZ0xpc3Q7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEZ1bmN0aW9u
Qm9keU5vZGU7CiAgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgSlNWYWx1ZVB0cjsKICAg
ICBjbGFzcyBTY29wZUNoYWluTm9kZTsKIAogICAgIGVudW0gQ29uc3RydWN0VHlwZSB7CkBAIC01
Nyw3ICs1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9IGpzOwogICAgIH07CiAKLSAg
ICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUqIGNvbnN0cnVjdG9yLCBD
b25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYpOworICAg
IEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBjb25zdHJ1Y3Rvciwg
Q29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKERhdGVDb25zdHJ1Y3Rv
cik7CiAKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUGFyc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVOb3coRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFs
dWUqIGRhdGVVVEMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZU5vdyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGRhdGVVVEMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CiAKIERhdGVDb25zdHJ1Y3Rvcjo6RGF0ZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBw
cm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgRGF0ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSkK
ICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBJ
ZGVudGlmaWVyKGV4ZWMsIGRhdGVQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQpA
QCAtNzYsNyArNzYsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgIGlmIChhcmdzLmF0KGV4ZWMsIDApLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjpp
bmZvKSkKICAgICAgICAgICAgIHZhbHVlID0gYXNEYXRlSW5zdGFuY2UoYXJncy5hdChleGVjLCAw
KSktPmludGVybmFsTnVtYmVyKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1
ZSogcHJpbWl0aXZlID0gYXJncy5hdChleGVjLCAwKS0+dG9QcmltaXRpdmUoZXhlYyk7CisgICAg
ICAgICAgICBKU1ZhbHVlUHRyIHByaW1pdGl2ZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvUHJpbWl0
aXZlKGV4ZWMpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS0+aXNTdHJpbmcoKSkKICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRGF0ZShwcmltaXRpdmUtPmdldFN0cmluZygpKTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTEyMyw3ICsxMjMsNyBAQCBDb25zdHJ1Y3RUeXBlIERhdGVDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RyCiB9CiAKIC8vIEVDTUEgMTUuOS4yCi1zdGF0aWMgSlNWYWx1ZSog
Y2FsbERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0JikKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICB0aW1lX3QgbG9jYWxUaW1l
ID0gdGltZSgwKTsKICAgICB0bSBsb2NhbFRNOwpAQCAtMTM4LDE3ICsxMzgsMTcgQEAgQ2FsbFR5
cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShDYQogICAgIHJldHVybiBDYWxsVHlwZUhv
c3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIg
ZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZURhdGUoYXJn
cy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGRh
dGVOb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
JikKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBnZXRDdXJyZW50VVRDVGltZSgpKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGRhdGVVVEMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVVUQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpbnQgbiA9IGFyZ3Muc2l6ZSgp
OwogICAgIGlmIChpc25hbihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gMzk2MTYpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtdXRhYmxlIENhY2hlKiBtX2Nh
Y2hlOwogICAgIH07CiAKLSAgICBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUq
KTsKKyAgICBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWVQdHIpOwogCi0gICAg
aW5saW5lIERhdGVJbnN0YW5jZSogYXNEYXRlSW5zdGFuY2UoSlNWYWx1ZSogdmFsdWUpCisgICAg
aW5saW5lIERhdGVJbnN0YW5jZSogYXNEYXRlSW5zdGFuY2UoSlNWYWx1ZVB0ciB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZEYXRlSW5zdGFu
Y2U6OmluZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KGFz
T2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNTAgKzU4LDUwIEBAIG5hbWVzcGFjZSBK
U0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKERhdGVQcm90b3R5cGUpOwogCi1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXREYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dl
dE1vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRVVENEYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWls
bGlzZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vj
b25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNTZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0RnVsbFllYXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25k
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNTZXRNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
U2V0VVRDSG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
U2V0VVRDTW9udGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNHZXREYXkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1pbnV0
ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0TW9udGgoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRD
RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dl
dFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0WWVh
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldE1vbnRo
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ01p
bGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRl
U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmco
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKIAogfQogCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBEYXRlUHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogCiAvLyBGdW5jdGlvbnMKIAotSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC0z
NzYsNyArMzc2LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZQog
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0KSArICIgIiAr
IGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtMzkzLDcgKzM5
Myw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3QKICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGVVVENWYXJpYW50KHQpICsgIiAi
ICsgZm9ybWF0VGltZSh0LCB1dGMpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTQxMCw3
ICs0MTAsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTCiAgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlKHQpKTsKIH0KIAotSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKQEAgLTQyNyw3ICs0MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
VG9UaW1lU3RyaW5nKEV4ZWNTCiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBm
b3JtYXRUaW1lKHQsIHV0YykpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CkBAIC00NTEsNyArNDUxLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZQogI2VuZGlmCiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtNDc1LDcgKzQ3NSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVT
dHJpbmcKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTQ5OSw3ICs0OTksNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1l
U3RyaW5nCiAjZW5kaWYKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0
aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgbWlsbGkpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC01MjUsNyArNTI1LDcgQEAgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRlKgogICAgIHJldHVybiBqc051bWJlcihleGVjLCBt
aWxsaSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0
aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTQyLDcgKzU0Miw3IEBAIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgMTkwMCArIHQueWVhcik7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxs
WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTU5LDcg
KzU1OSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGUKICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgMTkwMCArIHQueWVhcik7CiB9CiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvR01U
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtNTc2LDcgKzU3Niw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhF
eGVjU3QKICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGVVVENW
YXJpYW50KHQpICsgIiAiICsgZm9ybWF0VGltZSh0LCB1dGMpKTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0TW9u
dGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5j
ZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBA
IC01OTMsNyArNTkzLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0
ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoKTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY0dldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0
VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CkBAIC02MTAsNyArNjEwLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRo
KEV4ZWNTdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoKTsKIH0KIAotSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNH
ZXREYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtNjI3LDcgKzYyNyw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNT
dGF0ZSoKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aERheSk7CiB9CiAKLUpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9G
dW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgm
RGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKQEAgLTY0NCw3ICs2NDQsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRD
RGF0ZShFeGVjU3RhCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJv
dG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtNjYxLDcgKzY2MSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXko
RXhlY1N0YXRlKiAKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC53ZWVrRGF5KTsKIH0KIAot
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY0dldFVUQ0RheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKQEAgLTY3OCw3ICs2NzgsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0
VVRDRGF5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQud2Vla0RheSk7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2Jq
ZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRIb3VycyhFeGVjU3RhdGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5ob3VyKTsKIH0K
IAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBk
YXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+
aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03MTIsNyArNzEyLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY0dldFVUQ0hvdXJzKEV4ZWNTdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LmhvdXIp
OwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1
ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03MjksNyArNzI5LDcgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1p
bnV0ZSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTc0Niw3ICs3NDYsNyBAQCBKU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjCiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHQubWludXRlKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFNlY29uZHMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzYzLDcgKzc2Myw3IEBA
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGEKICAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgdC5zZWNvbmQpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRD
U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03ODAs
NyArNzgwLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoRXhlYwogICAg
IHJldHVybiBqc051bWJlcihleGVjLCB0LnNlY29uZCk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRN
aWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRh
dGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CkBAIC03OTUsNyArNzk1LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxp
U2Vjb25kcyhFeAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBtcyk7CiB9CiAKLUpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1
ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC04MTAsNyArODEwLDcgQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBtcyk7
CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
aWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtODI3LDcgKzgyNyw3IEBAIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldCgKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgLWdtdG9mZnNldCh0KSAvIG1pbnV0ZXNQZXJIb3VyKTsKIH0KIAotSlNWYWx1ZSog
ZGF0ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVu
Y1NldFRpbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgm
RGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKQEAgLTgzNSwxMiArODM1LDEyIEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRU
aW1lKEV4ZWNTdGF0ZSoKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5z
dGFuY2UodGhpc1ZhbHVlKTsgCiAKICAgICBkb3VibGUgbWlsbGkgPSB0aW1lQ2xpcChhcmdzLmF0
KGV4ZWMsIDApLT50b051bWJlcihleGVjKSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1i
ZXIoZXhlYywgbWlsbGkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywg
bWlsbGkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbVRpbWVB
cmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzLCBpbnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCitzdGF0aWMgSlNWYWx1ZVB0
ciBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0
SXNVVEMpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtODQ5
LDcgKzg0OSw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncygKICAg
ICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICAKICAg
ICBpZiAoYXJncy5pc0VtcHR5KCkgfHwgaXNuYW4obWlsbGkpKSB7Ci0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFO
KGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTg2MSwyNCArODYxLDI0IEBAIHN0YXRp
YyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncygKICAgICB0aGlzRGF0ZU9iai0+bXNU
b0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCBpbnB1dElzVVRDLCB0KTsKIAogICAgIGlmICghZmls
bFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAm
dCkpIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oZXhlYyk7CisgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAKICAg
ICAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGlt
ZVRvTVModCwgbXMsIGlucHV0SXNVVEMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgbnVt
QXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCitzdGF0aWMgSlNWYWx1ZVB0ciBzZXROZXdWYWx1
ZUZyb21EYXRlQXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzLCBpbnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNl
KiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7CiAgICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAg
ICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9i
ai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0gICAgICAKQEAgLTg5OCwxMDEgKzg5OCwxMDEgQEAgc3RhdGljIEpTVmFsdWUqIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKAogICAgIH0KICAgICAKICAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNp
bmdEYXRlQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpKSB7Ci0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0gCiAgICAgICAgICAgIAotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0
LCBtcywgaW5wdXRJc1VUQykpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoZXhl
YywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CiAgICAgdGhpc0Rh
dGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOwogfQogCi1K
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVl
RnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMSwgaW5wdXRJc1VUQyk7CiB9CiAK
LUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29s
IGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3Mo
ZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY1NldFVUQ1NlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJ
c1VUQyA9IHRydWU7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRo
aXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1
bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNaW51
dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsK
ICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdz
LCAzLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0
ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0ZXMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7CiAgICAgcmV0
dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMywgaW5w
dXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZy
b21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDQsIGlucHV0SXNVVEMpOwogfQogCi1K
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29s
IGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhl
eGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDQsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7
CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJn
cywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNV
VEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0TW9udGgoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25z
dCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0
ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1
dElzVVRDID0gdHJ1ZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywg
dGhpc1ZhbHVlLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRG
dWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFs
c2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwg
YXJncywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENG
dWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFll
YXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7CiAg
ICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywg
MywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC0xMDAxLDcgKzEwMDEs
NyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqCiAKICAgICBEYXRl
SW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgICAgIAog
ICAgIGlmIChhcmdzLmlzRW1wdHkoKSkgeyAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
YU4oZXhlYyk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAg
ICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtMTAyMywxOCArMTAyMywxOCBAQCBKU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqCiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgaW50MzJf
dCB5ZWFyID0gYXJncy5hdChleGVjLCAwKS0+dG9JbnQzMihleGVjLCBvayk7CiAgICAgaWYgKCFv
aykgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldElu
dGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICB0LnllYXIgPSAoeWVhciA+IDk5IHx8IHllYXIgPCAwKSA/IHllYXIgLSAx
OTAwIDogeWVhcjsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3Jp
YW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNO
dW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMpKTsKICAgICB0aGlz
RGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3Rv
dHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAg
ICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgQ29uc3RydWN0VHlwZSBF
cnJvckNvbnN0cnVjdG9yOjpnZXRDb25zdAogfQogCiAvLyBFQ01BIDE1LjkuMgotc3RhdGljIEpT
VmFsdWUqIGNhbGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxFcnJv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vICJFcnJvcigpIiBnaXZlcyB0aGUgc2FtZXMgcmVz
dWx0IGFzICJuZXcgRXJyb3IoKSIKICAgICByZXR1cm4gY29uc3RydWN0RXJyb3IoZXhlYywgYXJn
cyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvclByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVl
KiBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGVycm9yUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAK
IC8vIEVDTUEgMTUuOS40CiBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRl
KiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlKQpAQCAtNDQsMTMgKzQ0LDEzIEBAIEVycm9yUHJvdG90eXBl
OjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywg
ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKIH0KIAotSlNWYWx1ZSogZXJyb3JQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZXJyb3JQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyk7CiAKICAgICBVU3RyaW5nIHMgPSAiRXJyb3IiOwogCi0gICAgSlNWYWx1ZSog
diA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7CisgICAg
SlNWYWx1ZVB0ciB2ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5u
YW1lKTsKICAgICBpZiAoIXYtPmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHMgPSB2LT50b1N0cmlu
ZyhleGVjKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDM2ICs1OCwzNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzV2F0Y2hkb2dFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiB9OwogCi1KU1ZhbHVlKiBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitKU1ZhbHVlUHRyIGNyZWF0ZUludGVycnVwdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICByZXR1
cm4gbmV3IChnbG9iYWxEYXRhKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEp
OwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBl
LCBjb25zdCBjaGFyKiBtc2cpCitKU1ZhbHVlUHRyIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZykKIHsKICAgICByZXR1cm4gRXJyb3I6OmNy
ZWF0ZShleGVjLCBlLCBtc2csIC0xLCAtMSwgMCk7CiB9CiAKLUpTVmFsdWUqIGNyZWF0ZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRl
bnRpZmllciYgbGFiZWwpCitKU1ZhbHVlUHRyIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
RXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYgbGFiZWwpCiB7
CiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFi
ZWwudXN0cmluZygpKTsKICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCBlLCBtZXNzYWdl
LCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIEpTVmFsdWUqIHYpCitKU1ZhbHVlUHRyIGNy
ZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIqIG1zZywg
SlNWYWx1ZVB0ciB2KQogewogICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKICAgICBzdWJzdGl0
dXRlKG1lc3NhZ2UsIHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICByZXR1cm4gRXJyb3I6OmNyZWF0
ZShleGVjLCBlLCBtZXNzYWdlLCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZVB0ciBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBjcmVhdGVFcnJvcihl
eGVjLCBSYW5nZUVycm9yLCAiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuIik7CiB9
CiAKLUpTVmFsdWUqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVC
bG9jayogY29kZUJsb2NrKQorSlNWYWx1ZVB0ciBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpbnQgc3RhcnRPZmZzZXQg
PSAwOwogICAgIGludCBlbmRPZmZzZXQgPSAwOwpAQCAtMTA0LDcgKzEwNCw3IEBAIEpTVmFsdWUq
IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXgKICAgICAKIGJvb2wgaXNTdHJXaGl0ZVNw
YWNlKFVDaGFyIGMpOwogCi1zdGF0aWMgVVN0cmluZyBjcmVhdGVFcnJvck1lc3NhZ2UoRXhlY1N0
YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBpbnQgZXhwcmVzc2lvblN0YXJ0
LCBpbnQgZXhwcmVzc2lvblN0b3AsIEpTVmFsdWUqIHZhbHVlLCBVU3RyaW5nIGVycm9yKQorc3Rh
dGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGludCwgaW50IGV4cHJlc3Npb25TdGFydCwgaW50IGV4cHJlc3Npb25TdG9w
LCBKU1ZhbHVlUHRyIHZhbHVlLCBVU3RyaW5nIGVycm9yKQogewogICAgIGlmICghZXhwcmVzc2lv
blN0b3AgfHwgZXhwcmVzc2lvblN0YXJ0ID4gY29kZUJsb2NrLT5zb3VyY2UoKS0+bGVuZ3RoKCkp
IHsKICAgICAgICAgVVN0cmluZyBlcnJvclRleHQgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CkBA
IC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNzYWdlKEV4ZWNT
dAogICAgIHJldHVybiBlcnJvclRleHQ7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFy
YW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIG9wLCBKU1ZhbHVlKiB2YWx1ZSwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQorSlNPYmplY3Qq
IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogb3As
IEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBVU3RyaW5nIG1lc3NhZ2UgPSAibm90IGEgdmFsaWQgYXJndW1lbnQg
Zm9yICciOwogICAgIG1lc3NhZ2UuYXBwZW5kKG9wKTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBKU09i
amVjdCogY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoRXhlY1N0CiAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK0pTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwogICAgIGludCBl
bmRPZmZzZXQgPSAwOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29u
c3RydWN0b3JFcnJvcihFeGUKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCi1KU1ZhbHVlKiBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitKU1ZhbHVlUHRy
IGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1
ZSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IGludCBzdGFydE9mZnNldCA9IDA7CiAgICAgaW50IGVuZE9mZnNldCA9IDA7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTUgKzQwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKICAgICBjbGFzcyBKU05vdEFuT2JqZWN0RXJyb3JTdHViOwogICAgIGNsYXNzIEpTT2Jq
ZWN0OworICAgIGNsYXNzIEpTVmFsdWVQdHI7CiAgICAgY2xhc3MgTm9kZTsKIAotICAgIEpTVmFs
dWUqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSopOwot
ICAgIEpTVmFsdWUqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsKLSAgICBK
U1ZhbHVlKiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CisgICAgSlNW
YWx1ZVB0ciBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEq
KTsKKyAgICBKU1ZhbHVlUHRyIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqKTsK
KyAgICBKU1ZhbHVlUHRyIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsK
ICAgICBKU05vdEFuT2JqZWN0RXJyb3JTdHViKiBjcmVhdGVOb3RBbk9iamVjdEVycm9yU3R1YihF
eGVjU3RhdGUqLCBib29sIGlzTnVsbCk7Ci0gICAgSlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJh
bUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIG9wLCBKU1ZhbHVlKiwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOwotICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IENvZGVCbG9jayopOwotICAgIEpTVmFsdWUqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNT
dGF0ZSosIEpTVmFsdWUqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7Cisg
ICAgSlNPYmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IGNo
YXIqIG9wLCBKU1ZhbHVlUHRyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7
CisgICAgSlNPYmplY3QqIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKEV4ZWNTdGF0ZSosIEpT
VmFsdWVQdHIsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKKyAgICBKU1Zh
bHVlUHRyIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIsIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKICAgICBKU09iamVjdCogY3JlYXRl
Tm90QW5PYmplY3RFcnJvcihFeGVjU3RhdGUqLCBKU05vdEFuT2JqZWN0RXJyb3JTdHViKiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIENvbnN0cnVjdFR5
cGUgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Z2V0Q28KICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhv
c3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0
aWMgSlNWYWx1ZVB0ciBjYWxsRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
Y29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5f
Q0VMTChGdW5jdGlvblByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBm
dW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5j
dGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBJbnRl
cm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm51bGxJZGVudGlmaWVyKQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEZ1bmN0aW9u
UHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVu
Y3Rpb25Qcm90b0Z1bmNDYWxsKSwgRG9udEVudW0pOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2Fs
bEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC02Myw3ICs2Myw3IEBAIENhbGxUeXBlIEZ1bmN0aW9u
UHJvdG90eXBlOjpnZXRDYWxsRGF0YSgKIAogLy8gRnVuY3Rpb25zCiAKLUpTVmFsdWUqIGZ1bmN0
aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAodGhpc1ZhbHVlLT5pc09iamVjdCgmSlNGdW5j
dGlvbjo6aW5mbykpIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9u
KHRoaXNWYWx1ZSk7CkBAIC03OCwxNyArNzgsMTcgQEAgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1
bmNUb1N0cmluZyhFeGVjUwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CiB9CiAKLUpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFsdWUtPmdldENhbGxE
YXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogdGhp
c0FyZyA9IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYXJnQXJyYXkgPSBhcmdzLmF0
KGV4ZWMsIDEpOworICAgIEpTVmFsdWVQdHIgdGhpc0FyZyA9IGFyZ3MuYXQoZXhlYywgMCk7Cisg
ICAgSlNWYWx1ZVB0ciBhcmdBcnJheSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKLSAgICBKU1ZhbHVl
KiBhcHBseVRoaXM7CisgICAgSlNWYWx1ZVB0ciBhcHBseVRoaXM7CiAgICAgaWYgKHRoaXNBcmct
PmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIGFwcGx5VGhpcyA9IGV4ZWMtPmdsb2JhbFRo
aXNWYWx1ZSgpOwogICAgIGVsc2UKQEAgLTExMywxNCArMTEzLDE0IEBAIEpTVmFsdWUqIGZ1bmN0
aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXQKICAgICByZXR1cm4gY2FsbChleGVjLCB0aGlzVmFs
dWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBhcHBseUFyZ3MpOwogfQogCi1KU1Zh
bHVlKiBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZnVuY3Rp
b25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHRoaXNWYWx1ZS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEp
OwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlKiB0aGlzQXJnID0gYXJncy5h
dChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHRoaXNBcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwog
CiAgICAgSlNPYmplY3QqIGNhbGxUaGlzOwogICAgIGlmICh0aGlzQXJnLT5pc1VuZGVmaW5lZE9y
TnVsbCgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
aAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0
dXJlPik7CiAgICAgICAgIHZvaWQgYWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOwogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVl
UHRyIHByb3RvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlT
bG90KSk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgdm9pZCBHZXR0ZXJT
ZXR0ZXI6Om1hcmsoKQogICAgICAgICBtX3NldHRlci0+bWFyaygpOwogfQogCi1KU1ZhbHVlKiBH
ZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUpIGNvbnN0CitKU1ZhbHVlUHRyIEdldHRlclNldHRlcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLWJvb2wgR2V0dGVyU2V0dGVyOjpnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1
ZSkKK2Jvb2wgR2V0dGVyU2V0dGVyOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91
YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVlKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIG51bWJlciA9IDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJT
ZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBjb25z
dDsKIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJp
bWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUp
OworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmlt
aXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVl
KTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTYxLDkgKzYx
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTT2JqZWN0KiBtX3NldHRlcjsgIAogICAg
IH07CiAKLSAgICBHZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWUqKTsKKyAgICBH
ZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEdl
dHRlclNldHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEdl
dHRlclNldHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChhc0NlbGwodmFsdWUpLT5pc0dldHRlclNldHRlcigpKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdldHRlclNldHRlcio+KGFzQ2VsbCh2YWx1ZSkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlICJKU0ltbWVkaWF0
ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkRhdGVNYXRoLmgiCiAjaW5j
bHVkZSAiZHRvYS5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgY29uc3QgVVN0cmluZyYgbmFtZShKU0dsb2JhbERhdGEqKTsKIAotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVl
KiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3Ry
dWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICAgICAg
fQpAQCAtNTEsOSArNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBDYWxs
VHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpID0gMDsKICAgICB9OwogCi0gICAgSW50ZXJuYWxG
dW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWUqKTsKKyAgICBJbnRlcm5hbEZ1bmN0
aW9uKiBhc0ludGVybmFsRnVuY3Rpb24oSlNWYWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgSW50ZXJu
YWxGdW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGlu
ZSBJbnRlcm5hbEZ1bmN0aW9uKiBhc0ludGVybmFsRnVuY3Rpb24oSlNWYWx1ZVB0ciB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZJbnRlcm5h
bEZ1bmN0aW9uOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1
bmN0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgICBpZiAoc3ltYm9sVGFibGVH
ZXQocHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
SlNWYWx1ZSoqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgewor
ICAgIGlmIChKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5
TmFtZSkpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRpb24pOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMDMsNyArMTAzLDcgQEAgYm9vbCBKU0FjdGl2YXRpb246
OmdldE93blByb3BlcnR5U2xvdChFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU0Fj
dGl2YXRpb246OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTQWN0aXZhdGlv
bjo6cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAK
QEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6cHV0KEV4ZWNTdGF0ZSosIGNv
bnN0CiB9CiAKIC8vIEZJWE1FOiBNYWtlIHRoaXMgZnVuY3Rpb24gaG9ub3IgUmVhZE9ubHkgKGNv
bnN0KSBhbmQgRG9udEVudW0KLXZvaWQgSlNBY3RpdmF0aW9uOjpwdXRXaXRoQXR0cmlidXRlcyhF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU0FjdGl2YXRpb246OnB1dFdpdGhBdHRyaWJ1
dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCkBAIC0x
NTEsNyArMTUxLDcgQEAgYm9vbCBKU0FjdGl2YXRpb246OmlzRHluYW1pY1Njb3BlKCkgY29ucwog
ICAgIHJldHVybiBkKCktPmZ1bmN0aW9uQm9keS0+dXNlc0V2YWwoKTsKIH0KIAotSlNWYWx1ZSog
SlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0FjdGl2YXRp
b246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gYXNBY3RpdmF0aW9uKHNsb3Quc2xvdEJhc2UoKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUq
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
SlNWYWx1ZVB0ciwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
OwogCiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBj
b25zdDsKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAg
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBOZWVkc1RoaXND
b252ZXJzaW9uKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
cHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0IEpTQWN0aXZhdGlvbkRhdGEgOiBwdWJsaWMgSlNW
YXJpYWJsZU9iamVjdERhdGEgewpAQCAtNzcsMTUgKzc3LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keTsKICAgICAg
ICAgfTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBORVZFUl9JTkxJTkUg
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CiAKICAgICAg
ICAgSlNBY3RpdmF0aW9uRGF0YSogZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTQWN0
aXZhdGlvbkRhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQogICAgIH07CiAKLSAgICBKU0Fj
dGl2YXRpb24qIGFzQWN0aXZhdGlvbihKU1ZhbHVlKik7CisgICAgSlNBY3RpdmF0aW9uKiBhc0Fj
dGl2YXRpb24oSlNWYWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgSlNBY3RpdmF0aW9uKiBhc0FjdGl2
YXRpb24oSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTQWN0aXZhdGlvbiogYXNBY3RpdmF0
aW9uKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFs
dWUpLT5pbmhlcml0cygmSlNBY3RpdmF0aW9uOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU0FjdGl2YXRpb24qPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDkgKzY1LDkgQEAgQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIAogLy8gVGhlIGRlZmluaXRpb24gb2YgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3Rv
cmFnZVNpemUKIC8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3Vs
YXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpT
VmFsdWUqKSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihKU1ZhbHVlKikpIG11c3QgYmUg
PD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZp
bmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZG
RkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpTVmFsdWUqKSkpIC8gc2l6
ZW9mKEpTVmFsdWUqKSkKKy8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNp
emVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpTVmFsdWVQdHIpKSArCisvLyAodmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEpTVmFsdWVQdHIpKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBp
cyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlT
dG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkpIC8gc2l6ZW9mKEpTVmFsdWVQdHIpKQogCiAv
LyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQg
bWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwogLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5h
cmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KQEAgLTkwLDEwICs5MCwxMCBAQCBz
dGF0aWMgaW5saW5lIHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lCiAKICAgICAvLyBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHByb3ZpZGVkICh2ZWN0b3JM
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAvLyAtIGFzIGFzc2VydGVk
IGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAg
c2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZSopKSAr
ICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoSlNWYWx1ZSopKTsKKyAgICBzaXplX3Qgc2l6ZSA9IChz
aXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkgKyAodmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKEpTVmFsdWVQdHIpKTsKICAgICAvLyBBc3NlcnRpb24gdG8gZGV0ZWN0IGludGVn
ZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMgY2FsY3VsYXRpb24gKHNob3VsZCBub3QgYmUgcG9zc2li
bGUsIHByb3ZpZGVkIHRoYXQKICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGNv
cnJlY3RseSBkZWZpbmVkKS4KLSAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKEpTVmFsdWUqKSkpIC8gc2l6ZW9mKEpTVmFsdWUqKSA9PSB2ZWN0b3JMZW5n
dGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKikp
KSk7CisgICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihK
U1ZhbHVlUHRyKSkpIC8gc2l6ZW9mKEpTVmFsdWVQdHIpID09IHZlY3Rvckxlbmd0aCkgJiYgKHNp
emUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpTVmFsdWVQdHIpKSkpOwogCiAg
ICAgcmV0dXJuIHNpemU7CiB9CkBAIC0xNDksNyArMTQ5LDcgQEAgSlNBcnJheTo6SlNBcnJheShQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gcwogICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGggPSBp
bml0aWFsQ2FwYWNpdHk7CiAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7
CiAKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoaW5pdGlhbENh
cGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KGluaXRpYWxDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlUHRyKSk7CiAK
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YQogICAgIH0KIAogICAgIGlmIChpIDwgc3Rv
cmFnZS0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xvdCA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICBKU1ZhbHVlUHRyJiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewogICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QoJnZhbHVlU2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTIzNCw3ICsyMzQsNyBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhCiB9CiAKIC8vIEVDTUEgMTUuNC41LjEKLXZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBib29sIGlzQXJyYXlJbmRleDsKICAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmaXNBcnJheUluZGV4KTsKQEAgLTI1Niw3ICsy
NTYsNyBAQCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0CiAgICAgSlNP
YmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBK
U0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZVB0
ciB2YWx1ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTI2Nyw3ICsyNjcsNyBA
QCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnCiAgICAgfQogCiAgICAg
aWYgKGkgPCBtX3N0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2
YWx1ZVNsb3QgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICBKU1ZhbHVlUHRyJiB2
YWx1ZVNsb3QgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAodmFsdWVTbG90
KSB7CiAgICAgICAgICAgICB2YWx1ZVNsb3QgPSB2YWx1ZTsKICAgICAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnCiAgICAgcHV0U2xvd0Nhc2UoZXhlYywgaSwgdmFsdWUpOwogfQogCi1O
RVZFUl9JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXRTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGksIEpTVmFsdWUqIHZhbHVlKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0
U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlUHRyIHZhbHVlKQog
ewogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwOwpAQCAtMzkxLDcgKzM5
MSw3IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiAKICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICBpZiAoaSA8IHN0b3JhZ2UtPm1f
dmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CiAgICAgICAgIGlmICghdmFsdWVTbG90KSB7CiAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODUsNyArNDg1LDcg
QEAgdm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZwogCiAgICAgICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT5tX3ZlY3Rvckxl
bmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xvdCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90
OwogICAgICAgICAgICAgdmFsdWVTbG90ID0gbm9WYWx1ZSgpOwogICAgICAgICAgICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciAtPSBoYWRWYWx1ZTsKQEAgLTUxMCw3ICs1MTAsNyBAQCB2
b2lkIEpTQXJyYXk6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5nCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogfQogCi1KU1ZhbHVlKiBKU0FycmF5Ojpwb3AoKQorSlNWYWx1ZVB0ciBKU0FycmF5
Ojpwb3AoKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtNTIwLDE3ICs1MjAsMTcg
QEAgSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKIAogICAgIC0tbGVuZ3RoOwogCi0gICAgSlNWYWx1
ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogCiAgICAgaWYgKG1fZmFzdEFjY2Vz
c0N1dG9mZiA+IGxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0gbV9zdG9y
YWdlLT5tX3ZlY3RvcltsZW5ndGhdOworICAgICAgICBKU1ZhbHVlUHRyJiB2YWx1ZVNsb3QgPSBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF07CiAgICAgICAgIHJlc3VsdCA9IHZhbHVlU2xvdDsK
ICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgIHZhbHVlU2xvdCA9IG5vVmFsdWUoKTsK
ICAgICAgICAgLS1tX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgIG1fZmFz
dEFjY2Vzc0N1dG9mZiA9IGxlbmd0aDsKICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8IG1fc3RvcmFn
ZS0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xvdCA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbbGVuZ3RoXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdOwogICAgICAgICByZXN1bHQgPSB2YWx1ZVNsb3Q7
CiAgICAgICAgIHZhbHVlU2xvdCA9IG5vVmFsdWUoKTsKICAgICAgICAgaWYgKHJlc3VsdCkKQEAg
LTU1OSw3ICs1NTksNyBAQCBKU1ZhbHVlKiBKU0FycmF5Ojpwb3AoKQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZh
bHVlKQordm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1
ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTU5OSw3ICs1OTksNyBAQCB2b2lk
IEpTQXJyYXk6Om1hcmsoKQogCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5tX2xlbmd0aCwgc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1
ZSogdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5t
YXJrZWQoKSkKICAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7CiAgICAgfQpAQCAtNjA3LDE0ICs2
MDcsMTQgQEAgdm9pZCBKU0FycmF5OjptYXJrKCkKICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBpdC0+c2Vjb25kOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZS0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAgdmFsdWUtPm1hcmsoKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAotdHlwZWRlZiBzdGQ6OnBhaXI8SlNWYWx1ZSosIFVTdHJpbmc+IEFycmF5UVNv
cnRQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8SlNWYWx1ZVB0ciwgVVN0cmluZz4gQXJyYXlRU29y
dFBhaXI7CiAKIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KGNvbnN0IHZv
aWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CkBAIC02NDYsNyArNjQ2LDcgQEAgdm9pZCBKU0FycmF5
Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUq
IHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1
ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIEFTU0VSVCghdmFsdWUtPmlzVW5k
ZWZpbmVkKCkpOwogICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKICAgICB9CkBAIC02
ODQsNyArNjg0LDcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIH0KIAog
c3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKLSAgICBKU1ZhbHVlKiB2YWx1ZTsK
KyAgICBKU1ZhbHVlUHRyIHZhbHVlOwogCiAgICAgLy8gQ2hpbGQgcG9pbnRlcnMuICBUaGUgaGln
aCBiaXQgb2YgZ3QgaXMgcm9iYmVkIGFuZCB1c2VkIGFzIHRoZQogICAgIC8vIGJhbGFuY2UgZmFj
dG9yIHNpZ24uICBUaGUgaGlnaCBiaXQgb2YgbHQgaXMgcm9iYmVkIGFuZCB1c2VkIGFzCkBAIC02
OTUsMTUgKzY5NSwxNSBAQCBzdHJ1Y3QgQVZMVHJlZU5vZGVGb3JBcnJheUNvbXBhcmUgewogCiBz
dHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgewogICAgIHR5cGVkZWYgaW50
MzJfdCBoYW5kbGU7IC8vIEhhbmRsZSBpcyBhbiBpbmRleCBpbnRvIG1fbm9kZXMgdmVjdG9yLgot
ICAgIHR5cGVkZWYgSlNWYWx1ZSoga2V5OworICAgIHR5cGVkZWYgSlNWYWx1ZVB0ciBrZXk7CiAg
ICAgdHlwZWRlZiBpbnQzMl90IHNpemU7CiAKICAgICBWZWN0b3I8QVZMVHJlZU5vZGVGb3JBcnJh
eUNvbXBhcmU+IG1fbm9kZXM7CiAgICAgRXhlY1N0YXRlKiBtX2V4ZWM7Ci0gICAgSlNWYWx1ZSog
bV9jb21wYXJlRnVuY3Rpb247CisgICAgSlNWYWx1ZVB0ciBtX2NvbXBhcmVGdW5jdGlvbjsKICAg
ICBDYWxsVHlwZSBtX2NvbXBhcmVDYWxsVHlwZTsKICAgICBjb25zdCBDYWxsRGF0YSogbV9jb21w
YXJlQ2FsbERhdGE7Ci0gICAgSlNWYWx1ZSogbV9nbG9iYWxUaGlzVmFsdWU7CisgICAgSlNWYWx1
ZVB0ciBtX2dsb2JhbFRoaXNWYWx1ZTsKIAogICAgIGhhbmRsZSBnZXRfbGVzcyhoYW5kbGUgaCkg
eyByZXR1cm4gbV9ub2Rlc1toXS5sdCAmIDB4N0ZGRkZGRkY7IH0KICAgICB2b2lkIHNldF9sZXNz
KGhhbmRsZSBoLCBoYW5kbGUgbGgpIHsgbV9ub2Rlc1toXS5sdCAmPSAweDgwMDAwMDAwOyBtX25v
ZGVzW2hdLmx0IHw9IGxoOyB9CkBAIC03NTIsNyArNzUyLDcgQEAgc3RydWN0IEFWTFRyZWVBYnN0
cmFjdG9yRm9yQXJyYXlDb21wYXJlIAogICAgIHN0YXRpYyBoYW5kbGUgbnVsbCgpIHsgcmV0dXJu
IDB4N0ZGRkZGRkY7IH0KIH07CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxE
YXRhJiBjYWxsRGF0YSkKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWVQdHIgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtNzkwLDE0ICs3OTAs
MTUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCiAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmlu
ZWQpIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5l
ZF07CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5l
ZF07CiAgICAgICAgIGlmICghdiB8fCB2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSB2OwogICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKICAgICB9CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSogdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0pIHsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgaWYgKHYpIHsK
ICAgICAgICAgICAgIGlmICh2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgICsrbnVt
VW5kZWZpbmVkOwogICAgICAgICAgICAgZWxzZSB7CkBAIC04ODAsMTIgKzg4MSwxMyBAQCB1bnNp
Z25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiAgICAgdW5zaWduZWQgbnVtVW5kZWZp
bmVkID0gMDsKIAogICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytu
dW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkXTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVm
aW5lZF07CiAgICAgICAgIGlmICghdiB8fCB2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXSkgeworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKKyAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIGlmICh2LT5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwogICAgICAgICAgICAgZWxzZQpAQCAtOTQ5
LDcgKzk1MSw3IEBAIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW4KIAog
ICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChK
U1ZhbHVlKiB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0pIHsKKyAgICAgICAgaWYgKEpT
VmFsdWVQdHIgdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CiAgICAgICAgICAgICBB
U1NFUlQoaSA8IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwogICAgICAgICAgICAgaWYgKHR5cGUgIT0g
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCiAgICAgICAgICAgICAgICAgdmFsdWUtPnR5cGUo
KTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgpAQCAt
OTg4LDcgKzk5MCw3IEBAIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiAK
ICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CiB9CiAKLUpTQXJyYXkqIGNvbnN0
cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogc2luZ2xlSXRlbVZhbHVlKQorSlNB
cnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHNpbmdsZUl0
ZW1WYWx1ZSkKIHsKICAgICBBcmdMaXN0IHZhbHVlczsKICAgICB2YWx1ZXMuYXBwZW5kKHNpbmds
ZUl0ZW1WYWx1ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMzk2
MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIHR5cGVkZWYgSGFzaE1h
cDx1bnNpZ25lZCwgSlNWYWx1ZSo+IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVlUHRyPiBTcGFyc2VBcnJheVZhbHVlTWFwOwogCiAgICAg
c3RydWN0IEFycmF5U3RvcmFnZSB7CiAgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJ
blZlY3RvcjsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsK
ICAgICAgICAgdm9pZCogbGF6eUNyZWF0aW9uRGF0YTsgLy8gQSBKU0FycmF5IHN1YmNsYXNzIGNh
biB1c2UgdGhpcyB0byBmaWxsIHRoZSB2ZWN0b3IgbGF6aWx5LgotICAgICAgICBKU1ZhbHVlKiBt
X3ZlY3RvclsxXTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX3ZlY3RvclsxXTsKICAgICB9OwogCiAg
ICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU09iamVjdCB7CkBAIC00Nyw3ICs0Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOyAvLyBG
SVhNRTogTWFrZSBwcm90ZWN0ZWQgYW5kIGFkZCBzZXRJdGVtLgorICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0cik7IC8v
IEZJWE1FOiBNYWtlIHByb3RlY3RlZCBhbmQgYWRkIHNldEl0ZW0uCiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCkBAIC01NSwyMCArNTUsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkKTsgLy8gT0sgdG8gdXNlIG9uIG5l
dyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5LgogCiAg
ICAgICAgIHZvaWQgc29ydChFeGVjU3RhdGUqKTsKLSAgICAgICAgdm9pZCBzb3J0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUqIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJik7
CisgICAgICAgIHZvaWQgc29ydChFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIGNvbXBhcmVGdW5jdGlv
biwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJik7CiAKLSAgICAgICAgdm9pZCBwdXNoKEV4ZWNT
dGF0ZSosIEpTVmFsdWUqKTsKLSAgICAgICAgSlNWYWx1ZSogcG9wKCk7CisgICAgICAgIHZvaWQg
cHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwb3AoKTsK
IAogICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX2Zh
c3RBY2Nlc3NDdXRvZmY7IH0KLSAgICAgICAgSlNWYWx1ZSogZ2V0SW5kZXgodW5zaWduZWQgaSkK
KyAgICAgICAgSlNWYWx1ZVB0ciBnZXRJbmRleCh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblNldEluZGV4
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX2Zhc3RBY2Nlc3NDdXRvZmY7IH0KLSAgICAgICAg
SlNWYWx1ZSogc2V0SW5kZXgodW5zaWduZWQgaSwgSlNWYWx1ZSogdikKKyAgICAgICAgSlNWYWx1
ZVB0ciBzZXRJbmRleCh1bnNpZ25lZCBpLCBKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7CiAgICAgICAgICAgICByZXR1cm4gbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXSA9IHY7CkBAIC03NiwxMyArNzYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBBcmdMaXN0Jik7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0
ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkp
OwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYp
OwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKICAgICAg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dFNsb3dDYXNlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgICAgICB2b2lk
IHB1dFNsb3dDYXNlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
cik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aCh1bnNpZ25lZCBuZXdMZW5n
dGgpOwogICAgICAgICAKQEAgLTEwOCwxNCArMTA4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBBcnJheVN0b3JhZ2UqIG1fc3RvcmFnZTsKICAgICB9OwogCi0gICAgSlNBcnJheSogYXNB
cnJheShKU1ZhbHVlKik7CisgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlUHRyKTsKIAogICAg
IEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKik7CiAgICAgSlNBcnJheSog
Y29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsK
LSAgICBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqLCBKU1ZhbHVlKiBzaW5nbGVJ
dGVtVmFsdWUpOworICAgIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSosIEpTVmFs
dWVQdHIgc2luZ2xlSXRlbVZhbHVlKTsKICAgICBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVj
U3RhdGUqLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpOwogCi0gICAgaW5saW5lIEpTQXJyYXkqIGFz
QXJyYXkoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1
ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVy
aXRzKCZKU0FycmF5OjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0FycmF5
Kj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzAsMTIgKzE3MCwxMiBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNDZWxsOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0NlbGw6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICB0b09iamVjdChleGVjKS0+cHV0KGV4ZWMsIGlk
ZW50aWZpZXIsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0NlbGw6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGlkZW50aWZpZXIsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0NlbGw6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlkZW50aWZpZXIsIEpTVmFsdWVQdHIgdmFs
dWUpCiB7CiAgICAgdG9PYmplY3QoZXhlYyktPnB1dChleGVjLCBpZGVudGlmaWVyLCB2YWx1ZSk7
CiB9CkBAIC0yMTAsNyArMjEwLDcgQEAgY29uc3QgQ2xhc3NJbmZvKiBKU0NlbGw6OmNsYXNzSW5m
bygpIGNvbgogICAgIHJldHVybiAwOwogfQogCi1KU1ZhbHVlKiBKU0NlbGw6OmdldEpTTnVtYmVy
KCkKK0pTVmFsdWVQdHIgSlNDZWxsOjpnZXRKU051bWJlcigpCiB7CiAgICAgcmV0dXJuIG5vVmFs
dWUoKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0b3IuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC03MSw4ICs3Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0VHJ1bmNhdGVkVUludDMyKHVpbnQzMl90JikgY29uc3Q7CiAKICAgICAg
ICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QgPSAwOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYg
bnVtYmVyLCBKU1ZhbHVlKiYpID0gMDsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUm
IG51bWJlciwgSlNWYWx1ZVB0ciYpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVh
bihFeGVjU3RhdGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVy
KEV4ZWNTdGF0ZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0ID0gMDsKQEAgLTg3LDE1ICs4OCwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3Bl
cmF0aW9uIGluY2x1ZGVkLgogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmlydHVh
bCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7
CiAKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9UaGlzU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIEpTU3RyaW5nKiB0b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUq
KTsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051bWJlcigpOworICAgICAgICB2aXJ0
dWFsIEpTVmFsdWVQdHIgZ2V0SlNOdW1iZXIoKTsKICAgICAgICAgdm9pZCogdnB0cigpIHsgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4odGhpcyk7IH0KIAogICAgIHByaXZhdGU6CkBA
IC0xMDcsMTIgKzEwOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBt
X3N0cnVjdHVyZTsKICAgICB9OwogCi0gICAgSlNDZWxsKiBhc0NlbGwoSlNWYWx1ZSopOworICAg
IEpTQ2VsbCogYXNDZWxsKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTQ2VsbCogYXNDZWxs
KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU0NlbGwqIGFzQ2VsbChKU1ZhbHVlUHRyIHZh
bHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFs
dWUpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQ2VsbCo+KHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLT5hc0NlbGwoKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNDZWxsOjpK
U0NlbGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xNTcsNyArMTU4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVl
KCkpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oY29uc3RfY2Fz
dDxKU1ZhbHVlKj4odGhpcykpOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxKU0NlbGwqPihy
ZWludGVycHJldF9jYXN0PGNvbnN0IEpTQ2VsbCo+KHRoaXMpKTsKICAgICB9CiAKICAgICBpbmxp
bmUgdm9pZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKQEAgLTI0NiwxMiArMjQ3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgfHwgYXNDZWxsKCkt
Pm1hcmtlZCgpOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjp0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlw
ZSkgY29uc3QKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjp0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgp
KSA/IGFzVmFsdWUoKSA6IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWRUeXBl
KTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKQorICAgIGlu
bGluZSBib29sIEpTVmFsdWU6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgpKSkgewogICAgICAgICAgICAgbnVtYmVyID0g
SlNJbW1lZGlhdGU6OnRvRG91YmxlKGFzVmFsdWUoKSk7CkBAIC0zMDAsOSArMzAxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNW
YWx1ZSgpKSA/IEpTSW1tZWRpYXRlOjp0b1N0cmluZyhhc1ZhbHVlKCkpIDogYXNDZWxsKCktPnRv
VGhpc1N0cmluZyhleGVjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6
Z2V0SlNOdW1iZXIoKQorICAgIGlubGluZSBKU1ZhbHVlUHRyIEpTVmFsdWU6OmdldEpTTnVtYmVy
KCkKICAgICB7Ci0KICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc051bWJlcihhc1ZhbHVl
KCkpID8gYXNWYWx1ZSgpIDogSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkgPyBu
b1ZhbHVlKCkgOiBhc0NlbGwoKS0+Z2V0SlNOdW1iZXIoKTsKICAgICB9CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywyNCAr
NzcsMjQgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdAogICAgIHJl
dHVybiBDYWxsVHlwZUpTOwogfQogCi1KU1ZhbHVlKiBKU0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGV4ZWMtPmludGVycHJldGVy
KCktPmV4ZWN1dGUobV9ib2R5LmdldCgpLCBleGVjLCB0aGlzLCB0aGlzVmFsdWUtPnRvVGhpc09i
amVjdChleGVjKSwgYXJncywgbV9zY29wZUNoYWluLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xv
dCgpKTsKIH0KIAotSlNWYWx1ZSogSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWVQdHIgSlNGdW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0Z1bmN0
aW9uKiB0aGlzT2JqID0gYXNGdW5jdGlvbihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBl
eGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKIH0K
IAotSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNG
dW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0g
YXNGdW5jdGlvbihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUNhbGxlcihleGVjLCB0aGlzT2JqKTsKIH0KIAotSlNWYWx1ZSogSlNGdW5j
dGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNGdW5jdGlvbjo6bGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0gYXNGdW5jdGlvbihzbG90LnNs
b3RCYXNlKCkpOwogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0aGlzT2JqLT5tX2JvZHktPnBh
cmFtZXRlckNvdW50KCkpOwpAQCAtMTAzLDcgKzEwMyw3IEBAIEpTVmFsdWUqIEpTRnVuY3Rpb246
Omxlbmd0aEdldHRlcihFeGVjU3QKIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlKSB7Ci0gICAgICAgIEpTVmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVj
dExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIqIGxvY2F0aW9uID0g
Z2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKTsKIAogICAgICAgICBpZiAoIWxvY2F0aW9u
KSB7CiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gbmV3IChleGVjKSBKU09iamVj
dChtX3Njb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOwpA
QCAtMTMzLDcgKzEzMyw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWMKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQordm9pZCBKU0Z1bmN0aW9uOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHMgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpCiAgICAgICAgIHJldHVybjsKQEAgLTE1OCwxNCArMTU4LDE0IEBAIENvbnN0cnVjdFR5cGUg
SlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGEKIEpTT2JqZWN0KiBKU0Z1bmN0aW9uOjpjb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlOwotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IGdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IGdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKICAgICBpZiAocHJvdG90
eXBlLT5pc09iamVjdCgpKQogICAgICAgICBzdHJ1Y3R1cmUgPSBhc09iamVjdChwcm90b3R5cGUp
LT5pbmhlcml0b3JJRCgpOwogICAgIGVsc2UKICAgICAgICAgc3RydWN0dXJlID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gbmV3IChleGVjKSBKU09iamVjdChzdHJ1Y3R1cmUpOwogCi0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4
ZWMsIHRoaXMsIHRoaXNPYmosIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2Vw
dGlvblNsb3QoKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigp
LT5leGVjdXRlKG1fYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc09iaiwgYXJncywgbV9zY29w
ZUNoYWluLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkgfHwgIXJlc3VsdC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRoaXNP
Ymo7CiAgICAgcmV0dXJuIGFzT2JqZWN0KHJlc3VsdCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB+SlNGdW5jdGlvbigpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpOwotICAgICAgICBKU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpOworICAgICAgICBKU1ZhbHVlUHRyIGNhbGwoRXhlY1N0YXRl
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogICAgICAgICB2b2lk
IHNldFNjb3BlKGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4pIHsgbV9zY29wZUNoYWluID0g
c2NvcGVDaGFpbjsgfQogICAgICAgICBTY29wZUNoYWluJiBzY29wZSgpIHsgcmV0dXJuIG1fc2Nv
cGVDaGFpbjsgfQpAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKSAKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBw
cm90b3R5cGUpIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNl
KSk7IAogICAgICAgICB9CkBAIC04MiwxNyArODIsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEm
KTsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogCi0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogY2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlUHRyIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGNh
bGxlckdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGxlbmd0aEdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IG1fYm9keTsKICAgICAgICAgU2NvcGVDaGFpbiBtX3Njb3Bl
Q2hhaW47CiAgICAgfTsKIAotICAgIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZSopOwor
ICAgIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgSlNG
dW5jdGlvbiogYXNGdW5jdGlvbihKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgSlNGdW5jdGlv
biogYXNGdW5jdGlvbihKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFz
T2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5o
IgogCiBzdHJ1Y3QgT3BhcXVlSlNDbGFzczsKIHN0cnVjdCBPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGE7CkBAIC03MSw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlcjsKIAotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisgICAgICAg
IEpTVmFsdWVQdHIgZXhjZXB0aW9uOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQqIGV4
Y2VwdGlvbkxvY2F0aW9uOwogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJlc2hvCiAvLyBQcmVmZXJyZWQgbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZW91dCBjaGVjawogc3RhdGljIGNv
bnN0IGludCBwcmVmZXJyZWRTY3JpcHRDaGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoSlNWYWx1ZSogdikKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBtYXJrSWZOZWVkZWQoSlNWYWx1ZVB0ciB2KQogewogICAgIGlmICh2ICYmICF2LT5tYXJrZWQo
KSkKICAgICAgICAgdi0+bWFyaygpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICByZXNldChwcm90b3R5cGUoKSk7CiB9CiAK
LXZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
K3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAKQEAgLTE1NiwxOCArMTU2LDE5IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMKICAgICBKU1ZhcmlhYmxlT2JqZWN0OjpwdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQg
SlNHbG9iYWxPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2
YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAKICAgICBpZiAoc3ltYm9sVGFibGVQdXRXaXRo
QXR0cmlidXRlcyhwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNWYWx1ZSogdmFsdWVCZWZvcmUgPSBnZXREaXJlY3QocHJvcGVydHlOYW1l
KTsKKyAgICBKU1ZhbHVlUHRyIHZhbHVlQmVmb3JlID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgSlNWYXJpYWJsZU9iamVjdDo6cHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIGlmICghdmFsdWVCZWZvcmUpIHsK
LSAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlQWZ0ZXIgPSBnZXREaXJlY3QocHJvcGVydHlOYW1l
KSkKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZUFmdGVyID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIGlmICh2YWx1ZUFmdGVyKQogICAgICAgICAgICAgcHV0RGlyZWN0KHByb3Bl
cnR5TmFtZSwgdmFsdWVBZnRlciwgYXR0cmlidXRlcyk7CiAgICAgfQogfQpAQCAtMTk0LDcgKzE5
NSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGxhc3RJblByb3RvdHlwZUMKICAgICByZXR1
cm4gbzsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdG90eXBl
KQordm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiB7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKIApAQCAt
MjQ3LDEzICsyNDgsMTMgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJv
dAogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU1ZhbHVlKiBvYmplY3RDb25zdHJ1Y3Rv
ciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgT2JqZWN0Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5vYmplY3RQcm90
b3R5cGUpOwotICAgIEpTVmFsdWUqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1
bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAg
ICBKU1ZhbHVlKiBhcnJheUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9y
KGV4ZWMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKSwgZCgpLT5hcnJheVByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogc3RyaW5nQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIFN0cmluZ0NvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+cHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKLSAgICBK
U1ZhbHVlKiBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3Rv
cihleGVjLCBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKSwgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBudW1iZXJD
b25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgTnVtYmVyQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5u
dW1iZXJQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIGRhdGVDb25zdHJ1Y3RvciA9IG5ldyAoZXhl
YykgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LmdldCgpLCBkKCktPmRhdGVQcm90b3R5cGUpOworICAgIEpTVmFsdWVQdHIgb2JqZWN0Q29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIE9iamVjdENvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+b2JqZWN0
UHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
KTsKKyAgICBKU1ZhbHVlUHRyIGFycmF5Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5Q29u
c3RydWN0b3IoZXhlYywgQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUpLCBkKCktPmFycmF5UHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIHN0
cmluZ0NvbnN0cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBTdHJp
bmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBk
KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPnN0cmluZ1Byb3RvdHlw
ZSk7CisgICAgSlNWYWx1ZVB0ciBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEJvb2xl
YW5Db25zdHJ1Y3RvcihleGVjLCBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKKyAgICBKU1Zh
bHVlUHRyIG51bWJlckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3Rvcihl
eGVjLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpLCBkKCktPm51bWJlclByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBkYXRlQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3RvcihleGVjLCBEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVG
dW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5kYXRlUHJvdG90eXBlKTsKIAogICAgIGQoKS0+
cmVnRXhwQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIFJlZ0V4cENvbnN0cnVjdG9yKGV4ZWMsIFJl
Z0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSks
IGQoKS0+cmVnRXhwUHJvdG90eXBlKTsKIApAQCAtMzM3LDcgKzMzOCw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIH0KIAogLy8gU2V0IHByb3RvdHlwZSwgYW5k
IGFsc28gaW5zZXJ0IHRoZSBvYmplY3QgcHJvdG90eXBlIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWlu
Lgotdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoSlNWYWx1ZSogcHJvdG90eXBl
KQordm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5
cGUpCiB7CiAgICAgc2V0UHJvdG90eXBlKHByb3RvdHlwZSk7CiAgICAgbGFzdEluUHJvdG90eXBl
Q2hhaW4odGhpcyktPnNldFByb3RvdHlwZShkKCktPm9iamVjdFByb3RvdHlwZSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDggKzE2MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0
ZWFibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwg
UHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRl
cyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZp
bmVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09i
amVjdCogZ2V0dGVyRnVuYyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCogc2V0dGVy
RnVuYyk7CkBAIC0yNDQsMTkgKzI0NCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBjb3B5R2xvYmFsc0Zyb20oUmVnaXN0ZXJGaWxlJik7CiAgICAgICAgIHZvaWQgY29weUdsb2Jh
bHNUbyhSZWdpc3RlckZpbGUmKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcmVzZXRQcm90b3R5
cGUoSlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAgdm9pZCByZXNldFByb3RvdHlwZShKU1Zh
bHVlUHRyIHByb3RvdHlwZSk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkg
eyByZXR1cm4gZCgpLT5nbG9iYWxEYXRhLmdldCgpOyB9CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
RGF0YSogZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0RGF0YSo+
KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3Rv
dHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewotICAgICAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWUqIHYsIHVuc2lnbmVk
IGEpCisgICAgICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oY29uc3QgSWRlbnRpZmllciYgaSwg
SlNWYWx1ZVB0ciB2LCB1bnNpZ25lZCBhKQogICAgICAgICAgICAgICAgIDogaWRlbnRpZmllcihp
KQogICAgICAgICAgICAgICAgICwgdmFsdWUodikKICAgICAgICAgICAgICAgICAsIGF0dHJpYnV0
ZXMoYSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciBpZGVudGlmaWVyOwotICAgICAgICAgICAg
SlNWYWx1ZSogdmFsdWU7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlOwogICAgICAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgfTsKICAgICAgICAgdm9pZCBhZGRTdGF0
aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyosIGludCBjb3VudCk7CkBAIC0yNzIsMTYgKzI3
MiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTog
Rm9sZCByZXNldCBpbnRvIGluaXQuCiAgICAgICAgIHZvaWQgaW5pdChKU09iamVjdCogdGhpc1Zh
bHVlKTsKLSAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlKiBwcm90b3R5cGUpOworICAgICAgICB2
b2lkIHJlc2V0KEpTVmFsdWVQdHIgcHJvdG90eXBlKTsKIAogICAgICAgICB2b2lkIHNldFJlZ2lz
dGVycyhSZWdpc3RlciogcmVnaXN0ZXJzLCBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSwgc2l6ZV90
IGNvdW50KTsKIAogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsgLy8gY2FuIG9u
bHkgYmUgYWxsb2NhdGVkIHdpdGggSlNHbG9iYWxEYXRhCiAgICAgfTsKIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlKik7CisgICAgSlNHbG9iYWxPYmplY3QqIGFz
R2xvYmFsT2JqZWN0KEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBh
c0dsb2JhbE9iamVjdChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgSlNHbG9iYWxPYmplY3Qq
IGFzR2xvYmFsT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQo
YXNPYmplY3QodmFsdWUpLT5pc0dsb2JhbE9iamVjdCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKQEAgLTMzMyw3ICszMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGFzR2xvYmFsT2JqZWN0KG4tPm9i
amVjdCk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIFN0cnVjdHVyZTo6cHJvdG90eXBl
Rm9yTG9va3VwKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewogICAgICAgICBp
ZiAodHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSkKICAgICAgICAgICAgIHJldHVybiBt
X3Byb3RvdHlwZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RhdGljIEpTVmFsdWUqIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90RXNjYXBlKQorc3RhdGljIEpTVmFsdWVQdHIgZW5jb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9Ob3RF
c2NhcGUpCiB7CiAgICAgVVN0cmluZyBzdHIgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhl
eGVjKTsKICAgICBDU3RyaW5nIGNzdHIgPSBzdHIuVVRGOFN0cmluZyh0cnVlKTsKQEAgLTY5LDcg
KzY5LDcgQEAgc3RhdGljIEpTVmFsdWUqIGVuY29kZShFeGVjU3RhdGUqIGV4ZWMsIAogICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogZGVjb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9Ob3RV
bmVzY2FwZSwgYm9vbCBzdHJpY3QpCitzdGF0aWMgSlNWYWx1ZVB0ciBkZWNvZGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdFVuZXNjYXBlLCBi
b29sIHN0cmljdCkKIHsKICAgICBVU3RyaW5nIHJlc3VsdCA9ICIiOwogICAgIFVTdHJpbmcgc3Ry
ID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CkBAIC0yNjgsMTQgKzI2OCwxNCBA
QCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgcmV0dXJuIHMu
dG9Eb3VibGUodHJ1ZSAvKnRvbGVyYW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5n
ICovKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogZnVuY3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVu
Y3Rpb24sIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAg
ICAgSlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCA9IHRoaXNPYmplY3QtPnVud3JhcHBlZE9iamVj
dCgpOwogICAgIGlmICghdW53cmFwcGVkT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpIHx8IHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+ZXZhbEZ1bmN0aW9uKCkg
IT0gZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEV2YWxFcnJvciwg
IlRoZSBcInRoaXNcIiB2YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJlIHRoZSBnbG9iYWwgb2Jq
ZWN0IGZyb20gd2hpY2ggZXZhbCBvcmlnaW5hdGVkIik7CiAKLSAgICBKU1ZhbHVlKiB4ID0gYXJn
cy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHggPSBhcmdzLmF0KGV4ZWMsIDApOwogICAg
IGlmICgheC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHg7CiAKQEAgLTI5Myw5ICsyOTMs
OSBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJu
IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHRoaXNP
YmplY3QsIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odW53cmFwcGVkT2JqZWN0KS0+Z2xv
YmFsU2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKIH0KIAotSlNW
YWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY1BhcnNlSW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEpTVmFsdWUqIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1Zh
bHVlUHRyIHZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKICAgICBpbnQzMl90IHJhZGl4ID0gYXJn
cy5hdChleGVjLCAxKS0+dG9JbnQzMihleGVjKTsKIAogICAgIGlmICh2YWx1ZS0+aXNOdW1iZXIo
KSAmJiAocmFkaXggPT0gMCB8fCByYWRpeCA9PSAxMCkpIHsKQEAgLTMxMCwyMyArMzEwLDIzIEBA
IEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgcGFyc2VJbnQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLCByYWRpeCkpOwogfQog
Ci1KU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNQ
YXJzZUZsb2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBwYXJzZUZsb2F0KGFy
Z3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1
bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
anNCb29sZWFuKGlzbmFuKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAK
LUpTVmFsdWUqIGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNJc0Zp
bml0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBkb3VibGUgbiA9IGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4
ZWMpOwogICAgIHJldHVybiBqc0Jvb2xlYW4oIWlzbmFuKG4pICYmICFpc2luZihuKSk7CiB9CiAK
LUpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jRGVj
b2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF91bmVzY2FwZV93aGVu
X2RlY29kaW5nX1VSSVtdID0KICAgICAgICAgIiMkJissLzo7PT9AIjsKQEAgLTMzNCwxMiArMzM0
LDEyIEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiAKICAgICByZXR1
cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF91bmVzY2FwZV93aGVuX2RlY29kaW5nX1VSSSwg
dHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBk
ZWNvZGUoZXhlYywgYXJncywgIiIsIHRydWUpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRW5j
b2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBzdGF0
aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJW10gPQogICAgICAg
ICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC0zNTAsNyArMzUwLDcgQEAgSlNWYWx1
ZSogZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIAogICAgIHJldHVybiBlbmNvZGUoZXhl
YywgYXJncywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSSk7CiB9CiAKLUpTVmFsdWUq
IGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jRW5j
b2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9lc2Nh
cGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50W10gPQogICAgICAgICAiQUJDREVGR0hJSktM
TU5PUFFSU1RVVldYWVoiCkBAIC0zNjEsNyArMzYxLDcgQEAgSlNWYWx1ZSogZ2xvYmFsRnVuY0Vu
Y29kZVVSSUNvbXBvbmVudChFeAogICAgIHJldHVybiBlbmNvZGUoZXhlYywgYXJncywgZG9fbm90
X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25lbnQpOwogfQogCi1KU1ZhbHVlKiBnbG9i
YWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBz
dGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQogICAgICAgICAiQUJDREVGR0hJSktM
TU5PUFFSU1RVVldYWVoiCkBAIC0zOTIsNyArMzkyLDcgQEAgSlNWYWx1ZSogZ2xvYmFsRnVuY0Vz
Y2FwZShFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCByZXN1bHQpOwog
fQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5j
VW5lc2NhcGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyByZXN1bHQgPSAiIjsKICAgICBVU3RyaW5nIHN0
ciA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNDIwLDcgKzQyMCw3IEBA
IEpTVmFsdWUqIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqIGUKIH0KIAogI2lmbmRlZiBO
REVCVUcKLUpTVmFsdWUqIGdsb2JhbEZ1bmNKU0NQcmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1
bmNKU0NQcmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBDU3RyaW5nQnVmZmVyIHN0cmluZzsKICAgICBhcmdzLmF0
KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKS5nZXRDU3RyaW5nKHN0cmluZyk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCShyZXZp
c2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTkgKzM1LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIHJlYWxseSBiZSBpbiBKU0ds
b2JhbE9iamVjdC5jcHAsIGJ1dCBwdXR0aW5nIHRoZW0gdGhlcmUKICAgICAvLyBpcyBhIDAuNSUg
cmVkdWN0aW9uLgogCi0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1
bmNQYXJzZUludChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNJ
c05hTihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0g
ICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0lzRmluaXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJ
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBK
U1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRW5j
b2RlVVJJKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxG
dW5jRXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY0V2
YWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Cisg
ICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jUGFy
c2VGbG9hdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNJc05hTihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNJ
c0Zpbml0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxG
dW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1Zh
bHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5j
RXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
OworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogI2lmbmRlZiBOREVCVUcKLSAgICBKU1Zh
bHVlKiBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogI2VuZGlmCiAK
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kID0gOTAw
NzE5OTI1NDc0MDk5Mi4wOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5j
cHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b1RoaXNPYmplY3QoSlNWYWx1ZSogdiwgRXhl
Y1N0YXRlKiBleGVjKQorSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b1RoaXNPYmplY3QoSlNWYWx1
ZVB0ciB2LCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsK
ICAgICBpZiAoaXNOdW1iZXIodikpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3ROdW1iZXJGcm9t
SW1tZWRpYXRlTnVtYmVyKGV4ZWMsIHYpOwogICAgIGlmIChpc0Jvb2xlYW4odikpCiAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZXhlYywgdik7Ci0g
ICAgaWYgKHYgPT0ganNOdWxsKCkpCisgICAgaWYgKHYtPmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7CiAgICAgCiAgICAgSlNOb3RBbk9iamVjdEVycm9y
U3R1YiogZXhjZXB0aW9uID0gY3JlYXRlTm90QW5PYmplY3RFcnJvclN0dWIoZXhlYywgdi0+aXNO
dWxsKCkpOwpAQCAtNDcsNyArNDcsNyBAQCBKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvVGhpc09i
amVjdChKU1ZhCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjLCBleGNl
cHRpb24pOwogfQogCi1KU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0KEpTVmFsdWUqIHYs
IEV4ZWNTdGF0ZSogZXhlYykKK0pTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9PYmplY3QoSlNWYWx1
ZVB0ciB2LCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsK
ICAgICBpZiAoaXNOdW1iZXIodikpCkBAIC02MCw3ICs2MCw3IEBAIEpTT2JqZWN0KiBKU0ltbWVk
aWF0ZTo6dG9PYmplY3QoSlNWYWx1ZSoKICAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2Jq
ZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKLUpTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6cHJvdG90
eXBlKEpTVmFsdWUqIHYsIEV4ZWNTdGF0ZSogZXhlYykKK0pTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6
cHJvdG90eXBlKEpTVmFsdWVQdHIgdiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChp
c0ltbWVkaWF0ZSh2KSk7CiAgICAgaWYgKGlzTnVtYmVyKHYpKQpAQCAtNzMsMTggKzczLDE4IEBA
IEpTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKEpTVmFsdWUKICAgICByZXR1cm4gbmV3
IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKLVVTdHJpbmcgSlNJ
bW1lZGlhdGU6OnRvU3RyaW5nKEpTVmFsdWUqIHYpCitVU3RyaW5nIEpTSW1tZWRpYXRlOjp0b1N0
cmluZyhKU1ZhbHVlUHRyIHYpCiB7CiAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKICAgICBp
ZiAoaXNOdW1iZXIodikpCiAgICAgICAgIHJldHVybiBVU3RyaW5nOjpmcm9tKGdldFRydW5jYXRl
ZEludDMyKHYpKTsKLSAgICBpZiAodiA9PSBqc0Jvb2xlYW4oZmFsc2UpKQorICAgIGlmIChqc0Jv
b2xlYW4oZmFsc2UpID09IHYpCiAgICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgIGlmICh2ID09
IGpzQm9vbGVhbih0cnVlKSkKKyAgICBpZiAoanNCb29sZWFuKHRydWUpID09IHYpCiAgICAgICAg
IHJldHVybiAidHJ1ZSI7CiAgICAgaWYgKHYtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gIm51
bGwiOwotICAgIEFTU0VSVCh2ID09IGpzVW5kZWZpbmVkKCkpOworICAgIEFTU0VSVCh2LT5pc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gInVuZGVmaW5lZCI7CiB9CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW1tZWRpYXRlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5l
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJKU1ZhbHVlLmgiCiAj
aW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgpAQCAtMzksOSArNDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU1ZhbHVlOwog
ICAgIGNsYXNzIFVTdHJpbmc7CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogbm9WYWx1ZSgpIHsgcmV0
dXJuIDA7IH0KLSAgICBpbmxpbmUgdm9pZCogYXNQb2ludGVyKEpTVmFsdWUqIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZTsgfQotCiAgICAgLyoKICAgICAgKiBBIEpTVmFsdWUqIGlzIGVpdGhlciBhIHBv
aW50ZXIgdG8gYSBjZWxsIChhIGhlYXAtYWxsb2NhdGVkIG9iamVjdCkgb3IgYW4gaW1tZWRpYXRl
IChhIHR5cGUtdGFnZ2VkIAogICAgICAqIHZhbHVlIG1hc3F1ZXJhZGluZyBhcyBhIHBvaW50ZXIp
LiBUaGUgbG93IHR3byBiaXRzIGluIGEgSlNWYWx1ZSogYXJlIGF2YWlsYWJsZSBmb3IgdHlwZSB0
YWdnaW5nCkBAIC0xMTMsMTUyICsxMTEsMTUyIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAg
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzSW1tZWRp
YXRlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJbW1l
ZGlhdGUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcmF3VmFs
dWUodikgJiBUYWdNYXNrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzTnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNOdW1iZXIoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gcmF3VmFsdWUodikgJiBUYWdCaXRUeXBlSW50ZWdlcjsKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNQb3NpdGl2ZU51bWJlcihKU1Zh
bHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzUG9zaXRpdmVOdW1i
ZXIoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBBIHNpbmdsZSBtYXNr
IHRvIGNoZWNrIGZvciB0aGUgc2lnbiBiaXQgYW5kIHRoZSBudW1iZXIgdGFnIGFsbCBhdCBvbmNl
LgogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2KSAmIChzaWduQml0IHwgVGFnQml0VHlw
ZUludGVnZXIpKSA9PSBUYWdCaXRUeXBlSW50ZWdlcjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Jvb2xlYW4oSlNWYWx1ZSogdikKKyAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Jvb2xlYW4oSlNWYWx1ZVB0ciB2KQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgRnVsbFRhZ1R5cGVN
YXNrKSA9PSBGdWxsVGFnVHlwZUJvb2w7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNVbmRlZmluZWRPck51bGwoSlNWYWx1ZSogdikKKyAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbChKU1ZhbHVl
UHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBhbmQgbnVsbCBzaGFy
ZSB0aGUgc2FtZSB2YWx1ZSwgYmFyIHRoZSAndW5kZWZpbmVkJyBiaXQgaW4gdGhlIGV4dGVuZGVk
IHRhZy4KICAgICAgICAgICAgIHJldHVybiAocmF3VmFsdWUodikgJiB+RXh0ZW5kZWRUYWdCaXRV
bmRlZmluZWQpID09IEZ1bGxUYWdUeXBlTnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyBib29sIGlzTmVnYXRpdmUoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIGJvb2wgaXNOZWdh
dGl2ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpc051bWJl
cih2KSk7CiAgICAgICAgICAgICByZXR1cm4gcmF3VmFsdWUodikgJiBzaWduQml0OwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20oY2hhcik7Ci0gICAgICAgIHN0YXRp
YyBKU1ZhbHVlKiBmcm9tKHNpZ25lZCBjaGFyKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZy
b20odW5zaWduZWQgY2hhcik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHNob3J0KTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWduZWQgc2hvcnQpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogZnJvbShpbnQpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbSh1
bnNpZ25lZCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGxvbmcpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogZnJvbSh1bnNpZ25lZCBsb25nKTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIGZyb20obG9uZyBsb25nKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWdu
ZWQgbG9uZyBsb25nKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20oZG91YmxlKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbShjaGFyKTsKKyAgICAgICAgc3RhdGljIEpTVmFs
dWVQdHIgZnJvbShzaWduZWQgY2hhcik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20o
dW5zaWduZWQgY2hhcik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oc2hvcnQpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVQdHIgZnJvbShpbnQpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBm
cm9tKHVuc2lnbmVkKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbShsb25nKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCBsb25nKTsKKyAgICAgICAgc3Rh
dGljIEpTVmFsdWVQdHIgZnJvbShsb25nIGxvbmcpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBmcm9tKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZy
b20oZG91YmxlKTsKIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRWl0aGVy
SW1tZWRpYXRlKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc0VpdGhlckltbWVkaWF0ZShKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRy
IHYyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYxKSB8IHJhd1Zh
bHVlKHYyKSkgJiBUYWdNYXNrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0FueUltbWVkaWF0ZShKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIsIEpTVmFs
dWUqIHYzKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQW55SW1tZWRpYXRl
KEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIsIEpTVmFsdWVQdHIgdjMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiAocmF3VmFsdWUodjEpIHwgcmF3VmFsdWUodjIpIHwgcmF3VmFs
dWUodjMpKSAmIFRhZ01hc2s7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIGFyZUJvdGhJbW1lZGlhdGUoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJbW1lZGlhdGUoSlNWYWx1ZVB0
ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGlzSW1t
ZWRpYXRlKHYxKSAmIGlzSW1tZWRpYXRlKHYyKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgYXJlQm90aEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEs
IEpTVmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJ
bW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiByYXdWYWx1ZSh2MSkgJiByYXdWYWx1ZSh2MikgJiBUYWdCaXRU
eXBlSW50ZWdlcjsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIGFuZEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAg
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGFuZEltbWVkaWF0ZU51bWJlcnMo
SlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpOwogICAgICAgICAgICAgcmV0dXJu
IG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgJiByYXdWYWx1ZSh2MikpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogeG9ySW1tZWRpYXRlTnVtYmVycyhK
U1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
VmFsdWVQdHIgeG9ySW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYy
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoYXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
djEsIHYyKSk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKChyYXdWYWx1ZSh2MSkgXiBy
YXdWYWx1ZSh2MikpIHwgVGFnQml0VHlwZUludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogb3JJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUq
IHYxLCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0
ciBvckltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mikp
OwogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgfCByYXdWYWx1ZSh2
MikpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdmFsLCBKU1ZhbHVlKiBzaGlmdCkK
KyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciByaWdodFNoaWZ0SW1tZWRp
YXRlTnVtYmVycyhKU1ZhbHVlUHRyIHZhbCwgSlNWYWx1ZVB0ciBzaGlmdCkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKTsK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUoKHJhd1ZhbHVlKHZhbCkgPj4gKChyYXdWYWx1
ZShzaGlmdCkgPj4gSW50ZWdlclBheWxvYWRTaGlmdCkgJiAweDFmKSkgfCBUYWdCaXRUeXBlSW50
ZWdlcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGNh
bkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhKU1ZhbHVlUHRyIHYp
CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIE51bWJlciBpcyBub24tbmVnYXRpdmUgYW5kIGFu
IG9wZXJhdGlvbiBpbnZvbHZpbmcgdHdvIG9mIHRoZXNlIGNhbid0IG92ZXJmbG93LgogICAgICAg
ICAgICAgLy8gQ2hlY2tpbmcgZm9yIGFsbG93ZWQgbmVnYXRpdmUgbnVtYmVycyB0YWtlcyBtb3Jl
IHRpbWUgdGhhbiBpdCdzIHdvcnRoIG9uIFN1blNwaWRlci4KICAgICAgICAgICAgIHJldHVybiAo
cmF3VmFsdWUodikgJiAoVGFnQml0VHlwZUludGVnZXIgKyAoc2lnbkJpdCB8IChzaWduQml0ID4+
IDEpKSkpID09IFRhZ0JpdFR5cGVJbnRlZ2VyOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogYWRkSW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlKiB2MSwg
SlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgYWRk
SW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYxKSk7CiAg
ICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYyKSk7CiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYxKSArIHJhd1ZhbHVlKHYyKSAtIFRh
Z0JpdFR5cGVJbnRlZ2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUqIHN1YkltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYy
KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIHN1YkltbWVkaWF0ZU51
bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MSkpOwogICAgICAgICAgICAg
QVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpOwogICAgICAgICAgICAgcmV0
dXJuIG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgLSByYXdWYWx1ZSh2MikgKyBUYWdCaXRUeXBlSW50
ZWdlcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBpbmNJbW1lZGlhdGVOdW1iZXIoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZVB0ciBpbmNJbW1lZGlhdGVOdW1iZXIoSlNWYWx1ZVB0ciB2KQogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYpKTsK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodikgKyAoMSA8PCBJbnRlZ2Vy
UGF5bG9hZFNoaWZ0KSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBkZWNJbW1lZGlhdGVOdW1iZXIoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBkZWNJbW1lZGlhdGVOdW1iZXIoSlNWYWx1ZVB0ciB2
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRp
b25zKHYpKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodikgLSAoMSA8
PCBJbnRlZ2VyUGF5bG9hZFNoaWZ0KSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgZG91
YmxlIHRvRG91YmxlKEpTVmFsdWUqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgdG9Cb29sZWFuKEpT
VmFsdWUqKTsKLSAgICAgICAgc3RhdGljIEpTT2JqZWN0KiB0b09iamVjdChKU1ZhbHVlKiwgRXhl
Y1N0YXRlKik7Ci0gICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTVmFsdWUq
LCBFeGVjU3RhdGUqKTsKLSAgICAgICAgc3RhdGljIFVTdHJpbmcgdG9TdHJpbmcoSlNWYWx1ZSop
OwotCi0gICAgICAgIHN0YXRpYyBib29sIGdldFVJbnQzMihKU1ZhbHVlKiwgdWludDMyX3QmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZSosIGludDMyX3Qm
KTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVkVUludDMyKEpTVmFsdWUqLCB1aW50
MzJfdCYpOwotCi0gICAgICAgIHN0YXRpYyBpbnQzMl90IGdldFRydW5jYXRlZEludDMyKEpTVmFs
dWUqKTsKLSAgICAgICAgc3RhdGljIHVpbnQzMl90IGdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVl
Kik7Ci0KLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIHRydWVJbW1lZGlhdGUoKTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIGZhbHNlSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiB1bmRlZmluZWRJbW1lZGlhdGUoKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG51bGxJbW1l
ZGlhdGUoKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIHplcm9JbW1lZGlhdGUoKTsKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIG9uZUltbWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMgZG91Ymxl
IHRvRG91YmxlKEpTVmFsdWVQdHIpOworICAgICAgICBzdGF0aWMgYm9vbCB0b0Jvb2xlYW4oSlNW
YWx1ZVB0cik7CisgICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9PYmplY3QoSlNWYWx1ZVB0ciwg
RXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTVmFs
dWVQdHIsIEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgVVN0cmluZyB0b1N0cmluZyhKU1Zh
bHVlUHRyKTsKKworICAgICAgICBzdGF0aWMgYm9vbCBnZXRVSW50MzIoSlNWYWx1ZVB0ciwgdWlu
dDMyX3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZVB0
ciwgaW50MzJfdCYpOworICAgICAgICBzdGF0aWMgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIoSlNW
YWx1ZVB0ciwgdWludDMyX3QmKTsKKworICAgICAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0
ZWRJbnQzMihKU1ZhbHVlUHRyKTsKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IGdldFRydW5jYXRl
ZFVJbnQzMihKU1ZhbHVlUHRyKTsKKworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciB0cnVlSW1t
ZWRpYXRlKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZhbHNlSW1tZWRpYXRlKCk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHVuZGVmaW5lZEltbWVkaWF0ZSgpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZVB0ciBudWxsSW1tZWRpYXRlKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
UHRyIHplcm9JbW1lZGlhdGUoKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgb25lSW1tZWRp
YXRlKCk7CiAKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGltcG9zc2libGVWYWx1ZSgpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBpbXBvc3NpYmxlVmFsdWUoKTsKICAgICAgICAgCi0gICAg
ICAgIHN0YXRpYyBKU09iamVjdCogcHJvdG90eXBlKEpTVmFsdWUqLCBFeGVjU3RhdGUqKTsKKyAg
ICAgICAgc3RhdGljIEpTT2JqZWN0KiBwcm90b3R5cGUoSlNWYWx1ZVB0ciwgRXhlY1N0YXRlKik7
CiAKICAgICBwcml2YXRlOgogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCkBAIC0yNzAs
NjUgKzI2OCw2NSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4SW1tZWRpYXRlVUludCA9IG1heEltbWVkaWF0ZUludDsKIAotICAgICAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBtYWtlVmFsdWUoaW50cHRyX3QgaW50ZWdl
cikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBtYWtlVmFsdWUoaW50
cHRyX3QgaW50ZWdlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KGludGVnZXIpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6
Om1ha2VJbW1lZGlhdGUoaW50ZWdlcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlKiBtYWtlSW50KGludDMyX3QgdmFsdWUpCisgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFrZUludChpbnQzMl90IHZhbHVlKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKChzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
dmFsdWUpIDw8IEludGVnZXJQYXlsb2FkU2hpZnQpIHwgVGFnQml0VHlwZUludGVnZXIpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBt
YWtlQm9vbChib29sIGIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIg
bWFrZUJvb2woYm9vbCBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVl
KChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYikgPDwgRXh0ZW5kZWRQYXlsb2FkU2hpZnQpIHwgRnVs
bFRhZ1R5cGVCb29sKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogbWFrZVVuZGVmaW5lZCgpCisgICAgICAgIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWVQdHIgbWFrZVVuZGVmaW5lZCgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtYWtlVmFsdWUoRnVsbFRhZ1R5cGVVbmRlZmluZWQpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBtYWtlTnVsbCgpCisg
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFrZU51bGwoKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKEZ1bGxUYWdUeXBlTnVsbCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludDMyX3QgaW50
VmFsdWUoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50MzJfdCBp
bnRWYWx1ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihyYXdWYWx1ZSh2KSA+PiBJbnRlZ2VyUGF5bG9hZFNoaWZ0KTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdWludDMyX3Qg
dWludFZhbHVlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQz
Ml90IHVpbnRWYWx1ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmF3VmFsdWUodikgPj4gSW50ZWdlclBheWxvYWRTaGlm
dCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgYm9vbFZhbHVlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgYm9vbFZhbHVlKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IHJhd1ZhbHVlKHYpICYgRXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnRwdHJfdCByYXdWYWx1ZShK
U1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnRwdHJfdCByYXdWYWx1
ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih2KTsKKyAgICAgICAgICAgIHJldHVybiB2LmltbWVkaWF0ZVZhbHVl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgZG91YmxlIG5vbklubGluZU5hTigpOwog
ICAgIH07CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjp0cnVlSW1t
ZWRpYXRlKCkgeyByZXR1cm4gbWFrZUJvb2wodHJ1ZSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKGZh
bHNlKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OnVuZGVmaW5l
ZEltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VVbmRlZmluZWQoKTsgfQotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlTnVs
bCgpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6emVyb0ltbWVk
aWF0ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlSW50KDEpOyB9CisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkgeyBy
ZXR1cm4gbWFrZUJvb2wodHJ1ZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJ
bW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUJvb2woZmFsc2UpOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjp1bmRlZmluZWRJbW1lZGlh
dGUoKSB7IHJldHVybiBtYWtlVW5kZWZpbmVkKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIgSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlTnVsbCgpOyB9
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRl
KCkgeyByZXR1cm4gbWFrZUludCgwKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBK
U0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUludCgxKTsgfQogCiAgICAg
Ly8gVGhpcyB2YWx1ZSBpcyBpbXBvc3NpYmxlIGJlY2F1c2UgMHg0IGlzIG5vdCBhIHZhbGlkIHBv
aW50ZXIgYnV0IGEgdGFnIG9mIDAgd291bGQgaW5kaWNhdGUgbm9uLWltbWVkaWF0ZQotICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpIHsgcmV0
dXJuIG1ha2VWYWx1ZSgweDQpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1t
ZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSB7IHJldHVybiBtYWtlVmFsdWUoMHg0KTsgfQogCi0g
ICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4oSlNWYWx1ZSogdikK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OnRvQm9vbGVhbihKU1ZhbHVlUHRy
IHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbW1lZGlhdGUodikpOwogICAgICAgICBpbnRw
dHJfdCBiaXRzID0gcmF3VmFsdWUodik7CkBAIC0zMzcsODAgKzMzNSw4MCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIDogYml0cyA9PSAoRnVsbFRhZ1R5cGVCb29sIHwgRXh0ZW5kZWRQ
YXlsb2FkQml0Qm9vbFZhbHVlKTsgLy8gYm9vbCB0cnVlCiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB1aW50MzJfdCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKEpTVmFsdWUqIHYp
CisgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUlu
dDMyKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc051bWJlcih2KSk7CiAg
ICAgICAgIHJldHVybiBpbnRWYWx1ZSh2KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGNoYXIgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIgSlNJbW1lZGlhdGU6OmZyb20oY2hhciBpKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1h
a2VJbnQoaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0
ZTo6ZnJvbShzaWduZWQgY2hhciBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0lt
bWVkaWF0ZTo6ZnJvbShzaWduZWQgY2hhciBpKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1ha2VJ
bnQoaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6
ZnJvbSh1bnNpZ25lZCBjaGFyIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1t
ZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtl
SW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6
OmZyb20oc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6
OmZyb20oc2hvcnQgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQg
c2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20o
dW5zaWduZWQgc2hvcnQgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20oaW50IGkp
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKGludCBpKQog
ICAgIHsKICAgICAgICAgaWYgKChpIDwgbWluSW1tZWRpYXRlSW50KSB8IChpID4gbWF4SW1tZWRp
YXRlSW50KSkKICAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBt
YWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlh
dGU6OmZyb20odW5zaWduZWQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1l
ZGlhdGU6OmZyb20odW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChpID4gbWF4SW1tZWRp
YXRlVUludCkKICAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBt
YWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlh
dGU6OmZyb20obG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0
ZTo6ZnJvbShsb25nIGkpCiAgICAgewogICAgICAgICBpZiAoKGkgPCBtaW5JbW1lZGlhdGVJbnQp
IHwgKGkgPiBtYXhJbW1lZGlhdGVJbnQpKQogICAgICAgICAgICAgcmV0dXJuIG5vVmFsdWUoKTsK
ICAgICAgICAgcmV0dXJuIG1ha2VJbnQoaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBsb25nIGkpCisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGxvbmcgaSkKICAgICB7
CiAgICAgICAgIGlmIChpID4gbWF4SW1tZWRpYXRlVUludCkKICAgICAgICAgICAgIHJldHVybiBu
b1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20obG9uZyBsb25nIGkpCisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcgbG9uZyBpKQogICAg
IHsKICAgICAgICAgaWYgKChpIDwgbWluSW1tZWRpYXRlSW50KSB8IChpID4gbWF4SW1tZWRpYXRl
SW50KSkKICAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7CiAgICAgICAgIHJldHVybiBtYWtl
SW50KHN0YXRpY19jYXN0PGludHB0cl90PihpKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBs
b25nIGkpCiAgICAgewogICAgICAgICBpZiAoaSA+IG1heEltbWVkaWF0ZVVJbnQpCiAgICAgICAg
ICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJ
bW1lZGlhdGU6OmZyb20oZG91YmxlIGQpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpT
SW1tZWRpYXRlOjpmcm9tKGRvdWJsZSBkKQogICAgIHsKICAgICAgICAgY29uc3QgaW50IGludFZh
bCA9IHN0YXRpY19jYXN0PGludD4oZCk7CiAKQEAgLTQyNCwxMyArNDIyLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICByZXR1cm4gbWFrZUludChpbnRWYWwpOwogICAgIH0KIAotICAgIEFM
V0FZU19JTkxJTkUgaW50MzJfdCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1
ZSogdikKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRl
ZEludDMyKEpTVmFsdWVQdHIgdikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc051bWJlcih2KSk7
CiAgICAgICAgIHJldHVybiBpbnRWYWx1ZSh2KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IGRvdWJsZSBKU0ltbWVkaWF0ZTo6dG9Eb3VibGUoSlNWYWx1ZSogdikKKyAgICBBTFdBWVNfSU5M
SU5FIGRvdWJsZSBKU0ltbWVkaWF0ZTo6dG9Eb3VibGUoSlNWYWx1ZVB0ciB2KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKICAgICAgICAgaW50IGk7CkBAIC00NDMsMzYg
KzQ0MSwxMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKEpTVmFsdWUqIHYs
IHVpbnQzMl90JiBpKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6Z2V0VUlu
dDMyKEpTVmFsdWVQdHIgdiwgdWludDMyX3QmIGkpCiAgICAgewogICAgICAgICBpID0gdWludFZh
bHVlKHYpOwogICAgICAgICByZXR1cm4gaXNQb3NpdGl2ZU51bWJlcih2KTsKICAgICB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKEpTVmFs
dWUqIHYsIGludDMyX3QmIGkpCisgICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRJbnQzMihKU1ZhbHVlUHRyIHYsIGludDMyX3QmIGkpCiAgICAgewogICAgICAg
ICBpID0gaW50VmFsdWUodik7CiAgICAgICAgIHJldHVybiBpc051bWJlcih2KTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihK
U1ZhbHVlKiB2LCB1aW50MzJfdCYgaSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlh
dGU6OmdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlUHRyIHYsIHVpbnQzMl90JiBpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGdldFVJbnQzMih2LCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUqIGpzVW5kZWZpbmVkKCkKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBqc051bGwo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCk7Cisg
ICAgfQorCisgICAgaW5saW5lIEpTVmFsdWVQdHIganNCb29sZWFuKGJvb2wgYikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBiID8gSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSA6IEpTSW1tZWRp
YXRlOjpmYWxzZUltbWVkaWF0ZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlUHRyIGpz
VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6dW5kZWZpbmVk
SW1tZWRpYXRlKCk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIGpzTnVsbCgpCisgICAg
Ly8gVGhlc2UgYXJlIGlkZW50aWNhbCBsb2dpYyB0byB0aGUgSlNWYWx1ZSBmdW5jdGlvbnMgYWJv
dmUsIGFuZCBmYXN0ZXIgdGhhbiBqc051bWJlcihudW1iZXIpLT50b0ludDMyKCkuCisgICAgaW50
MzJfdCB0b0ludDMyKGRvdWJsZSk7CisgICAgdWludDMyX3QgdG9VSW50MzIoZG91YmxlKTsKKyAg
ICBpbnQzMl90IHRvSW50MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKyAgICB1aW50MzJf
dCB0b1VJbnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOworCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjpudWxsSW1tZWRpYXRlKCk7CisgICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSoganNCb29sZWFuKGJvb2wg
YikKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGIgPyBKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpIDogSlNJbW1lZGlhdGU6
OmZhbHNlSW1tZWRpYXRlKCk7CisgICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNOdWxsKCk7
CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc1VuZGVmaW5lZE9yTnVs
bChhc1ZhbHVlKCkpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzQm9vbGVh
bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzQm9vbGVhbihh
c1ZhbHVlKCkpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmdldEJvb2xlYW4o
Ym9vbCYgdikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNCb29sZWFu
KGFzVmFsdWUoKSkpIHsKKyAgICAgICAgICAgIHYgPSBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKGFz
VmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6
OmdldEJvb2xlYW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBq
c0Jvb2xlYW4odHJ1ZSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTVmFs
dWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50MzJf
dCBpOworICAgICAgICBpZiAoZ2V0VHJ1bmNhdGVkSW50MzIoaSkpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgcmV0dXJuIHRvSW50MzJTbG93Q2FzZShl
eGVjLCBvayk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMy
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGk7CisgICAg
ICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICAgICAgYm9vbCBvazsKKyAgICAgICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2UoZXhlYywgb2sp
OworICAgIH0KKworICAgIGlubGluZSBpbnQzMl90IHRvSW50MzIoZG91YmxlIHZhbCkKKyAgICB7
CisgICAgICAgIGlmICghKHZhbCA+PSAtMjE0NzQ4MzY0OC4wICYmIHZhbCA8IDIxNDc0ODM2NDgu
MCkpIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdWludDMyX3QgdG9V
SW50MzIoZG91YmxlIHZhbCkKKyAgICB7CisgICAgICAgIGlmICghKHZhbCA+PSAwLjAgJiYgdmFs
IDwgNDI5NDk2NzI5Ni4wKSkgeworICAgICAgICAgICAgYm9vbCBpZ25vcmVkOworICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVkKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbCk7CisgICAgfQorCisgICAgaW5s
aW5lIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBj
b25zdAorICAgIHsKKyAgICAgICAgaW50MzJfdCBpOworICAgICAgICBpZiAoZ2V0VHJ1bmNhdGVk
SW50MzIoaSkpIHsKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nhc2UoZXhlYywgb2spOwor
ICAgIH0KKworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wmIG9rKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDMyX3QgaTsKKyAgICAg
ICAgaWYgKGdldFRydW5jYXRlZFVJbnQzMihpKSkgeworICAgICAgICAgICAgb2sgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDMy
U2xvd0Nhc2UoZXhlYywgb2spOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTMgKzM3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNf
SU5fQ0VMTChKU05vdEFuT2JqZWN0KTsKIAogLy8gSlNWYWx1ZSBtZXRob2RzCi1KU1ZhbHVlKiBK
U05vdEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlUHRyIEpTTm90QW5PYmplY3Q6OnRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGV4ZWMsIGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigp
ID09IG1fZXhjZXB0aW9uKTsKICAgICByZXR1cm4gbV9leGNlcHRpb247CiB9CiAKLWJvb2wgSlNO
b3RBbk9iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiwg
SlNWYWx1ZSomKQorYm9vbCBKU05vdEFuT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0
YXRlKiBleGVjLCBkb3VibGUmLCBKU1ZhbHVlUHRyJikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGV4
ZWMsIGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigpID09IG1fZXhjZXB0
aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC05NSwxMiArOTUsMTIgQEAgYm9vbCBKU05vdEFu
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBKU05vdEFuT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiAs
IEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKQordm9pZCBKU05vdEFuT2JqZWN0OjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiAsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAm
JiBleGVjLT5leGNlcHRpb24oKSA9PSBtX2V4Y2VwdGlvbik7CiB9CiAKLXZvaWQgSlNOb3RBbk9i
amVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQsIEpTVmFsdWUqKQordm9pZCBKU05v
dEFuT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCwgSlNWYWx1ZVB0cikKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGV4ZWMsIGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4
Y2VwdGlvbigpID09IG1fZXhjZXB0aW9uKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOb3RBbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNOb3RBbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNSArNjAsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCiAg
ICAgIHByaXZhdGU6CiAgICAgICAgIC8vIEpTVmFsdWUgbWV0aG9kcwotICAgICAgICB2aXJ0dWFs
IEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0
ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQ
dHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91
YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVh
bihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3Rh
dGUqKSBjb25zdDsKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVQdHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5jcHAJKHJldmlzaW9u
IDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJlckNlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFs
dWUqIEpTTnVtYmVyQ2VsbDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSkgY29uc3QKK0pTVmFsdWVQdHIgSlNOdW1iZXJDZWxsOjp0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAogewogICAgIHJldHVybiBjb25z
dF9jYXN0PEpTTnVtYmVyQ2VsbCo+KHRoaXMpOwogfQogCi1ib29sIEpTTnVtYmVyQ2VsbDo6Z2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFs
dWUpCitib29sIEpTTnVtYmVyQ2VsbDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSkKIHsKICAgICBudW1iZXIgPSBtX3ZhbHVl
OwogICAgIHZhbHVlID0gdGhpczsKQEAgLTk2LDI3ICs5NiwyNyBAQCBib29sIEpTTnVtYmVyQ2Vs
bDo6Z2V0VHJ1bmNhdGVkVUludDMyKHVpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUq
IEpTTnVtYmVyQ2VsbDo6Z2V0SlNOdW1iZXIoKQorSlNWYWx1ZVB0ciBKU051bWJlckNlbGw6Omdl
dEpTTnVtYmVyKCkKIHsKICAgICByZXR1cm4gdGhpczsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFs
dWUqIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQorTkVWRVJfSU5MSU5F
IEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCiB7CiAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOdW1iZXJDZWxsKGV4ZWMsIGQpOwogfQogCi1ORVZFUl9J
TkxJTkUgSlNWYWx1ZSoganNOYU4oRXhlY1N0YXRlKiBleGVjKQorTkVWRVJfSU5MSU5FIEpTVmFs
dWVQdHIganNOYU4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
TnVtYmVyQ2VsbChleGVjLCBOYU4pOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNOdW1i
ZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIGQpCitORVZFUl9JTkxJTkUg
SlNWYWx1ZVB0ciBqc051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUg
ZCkKIHsKICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU051bWJlckNlbGwoZ2xvYmFsRGF0
YSwgZCk7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlKiBqc05hTihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCitORVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciBqc05hTihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7CiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNOdW1iZXJDZWxsKGds
b2JhbERhdGEsIE5hTik7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVy
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxs
LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJlckNl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTUgKzQzLDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgSlNOdW1iZXJDZWxsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc051bWJlckNlbGwoSlNHbG9i
YWxEYXRhKiwgZG91YmxlKTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTmFOKEpTR2xvYmFs
RGF0YSopOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSos
IGRvdWJsZSk7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc05hTihFeGVjU3RhdGUqKTsKKyAg
ICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSosIGRvdWJs
ZSk7CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTmFOKEpTR2xvYmFsRGF0YSopOworICAg
ICAgICBmcmllbmQgSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoRXhlY1N0YXRlKiwgZG91YmxlKTsK
KyAgICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOYU4oRXhlY1N0YXRlKik7CiAgICAgcHVibGlj
OgogICAgICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKLSAg
ICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKKyAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVt
YmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSk7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC01OSw3ICs1OSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1RoaXNTdHJpbmcoRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051bWJlcigp
OworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZ2V0SlNOdW1iZXIoKTsKIAogICAgICAgICBp
bnQzMl90IHRvSW50MzIoKSBjb25zdDsKICAgICAgICAgdWludDMyX3QgdG9VSW50MzIoKSBjb25z
dDsKQEAgLTgyLDcgKzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgI2VuZGlmCiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJ
bmZvKE51bWJlclR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSB7
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oTnVtYmVyVHlwZSwgTmVl
ZHNUaGlzQ29udmVyc2lvbikpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBKU051bWJlckNl
bGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBkb3VibGUgdmFsdWUpCkBAIC0xMDcsMTI0ICsx
MDcsMTI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOwog
ICAgIGV4dGVybiBjb25zdCBkb3VibGUgSW5mOwogCi0gICAgSlNOdW1iZXJDZWxsKiBhc051bWJl
ckNlbGwoSlNWYWx1ZSopOworICAgIEpTTnVtYmVyQ2VsbCogYXNOdW1iZXJDZWxsKEpTVmFsdWVQ
dHIpOwogCi0gICAgSlNWYWx1ZSoganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSosIGRvdWJsZSk7
Ci0gICAgSlNWYWx1ZSoganNOYU4oSlNHbG9iYWxEYXRhKik7Ci0gICAgSlNWYWx1ZSoganNOdW1i
ZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7Ci0gICAgSlNWYWx1ZSoganNOYU4oRXhlY1N0YXRl
Kik7CisgICAgSlNWYWx1ZVB0ciBqc051bWJlckNlbGwoSlNHbG9iYWxEYXRhKiwgZG91YmxlKTsK
KyAgICBKU1ZhbHVlUHRyIGpzTmFOKEpTR2xvYmFsRGF0YSopOworICAgIEpTVmFsdWVQdHIganNO
dW1iZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7CisgICAgSlNWYWx1ZVB0ciBqc05hTihFeGVj
U3RhdGUqKTsKIAotICAgIGlubGluZSBKU051bWJlckNlbGwqIGFzTnVtYmVyQ2VsbChKU1ZhbHVl
KiB2YWx1ZSkKKyAgICBpbmxpbmUgSlNOdW1iZXJDZWxsKiBhc051bWJlckNlbGwoSlNWYWx1ZVB0
ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhc0NlbGwodmFsdWUpLT5pc051bWJlcigp
KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTTnVtYmVyQ2VsbCo+KGFzQ2VsbCh2YWx1
ZSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0
YXRlKiBleGVjLCBkb3VibGUgZCkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgZCkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlh
dGU6OmZyb20oZCk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBk
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0
ZSogZXhlYywgc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBzaG9ydCBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpT
SW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6
ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGkpOwog
ICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBzaG9ydCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051
bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHNob3J0IGkpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZXhlYywgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBq
c051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGludCBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSog
diA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVk
aWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMs
IGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051
bWJlcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVl
KiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1t
ZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhl
YywgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVj
U3RhdGUqIGV4ZWMsIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0g
SlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRl
Ojpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywgaSk7
CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsb25nIGkpCiAgICAgewotICAgICAgICBK
U1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNl
bGwoZXhlYywgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZVB0ciBqc051bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGxvbmcgbG9uZyBpKQogICAgIHsKLSAgICAg
ICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRy
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1i
ZXJDZWxsKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsb25n
IGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBsb25nIGxvbmcgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlh
dGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIGQpCisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
ZG91YmxlIGQpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1lZGlhdGU6OmZyb20o
ZCk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGQpOwogICAgICAg
ICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgZCk7CiAgICAgfQogCi0g
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgc2hvcnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlh
dGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxE
YXRhLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBzaG9ydCBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9t
KGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAg
ICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBpbnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBK
U0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6
OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRh
LCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpKQogICAg
IHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBK
U1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2
IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBsb25nIGkpCisg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgbG9uZyBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpm
cm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAg
ICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpz
TnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgbG9uZyBpKQogICAgIHsK
LSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1Zh
bHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDog
anNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBsb25nIGxvbmcgaSkK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBsb25nIGxvbmcgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVk
aWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20o
aSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBzdGF0
aWNfY2FzdDxkb3VibGU+KGkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGkp
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFs
RGF0YSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCkBAIC0yNTIsNyArMjUyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBKU0M6OnRvVUludDMyU2xvd0Nhc2Uo
bV92YWx1ZSwgc2NyYXRjaCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBK
U1ZhbHVlOjp0b0pTTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWVQdHIgSlNWYWx1ZTo6dG9KU051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzTnVtYmVyKGFzVmFsdWUoKSkg
PyBhc1ZhbHVlKCkgOiBqc051bWJlcihleGVjLCB0aGlzLT50b051bWJlcihleGVjKSk7CiAgICAg
fQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgdm9pZCBKU09iamVjdDo6bWFyaygpCiAKICAgICBzaXplX3Qgc3RvcmFn
ZVNpemUgPSBtX3N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RvcmFnZVNpemU7ICsraSkgewotICAgICAgICBKU1ZhbHVlKiB2ID0g
bV9wcm9wZXJ0eVN0b3JhZ2VbaV07CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IG1fcHJvcGVydHlT
dG9yYWdlW2ldOwogICAgICAgICBpZiAoIXYtPm1hcmtlZCgpKQogICAgICAgICAgICAgdi0+bWFy
aygpOwogICAgIH0KQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgdGhyb3dTZXR0ZXJFcnJv
cihFeGVjU3RhdGUqIAogfQogCiAvLyBFQ01BIDguNi4yLjIKLXZvaWQgSlNPYmplY3Q6OnB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNT
RVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFw
KHRoaXMpKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zCiAgICAgICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkgJiYgIXZhbHVlLT5p
c051bGwoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBKU1ZhbHVlKiBuZXh0UHJv
dG90eXBlVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciBuZXh0UHJvdG90eXBlVmFs
dWUgPSB2YWx1ZTsKICAgICAgICAgd2hpbGUgKG5leHRQcm90b3R5cGVWYWx1ZSAmJiBuZXh0UHJv
dG90eXBlVmFsdWUtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBuZXh0UHJv
dG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvdHlwZVZhbHVlKS0+dW53cmFwcGVkT2JqZWN0KCk7
CiAgICAgICAgICAgICBpZiAobmV4dFByb3RvdHlwZSA9PSB0aGlzKSB7CkBAIC0xMjMsNyArMTIz
LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29ucwogICAgIH0KIAog
ICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBw
cm90b3R5cGUgY2hhaW4KLSAgICBKU1ZhbHVlKiBwcm90b3R5cGU7CisgICAgSlNWYWx1ZVB0ciBw
cm90b3R5cGU7CiAgICAgZm9yIChKU09iamVjdCogb2JqID0gdGhpczsgIW9iai0+c3RydWN0dXJl
KCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgb2JqID0gYXNPYmplY3QocHJvdG90eXBl
KSkgewogICAgICAgICBwcm90b3R5cGUgPSBvYmotPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAo
cHJvdG90eXBlLT5pc051bGwoKSkgewpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChK
U09iamVjdCogb2JqID0gdGhpczsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7Ci0gICAg
ICAgIGlmIChKU1ZhbHVlKiBncyA9IG9iai0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSkpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWVQdHIgZ3MgPSBvYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpKSB7
CiAgICAgICAgICAgICBpZiAoZ3MtPmlzR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAgICAgICAg
ICBKU09iamVjdCogc2V0dGVyRnVuYyA9IGFzR2V0dGVyU2V0dGVyKGdzKS0+c2V0dGVyKCk7ICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXNldHRlckZ1bmMpIHsKQEAgLTE2NywxOCArMTY3
LDE4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICByZXR1
cm47CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgcHV0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXRX
aXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU09iamVjdDo6cHV0
V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIHB1dERpcmVj
dChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKU09iamVjdDo6
cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU09iamVjdDo6cHV0
V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgcHV0V2l0aEF0dHJp
YnV0ZXMoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
YXR0cmlidXRlcyk7CiB9CkBAIC0yMjYsOSArMjI2LDkgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKIHsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSogY2FsbERlZmF1bAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigpOwogCi0gICAgSlNWYWx1ZSogcmVz
dWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9jYXN0
PEpTT2JqZWN0Kj4ob2JqZWN0KSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9j
YXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgIEFTU0VSVCgh
cmVzdWx0LT5pc0dldHRlclNldHRlcigpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBjYWxsRGVmYXVsCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiByZXN1bHQpCitib29sIEpTT2JqZWN0OjpnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0
ciYgcmVzdWx0KQogewogICAgIHJlc3VsdCA9IGRlZmF1bHRWYWx1ZShleGVjLCBQcmVmZXJOdW1i
ZXIpOwogICAgIG51bWJlciA9IHJlc3VsdC0+dG9OdW1iZXIoZXhlYyk7CkBAIC0yNTYsMTggKzI1
NiwyMiBAQCBib29sIEpTT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiB9CiAKIC8v
IEVDTUEgOC42LjIuNgotSlNWYWx1ZSogSlNPYmplY3Q6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKK0pTVmFsdWVQdHIgSlNP
YmplY3Q6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUgaGludCkgY29uc3QKIHsKICAgICAvLyBNdXN0IGNhbGwgdG9TdHJpbmcgZmlyc3QgZm9yIERh
dGUgb2JqZWN0cy4KICAgICBpZiAoKGhpbnQgPT0gUHJlZmVyU3RyaW5nKSB8fCAoaGludCAhPSBQ
cmVmZXJOdW1iZXIgJiYgcHJvdG90eXBlKCkgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5kYXRlUHJvdG90eXBlKCkpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNhbGxE
ZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9T
dHJpbmcpKQorICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0
aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyk7CisgICAgICAg
IGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgaWYgKEpTVmFs
dWUqIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS52YWx1ZU9mKSkKKyAgICAgICAgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVl
RnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpOworICAg
ICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4
ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSkKKyAgICAgICAgSlNWYWx1
ZVB0ciB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudmFsdWVPZik7CisgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gY2FsbERlZmF1bHRW
YWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZykp
CisgICAgICAgIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyk7CisgICAgICAgIGlmICh2YWx1ZSkKICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKQEAgLTI4OSw3ICsyOTMsNyBAQCBjb25zdCBI
YXNoRW50cnkqIEpTT2JqZWN0OjpmaW5kUHJvcGVydHlICiAKIHZvaWQgSlNPYmplY3Q6OmRlZmlu
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uKQogewotICAgIEpTVmFsdWUqIG9iamVjdCA9IGdldERp
cmVjdChwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWVQdHIgb2JqZWN0ID0gZ2V0RGlyZWN0KHBy
b3BlcnR5TmFtZSk7CiAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzR2V0dGVyU2V0dGVyKCkp
IHsKICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
KCkpOwogICAgICAgICBhc0dldHRlclNldHRlcihvYmplY3QpLT5zZXRHZXR0ZXIoZ2V0dGVyRnVu
Y3Rpb24pOwpAQCAtMzE2LDcgKzMyMCw3IEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZUdldHRlcihF
eGVjU3RhdGUqIGUKIAogdm9pZCBKU09iamVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCogc2V0dGVyRnVuY3Rp
b24pCiB7Ci0gICAgSlNWYWx1ZSogb2JqZWN0ID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7Cisg
ICAgSlNWYWx1ZVB0ciBvYmplY3QgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKICAgICBpZiAo
b2JqZWN0ICYmIG9iamVjdC0+aXNHZXR0ZXJTZXR0ZXIoKSkgewogICAgICAgICBBU1NFUlQobV9z
dHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAgICAgICAgIGFzR2V0dGVy
U2V0dGVyKG9iamVjdCktPnNldFNldHRlcihzZXR0ZXJGdW5jdGlvbik7CkBAIC0zNDEsMTIgKzM0
NSwxMSBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgZ2V0
dGVyU2V0dGVyLT5zZXRTZXR0ZXIoc2V0dGVyRnVuY3Rpb24pOwogfQogCi1KU1ZhbHVlKiBKU09i
amVjdDo6bG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKK0pTVmFsdWVQdHIgSlNPYmplY3Q6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRo
aXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBvYmplY3Qt
PmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAg
aWYgKEpTVmFsdWVQdHIgdmFsdWUgPSBvYmplY3QtPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpKSB7
CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc0dldHRlclNldHRlcigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9u
T2JqZWN0ID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKQEAgLTM2MSwxMiArMzY0
LDExIEBAIEpTVmFsdWUqIEpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIoRXhlY1N0YXQKICAgICB9CiB9
CiAKLUpTVmFsdWUqIEpTT2JqZWN0Ojpsb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQorSlNWYWx1ZVB0ciBKU09iamVjdDo6bG9va3VwU2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBKU1ZhbHVl
KiB2YWx1ZSA9IG9iamVjdC0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmICh2
YWx1ZSkgeworICAgICAgICBpZiAoSlNWYWx1ZVB0ciB2YWx1ZSA9IG9iamVjdC0+Z2V0RGlyZWN0
KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIGlmICghdmFsdWUtPmlzR2V0dGVyU2V0dGVy
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBK
U09iamVjdCogZnVuY3Rpb25PYmplY3QgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPnNldHRlcigp
OwpAQCAtMzgxLDcgKzM4Myw3IEBAIEpTVmFsdWUqIEpTT2JqZWN0Ojpsb29rdXBTZXR0ZXIoRXhl
Y1N0YXQKICAgICB9CiB9CiAKLWJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqIHByb3RvKQorYm9vbCBKU09iamVjdDo6aGFz
SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBKU1ZhbHVlUHRyIHBy
b3RvKQogewogICAgIGlmICghcHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IsICJpbnN0YW5jZW9mIGNhbGxlZCBvbiBhbiBvYmplY3Qgd2l0aCBh
biBpbnZhbGlkIHByb3RvdHlwZSBwcm9wZXJ0eS4iKTsKQEAgLTM5Myw3ICszOTUsNyBAQCBib29s
IEpTT2JqZWN0OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIHdoaWxlICgob2JqZWN0ID0gb2JqZWN0LT5wcm90
b3R5cGUoKS0+Z2V0T2JqZWN0KCkpKSB7Ci0gICAgICAgIGlmIChvYmplY3QgPT0gcHJvdG8pCisg
ICAgICAgIGlmIChwcm90byA9PSBvYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM0LDcgKzQzNiw3IEBAIGJvb2wgSlNPYmplY3Q6
OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb24KIAogZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgSlNWYWx1ZSogcHJpbWl0aXZlID0gdG9Qcmlt
aXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKKyAgICBKU1ZhbHVlUHRyIHByaW1pdGl2ZSA9IHRv
UHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9kZXMuY3BwCiAgICAgICAgIHJl
dHVybiAwLjA7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS0+dG9OdW1iZXIoZXhlYyk7CkBAIC00NDIs
NyArNDQ0LDcgQEAgZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihFeGVjU3RhdGUqIGV4ZQogCiBV
U3RyaW5nIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
SlNWYWx1ZSogcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKKyAg
ICBKU1ZhbHVlUHRyIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gIiI7CiAgICAg
cmV0dXJuIHByaW1pdGl2ZS0+dG9TdHJpbmcoZXhlYyk7CkBAIC00ODksNyArNDkxLDcgQEAgdm9p
ZCBKU09iamVjdDo6cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VAogICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24tPm5hbWUoJmV4ZWMtPmdsb2Jh
bERhdGEoKSkpLCBmdW5jdGlvbiwgYXR0cik7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2Jq
ZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSoq
IGxvY2F0aW9uKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlUHRyKiBsb2NhdGlvbikKIHsKICAgICBp
ZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoKmxvY2F0aW9uKS0+
Z2V0dGVyKCkpCiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVuY3Rpb24gICAgID0gMSA8PCA0LCAgLy8g
cHJvcGVydHkgaXMgYSBmdW5jdGlvbiAtIG9ubHkgdXNlZCBieSBzdGF0aWMgaGFzaHRhYmxlcwog
ICAgIH07CiAKLSAgICB0eXBlZGVmIEpTVmFsdWUqKiBQcm9wZXJ0eVN0b3JhZ2U7CisgICAgdHlw
ZWRlZiBKU1ZhbHVlUHRyKiBQcm9wZXJ0eVN0b3JhZ2U7CiAKICAgICBjbGFzcyBKU09iamVjdCA6
IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgQmF0Y2hlZFRyYW5zaXRpb25P
cHRpbWl6ZXI7CkBAIC02OSw4ICs2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJv
b2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pIGNvbnN0IHsgcmV0dXJuIEpT
Q2VsbDo6aXNPYmplY3QoY2xhc3NJbmZvKTsgfQogCi0gICAgICAgIEpTVmFsdWUqIHByb3RvdHlw
ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFByb3RvdHlwZShKU1ZhbHVlKiBwcm90b3R5cGUp
OworICAgICAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dFByb3RvdHlwZShKU1ZhbHVlUHRyIHByb3RvdHlwZSk7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHNldFN0cnVjdHVyZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogICAgICAgICBTdHJ1Y3R1cmUq
IGluaGVyaXRvcklEKCk7CkBAIC03OSw4ICs3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZpcnR1YWwgVVN0cmluZyBjbGFzc05hbWUoKSBjb25zdDsKIAotICAgICAgICBKU1ZhbHVl
KiBnZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsK
LSAgICAgICAgSlNWYWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkg
Y29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBnZXRQcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTg4LDExICs4OCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciB2YWx1ZSk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0
ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRl
cyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0
aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBib29sIHByb3BlcnR5SXNF
bnVtZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29u
c3Q7CiAKQEAgLTEwMywxNCArMTAzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBk
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGhhc0luc3Rh
bmNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqLCBKU1ZhbHVlKiBwcm90b3R5cGVQcm9wZXJ0eSk7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCBK
U1ZhbHVlUHRyIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCi0gICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1
ZSk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwg
SlNWYWx1ZVB0ciYgdmFsdWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUq
KSBjb25zdDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OwpAQCAtMTIyLDMwICsxMjIsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRQcm9wZXJ0eUF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgY29uc3Q7CiAKICAgICAgICAg
Ly8gVGhpcyBnZXQgZnVuY3Rpb24gb25seSBsb29rcyBhdCB0aGUgcHJvcGVydHkgbWFwLgotICAg
ICAgICBKU1ZhbHVlKiBnZXREaXJlY3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBj
b25zdAorICAgICAgICBKU1ZhbHVlUHRyIGdldERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBt
X3N0cnVjdHVyZS0+Z2V0KHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
ICE9IFdURjo6bm90Rm91bmQgPyBtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdIDogbm9WYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSoqIGdldERpcmVjdExvY2F0aW9uKGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKKyAgICAgICAgSlNWYWx1ZVB0ciogZ2V0RGlyZWN0
TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9zdHJ1Y3R1cmUtPmdldChwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgcmV0dXJuIG9mZnNldCAhPSBXVEY6Om5vdEZvdW5kID8gbG9jYXRpb25Gb3JP
ZmZzZXQob2Zmc2V0KSA6IDA7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiogZ2V0RGly
ZWN0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0
cmlidXRlcykKKyAgICAgICAgSlNWYWx1ZVB0ciogZ2V0RGlyZWN0TG9jYXRpb24oY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKICAgICAgICAgewog
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlLT5nZXQocHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gV1RGOjpub3RGb3Vu
ZCA/IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAKLSAgICAgICAg
c2l6ZV90IG9mZnNldEZvckxvY2F0aW9uKEpTVmFsdWUqKiBsb2NhdGlvbikKKyAgICAgICAgc2l6
ZV90IG9mZnNldEZvckxvY2F0aW9uKEpTVmFsdWVQdHIqIGxvY2F0aW9uKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb24gLSBtX3Byb3BlcnR5U3RvcmFnZTsKICAgICAgICAg
fQogCi0gICAgICAgIEpTVmFsdWUqKiBsb2NhdGlvbkZvck9mZnNldChzaXplX3Qgb2Zmc2V0KQor
ICAgICAgICBKU1ZhbHVlUHRyKiBsb2NhdGlvbkZvck9mZnNldChzaXplX3Qgb2Zmc2V0KQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fcHJvcGVydHlTdG9yYWdlW29mZnNldF07CiAg
ICAgICAgIH0KQEAgLTE1NiwyMiArMTU2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGhhc0N1c3RvbVByb3BlcnRpZXMoKSB7IHJldHVybiAhbV9zdHJ1Y3R1cmUtPmlzRW1wdHko
KTsgfQogICAgICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB7IHJldHVybiBt
X3N0cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpOyB9CiAKLSAgICAgICAgdm9p
ZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgdW5zaWduZWQgYXR0ciA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyLCBib29s
IGNoZWNrUmVhZE9ubHksIFB1dFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgICAgIHZvaWQgcHV0
RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwg
dW5zaWduZWQgYXR0ciA9IDApOworICAgICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHIsIGJvb2wg
Y2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlTbG90JiBzbG90KTsKICAgICAgICAgdm9pZCBwdXRE
aXJlY3RGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
LCB1bnNpZ25lZCBhdHRyID0gMCk7Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5z
aWduZWQgYXR0ciA9IDApOworICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWdu
ZWQgYXR0ciA9IDApOwogICAgICAgICB2b2lkIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24oRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgdW5zaWdu
ZWQgYXR0ciA9IDApOwogCiAgICAgICAgIC8vIEZhc3QgYWNjZXNzIHRvIGtub3duIHByb3BlcnR5
IG9mZnNldHMuCi0gICAgICAgIEpTVmFsdWUqIGdldERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0
KSB7IHJldHVybiBtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdOyB9Ci0gICAgICAgIHZvaWQgcHV0
RGlyZWN0T2Zmc2V0KHNpemVfdCBvZmZzZXQsIEpTVmFsdWUqIHZhbHVlKSB7IG1fcHJvcGVydHlT
dG9yYWdlW29mZnNldF0gPSB2YWx1ZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIGdldERpcmVjdE9m
ZnNldChzaXplX3Qgb2Zmc2V0KSB7IHJldHVybiBtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdOyB9
CisgICAgICAgIHZvaWQgcHV0RGlyZWN0T2Zmc2V0KHNpemVfdCBvZmZzZXQsIEpTVmFsdWVQdHIg
dmFsdWUpIHsgbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA9IHZhbHVlOyB9CiAKLSAgICAgICAg
dm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUqKiBsb2Nh
dGlvbik7CisgICAgICAgIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3Qm
LCBKU1ZhbHVlUHRyKiBsb2NhdGlvbik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRlZmluZUdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBnZXR0ZXJGdW5jdGlvbik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCogc2V0dGVy
RnVuY3Rpb24pOwotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGxvb2t1cEdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB2aXJ0dWFsIEpT
VmFsdWUqIGxvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgbG9va3VwR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZpcnR1YWwgSlNW
YWx1ZVB0ciBsb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHbG9iYWxPYmplY3QoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZU9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xODUsNyArMTg1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW5saW5lU3RvcmFnZUNhcGFjaXR5ID0g
MjsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVCYXNlU3RvcmFnZUNhcGFj
aXR5ID0gMTY7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsKICAgICAgICAg
fQpAQCAtMjAyLDE0ICsyMDIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZlB0cjxT
dHJ1Y3R1cmU+IG1faW5oZXJpdG9ySUQ7CiAKICAgICAgICAgUHJvcGVydHlTdG9yYWdlIG1fcHJv
cGVydHlTdG9yYWdlOyAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIG1faW5saW5lU3RvcmFnZVtp
bmxpbmVTdG9yYWdlQ2FwYWNpdHldOworICAgICAgICBKU1ZhbHVlUHRyIG1faW5saW5lU3RvcmFn
ZVtpbmxpbmVTdG9yYWdlQ2FwYWNpdHldOwogICAgIH07CiAKLSAgICBKU09iamVjdCogYXNPYmpl
Y3QoSlNWYWx1ZSopOworICAgIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlUHRyKTsKIAogICAg
IEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqKTsKIAotaW5saW5lIEpT
T2JqZWN0KiBhc09iamVjdChKU1ZhbHVlKiB2YWx1ZSkKK2lubGluZSBKU09iamVjdCogYXNPYmpl
Y3QoSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNPYmpl
Y3QoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYXNDZWxsKHZhbHVlKSk7
CkBAIC0yMzMsMTIgKzIzMywxMiBAQCBpbmxpbmUgSlNPYmplY3Q6On5KU09iamVjdCgpCiAgICAg
bV9zdHJ1Y3R1cmUtPmRlcmVmKCk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU09iamVjdDo6cHJv
dG90eXBlKCkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRyIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBj
b25zdAogewogICAgIHJldHVybiBtX3N0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CiAK
LWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNWYWx1ZSogcHJvdG90eXBlKQor
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkK
IHsKICAgICBBU1NFUlQocHJvdG90eXBlKTsKICAgICBSZWZQdHI8U3RydWN0dXJlPiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24obV9zdHJ1Y3R1cmUs
IHByb3RvdHlwZSk7CkBAIC0yNzUsNyArMjc1LDcgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNP
YmplY3QoY29uc3QgQ2xhcwogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChKU1ZhbHVlKiogbG9jYXRp
b24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpKSB7CisgICAgaWYgKEpTVmFsdWVQ
dHIqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgewogICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlv
blswXS0+aXNHZXR0ZXJTZXR0ZXIoKSkKICAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3Qoc2xvdCwgbG9jYXRpb24pOwogICAgICAgICBlbHNlCkBAIC0yOTUsNyArMjk1LDcgQEAgQUxX
QVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPdwogQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RGb3JXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBib29sJiBz
bG90SXNXcml0ZWFibGUpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBpZiAoSlNW
YWx1ZSoqIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKSkgeworICAgIGlmIChKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9u
KHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpIHsKICAgICAgICAgaWYgKG1fc3RydWN0dXJlLT5o
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb25bMF0tPmlzR2V0dGVyU2V0dGVy
KCkpIHsKICAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAg
ZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CkBAIC0zMzksNyArMzM5LDcg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeAogICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgIGlmIChvYmplY3QtPmZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBK
U1ZhbHVlKiBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVl
UHRyIHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90
eXBlLT5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBvYmpl
Y3QgPSBhc09iamVjdChwcm90b3R5cGUpOwpAQCAtMzUyLDE0ICszNTIsMTQgQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIGlmIChvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIEpTVmFsdWUqIHByb3RvdHlw
ZSA9IG9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0g
b2JqZWN0LT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUtPmlzT2JqZWN0KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHBy
b3RvdHlwZSk7CiAgICAgfQogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNPYmplY3Q6OmdldChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKK2lubGlu
ZSBKU1ZhbHVlUHRyIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7
CiAgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCkBAIC0zNjgsNyArMzY4LDcgQEAgaW5saW5lIEpTVmFs
dWUqIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1pbmxpbmUgSlNWYWx1ZSogSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRyIEpTT2JqZWN0OjpnZXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJv
cGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCkBAIC0zNzcsMTMg
KzM3NywxMyBAQCBpbmxpbmUgSlNWYWx1ZSogSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cikKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyKQogewogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyLCBmYWxzZSwgc2xvdCk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3QoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgYm9vbCBjaGVja1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBjaGVj
a1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKIApA
QCAtNDQ0LDcgKzQ0NCw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoY29uc3Qg
SWQKICAgICBzZXRTdHJ1Y3R1cmUoc3RydWN0dXJlLnJlbGVhc2UoKSk7CiB9CiAKLWlubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoraW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKIHsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gbV9zdHJ1Y3R1cmUtPnByb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCk7CiAgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlLT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CkBAIC00
NjAsMTggKzQ2MCwxOCBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6dHJhbnNpdGlvblRvKFN0cnVj
CiAgICAgc2V0U3RydWN0dXJlKG5ld1N0cnVjdHVyZSk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBK
U09iamVjdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6dG9Q
cmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJl
ZFR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZShleGVjLCBwcmVmZXJyZWRU
eXBlKTsKIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRy
IEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICByZXR1cm4g
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1Zh
bHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRyIEpTVmFsdWU6Omdl
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KSBjb25zdAogewogICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJ
bW1lZGlhdGUoYXNWYWx1ZSgpKSkpIHsKICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpT
SW1tZWRpYXRlOjpwcm90b3R5cGUoYXNWYWx1ZSgpLCBleGVjKTsKQEAgLTQ4NCwyMCArNDg0LDIw
IEBAIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiAKICAgICAgICAgaWYg
KGNlbGwtPmZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIEFTU0VSVChjZWxsLT5pc09iamVjdCgpKTsKLSAgICAgICAgSlNWYWx1ZSogcHJvdG90
eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CisgICAgICAg
IEpTVmFsdWVQdHIgcHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+cHJv
dG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBlLT5pc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGNlbGwgPSBhc09iamVjdChwcm90b3R5
cGUpOwogICAgIH0KIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTVmFsdWU6OmdldChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK2lubGluZSBKU1ZhbHVlUHRyIEpT
VmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QK
IHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICByZXR1cm4gZ2V0KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkg
Y29uc3QKK2lubGluZSBKU1ZhbHVlUHRyIEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAogewogICAgIGlm
IChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1ZSgpKSkpIHsKICAgICAg
ICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpTSW1tZWRpYXRlOjpwcm90b3R5cGUoYXNWYWx1ZSgp
LCBleGVjKTsKQEAgLTUxMCwxNCArNTEwLDE0IEBAIGlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpn
ZXQoRXhlY1N0YXRlKiAKICAgICAgICAgaWYgKGNlbGwtPmdldE93blByb3BlcnR5U2xvdChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUo
ZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNTRVJUKGNlbGwtPmlzT2JqZWN0KCkpOwot
ICAgICAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGNlbGwp
LT5wcm90b3R5cGUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KGNlbGwpLT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUt
PmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
Y2VsbCA9IHByb3RvdHlwZS0+YXNDZWxsKCk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKU1Zh
bHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitpbmxpbmUgdm9pZCBKU1Zh
bHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoVU5M
SUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpKSB7CiAgICAgICAgIEpT
SW1tZWRpYXRlOjp0b09iamVjdChhc1ZhbHVlKCksIGV4ZWMpLT5wdXQoZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CkBAIC01MjYsNyArNTI2LDcgQEAgaW5saW5lIHZvaWQgSlNWYWx1
ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYwogICAgIGFzQ2VsbCgpLT5wdXQoZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWlubGluZSB2b2lkIEpTVmFsdWU6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCitpbmxpbmUg
dm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKEpTSW1tZWRpYXRlOjppc0lt
bWVkaWF0ZShhc1ZhbHVlKCkpKSkgewogICAgICAgICBKU0ltbWVkaWF0ZTo6dG9PYmplY3QoYXNW
YWx1ZSgpLCBleGVjKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwpAQCAtNTM5LDgg
KzUzOSw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6YWxsb2NhdGVQcm8KIHsKICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCi0gICAgSlNWYWx1ZSoqIG9sZFByb3BlcnR5
U3RvcmFnZSA9IG1fcHJvcGVydHlTdG9yYWdlOwotICAgIG1fcHJvcGVydHlTdG9yYWdlID0gbmV3
IEpTVmFsdWUqW25ld1NpemVdOworICAgIEpTVmFsdWVQdHIqIG9sZFByb3BlcnR5U3RvcmFnZSA9
IG1fcHJvcGVydHlTdG9yYWdlOworICAgIG1fcHJvcGVydHlTdG9yYWdlID0gbmV3IEpTVmFsdWVQ
dHJbbmV3U2l6ZV07CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkU2l6ZTsgKytp
KQogICAgICAgICBtX3Byb3BlcnR5U3RvcmFnZVtpXSA9IG9sZFByb3BlcnR5U3RvcmFnZVtpXTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTMgQEAg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6fkpTUHJvcGVydHlOYW1lSQogewogfQogCi1KU1ZhbHVl
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAog
ewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBub1ZhbHVlKCk7CiB9CiAK
LWJvb2wgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0
ZSosIGRvdWJsZSYsIEpTVmFsdWUqJikKK2Jvb2wgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Z2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYsIEpTVmFsdWVQdHImKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yIDogcHVibGljIEpTQ2VsbCB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogY3JlYXRlKEV4ZWNT
dGF0ZSosIEpTVmFsdWUqKTsKKyAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyKTsKIAogICAgICAgICB2aXJ0dWFsIH5KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yKCk7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmLCBKU1Zh
bHVlKiYpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiwgSlNWYWx1ZVB0ciYpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNTMsNyArNTMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCi0gICAgICAg
IEpTVmFsdWUqIG5leHQoRXhlY1N0YXRlKik7CisgICAgICAgIEpTVmFsdWVQdHIgbmV4dChFeGVj
U3RhdGUqKTsKICAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKICAgICBwcml2YXRlOgpAQCAt
ODMsNyArODMsNyBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6SlNQcm9wZXJ0CiB7
CiB9CiAKLWlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2KQoraW5saW5lIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAodi0+aXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKQEAgLTk0
LDcgKzk0LDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydAogICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IobywgcHJvcGVydHlOYW1l
cy5yZWxlYXNlRGF0YSgpKTsKIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6Om5leHQoRXhlY1N0YXRlKiBleGVjKQoraW5saW5lIEpTVmFsdWVQdHIgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6bmV4dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKG1fcG9zaXRp
b24gPT0gbV9lbmQpCiAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBKU09iamVjdCogSlNTdGF0aWNTY29wZU9iamVj
dDo6dG9UaGlzT2JqCiAgICAgcmV0dXJuIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpOwogfQogCi12
b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQordm9pZCBK
U1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIGlm
IChzeW1ib2xUYWJsZVB1dChwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtNTIsNyArNTIsNyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChFeGVjU3RhdGUq
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNTdGF0aWNTY29wZU9iamVj
dDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNTdGF0
aWNTY29wZU9iamVjdDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQogewogICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHByb3BlcnR5TmFtZSwg
dmFsdWUsIGF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm47CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICB9OwogICAgICAgICAK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCisgICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChleGVjLT5nbG9iYWxEYXRhKCkuc3Rh
dGljU2NvcGVTdHJ1Y3R1cmUsIG5ldyBKU1N0YXRpY1Njb3BlT2JqZWN0RGF0YSgpKQogICAgICAg
ICB7CiAgICAgICAgICAgICBkKCktPnJlZ2lzdGVyU3RvcmUgPSB2YWx1ZTsKQEAgLTU1LDEwICs1
NSwxMCBAQCBuYW1lc3BhY2UgSlNDewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNP
YmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1Zh
bHVlKiwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgcHV0V2l0
aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpT
VmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIEpTU3RhdGljU2NvcGVPYmplY3REYXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNTdGF0aWNTY29wZU9iamVjdERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICsz
MCwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNWYWx1ZSogSlNTdHJpbmc6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlUHRy
IEpTU3RyaW5nOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KSBjb25zdAogewogICAgIHJldHVybiBjb25zdF9jYXN0PEpTU3RyaW5nKj4odGhpcyk7CiB9CiAK
LWJvb2wgSlNTdHJpbmc6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51
bWJlciwgSlNWYWx1ZSomIHZhbHVlKQorYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSkKIHsKICAgICB2
YWx1ZSA9IHRoaXM7CiAgICAgbnVtYmVyID0gbV92YWx1ZS50b0RvdWJsZSgpOwpAQCAtOTAsNyAr
OTAsNyBAQCBib29sIEpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIHNsb3Quc2V0QmFzZSh0aGlzKTsKICAgICBKU09iamVjdCogb2Jq
ZWN0OwotICAgIGZvciAoSlNWYWx1ZSogcHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsgIXByb3RvdHlwZS0+aXNOdWxsKCk7IHByb3RvdHlw
ZSA9IG9iamVjdC0+cHJvdG90eXBlKCkpIHsKKyAgICBmb3IgKEpTVmFsdWVQdHIgcHJvdG90eXBl
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKTsgIXByb3Rv
dHlwZS0+aXNOdWxsKCk7IHByb3RvdHlwZSA9IG9iamVjdC0+cHJvdG90eXBlKCkpIHsKICAgICAg
ICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICAgICAgaWYgKG9iamVjdC0+Z2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNhbkdldElu
ZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV92YWx1
ZS5zaXplKCkpOyB9CiAgICAgICAgIEpTU3RyaW5nKiBnZXRJbmRleChKU0dsb2JhbERhdGEqLCB1
bnNpZ25lZCk7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
LCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBw
cm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5
cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51
bSBWUHRyU3RlYWxpbmdIYWNrVHlwZSB7IFZQdHJTdGVhbGluZ0hhY2sgfTsKQEAgLTk5LDggKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhl
Y1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSk7CisgICAgICAgIHZpcnR1
YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGRv
dWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVj
dCogdG9PYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC0xMTcsOSArMTE3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgbV92YWx1ZTsKICAgICB9OwogCi0gICAgSlNTdHJp
bmcqIGFzU3RyaW5nKEpTVmFsdWUqKTsKKyAgICBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZVB0
cik7CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBKU1N0cmluZyogYXNTdHJpbmcoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChhc0NlbGwodmFsdWUpLT5pc1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEpTU3RyaW5nKj4oYXNDZWxsKHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFsdWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjEgKzIwLDI1IEBACiAgKgogICovCiAKKyNp
bmNsdWRlIDxzdGRkZWYuaD4gLy8gZm9yIHNpemVfdAorI2luY2x1ZGUgPHN0ZGludC5oPgorCiAj
aWZuZGVmIEpTVmFsdWVfaAogI2RlZmluZSBKU1ZhbHVlX2gKIAogI2luY2x1ZGUgIkNhbGxEYXRh
LmgiCiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgotI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgi
Ci0jaW5jbHVkZSAiVVN0cmluZy5oIgotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBmb3Igc2l6ZV90
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgSWRlbnRpZmllcjsKKyAgICBjbGFzcyBKU0NlbGw7CisgICAgY2xhc3MgSlNPYmplY3Q7
CiAgICAgY2xhc3MgSlNTdHJpbmc7CiAgICAgY2xhc3MgUHJvcGVydHlTbG90OwogICAgIGNsYXNz
IFB1dFByb3BlcnR5U2xvdDsKKyAgICBjbGFzcyBVU3RyaW5nOwogCiAgICAgc3RydWN0IENsYXNz
SW5mbzsKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC03NiwxNSArODAsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0VHJ1bmNhdGVkVUludDMyKHVpbnQzMl90JikgY29u
c3Q7CiAgICAgICAgIAogICAgICAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KLSAgICAgICAgSlNW
YWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5v
UHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYpOworICAgICAgICBKU1ZhbHVlUHRyIHRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVu
Y2UpIGNvbnN0OworICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBk
b3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYpOwogCiAgICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMgZXhw
ZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCiAgICAgICAg
IC8vIGJlZW4gc2V0IGluIHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4KICAgICAgICAgZG91YmxlIHRv
TnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiB0b0pTTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OyAvLyBGYXN0IHBhdGggZm9yIHdoZW4geW91IGV4cGVjdCB0aGF0IHRo
ZSB2YWx1ZSBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgorICAgICAgICBKU1ZhbHVlUHRyIHRvSlNO
dW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7IC8vIEZhc3QgcGF0aCBmb3Igd2hlbiB5b3UgZXhwZWN0
IHRoYXQgdGhlIHZhbHVlIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCiAKICAgICAgICAgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0
KEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtMTA1LDEyICsxMDksMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAKICAgICAgICAgLy8gT2JqZWN0IG9wZXJh
dGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KLSAgICAgICAgSlNW
YWx1ZSogZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29u
c3Q7Ci0gICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICAgICAgSlNWYWx1
ZSogZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jikg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBnZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICAgICAgSlNWYWx1
ZVB0ciBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKSBjb25zdDsKKyAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UHRyKTsKICAgICAgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAKQEAgLTExOSw5ICsxMjMsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyB0b1RoaXNTdHJpbmcoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgICAgIEpTU3RyaW5nKiB0b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUqKTsKIAotICAg
ICAgICBKU1ZhbHVlKiBnZXRKU051bWJlcigpOyAvLyAwIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1i
ZXIgb3IgbnVtYmVyIG9iamVjdAorICAgICAgICBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7IC8v
IDAgaWYgdGhpcyBpcyBub3QgYSBKU051bWJlciBvciBudW1iZXIgb2JqZWN0CiAKLSAgICAgICAg
SlNWYWx1ZSogYXNWYWx1ZSgpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGFzVmFsdWUoKSBj
b25zdDsKIAogICAgICAgICBKU0NlbGwqIGFzQ2VsbCgpIGNvbnN0OwogCkBAIC0xMzIsMTA4ICsx
MzYsODggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVpbnQzMl90IHRvVUludDMyU2xvd0Nh
c2UoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogICAgIH07CiAKLSAgICAvLyBUaGVzZSBh
cmUgaWRlbnRpY2FsIGxvZ2ljIHRvIHRoZSBKU1ZhbHVlIGZ1bmN0aW9ucyBhYm92ZSwgYW5kIGZh
c3RlciB0aGFuIGpzTnVtYmVyKG51bWJlciktPnRvSW50MzIoKS4KLSAgICBpbnQzMl90IHRvSW50
MzIoZG91YmxlKTsKLSAgICB1aW50MzJfdCB0b1VJbnQzMihkb3VibGUpOwotICAgIGludDMyX3Qg
dG9JbnQzMlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOwotICAgIHVpbnQzMl90IHRvVUludDMy
U2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7CisgICAgY2xhc3MgSlNJbW1lZGlhdGU7CisgICAg
Y2xhc3MgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXI7CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNW
YWx1ZTo6YXNWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxK
U1ZhbHVlKj4odGhpcyk7Ci0gICAgfQorICAgIGNsYXNzIEpTVmFsdWVQdHIgeworICAgICAgICBm
cmllbmQgY2xhc3MgSlNJbW1lZGlhdGU7CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1Vu
ZGVmaW5lZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQorICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBtYWtlSW1tZWRpYXRl
KGludHB0cl90IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVB0
cihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPih2YWx1ZSkpOworICAgICAgICB9CiAKLSAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFzVmFsdWUoKSA9PSBqc051bGwoKTsKLSAgICB9CisgICAgICAgIGludHB0cl90IGltbWVkaWF0
ZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fcHRyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIEpTVmFsdWVQdHIoKQorICAgICAgICAgICAgOiBtX3B0cigwKQorICAgICAgICB7CisgICAg
ICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNVbmRlZmluZWRPck51bGwo
YXNWYWx1ZSgpKTsKLSAgICB9CisgICAgICAgIEpTVmFsdWVQdHIoSlNWYWx1ZSogcHRyKQorICAg
ICAgICAgICAgOiBtX3B0cihwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0ltbWVkaWF0ZTo6aXNCb29sZWFuKGFzVmFsdWUoKSk7Ci0gICAgfQorICAgICAgICBKU1ZhbHVl
UHRyKGNvbnN0IEpTVmFsdWUqIHB0cikKKyAgICAgICAgICAgIDogbV9wdHIoY29uc3RfY2FzdDxK
U1ZhbHVlKj4ocHRyKSkKKyAgICAgICAgeworICAgICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjpnZXRCb29sZWFuKGJvb2wmIHYpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmlzQm9vbGVhbihhc1ZhbHVlKCkpKSB7Ci0gICAgICAgICAgICB2ID0gSlNJbW1l
ZGlhdGU6OnRvQm9vbGVhbihhc1ZhbHVlKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIEpTVmFsdWUqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9wdHI7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRCb29sZWFuKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0ganNCb29sZWFuKHRydWUpOwotICAg
IH0KKyAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3B0cjsKKyAgICAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpT
VmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgaW50
MzJfdCBpOwotICAgICAgICBpZiAoZ2V0VHJ1bmNhdGVkSW50MzIoaSkpCi0gICAgICAgICAgICBy
ZXR1cm4gaTsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgcmV0dXJuIHRvSW50MzJTbG93Q2Fz
ZShleGVjLCBvayk7Ci0gICAgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSlNWYWx1
ZVB0ciBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHRyID09
IG90aGVyLm1fcHRyOworICAgICAgICB9CiAKLSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6
dG9VSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgdWludDMyX3Qg
aTsKLSAgICAgICAgaWYgKGdldFRydW5jYXRlZFVJbnQzMihpKSkKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICBib29sIG9rOwotICAgICAgICByZXR1cm4gdG9VSW50MzJTbG93Q2FzZShl
eGVjLCBvayk7Ci0gICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZVB0
ciBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHRyICE9IG90
aGVyLm1fcHRyOworICAgICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCB0b0ludDMyKGRvdWJs
ZSB2YWwpCi0gICAgewotICAgICAgICBpZiAoISh2YWwgPj0gLTIxNDc0ODM2NDguMCAmJiB2YWwg
PCAyMTQ3NDgzNjQ4LjApKSB7Ci0gICAgICAgICAgICBib29sIGlnbm9yZWQ7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogZW5jb2RlKEpTVmFsdWVQdHIgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKj4odmFsdWUubV9wdHIpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWwpOwotICAgIH0KIAotICAgIGlubGluZSB1aW50MzJfdCB0b1VJbnQz
Mihkb3VibGUgdmFsKQotICAgIHsKLSAgICAgICAgaWYgKCEodmFsID49IDAuMCAmJiB2YWwgPCA0
Mjk0OTY3Mjk2LjApKSB7Ci0gICAgICAgICAgICBib29sIGlnbm9yZWQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJTbG93Q2FzZSh2YWwsIGlnbm9yZWQpOworICAgICAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBkZWNvZGUoSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIHB0cikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHIocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4o
cHRyKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWwpOwotICAgIH0KIAotICAgIGlubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0
YXRlKiBleGVjLCBib29sJiBvaykgY29uc3QKKyAgICBwcml2YXRlOgorICAgICAgICBKU1ZhbHVl
KiBtX3B0cjsKKyAgICB9OworCisgICAgaW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6YXNWYWx1
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBpbnQzMl90IGk7Ci0gICAgICAgIGlmIChnZXRUcnVu
Y2F0ZWRJbnQzMihpKSkgewotICAgICAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MzJTbG93Q2FzZShleGVjLCBv
ayk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyKHRoaXMpOwogICAgIH0KIAotICAgIGlubGlu
ZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBj
b25zdAorICAgIGlubGluZSBKU1ZhbHVlUHRyIG5vVmFsdWUoKQogICAgIHsKLSAgICAgICAgdWlu
dDMyX3QgaTsKLSAgICAgICAgaWYgKGdldFRydW5jYXRlZFVJbnQzMihpKSkgewotICAgICAgICAg
ICAgb2sgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRvVUludDMyU2xvd0Nhc2UoZXhlYywgb2spOworICAgICAgICByZXR1cm4gSlNWYWx1
ZVB0cigpOwogICAgIH0KIAorICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSlNWYWx1
ZVB0ciBhLCBjb25zdCBKU1ZhbHVlKiBiKSB7IHJldHVybiBhID09IEpTVmFsdWVQdHIoYik7IH0K
KyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUqIGEsIGNvbnN0IEpTVmFs
dWVQdHIgYikgeyByZXR1cm4gSlNWYWx1ZVB0cihhKSA9PSBiOyB9CisKKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWVQdHIgYSwgY29uc3QgSlNWYWx1ZSogYikgeyByZXR1
cm4gYSAhPSBKU1ZhbHVlUHRyKGIpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBKU1ZhbHVlKiBhLCBjb25zdCBKU1ZhbHVlUHRyIGIpIHsgcmV0dXJuIEpTVmFsdWVQdHIoYSkg
IT0gYjsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTVmFsdWVfaApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDM5
NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgog
ICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiAqZC0+c3lt
Ym9sVGFibGU7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwgdW5zaWduZWQgYXR0cmlidXRlcykgPSAw
OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CkBAIC05MCw4ICs5MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwotICAgICAgICBi
b29sIHN5bWJvbFRhYmxlUHV0KGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKik7Ci0gICAgICAg
IGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiwgSlNW
YWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0
KGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyKTsKKyAgICAgICAgYm9vbCBzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0RGF0YSogZDsKICAgICB9
OwpAQCAtMTE3LDcgKzExNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFi
bGVQdXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpcykpOwogCkBAIC0xMzAsNyArMTMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6
OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICBpbmxpbmUgYm9v
bCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyAr
MzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVj
dChQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogCiAgICAgcHVibGljOgotICAgICAgICBKU1ZhbHVl
KiBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFZhbHVlOyB9Ci0gICAg
ICAgIHZvaWQgc2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlKik7CisgICAgICAgIEpTVmFsdWVQdHIg
aW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxWYWx1ZTsgfQorICAgICAg
ICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZVB0cik7CiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBKU1Zh
bHVlKiBtX2ludGVybmFsVmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgbV9pbnRlcm5hbFZhbHVl
OwogICAgIH07CiAgICAgCiAgICAgaW5saW5lIEpTV3JhcHBlck9iamVjdDo6SlNXcmFwcGVyT2Jq
ZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCkBAIC00OCw3ICs0OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgSlNXcmFw
cGVyT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2
b2lkIEpTV3JhcHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlUHRyIHZhbHVlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS0+aXNP
YmplY3QoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCShyZXZpc2lvbiAzOTYx
NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQsNyArODQsNyBAQCB2b2lkIEhhc2hUYWJsZTo6ZGVsZXRlVGFibGUoKSBjb25zdAogdm9p
ZCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hFbnRy
eSogZW50cnksIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoZW50cnktPmF0dHJpYnV0ZXMo
KSAmIEZ1bmN0aW9uKTsKLSAgICBKU1ZhbHVlKiogbG9jYXRpb24gPSB0aGlzT2JqLT5nZXREaXJl
Y3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWVQdHIqIGxvY2F0aW9uID0gdGhp
c09iai0+Z2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKTsKIAogICAgIGlmICghbG9jYXRp
b24pIHsKICAgICAgICAgUHJvdG90eXBlRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlO
YW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xv
b2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsOSArNDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAg
Ly8gRklYTUU6IFRoZXJlIGlzIG5vIHJlYXNvbiB0aGlzIGdldCBmdW5jdGlvbiBjYW4ndCBiZSBz
aW1wbGVyLgotICAgIC8vIGllLiB0eXBlZGVmIEpTVmFsdWUqICgqR2V0RnVuY3Rpb24pKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0KQorICAgIC8vIGllLiB0eXBlZGVmIEpTVmFsdWVQ
dHIgKCpHZXRGdW5jdGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2VPYmplY3QpCiAgICAg
dHlwZWRlZiBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBHZXRGdW5jdGlvbjsKLSAgICB0eXBl
ZGVmIHZvaWQgKCpQdXRGdW5jdGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEpTVmFsdWUqIHZhbHVlKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpQdXRGdW5jdGlvbikoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpOwogCiAgICAgY2xh
c3MgSGFzaEVudHJ5IHsKICAgICBwdWJsaWM6CkBAIC0yNDMsNyArMjQzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICogaXMgZm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1
ZSwgZWxzZSBpdCByZXR1cm5zIGZhbHNlLgogICAgICAqLwogICAgIHRlbXBsYXRlIDxjbGFzcyBU
aGlzSW1wPgotICAgIGlubGluZSBib29sIGxvb2t1cFB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGNvbnN0IEhhc2hUYWJs
ZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmopCisgICAgaW5saW5lIGJvb2wgbG9va3VwUHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCBjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqKQogICAgIHsK
ICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5lbnRyeShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICog
dGhlbiBpdCBjYWxscyBwdXQoKSBvbiB0aGUgUGFyZW50SW1wIGNsYXNzLgogICAgICAqLwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wLCBjbGFzcyBQYXJlbnRJbXA+Ci0gICAgaW5saW5lIHZv
aWQgbG9va3VwUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKiB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhp
c09iaiwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorICAgIGlubGluZSB2b2lkIGxvb2t1cFB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhpc09iaiwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogICAgIHsKICAgICAgICAgaWYgKCFsb29rdXBQdXQ8VGhpc0ltcD4o
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgdGFibGUsIHRoaXNPYmopKQogICAgICAgICAgICAg
dGhpc09iai0+UGFyZW50SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
IC8vIG5vdCBmb3VuZDogZm9yd2FyZCB0byBwYXJlbnQKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNCArMzIsMjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTWF0aE9iamVjdCk7CiAK
LXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
QUNvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNB
VGFuKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmND
ZWlsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jRXhw
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNMb2co
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNaW4oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY1NpbihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBQ29zKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5j
QVRhbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQ
cm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IG1hdGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBtYXRoUHJvdG9GdW5jTG9nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY01heChF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5j
UG93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQ
cm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNUYW4oRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIH0KIApAQCAt
MTEzLDU3ICsxMTMsNTcgQEAgYm9vbCBNYXRoT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
YwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBYnMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQWJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBmYWJzKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFs
dWUqIG1hdGhQcm90b0Z1bmNBQ29zKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FDb3MoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFjb3MoYXJncy5hdChleGVjLCAwKS0+dG9O
dW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBtYXRoUHJvdG9GdW5jQVNpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
YXNpbihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBt
YXRoUHJvdG9GdW5jQVRhbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBVGFuKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBhdGFuKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVy
KGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IG1hdGhQcm90b0Z1bmNBVGFuMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXRh
bjIoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYyksIGFyZ3MuYXQoZXhlYywgMSktPnRv
TnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgbWF0aFByb3RvRnVuY0NlaWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGNlaWwoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSog
bWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGNvcyhhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihl
eGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0
aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZXhwKGFyZ3Mu
YXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1
bmNGbG9vcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNGbG9vcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgZmxvb3IoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykp
KTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90
b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxvZyhhcmdzLmF0KGV4
ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICB1bnNpZ25lZCBhcmdz
Q291bnQgPSBhcmdzLnNpemUoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gLUluZjsKQEAgLTE3OSw3
ICsxNzksNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSogZXhlCiAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1
bmNNaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHVuc2lnbmVk
IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOwogICAgIGRvdWJsZSByZXN1bHQgPSArSW5mOwpAQCAt
MTk1LDcgKzE5NSw3IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGUK
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8g
RUNNQSAxNS44LjIuMS4xMwogCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBKU1ZhbHVlKiBtYXRoUHJv
dG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHBvdyhh
cmcsIGFyZzIpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBt
YXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgV1RGOjpyYW5k
b21OdW1iZXIoKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIG1hdGhQcm90b0Z1bmNSb3VuZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBkb3VibGUgYXJnID0gYXJncy5hdChl
eGVjLCAwKS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKHNpZ25iaXQoYXJnKSAmJiBhcmcgPj0g
LTAuNSkKQEAgLTIyMiwxNyArMjIyLDE3IEBAIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSb3VuZChF
eGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZmxvb3IoYXJnICsgMC41KSk7
CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9G
dW5jU2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBzaW4oYXJncy5hdChleGVj
LCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY1NxcnQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgc3FydChhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1K
U1ZhbHVlKiBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1RhbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGFuKGFyZ3MuYXQoZXhlYywgMCktPnRv
TnVtYmVyKGV4ZWMpKSk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAko
cmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5
cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAg
IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IENvbnN0cnVjdFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2UKICAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3Mp
OwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChOdW1iZXJDb25zdHJ1Y3Rvcik7CiAK
LXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBu
dW1iZXJDb25zdHJ1Y3Rvck5lZ0luZmluaXR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rv
clBvc0luZmluaXR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck1pblZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlckNv
bnN0cnVjdG9yTmFOVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0b3JOZWdJbmZp
bml0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3RvclBvc0luZmluaXR5KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTWF4VmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyQ29u
c3RydWN0b3JNaW5WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkBAIC02OCwyNyArNjgsMjcgQEAg
Ym9vbCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZVNsb3Q8TnVtYmVyQ29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMs
IEV4ZWNTdGF0ZTo6bnVtYmVyVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTmFOVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbnVt
YmVyQ29uc3RydWN0b3JOYU5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc05hTihleGVjKTsKIH0KIAot
SlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JOZWdJbmZpbml0eShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBudW1iZXJD
b25zdHJ1Y3Rvck5lZ0luZmluaXR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChleGVjLCAt
SW5mKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0eShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1
ZVB0ciBudW1iZXJDb25zdHJ1Y3RvclBvc0luZmluaXR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVy
Q2VsbChleGVjLCBJbmYpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
CitKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTWF4VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNO
dW1iZXJDZWxsKGV4ZWMsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KTsKIH0KIAotSlNWYWx1ZSog
bnVtYmVyQ29uc3RydWN0b3JNaW5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck1p
blZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyQ2VsbChleGVjLCA1RS0zMjQpOwogfQpAQCAt
MTA5LDcgKzEwOSw3IEBAIENvbnN0cnVjdFR5cGUgTnVtYmVyQ29uc3RydWN0b3I6OmdldENvbnMK
IH0KIAogLy8gRUNNQSAxNS43LjIKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsTnVtYmVyQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IHJldHVybiBqc051bWJlcihleGVjLCBhcmdzLmlzRW1wdHkoKSA/IDAgOiBhcmdzLmF0KGV4ZWMs
IDApLT50b051bWJlcihleGVjKSk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIE51bWJlclByb3RvdHlwZSopOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAg
ICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsgCiAgICAgICAgIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIE51bWJlck9iamVjdDo6TnVtYmVyT2JqZWN0KFBhc3NSZWZQ
dHI8U3QKIHsKIH0KIAotSlNWYWx1ZSogTnVtYmVyT2JqZWN0OjpnZXRKU051bWJlcigpCitKU1Zh
bHVlUHRyIE51bWJlck9iamVjdDo6Z2V0SlNOdW1iZXIoKQogewogICAgIHJldHVybiBpbnRlcm5h
bFZhbHVlKCk7CiB9CkBAIC00OCw3ICs0OCw3IEBAIE51bWJlck9iamVjdCogY29uc3RydWN0TnVt
YmVyKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1OdW1iZXJPYmplY3QqIGNv
bnN0cnVjdE51bWJlckZyb21JbW1lZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2YWx1ZSkKK051bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgTnVtYmVyT2JqZWN0
KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmplY3QtPnNldEludGVybmFs
VmFsdWUodmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KIAotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGdldEpTTnVt
YmVyKCk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRKU051bWJlcigpOwogICAgIH07
CiAKICAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqLCBKU051bWJl
ckNlbGwqKTsKLSAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlckZyb21JbW1lZGlhdGVO
dW1iZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSopOworICAgIE51bWJlck9iamVjdCogY29uc3RydWN0
TnVtYmVyRnJvbUltbWVkaWF0ZU51bWJlcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTnVtYmVyUHJvdG90eXBl
KTsKIAotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBu
dW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJv
dG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24o
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQ
cm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVt
YmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1Rv
UHJlY2lzaW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOwogCiAvLyBFQ01BIDE1LjcuNAogCkBAIC0xMzMsOSArMTMzLDkgQEAgc3RhdGljIGRvdWJs
ZSBpbnRQb3cxMChpbnQgZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQp
OwogfQogCi1KU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNW
YWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSB0
aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCkBAIC0xOTcsMzMgKzE5NywzMyBAQCBKU1ZhbHVl
KiBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHN0YXJ0T2ZSZXN1bHRTdHJpbmcpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNU
b0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIHlldC4KIAot
ICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0
ciB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCB2LT50b1N0cmluZyhleGVjKSk7CiB9CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
IHsKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOworICAgIEpTVmFs
dWVQdHIgdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICByZXR1cm4gdjsKIH0K
IAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiB2
ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOworICAgIEpTVmFsdWVQdHIgdiA9IHRoaXNWYWx1
ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgICBKU1ZhbHVlKiBmcmFjdGlvbkRpZ2l0cyA9IGFyZ3Mu
YXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmcmFjdGlvbkRpZ2l0cyA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMtPnRvSW50ZWdlcihleGVjKTsK
ICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgUmFuZ2VFcnJvciwgInRvRml4ZWQoKSBkaWdpdHMgYXJndW1lbnQgbXVzdCBiZSBi
ZXR3ZWVuIDAgYW5kIDIwIik7CkBAIC0zMDIsOSArMzAyLDkgQEAgc3RhdGljIHZvaWQgZXhwb25l
bnRpYWxQYXJ0VG9TdHJpbmcoY2hhcgogICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
JzAnICsgZXhwb25lbnRpYWwgJSAxMCk7CiB9CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Rv
RXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9FeHBv
bmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0
SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogCkBAIC0zMTMsNyArMzEzLDcgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVu
dGlhbChFeAogICAgIGlmIChpc25hbih4KSB8fCBpc2luZih4KSkKICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmZyb20oeCkpOwogCi0gICAgSlNWYWx1ZSogZnJhY3Rpb25h
bERpZ2l0c1ZhbHVlID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZyYWN0aW9u
YWxEaWdpdHNWYWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgZG91YmxlIGRmID0gZnJhY3Rp
b25hbERpZ2l0c1ZhbHVlLT50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBk
ZiA8PSAyMCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0
b0V4cG9uZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVuIDAgYW5kIDIwIik7CkBAIC0zNzIs
OSArMzcyLDkgQEAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeAogICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBidWYpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQcm90b0Z1
bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNUb1By
ZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0
SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7
CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBPYmplY3RDb25zdHJ1
Y3Rvcjo6T2JqZWN0Q29uc3RydWN0b3IoRXhlCiAvLyBFQ01BIDE1LjIuMgogc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogYXJnID0gYXJncy5hdChleGVjLCAwKTsK
KyAgICBKU1ZhbHVlUHRyIGFyZyA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaWYgKGFyZy0+aXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNPYmplY3QoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBy
ZXR1cm4gYXJnLT50b09iamVjdChleGVjKTsKQEAgLTU4LDcgKzU4LDcgQEAgQ29uc3RydWN0VHlw
ZSBPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9z
dDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMg
SlNWYWx1ZVB0ciBjYWxsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGNvbnN0
cnVjdE9iamVjdChleGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSArMjks
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0
UHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90
b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJv
dG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBv
YmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0
UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jRGVmaW5l
U2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJv
dG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNU
b0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3R1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBKU09iamVjdChzdHVjdHVyZSkKQEAgLTYwLDM1ICs2
MCwzNSBAQCBPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZShFeGVjU3RhCiAKIC8vIEVD
TUEgMTUuMi40LjIsIDE1LjIuNC40LCAxNS4yLjQuNSwgMTUuMi40LjcKIAotSlNWYWx1ZSogb2Jq
ZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVybiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVj
KTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYykt
Pmhhc093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+
dG9TdHJpbmcoZXhlYykpKSk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0lzUHJvdG90
eXBlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVP
ZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRv
VGhpc09iamVjdChleGVjKTsKIAogICAgIGlmICghYXJncy5hdChleGVjLCAwKS0+aXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAKLSAgICBKU1ZhbHVlKiB2ID0g
YXNPYmplY3QoYXJncy5hdChleGVjLCAwKSktPnByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIg
diA9IGFzT2JqZWN0KGFyZ3MuYXQoZXhlYywgMCkpLT5wcm90b3R5cGUoKTsKIAogICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgIGlmICghdi0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICBpZiAodGhpc09iaiA9PSB2KQsKKyAgICAgICAg
aWYgKHYgPT0gdGhpc09iaikLCiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwog
ICAgICAgICB2ID0gYXNPYmplY3QodiktPnByb3RvdHlwZSgpOwogICAgIH0KIH0KIAotSlNWYWx1
ZSogb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG9i
amVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgaWYgKGFyZ3MuYXQoZXhlYywgMSktPmdldENhbGxEYXRhKGNhbGxEYXRh
KSA9PSBDYWxsVHlwZU5vbmUpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY0RlZmluZUdldHRlcihFeGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgaWYgKGFyZ3MuYXQoZXhlYywgMSktPmdldENhbGxEYXRhKGNhbGxE
YXRhKSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xMDYsMjcgKzEwNiwyNyBAQCBKU1ZhbHVlKiBvYmpl
Y3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IHJldHVybiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwR2V0dGVyKGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0K
IAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
cmV0dXJuIHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpLT5sb29rdXBTZXR0ZXIoZXhlYywg
SWRlbnRpZmllcihleGVjLCBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSkpOwogfQog
Ci1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzVmFsdWUtPnRvVGhpc09iamVjdChl
eGVjKS0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihleGVjLCBhcmdzLmF0
KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSkpKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIHRoaXNWYWx1ZS0+dG9UaGlzSlNTdHJp
bmcoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiArIHRoaXNWYWx1ZS0+dG9UaGlz
T2JqZWN0KGV4ZWMpLT5jbGFzc05hbWUoKSArICJdIik7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSk7CiAgICAgfTsKIAotICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBK
U1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBFQ01BIDExLjkuMwotYm9vbCBl
cXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK2Jvb2wgZXF1
YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewogICAg
IGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKICAgICAg
ICAgcmV0dXJuIHYxID09IHYyOwpAQCAtNDQsMTIgKzQ0LDEyIEBAIGJvb2wgZXF1YWwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwKICAgICByZXR1cm4gZXF1YWxTbG93Q2FzZUlubGluZShl
eGVjLCB2MSwgdjIpOwogfQogCi1ib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogewogICAgIHJldHVybiBlcXVhbFNs
b3dDYXNlSW5saW5lKGV4ZWMsIHYxLCB2Mik7CiB9CiAKLWJvb2wgc3RyaWN0RXF1YWwoSlNWYWx1
ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBzdHJpY3RFcXVhbChKU1ZhbHVlUHRyIHYxLCBKU1Zh
bHVlUHRyIHYyKQogewogICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZSh2MSwg
djIpKQogICAgICAgICByZXR1cm4gdjEgPT0gdjI7CkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBz
dHJpY3RFcXVhbChKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdgogICAgIHJldHVybiBzdHJpY3RFcXVh
bFNsb3dDYXNlSW5saW5lKHYxLCB2Mik7CiB9CiAKLWJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZShK
U1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitib29sIHN0cmljdEVxdWFsU2xvd0Nhc2UoSlNWYWx1
ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICByZXR1cm4gc3RyaWN0RXF1YWxTbG93Q2Fz
ZUlubGluZSh2MSwgdjIpOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSogdGhyb3dPdXRPZk1l
bW9yeUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKK05FVkVSX0lOTElORSBKU1ZhbHVlUHRyIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNPYmplY3QqIGVycm9y
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsICJPdXQgb2YgbWVtb3J5Iik7CiAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiAgIC8vIEVDTUEgMTEuOS4zCi0gIGJvb2wgZXF1YWwoRXhlY1N0YXRlKiwgSlNWYWx1
ZSosIEpTVmFsdWUqKTsKLSAgYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUq
LCBKU1ZhbHVlKik7CisgIGJvb2wgZXF1YWwoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciwgSlNWYWx1
ZVB0cik7CisgIGJvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCBKU1Zh
bHVlUHRyKTsKIAotICBBTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWxTbG93Q2FzZUlubGluZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAgQUxXQVlTX0lOTElORSBi
b29sIGVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHYxLCBK
U1ZhbHVlUHRyIHYyKQogICB7CiAgICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1t
ZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKIApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICBpZiAodjEtPmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgaWYgKHYy
LT5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwotICAgICAg
ICAgICAgICBKU1ZhbHVlKiBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgICAg
ICAgSlNWYWx1ZVB0ciBwMSA9IHYxLT50b1ByaW1pdGl2ZShleGVjKTsKICAgICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICB2MSA9IHAxOwpAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICB9CiAKICAgICAgICAgICBpZiAodjItPmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgICAgSlNWYWx1ZSogcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhlYyk7CisgICAgICAgICAg
ICAgIEpTVmFsdWVQdHIgcDIgPSB2Mi0+dG9QcmltaXRpdmUoZXhlYyk7CiAgICAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgdjIgPSBwMjsKQEAgLTEwMCwxMCArMTAwLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICB9CiAKIAotICBib29sIHN0cmljdEVxdWFsKEpTVmFsdWUqLCBKU1ZhbHVlKik7
Ci0gIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZShKU1ZhbHVlKiwgSlNWYWx1ZSopOworICBib29s
IHN0cmljdEVxdWFsKEpTVmFsdWVQdHIsIEpTVmFsdWVQdHIpOworICBib29sIHN0cmljdEVxdWFs
U2xvd0Nhc2UoSlNWYWx1ZVB0ciwgSlNWYWx1ZVB0cik7CiAKLSAgaW5saW5lIGJvb2wgc3RyaWN0
RXF1YWxTbG93Q2FzZUlubGluZShKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgIGlubGluZSBi
b29sIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2
MikKICAgewogICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZSh2MSwg
djIpKTsKICAgICAgIApAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
cmV0dXJuIHYxID09IHYyOwogICB9CiAKLSAgSlNWYWx1ZSogdGhyb3dPdXRPZk1lbW9yeUVycm9y
KEV4ZWNTdGF0ZSopOworICBKU1ZhbHVlUHRyIHRocm93T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3Rh
dGUqKTsKIH0KIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNs
b3QuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotSlNWYWx1ZSogUHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFByZXZl
bnQgZ2V0dGVyIGZ1bmN0aW9ucyBmcm9tIG9ic2VydmluZyBleGVjdXRpb24gaWYgYW4gZXhjZXB0
aW9uIGlzIHBlbmRpbmcuCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKIAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CkBAIC00NCwx
NiArNDUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBjbGVhclZhbHVlKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBleHBsaWNpdCBQcm9wZXJ0eVNsb3QoY29uc3QgSlNWYWx1ZSog
YmFzZSkKLSAgICAgICAgICAgIDogbV9zbG90QmFzZShjb25zdF9jYXN0PEpTVmFsdWUqPihiYXNl
KSkKKyAgICAgICAgZXhwbGljaXQgUHJvcGVydHlTbG90KGNvbnN0IEpTVmFsdWVQdHIgYmFzZSkK
KyAgICAgICAgICAgIDogbV9zbG90QmFzZShiYXNlKQogICAgICAgICAgICAgLCBtX29mZnNldChX
VEY6Om5vdEZvdW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBjbGVhclZhbHVlKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0eXBlZGVmIEpTVmFsdWUqICgqR2V0VmFsdWVGdW5jKShFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHR5
cGVkZWYgSlNWYWx1ZVB0ciAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAor
ICAgICAgICBKU1ZhbHVlUHRyIGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9n
ZXRWYWx1ZSA9PSBKU0NfVkFMVUVfU0xPVF9NQVJLRVIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
ICptX2RhdGEudmFsdWVTbG90OwpAQCAtNjIsNyArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2dldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSwgKnRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChtX2dldFZhbHVlID09IEpTQ19WQUxVRV9TTE9UX01BUktFUikKICAg
ICAgICAgICAgICAgICByZXR1cm4gKm1fZGF0YS52YWx1ZVNsb3Q7CkBAIC03OCwxNyArNzksMTcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHB1dFZhbHVlKEpTVmFsdWUqIHZhbHVlKQorICAgICAgICB2b2lk
IHB1dFZhbHVlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgICAgIHsgCiAgICAgICAgICAgICBpZiAo
bV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfU0xPVF9NQVJLRVIpIHsKICAgICAgICAgICAgICAgICAq
bV9kYXRhLnZhbHVlU2xvdCA9IHZhbHVlOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChtX2dldFZhbHVlID09IEpTQ19SRUdJU1RFUl9T
TE9UX01BUktFUik7Ci0gICAgICAgICAgICAqbV9kYXRhLnJlZ2lzdGVyU2xvdCA9IHZhbHVlOwor
ICAgICAgICAgICAgKm1fZGF0YS5yZWdpc3RlclNsb3QgPSBKU1ZhbHVlUHRyKHZhbHVlKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqKiB2YWx1ZVNsb3Qp
IAorICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QpIAogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWVTbG90KTsKICAgICAgICAgICAgIG1fZ2V0
VmFsdWUgPSBKU0NfVkFMVUVfU0xPVF9NQVJLRVI7CkBAIC05Niw3ICs5Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgbV9kYXRhLnZhbHVlU2xvdCA9IHZhbHVlU2xvdDsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZSogc2xvdEJh
c2UsIEpTVmFsdWUqKiB2YWx1ZVNsb3QpCisgICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFs
dWVQdHIgc2xvdEJhc2UsIEpTVmFsdWVQdHIqIHZhbHVlU2xvdCkKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlU2xvdCk7CiAgICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZB
TFVFX1NMT1RfTUFSS0VSOwpAQCAtMTA0LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgbV9kYXRhLnZhbHVlU2xvdCA9IHZhbHVlU2xvdDsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZSogc2xvdEJhc2UsIEpTVmFsdWUq
KiB2YWx1ZVNsb3QsIHNpemVfdCBvZmZzZXQpCisgICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpT
VmFsdWVQdHIgc2xvdEJhc2UsIEpTVmFsdWVQdHIqIHZhbHVlU2xvdCwgc2l6ZV90IG9mZnNldCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHZhbHVlU2xvdCk7CiAgICAgICAgICAgICBt
X2dldFZhbHVlID0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSOwpAQCAtMTEzLDcgKzExNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoSlNWYWx1ZSogdmFsdWUpCisgICAgICAg
IHZvaWQgc2V0VmFsdWUoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIG1fZ2V0VmFsdWUgPSBKU0NfVkFMVUVfU0xPVF9N
QVJLRVI7CkBAIC0xMzAsNyArMTMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
X2RhdGEucmVnaXN0ZXJTbG90ID0gcmVnaXN0ZXJTbG90OwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZXRDdXN0b20oSlNWYWx1ZSogc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkK
KyAgICAgICAgdm9pZCBzZXRDdXN0b20oSlNWYWx1ZVB0ciBzbG90QmFzZSwgR2V0VmFsdWVGdW5j
IGdldFZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwogICAg
ICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKQEAgLTEzOCw3ICsxMzksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90QmFzZTsKICAgICAgICAgfQogCi0g
ICAgICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSogc2xvdEJhc2UsIHVuc2lnbmVkIGlu
ZGV4LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgo
SlNWYWx1ZVB0ciBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgsIEdldFZhbHVlRnVuYyBnZXRWYWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAgICAgICAg
IEFTU0VSVChnZXRWYWx1ZSk7CkBAIC0xNjAsMTMgKzE2MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgSlNWYWx1ZSogc2xvdEJhc2UoKSBjb25zdAorICAgICAgICBKU1ZhbHVlUHRyIHNsb3RCYXNl
KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwogICAg
ICAgICAgICAgcmV0dXJuIG1fc2xvdEJhc2U7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNl
dEJhc2UoSlNWYWx1ZSogYmFzZSkKKyAgICAgICAgdm9pZCBzZXRCYXNlKEpTVmFsdWVQdHIgYmFz
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fc2xvdEJhc2UpOwogICAgICAgICAg
ICAgQVNTRVJUKGJhc2UpOwpAQCAtMTkwLDE5ICsxOTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmluZGV4OyB9CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25HZXR0ZXIoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgR2V0VmFsdWVGdW5jIG1f
Z2V0VmFsdWU7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBtX3Nsb3RCYXNlOworICAgICAg
ICBKU1ZhbHVlUHRyIG1fc2xvdEJhc2U7CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBnZXR0ZXJGdW5jOwotICAgICAgICAgICAgSlNWYWx1ZSoqIHZhbHVlU2xvdDsKKyAg
ICAgICAgICAgIEpTVmFsdWVQdHIqIHZhbHVlU2xvdDsKICAgICAgICAgICAgIFJlZ2lzdGVyKiBy
ZWdpc3RlclNsb3Q7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICAgICAgfSBtX2Rh
dGE7CiAKLSAgICAgICAgSlNWYWx1ZSogbV92YWx1ZTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX3Zh
bHVlOwogCiAgICAgICAgIHNpemVfdCBtX29mZnNldDsKICAgICB9OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm90ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm90ZWN0LmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm90ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDI4ICs0OSwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIGdjVW5wcm90ZWN0KHZhbCk7CiAgICAgfQogICAgIAotICAgIGlu
bGluZSB2b2lkIGdjUHJvdGVjdChKU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChK
U0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBnY1Byb3RlY3QoYXNDZWxsKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQg
Z2NVbnByb3RlY3QoSlNWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoSlNJbW1lZGlh
dGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZ2NV
bnByb3RlY3QoYXNDZWxsKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgZ2NQcm90
ZWN0TnVsbFRvbGVyYW50KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIGdjUHJvdGVj
dChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZSB8fCBKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBn
Y1Byb3RlY3QoYXNDZWxsKHZhbHVlKSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgZ2NVbnBy
b3RlY3ROdWxsVG9sZXJhbnQoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIHZvaWQgZ2NVbnBy
b3RlY3QoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUgfHwgSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTgx
LDcgKzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gYW5kIHRoZSBpbXBsaWNpdCBjb252
ZXJzaW9uIHRvIHJhdyBwb2ludGVyCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByb3Rl
Y3RlZFB0ciB7CiAgICAgcHVibGljOgotICAgICAgICBQcm90ZWN0ZWRQdHIoKSA6IG1fcHRyKDAp
IHsgfQorICAgICAgICBQcm90ZWN0ZWRQdHIoKSA6IG1fcHRyKDApIHt9CiAgICAgICAgIFByb3Rl
Y3RlZFB0cihUKiBwdHIpOwogICAgICAgICBQcm90ZWN0ZWRQdHIoY29uc3QgUHJvdGVjdGVkUHRy
Jik7CiAgICAgICAgIH5Qcm90ZWN0ZWRQdHIoKTsKQEAgLTkwLDggKzc2LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KICAgICAgICAgb3BlcmF0b3IgVCooKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorICAgICAg
ICBvcGVyYXRvciBKU1ZhbHVlUHRyKCkgY29uc3QgeyByZXR1cm4gSlNWYWx1ZVB0cihtX3B0cik7
IH0KICAgICAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAg
ICAgIAorICAgICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KICAg
ICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KIAogICAgICAg
ICBQcm90ZWN0ZWRQdHImIG9wZXJhdG9yPShjb25zdCBQcm90ZWN0ZWRQdHImKTsKQEAgLTEwMSwz
MCArODksNTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFQqIG1fcHRyOwogICAgIH07CiAK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoVCog
cHRyKQorICAgIGNsYXNzIFByb3RlY3RlZEpTVmFsdWVQdHIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgUHJvdGVjdGVkSlNWYWx1ZVB0cigpIHt9CisgICAgICAgIFByb3RlY3RlZEpTVmFsdWVQdHIo
SlNWYWx1ZVB0ciB2YWx1ZSk7CisgICAgICAgIFByb3RlY3RlZEpTVmFsdWVQdHIoY29uc3QgUHJv
dGVjdGVkSlNWYWx1ZVB0ciYpOworICAgICAgICB+UHJvdGVjdGVkSlNWYWx1ZVB0cigpOworCisg
ICAgICAgIHRlbXBsYXRlIDxjbGFzcyBVPiBQcm90ZWN0ZWRKU1ZhbHVlUHRyKGNvbnN0IFByb3Rl
Y3RlZFB0cjxVPiYpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIG9wZXJhdG9yIEpTVmFsdWVQdHIoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIEpTVmFsdWVQdHIgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIW1fdmFsdWU7IH0KKworICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBvcGVy
YXRvcj0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYpOworICAgICAgICBQcm90ZWN0ZWRKU1Zh
bHVlUHRyJiBvcGVyYXRvcj0oSlNWYWx1ZVB0cik7CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIEpTVmFsdWVQdHIgbV92YWx1ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IGlubGluZSBQcm90ZWN0ZWRQdHI8VD46OlByb3RlY3RlZFB0cihUKiBwdHIpCiAgICAgICAg
IDogbV9wdHIocHRyKQogICAgIHsKICAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KG1fcHRy
KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gUHJvdGVjdGVkUHRyPFQ+OjpQcm90
ZWN0ZWRQdHIoY29uc3QgUHJvdGVjdGVkUHRyJiBvKQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoY29uc3QgUHJvdGVjdGVkUHRyJiBv
KQogICAgICAgICA6IG1fcHRyKG8uZ2V0KCkpCiAgICAgewogICAgICAgICBnY1Byb3RlY3ROdWxs
VG9sZXJhbnQobV9wdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBQcm90ZWN0
ZWRQdHI8VD46On5Qcm90ZWN0ZWRQdHIoKQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg
UHJvdGVjdGVkUHRyPFQ+Ojp+UHJvdGVjdGVkUHRyKCkKICAgICB7CiAgICAgICAgIGdjVW5wcm90
ZWN0TnVsbFRvbGVyYW50KG1fcHRyKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
dGVtcGxhdGUgPGNsYXNzIFU+IFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKGNvbnN0IFBy
b3RlY3RlZFB0cjxVPiYgbykKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdGVtcGxhdGUgPGNsYXNz
IFU+IGlubGluZSBQcm90ZWN0ZWRQdHI8VD46OlByb3RlY3RlZFB0cihjb25zdCBQcm90ZWN0ZWRQ
dHI8VT4mIG8pCiAgICAgICAgIDogbV9wdHIoby5nZXQoKSkKICAgICB7CiAgICAgICAgIGdjUHJv
dGVjdE51bGxUb2xlcmFudChtX3B0cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IFByb3RlY3RlZFB0cjxUPiYgUHJvdGVjdGVkUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUHJvdGVj
dGVkUHRyPFQ+JiBvKSAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFByb3RlY3RlZFB0
cjxUPiYgUHJvdGVjdGVkUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBv
KSAKICAgICB7CiAgICAgICAgIFQqIG9wdHIgPSBvLm1fcHRyOwogICAgICAgICBnY1Byb3RlY3RO
dWxsVG9sZXJhbnQob3B0cik7CkBAIC0xNDEsNiArMTUyLDQ2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCisgICAgaW5saW5lIFByb3RlY3RlZEpTVmFs
dWVQdHI6OlByb3RlY3RlZEpTVmFsdWVQdHIoSlNWYWx1ZVB0ciB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgZ2NQcm90ZWN0KG1fdmFsdWUpOworICAgIH0K
KworICAgIGlubGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyKGNv
bnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIG8pCisgICAgICAgIDogbV92YWx1ZShvLmdldCgpKQor
ICAgIHsKKyAgICAgICAgZ2NQcm90ZWN0KG1fdmFsdWUpOworICAgIH0KKworICAgIGlubGluZSBQ
cm90ZWN0ZWRKU1ZhbHVlUHRyOjp+UHJvdGVjdGVkSlNWYWx1ZVB0cigpCisgICAgeworICAgICAg
ICBnY1VucHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4g
UHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVjdGVkSlNWYWx1ZVB0cihjb25zdCBQcm90ZWN0ZWRQ
dHI8VT4mIG8pCisgICAgICAgIDogbV92YWx1ZShvLmdldCgpKQorICAgIHsKKyAgICAgICAgZ2NQ
cm90ZWN0KG1fdmFsdWUpOworICAgIH0KKworICAgIGlubGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRy
JiBQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0
ciYgbykgCisgICAgeworICAgICAgICBKU1ZhbHVlUHRyIG92YWx1ZSA9IG8ubV92YWx1ZTsKKyAg
ICAgICAgZ2NQcm90ZWN0KG92YWx1ZSk7CisgICAgICAgIGdjVW5wcm90ZWN0KG1fdmFsdWUpOwor
ICAgICAgICBtX3ZhbHVlID0gb3ZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisgICAgaW5saW5lIFByb3RlY3RlZEpTVmFsdWVQdHImIFByb3RlY3RlZEpTVmFsdWVQdHI6Om9w
ZXJhdG9yPShKU1ZhbHVlUHRyIG92YWx1ZSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdChvdmFs
dWUpOworICAgICAgICBnY1VucHJvdGVjdChtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IG92
YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYgYSwgY29u
c3QgUHJvdGVjdGVkUHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0KICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0
ZWRQdHI8VD4mIGEsIGNvbnN0IFQqIGIpIHsgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgfQogICAgIHRl
bXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQqIGEsIGNvbnN0
IFByb3RlY3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYSA9PSBiLmdldCgpOyB9CkBAIC0xNDgsNiAr
MTk5LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYgYSwgY29uc3QgUHJvdGVjdGVk
UHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IH0KICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEs
IGNvbnN0IFQqIGIpIHsgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgfQogICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQqIGEsIGNvbnN0IFByb3RlY3RlZFB0
cjxUPiYgYikgeyByZXR1cm4gYSAhPSBiLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IFByb3RlY3RlZEpTVmFs
dWVQdHImIGIpIHsgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgfQorICAgIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgSlNWYWx1ZVB0
ciBiKSB7IHJldHVybiBhLmdldCgpID09IGI7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBQ
cm90ZWN0ZWRQdHI8VD4mIGIpIHsgcmV0dXJuIGEuZ2V0KCkgPT0gSlNWYWx1ZVB0cihiLmdldCgp
KTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSlNWYWx1ZVB0ciBhLCBjb25z
dCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVybiBhID09IGIuZ2V0KCk7IH0KKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRQ
dHI8VD4mIGEsIGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGIpIHsgcmV0dXJuIEpTVmFsdWVQ
dHIoYS5nZXQoKSkgPT0gYi5nZXQoKTsgfQorCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBi
KSB7IHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IEpTVmFsdWVQdHIgYikgeyBy
ZXR1cm4gYS5nZXQoKSAhPSBiOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgUHJvdGVjdGVk
UHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpICE9IEpTVmFsdWVQdHIoYi5nZXQoKSk7IH0KKyAg
ICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWVQdHIgYSwgY29uc3QgUHJvdGVj
dGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gYSAhPSBiLmdldCgpOyB9CisgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBh
LCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVybiBKU1ZhbHVlUHRyKGEuZ2V0
KCkpICE9IGIuZ2V0KCk7IH0KICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMjQgKzMzLDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
SlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3Ry
dWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhw
Q29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JSaWdo
dENvbnRleHQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMShFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjYoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25z
dHJ1Y3Rvckxhc3RNYXRjaChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJl
bihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENv
bnN0cnVjdG9yRG9sbGFyMShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIzKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJl
Z0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRv
bGxhcjUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI2KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1
Y3RvckRvbGxhcjgoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI5KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotc3RhdGlj
IHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqKTsKLXN0YXRpYyB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOworc3RhdGljIHZvaWQgc2V0UmVnRXhwQ29uc3Ry
dWN0b3JJbnB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOworc3RhdGljIHZv
aWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKQEAgLTE4NSw3ICsxODUsNyBAQCBK
U09iamVjdCogUmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjCiAgICAgcmV0dXJuIG5ldyAo
ZXhlYykgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBS
ZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkp
IGNvbnN0CitKU1ZhbHVlUHRyIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSkgY29uc3QKIHsKICAgICBpZiAoZC0+bGFzdE92ZWN0b3IgJiYg
aSA8PSBkLT5sYXN0TnVtU3ViUGF0dGVybnMpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gZC0+bGFz
dE92ZWN0b3JbMiAqIGldOwpAQCAtMTk1LDcgKzE5NSw3IEBAIEpTVmFsdWUqIFJlZ0V4cENvbnN0
cnVjdG9yOjpnZXRCYWNrcmVmKEUKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0K
IAotSlNWYWx1ZSogUmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbihFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMYXN0UGFyZW4oRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHVuc2lnbmVkIGkgPSBkLT5sYXN0TnVtU3ViUGF0
dGVybnM7CiAgICAgaWYgKGkgPiAwKSB7CkBAIC0yMDcsMTQgKzIwNywxNCBAQCBKU1ZhbHVlKiBS
ZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFzdFBhcmVuCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmco
ZXhlYyk7CiB9CiAKLUpTVmFsdWUqIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMZWZ0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRM
ZWZ0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVj
dG9yKQogICAgICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCAwLCBk
LT5sYXN0T3ZlY3RvclswXSk7CiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAK
LUpTVmFsdWUqIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRSaWdodENvbnRleHQoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZXh0
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAoZC0+bGFzdE92ZWN0b3IpCiAgICAg
ICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVjLCBkLT5sYXN0SW5wdXQsIGQtPmxhc3RPdmVjdG9y
WzFdLCBkLT5sYXN0SW5wdXQuc2l6ZSgpIC0gZC0+bGFzdE92ZWN0b3JbMV0pOwpAQCAtMjI2LDky
ICsyMjYsOTIgQEAgYm9vbCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbAogICAg
IHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8UmVnRXhwQ29uc3RydWN0b3IsIEludGVybmFsRnVu
Y3Rpb24+KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwgdGhp
cywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JE
b2xsYXIxKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIxKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNr
cmVmKGV4ZWMsIDEpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVy
biBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywg
Mik7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
UHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhw
Q29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCAzKTsKIH0KIAot
SlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhw
Q29uc3RydWN0b3JEb2xsYXI0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3Rv
cihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDQpOwogfQogCi1KU1ZhbHVlKiBy
ZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rv
ckRvbGxhcjUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xv
dEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgNSk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0
cnVjdG9yRG9sbGFyNihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+
Z2V0QmFja3JlZihleGVjLCA2KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xs
YXI3KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI3KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVm
KGV4ZWMsIDcpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjgoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjgoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBh
c1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgOCk7
CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29u
c3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCA5KTsKIH0KIAotSlNW
YWx1ZSogcmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0
cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBhc1JlZ0V4cENv
bnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmlucHV0KCkpOwogfQogCi1KU1ZhbHVlKiByZWdF
eHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNs
b3RCYXNlKCkpLT5tdWx0aWxpbmUoKSk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9y
TGFzdE1hdGNoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2goRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdl
dEJhY2tyZWYoZXhlYywgMCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBh
cmVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldExhc3RQ
YXJlbihleGVjKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldExlZnRDb250
ZXh0KGV4ZWMpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRSaWdodENv
bnRleHQoZXhlYyk7CiB9CiAKLXZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGxvb2t1cFB1dDxSZWdFeHBDb25zdHJ1
Y3RvciwgSW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgRXhlY1N0
YXRlOjpyZWdFeHBDb25zdHJ1Y3RvclRhYmxlKGV4ZWMpLCB0aGlzLCBzbG90KTsKIH0KIAotdm9p
ZCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUp
CiB7CiAgICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQodmFsdWUt
PnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGlu
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBhc1JlZ0V4cENvbnN0
cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7
CiB9CkBAIC0zMTksOCArMzE5LDggQEAgdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGlu
ZShFeGVjUwogLy8gRUNNQSAxNS4xMC40CiBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBhcmcwID0g
YXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhcmcxID0gYXJncy5hdChleGVjLCAxKTsK
KyAgICBKU1ZhbHVlUHRyIGFyZzAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIg
YXJnMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKICAgICBpZiAoYXJnMC0+aXNPYmplY3QoJlJlZ0V4
cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAgaWYgKCFhcmcxLT5pc1VuZGVmaW5lZCgpKQpAQCAt
MzQ5LDcgKzM0OSw3IEBAIENvbnN0cnVjdFR5cGUgUmVnRXhwQ29uc3RydWN0b3I6OmdldENvbnMK
IH0KIAogLy8gRUNNQSAxNS4xMC4zCi1zdGF0aWMgSlNWYWx1ZSogY2FsbFJlZ0V4cENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4gY29uc3RydWN0UmVnRXhwKGV4ZWMsIGFyZ3MpOwogfQpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzk2MTYpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEyICszNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgUmVn
RXhwUHJvdG90eXBlKik7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBj
cmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CkBAIC01MywxMCArNTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TXVs
dGlsaW5lKGJvb2wpOwogICAgICAgICBib29sIG11bHRpbGluZSgpIGNvbnN0OwogCi0gICAgICAg
IEpTVmFsdWUqIGdldEJhY2tyZWYoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OwotICAgICAg
ICBKU1ZhbHVlKiBnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIEpTVmFs
dWUqIGdldExlZnRDb250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiBn
ZXRSaWdodENvbnRleHQoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0
QmFja3JlZihFeGVjU3RhdGUqLCB1bnNpZ25lZCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIg
Z2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldExl
ZnRDb250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldFJpZ2h0
Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKQEAgLTY3
LDExICs2NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPFJlZ0V4cENvbnN0
cnVjdG9yUHJpdmF0ZT4gZDsKICAgICB9OwogCi0gICAgUmVnRXhwQ29uc3RydWN0b3IqIGFzUmVn
RXhwQ29uc3RydWN0b3IoSlNWYWx1ZSopOworICAgIFJlZ0V4cENvbnN0cnVjdG9yKiBhc1JlZ0V4
cENvbnN0cnVjdG9yKEpTVmFsdWVQdHIpOwogCiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4
cChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CiAKLSAgICBpbmxpbmUgUmVnRXhwQ29uc3Ry
dWN0b3IqIGFzUmVnRXhwQ29uc3RydWN0b3IoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIFJl
Z0V4cENvbnN0cnVjdG9yKiBhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmUmVnRXhwQ29u
c3RydWN0b3I6OmluZm8pKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ0V4cENvbnN0
cnVjdG9yKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCAr
NDQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdiwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKQogICAgICAgICAgICAgICAg
IGZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOwogICAgICAgICAgICAgSlNBcnJheTo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdiwgc2xvdCk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2
KQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChsYXp5
Q3JlYXRpb25EYXRhKCkpCiAgICAgICAgICAgICAgICAgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
SlNWYWx1ZSogcmVnRXhwT2JqZWN0R2xvYmFsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBPYmplY3RJZ25v
cmVDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBPYmplY3RNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJl
Z0V4cE9iamVjdFNvdXJjZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2
b2lkIHNldFJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdEdsb2JhbChFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciByZWdFeHBPYmplY3RJZ25vcmVDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdE11bHRp
bGluZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVn
RXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNldFJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApA
QCAtNzEsNTQgKzcxLDU0IEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXgKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PFJlZ0V4cE9iamVjdCwgSlNPYmplY3Q+
KGV4ZWMsIEV4ZWNTdGF0ZTo6cmVnRXhwVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cE9iamVjdEdsb2JhbChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdF
eHBPYmplY3RHbG9iYWwoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSktPnJlZ0V4cCgpLT5nbG9iYWwoKSk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4
cE9iamVjdElnbm9yZUNhc2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwT2JqZWN0SWdub3JlQ2FzZShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVn
RXhwKCktPmlnbm9yZUNhc2UoKSk7CiB9CiAgCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RNdWx0aWxp
bmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgcmVnRXhwT2JqZWN0TXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7ICAgICAgICAgICAgCiAgICAg
cmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdChzbG90LnNsb3RCYXNlKCkpLT5yZWdFeHAo
KS0+bXVsdGlsaW5lKCkpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RTb3VyY2UoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZVB0ciByZWdFeHBPYmplY3RTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBhc1JlZ0V4cE9iamVjdChzbG90LnNsb3RCYXNlKCkpLT5yZWdFeHAoKS0+cGF0dGVy
bigpKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQ
dHIgcmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+bGFzdEluZGV4KCkpOwogfQogCi12
b2lkIFJlZ0V4cE9iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9p
ZCBSZWdFeHBPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIGxvb2t1cFB1dDxSZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCB0aGlzLCBzbG90KTsKIH0KIAot
dm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZU9iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldFJlZ0V4cE9iamVjdExhc3RJbmRl
eChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVl
KQogewogICAgIGFzUmVnRXhwT2JqZWN0KGJhc2VPYmplY3QpLT5zZXRMYXN0SW5kZXgodmFsdWUt
PnRvSW50ZWdlcihleGVjKSk7CiB9CiAKLUpTVmFsdWUqIFJlZ0V4cE9iamVjdDo6dGVzdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIFJlZ0V4cE9iamVj
dDo6dGVzdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0
dXJuIGpzQm9vbGVhbihtYXRjaChleGVjLCBhcmdzKSk7CiB9CiAKLUpTVmFsdWUqIFJlZ0V4cE9i
amVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgaWYgKG1hdGNoKGV4ZWMsIGFyZ3MpKQogICAgICAgICByZXR1cm4gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpLT5hcnJheU9mTWF0Y2hl
cyhleGVjKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxs
UmVnRXhwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxSZWdFeHBPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KGZ1bmN0aW9uKS0+
ZXhlYyhleGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNiArMzcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgc2V0TGFzdEluZGV4KGRvdWJsZSBsYXN0SW5kZXgpIHsgZC0+bGFzdElu
ZGV4ID0gbGFzdEluZGV4OyB9CiAgICAgICAgIGRvdWJsZSBsYXN0SW5kZXgoKSBjb25zdCB7IHJl
dHVybiBkLT5sYXN0SW5kZXg7IH0KIAotICAgICAgICBKU1ZhbHVlKiB0ZXN0KEV4ZWNTdGF0ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZXhlYyhFeGVjU3RhdGUqLCBjb25z
dCBBcmdMaXN0Jik7CisgICAgICAgIEpTVmFsdWVQdHIgdGVzdChFeGVjU3RhdGUqLCBjb25zdCBB
cmdMaXN0Jik7CisgICAgICAgIEpTVmFsdWVQdHIgZXhlYyhFeGVjU3RhdGUqLCBjb25zdCBBcmdM
aXN0Jik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBl
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KQEAgLTcwLDkgKzcwLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxSZWdFeHBPYmplY3REYXRhPiBkOwogICAg
IH07CiAKLSAgICBSZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWUqKTsKKyAgICBS
ZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIFJl
Z0V4cE9iamVjdCogYXNSZWdFeHBPYmplY3QoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIFJl
Z0V4cE9iamVjdCogYXNSZWdFeHBPYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8p
KTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFzT2JqZWN0KHZh
bHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4cFByb3RvdHlwZSk7CiAKLXN0YXRp
YyBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNF
eGVjKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBQcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cFByb3RvRnVuY0NvbXBp
bGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogLy8gRUNNQSAxNS4xMC41CiAK
QEAgLTU1LDI4ICs1NSwyOCBAQCBSZWdFeHBQcm90b3R5cGU6OlJlZ0V4cFByb3RvdHlwZShFeGVj
U3RhCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUZXN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHJlZ0V4cFByb3RvRnVuY1Rlc3QoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUmVnRXhwT2JqZWN0OjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICByZXR1cm4g
YXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+dGVzdChleGVjLCBhcmdzKTsKIH0KIAotSlNWYWx1
ZSogcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciByZWdFeHBQcm90
b0Z1bmNFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3Qo
JlJlZ0V4cE9iamVjdDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPmV4ZWMoZXhl
YywgYXJncyk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgUmVmUHRyPFJlZ0V4
cD4gcmVnRXhwOwotICAgIEpTVmFsdWUqIGFyZzAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpT
VmFsdWUqIGFyZzEgPSBhcmdzLmF0KGV4ZWMsIDEpOworICAgIEpTVmFsdWVQdHIgYXJnMCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhcmcxID0gYXJncy5hdChleGVjLCAxKTsK
ICAgICAKICAgICBpZiAoYXJnMC0+aXNPYmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKICAg
ICAgICAgaWYgKCFhcmcxLT5pc1VuZGVmaW5lZCgpKQpAQCAtOTYsNyArOTYsNyBAQCBKU1ZhbHVl
KiByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZVB0ciByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1Zh
bHVlLT5pc09iamVjdCgmUmVnRXhwT2JqZWN0OjppbmZvKSkgewogICAgICAgICBpZiAodGhpc1Zh
bHVlLT5pc09iamVjdCgmUmVnRXhwUHJvdG90eXBlOjppbmZvKSkKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgTkVWRVJf
SU5MSU5FIEpTVmFsdWUqIHN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciBz
dHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgVUNoYXIqIGJ1ZiA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxv
YyhhcmdzLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKICAgICBVQ2hhciogcCA9IGJ1ZjsKQEAg
LTM3LDcgKzM3LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBzdHJpbmdGcm9tQwog
ICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZiwgcCAtIGJ1ZiwgZmFsc2UpKTsK
IH0KIAotc3RhdGljIEpTVmFsdWUqIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1
ZVB0ciBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKExJS0VMWShhcmdzLnNpemUo
KSA9PSAxKSkKICAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMCktPnRvVUludDMyKGV4ZWMpKTsKQEAgLTc0LDcgKzc0LDcgQEAgQ29uc3Ry
dWN0VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29ucwogfQogCiAvLyBFQ01BIDE1LjUuMQot
c3RhdGljIEpTVmFsdWUqIGNhbGxTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0
ciBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQogCi12b2lkIFN0cmluZ09iamVjdDo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBTdHJpbmdPYmplY3Q6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpOwogCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpTU3RyaW5nKiBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1cm4gYXNTdHJpbmcoSlNXcmFw
cGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkpO30KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIg
cHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KQEAgLTU5LDkg
KzU5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNTdHJpbmcqIHRvVGhp
c0pTU3RyaW5nKEV4ZWNTdGF0ZSopOwogICB9OwogCi0gICAgU3RyaW5nT2JqZWN0KiBhc1N0cmlu
Z09iamVjdChKU1ZhbHVlKik7CisgICAgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1Zh
bHVlUHRyKTsKIAotICAgIGlubGluZSBTdHJpbmdPYmplY3QqIGFzU3RyaW5nT2JqZWN0KEpTVmFs
dWUqIHZhbHVlKQorICAgIGlubGluZSBTdHJpbmdPYmplY3QqIGFzU3RyaW5nT2JqZWN0KEpTVmFs
dWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhl
cml0cygmU3RyaW5nT2JqZWN0OjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
dHJpbmdPYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWUqIHByb3RvKSAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAgICAgIHsgCiAgICAgICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsgCiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywzNiAr
MzcsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3Ry
aW5nUHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0NoYXJDb2RlQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2Yo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0KLXN0YXRpYyBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NtYWxs
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
Qm9sZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0l0YWxpY3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udHNpemUo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
TGluayhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2Rl
QXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJp
bmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmlu
Z1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3Rv
RnVuY1NwbGl0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5j
VG9Mb3dlckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNCb2xkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3RyaWtl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJv
dG9GdW5jU3VwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jRm9udGNvbG9yKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNBbmNob3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9CiAKQEAgLTIwNSwxNCAr
MjA1LDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxvY2FsZUNvbXBhcmUoY29uc3QgVVMKICAgICBy
ZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxhdGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCA6OlVDaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCA6OlVDaGFyKj4oYi5kYXRhKCkpLCBiLnNpemUoKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jUmVw
bGFjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNTdHJpbmcqIHNvdXJjZVZhbCA9IHRoaXNWYWx1
ZS0+dG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc291
cmNlVmFsLT52YWx1ZSgpOwogCi0gICAgSlNWYWx1ZSogcGF0dGVybiA9IGFyZ3MuYXQoZXhlYywg
MCk7CisgICAgSlNWYWx1ZVB0ciBwYXR0ZXJuID0gYXJncy5hdChleGVjLCAwKTsKIAotICAgIEpT
VmFsdWUqIHJlcGxhY2VtZW50ID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIHJl
cGxhY2VtZW50ID0gYXJncy5hdChleGVjLCAxKTsKICAgICBVU3RyaW5nIHJlcGxhY2VtZW50U3Ry
aW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gcmVw
bGFjZW1lbnQtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKQEAgLTMxMCw3ICszMTAsNyBAQCBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0CiAgICAgICAgICsgc291cmNlLnN1
YnN0cihtYXRjaFBvcyArIG1hdGNoTGVuKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewogICAgIC8vIEFsc28gdXNlZCBmb3IgdmFsdWVPZi4KIApAQCAtMzIzLDExICszMjMs
MTEgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YQogICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0NoYXJBdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNDaGFyQXQo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5n
KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbiA9IHMuc2l6ZSgpOwotICAgIEpTVmFsdWUqIGEwID0g
YXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsK
ICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKGEwKSkgewogICAgICAgICB1aW50MzJfdCBp
OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmdldFVJbnQzMihhMCwgaSkgJiYgaSA8IGxlbikK
QEAgLTM0MCwxMSArMzQwLDExIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0NoYXJBdChFeGVj
U3RhdGUKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAotSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90
b0Z1bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAg
ICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFy
Z3MuYXQoZXhlYywgMCk7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcihhMCkpIHsKICAg
ICAgICAgdWludDMyX3QgaTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoYTAs
IGkpICYmIGkgPCBsZW4pCkBAIC0zNTcsNyArMzU3LDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jQ2hhckNvZGVBdChFeGVjUwogICAgIHJldHVybiBqc05hTihleGVjKTsKIH0KIAotSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1By
b3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKQEAgLTM2NywxMyArMzY3LDEzIEBAIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
cyk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMu
c2l6ZSgpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFs
dWUqIGExID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChl
eGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChleGVjLCAxKTsKICAgICBVU3Ry
aW5nIHUyID0gYTAtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEtPnRvSW50
ZWdlcihleGVjKTsKICAgICBpZiAoZHBvcyA8IDApCkBAIC0zODMsMTMgKzM4MywxMyBAQCBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHMuZmluZCh1Miwgc3RhdGljX2Nhc3Q8aW50PihkcG9zKSkpOwogfQogCi1KU1ZhbHVl
KiBzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJp
bmdQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0g
dGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwog
Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0g
YXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsK
KyAgICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChleGVjLCAxKTsKIAogICAgIFVTdHJpbmcgdTIg
PSBhMC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgZG91YmxlIGRwb3MgPSBhMS0+dG9JbnRlZ2VyUHJl
c2VydmVOYU4oZXhlYyk7CkBAIC00MDAsMTEgKzQwMCwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNMYXN0SW5kZXhPZihFeGVjCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHMucmZpbmQo
dTIsIHN0YXRpY19jYXN0PGludD4oZHBvcykpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jTWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4
ZWMpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQ
dHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogCiAgICAgVVN0cmluZyB1ID0gczsKICAgICBSZWZQ
dHI8UmVnRXhwPiByZWc7CkBAIC00NTEsMTEgKzQ1MSwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNNYXRjaChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGxp
c3QpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTZWFyY2goRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3Ry
aW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKIAotICAgIEpTVmFsdWUqIGEw
ID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAw
KTsKIAogICAgIFVTdHJpbmcgdSA9IHM7CiAgICAgUmVmUHRyPFJlZ0V4cD4gcmVnOwpAQCAtNDc2
LDEzICs0NzYsMTMgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZQog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBwb3MpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTbGljZShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmco
ZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdz
LmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBK
U1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0gYXJn
cy5hdChleGVjLCAxKTsKIAogICAgIC8vIFRoZSBhcmcgcHJvY2Vzc2luZyBpcyB2ZXJ5IG11Y2gg
bGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKICAgICBkb3VibGUgc3RhcnQgPSBhMC0+dG9JbnRl
Z2VyKGV4ZWMpOwpAQCAtNTAwLDEyICs1MDAsMTIgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
U2xpY2UoRXhlY1N0YXRlKgogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJp
bmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhl
YywgMCk7Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdzLmF0KGV4ZWMsIDEpOworICAgIEpTVmFsdWVQ
dHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTEgPSBhcmdzLmF0KGV4
ZWMsIDEpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
KTsKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTU2MiwxMyArNTYyLDEzIEBAIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY1NwbGl0KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAg
ICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdz
LmF0KGV4ZWMsIDEpOworICAgIEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAg
IEpTVmFsdWVQdHIgYTEgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0g
YTAtPnRvSW50ZWdlcihleGVjKTsKICAgICBkb3VibGUgbGVuZ3RoID0gYTEtPmlzVW5kZWZpbmVk
KCkgPyBsZW4gOiBhMS0+dG9JbnRlZ2VyKGV4ZWMpOwpAQCAtNTg0LDEzICs1ODQsMTMgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBqc1N1YnN0
cmluZyhleGVjLCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obGVuZ3RoKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMp
OwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChl
eGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1
ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQo
ZXhlYywgMSk7CiAKICAgICBkb3VibGUgc3RhcnQgPSBhMC0+dG9OdW1iZXIoZXhlYyk7CiAgICAg
ZG91YmxlIGVuZCA9IGExLT50b051bWJlcihleGVjKTsKQEAgLTYxNiw3ICs2MTYsNyBAQCBKU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoRXhlY1N0CiAgICAgcmV0dXJuIGpzU3Vic3Ry
aW5nKGV4ZWMsIHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihlbmQpIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSk7CiB9CiAKLUpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQ
cm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhp
c1ZhbHVlLT50b1RoaXNKU1N0cmluZyhleGVjKTsKICAgICBjb25zdCBVU3RyaW5nJiBzID0gc1Zh
bC0+dmFsdWUoKTsKQEAgLTY1MCw3ICs2NTAsNyBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNU
b0xvd2VyQ2FzZShFeGVjCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVy
LnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9V
cHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS0+dG9U
aGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKCk7
CkBAIC02ODQsOTUgKzY4NCw5NSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2Fz
ZShFeGVjCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VC
dWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNM
b2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0xvY2Fs
ZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgMCk7CiAKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUt
PnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIGxvY2FsZUNvbXBhcmUocywgYTAtPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jQmlnKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJp
bmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8YmlnPiIgKyBzICsgIjwvYmln
PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlz
VmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxz
bWFsbD4iICsgcyArICI8L3NtYWxsPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNC
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsK
ICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgIjxibGluaz4iICsgcyArICI8L2JsaW5rPiIpOwogfQogCi1KU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJp
bmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Yj4iICsgcyArICI8L2I+Iik7
CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHR0PiIg
KyBzICsgIjwvdHQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBV
U3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgIjxpPiIgKyBzICsgIjwvaT4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jU3RyaWtlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiArIHMgKyAiPC9zdHJpa2U+Iik7
CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jU3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c3ViPiIgKyBz
ICsgIjwvc3ViPiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1cChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCAiPHN1cD4iICsgcyArICI8L3N1cD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
Rm9udGNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJp
bmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFs
dWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAi
PGZvbnQgY29sb3I9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9u
dD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jRm9udHNpemUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUq
IGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVj
LCAwKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxmb250IHNpemU9XCIiICsgYTAtPnRv
U3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9udD4iKTsKIH0KIAotSlNWYWx1ZSogc3Ry
aW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVu
Y0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1Ro
aXNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAg
IEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCAiPGEgbmFtZT1cIiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9h
PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcg
cyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJn
cy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjxhIGhyZWY9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMp
ICsgIlwiPiIgKyBzICsgIjwvYT4iKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTVmFsdWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQorU3RydWN0dXJl
OjpTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5m
bykKICAgICA6IG1fdHlwZUluZm8odHlwZUluZm8pCiAgICAgLCBtX3Byb3RvdHlwZShwcm90b3R5
cGUpCiAgICAgLCBtX2NhY2hlZFByb3RvdHlwZUNoYWluKDApCkBAIC00NDQsNyArNDQ0LDcgQEAg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6cmVtb3ZlUAogICAgIHJldHVybiB0cmFu
c2l0aW9uLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6
Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSog
cHJvdG90eXBlKQorUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90
eXBlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZVB0ciBwcm90b3R5cGUp
CiB7CiAgICAgUmVmUHRyPFN0cnVjdHVyZT4gdHJhbnNpdGlvbiA9IGNyZWF0ZShwcm90b3R5cGUs
IHN0cnVjdHVyZS0+dHlwZUluZm8oKSk7CiAKQEAgLTUzOSw3ICs1MzksNyBAQCBTdHJ1Y3R1cmVD
aGFpbiogU3RydWN0dXJlOjpjcmVhdGVDYWNoZWRQCiAgICAgQVNTRVJUKHR5cGVJbmZvKCkudHlw
ZSgpID09IE9iamVjdFR5cGUpOwogICAgIEFTU0VSVCghbV9jYWNoZWRQcm90b3R5cGVDaGFpbik7
CiAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBzdG9yZWRQcm90b3R5cGUoKTsKKyAgICBKU1Zh
bHVlUHRyIHByb3RvdHlwZSA9IHN0b3JlZFByb3RvdHlwZSgpOwogICAgIGlmIChKU0ltbWVkaWF0
ZTo6aXNJbW1lZGlhdGUocHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cnVjdHVyZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFN0cnVjdHVyZT4gewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGUoSlNWYWx1ZSogcHJvdG90
eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gY3JlYXRlKEpTVmFsdWVQdHIgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYg
dHlwZUluZm8pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Ry
dWN0dXJlKHByb3RvdHlwZSwgdHlwZUluZm8pKTsKICAgICAgICAgfQpAQCAtNjQsNyArNjQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBh
ZGRQcm9wZXJ0eVRyYW5zaXRpb24oU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBzaXplX3QmIG9mZnNldCk7CiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIHNpemVfdCYgb2Zmc2V0KTsKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oU3RydWN0dXJlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBzaXplX3QmIG9mZnNldCk7Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihTdHJ1
Y3R1cmUqLCBKU1ZhbHVlKiBwcm90b3R5cGUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiwgSlNWYWx1ZVB0
ciBwcm90b3R5cGUpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGdldHRl
clNldHRlclRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihTdHJ1Y3R1cmUqKTsKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBmcm9tRGljdGlvbmFyeVRyYW5zaXRpb24oU3Ry
dWN0dXJlKik7CkBAIC04MCwxNCArODAsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAogICAgICAgICBzaXplX3QgYWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICBzaXplX3QgcmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB2
b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKEpTVmFsdWUqIHByb3RvdHlwZSkgeyBt
X3Byb3RvdHlwZSA9IHByb3RvdHlwZTsgfQorICAgICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhv
dXRUcmFuc2l0aW9uKEpTVmFsdWVQdHIgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlID0gcHJvdG90
eXBlOyB9CiAKICAgICAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2lz
RGljdGlvbmFyeTsgfQogCiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZUluZm87IH0KIAotICAgICAgICBKU1ZhbHVlKiBzdG9yZWRQcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQotICAgICAgICBKU1ZhbHVlKiBwcm90
b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKik7IAorICAgICAgICBKU1ZhbHVlUHRyIHN0b3JlZFBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgICAgIEpTVmFsdWVQ
dHIgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopOyAKIAogICAgICAgICBTdHJ1Y3R1cmUq
IHByZXZpb3VzSUQoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzLmdldCgpOyB9CiAKQEAgLTEw
OSw3ICsxMDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlID8gIW1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQg
OiBtX29mZnNldCA9PSBub09mZnNldDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RydWN0
dXJlKEpTVmFsdWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKKyAgICAgICAgU3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYpOwogCiAgICAgICAgIHNp
emVfdCBwdXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKICAgICAgICAgc2l6ZV90IHJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFR5cGVJ
bmZvIG1fdHlwZUluZm87CiAKLSAgICAgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7CisgICAgICAg
IEpTVmFsdWVQdHIgbV9wcm90b3R5cGU7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVDaGFpbj4g
bV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKIAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBtX3By
ZXZpb3VzOwpJbmRleDogSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gMzk2MTYpCisrKyBKYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAwOS0wMS0wNSAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIEpT
VmFsdWUqIHdpdGggbmV3IHdyYXBwZXIgY2xhc3MsIEpTVmFsdWVQdHIuCisgICAgICAgIFNlZSBK
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisK
KyAgICAgICAgKiBKU09iamVjdC5jcHA6CisgICAgICAgIChuYXRpdmVDYWxsRnVuY3Rpb24pOgor
ICAgICAgICAqIEpTVXRpbHMuY3BwOgorICAgICAgICAoS0pTVmFsdWVUb0pTT2JqZWN0KToKKyAg
ICAgICAgKEpTT2JqZWN0S0pTVmFsdWUpOgorICAgICAgICAoS0pTVmFsdWVUb0NGVHlwZUludGVy
bmFsKToKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGUpOgorICAgICAgICAqIEpTVXRpbHMuaDoK
KyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6
SlNWYWx1ZVdyYXBwZXIpOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkdldFZhbHVlKToKKyAg
ICAgICAgKEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHlQcm9wZXJ0eSk6CisgICAgICAgIChK
U1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RTZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU1ZhbHVlV3Jh
cHBlcjo6SlNPYmplY3RDYWxsRnVuY3Rpb24pOgorICAgICAgICAqIEpTVmFsdWVXcmFwcGVyLmg6
CisgICAgICAgICogVXNlck9iamVjdEltcC5jcHA6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpj
YWxsQXNGdW5jdGlvbik6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjp1c2VyT2JqZWN0R2V0dGVy
KToKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChVc2VyT2JqZWN0SW1wOjpwdXQpOgorICAgICAgICAoVXNlck9iamVjdEltcDo6dG9QcmltaXRp
dmUpOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDoKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6
OmNyZWF0ZVN0cnVjdHVyZSk6CisKIDIwMDgtMTItMTUgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxl
LmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBDYW1lcm9uIFp3YXJpY2guCkluZGV4
OiBKYXZhU2NyaXB0R2x1ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEds
dWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIEphdmFTY3JpcHRHbHVlL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTVXNlck9iamVj
dDo6U2V0UHJvcGVydHkoQ0ZTdHJpbmdSCiAKIH0KIAotc3RhdGljIEpTVmFsdWUqICBuYXRpdmVD
YWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpT
VmFsdWUqICB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0
ciAgbmF0aXZlQ2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9u
T2JqZWN0LCBKU1ZhbHVlUHRyICB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAqPihmdW5jdGlvbk9iamVjdCktPmNh
bGxBc0Z1bmN0aW9uKGV4ZWMsIGFzT2JqZWN0KHRoaXNWYWx1ZSksIGFyZ3MpOwogfQpJbmRleDog
SmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUv
SlNVdGlscy5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IE9iamVjdEltcExpc3Qg
ewogICAgIENGVHlwZVJlZiBkYXRhOwogfTsKIAotc3RhdGljIENGVHlwZVJlZiBLSlNWYWx1ZVRv
Q0ZUeXBlSW50ZXJuYWwoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXBMaXN0KiBpbkltcHMpOworc3RhdGljIENGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJu
YWwoSlNWYWx1ZVB0ciBpblZhbHVlLCBFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcExpc3QqIGlu
SW1wcyk7CiBzdGF0aWMgSlNHbHVlR2xvYmFsT2JqZWN0KiBnZXRUaHJlYWRHbG9iYWxPYmplY3Qo
KTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAwLDcgKzEwMCw3IEBAIENGU3RyaW5nUmVm
IElkZW50aWZpZXJUb0NGU3RyaW5nKGNvbnN0IEkKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEtK
U1ZhbHVlVG9KU09iamVjdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSlNVc2VyT2JqZWN0KiBLSlNW
YWx1ZVRvSlNPYmplY3QoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjKQorSlNVc2Vy
T2JqZWN0KiBLSlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1ZVB0ciBpblZhbHVlLCBFeGVjU3RhdGUg
KmV4ZWMpCiB7CiAgICAgSlNVc2VyT2JqZWN0KiByZXN1bHQgPSAwOwogCkBAIC0xMjYsMTEgKzEy
NiwxMSBAQCBKU1VzZXJPYmplY3QqIEtKU1ZhbHVlVG9KU09iamVjdChKU1ZhbHVlCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLyBKU09iamVjdEtKU1ZhbHVlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1K
U1ZhbHVlKiBKU09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcHRyKQorSlNWYWx1ZVB0ciBK
U09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcHRyKQogewogICAgIEpTTG9jayBsb2NrKHRy
dWUpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKHB0cikKICAgICB7CiAgICAgICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOwpAQCAtMTk2LDcgKzE5Niw3IEBAIEpTVmFsdWUqIEpTT2Jq
ZWN0S0pTVmFsdWUoSlNVc2VyT2JqZWN0KiAKIC8vIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbAog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNp
bmcgdGhlIHJldHVybmVkIENGVHlwZVJlZgotQ0ZUeXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGVJbnRl
cm5hbChKU1ZhbHVlKiBpblZhbHVlLCBFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcExpc3QqIGlu
SW1wcykKK0NGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNWYWx1ZVB0ciBpblZh
bHVlLCBFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcExpc3QqIGluSW1wcykKIHsKICAgICBpZiAo
IWluVmFsdWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzU4LDcgKzM1OCw3IEBAIENGVHlwZVJl
ZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNWYWwKICAgICByZXR1cm4gMDsKIH0KIAotQ0ZU
eXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGUoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVj
KQorQ0ZUeXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGUoSlNWYWx1ZVB0ciBpblZhbHVlLCBFeGVjU3Rh
dGUgKmV4ZWMpCiB7CiAgICAgcmV0dXJuIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbChpblZhbHVl
LCBleGVjLCAwKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmgJKHJldmlzaW9uIDM5NjE2KQorKysgSmF2YVNj
cmlwdEdsdWUvSlNVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAjaW5j
bHVkZSAiSmF2YVNjcmlwdEdsdWUuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbGxl
Y3Rvci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29t
cGxldGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNH
bG9iYWxPYmplY3QuaD4KQEAgLTU0LDkgKzU0LDkgQEAgVVN0cmluZyBDRlN0cmluZ1RvVVN0cmlu
ZyhDRlN0cmluZ1JlZiBpbgogQ0ZTdHJpbmdSZWYgVVN0cmluZ1RvQ0ZTdHJpbmcoY29uc3QgVVN0
cmluZyYgaW5VU3RyaW5nKTsKIElkZW50aWZpZXIgQ0ZTdHJpbmdUb0lkZW50aWZpZXIoQ0ZTdHJp
bmdSZWYgaW5DRlN0cmluZywgRXhlY1N0YXRlKik7CiBDRlN0cmluZ1JlZiBJZGVudGlmaWVyVG9D
RlN0cmluZyhjb25zdCBJZGVudGlmaWVyJiBpbklkZW50aWZpZXIpOwotSlNVc2VyT2JqZWN0ICpL
SlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjKTsKLUNG
VHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhl
Yyk7Ci1KU1ZhbHVlKiBKU09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcHRyKTsKK0pTVXNl
ck9iamVjdCAqS0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRl
ICpleGVjKTsKK0NGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWVQdHIgaW5WYWx1ZSwg
RXhlY1N0YXRlICpleGVjKTsKK0pTVmFsdWVQdHIgSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmpl
Y3QqIHB0cik7CiBDRlR5cGVSZWYgR2V0Q0ZOdWxsKHZvaWQpOwogCiBpbmxpbmUgQ0ZUeXBlUmVm
IFJldGFpbkNGVHlwZShDRlR5cGVSZWYgeCkgeyBpZiAoeCkgeCA9IENGUmV0YWluKHgpOyByZXR1
cm4geDsgfQpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAkocmV2aXNpb24gMzk2MTYp
CisrKyBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5hbWVBcnJh
eS5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAotSlNWYWx1ZVdyYXBwZXI6OkpTVmFsdWVXcmFw
cGVyKEpTVmFsdWUqIGluVmFsdWUpCitKU1ZhbHVlV3JhcHBlcjo6SlNWYWx1ZVdyYXBwZXIoSlNW
YWx1ZVB0ciBpblZhbHVlKQogICAgIDogZlZhbHVlKGluVmFsdWUpCiB7CiB9CkBAIC00MSw3ICs0
MSw3IEBAIEpTVmFsdWVXcmFwcGVyOjp+SlNWYWx1ZVdyYXBwZXIoKQogewogfQogCi1KU1ZhbHVl
KiBKU1ZhbHVlV3JhcHBlcjo6R2V0VmFsdWUoKQorSlNWYWx1ZVB0ciBKU1ZhbHVlV3JhcHBlcjo6
R2V0VmFsdWUoKQogewogICAgIHJldHVybiBmVmFsdWUuZ2V0KCk7CiB9CkBAIC0xMDgsNyArMTA4
LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29weQogICAgIGlmIChw
dHIpCiAgICAgewogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxFeGVj
U3RhdGUoKTsKLSAgICAgICAgSlNWYWx1ZSogcHJvcFZhbHVlID0gcHRyLT5HZXRWYWx1ZSgpLT50
b09iamVjdChleGVjKS0+Z2V0KGV4ZWMsIENGU3RyaW5nVG9JZGVudGlmaWVyKHByb3BlcnR5TmFt
ZSwgZXhlYykpOworICAgICAgICBKU1ZhbHVlUHRyIHByb3BWYWx1ZSA9IHB0ci0+R2V0VmFsdWUo
KS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBDRlN0cmluZ1RvSWRlbnRpZmllcihwcm9wZXJ0
eU5hbWUsIGV4ZWMpKTsKICAgICAgICAgSlNWYWx1ZVdyYXBwZXIqIHdyYXBwZXJWYWx1ZSA9IG5l
dyBKU1ZhbHVlV3JhcHBlcihwcm9wVmFsdWUpOwogCiAgICAgICAgIEpTT2JqZWN0Q2FsbEJhY2tz
IGNhbGxCYWNrczsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEpTVmFsdWVXcmFwcGVyOjpKU09i
amVjdFNldFByb3BlcnR5CiAgICAgaWYgKHB0cikKICAgICB7CiAgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpOwotICAgICAgICBKU1ZhbHVlKiB2YWx1
ZSA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopanNWYWx1ZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgdmFsdWUgPSBKU09iamVjdEtKU1ZhbHVlKChKU1VzZXJPYmplY3QqKWpzVmFsdWUp
OwogICAgICAgICBKU09iamVjdCAqb2JqVmFsdWUgPSBwdHItPkdldFZhbHVlKCktPnRvT2JqZWN0
KGV4ZWMpOwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgb2JqVmFsdWUt
PnB1dChleGVjLCBDRlN0cmluZ1RvSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUsIGV4ZWMpLCB2YWx1
ZSwgc2xvdCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6
OkpTT2JqZWN0Q2FsbAogICAgIHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFk
R2xvYmFsRXhlY1N0YXRlKCk7CiAKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBKU09iamVjdEtK
U1ZhbHVlKChKU1VzZXJPYmplY3QqKXRoaXNPYmopOworICAgICAgICBKU1ZhbHVlUHRyIHZhbHVl
ID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kil0aGlzT2JqKTsKICAgICAgICAgSlNP
YmplY3QgKmtzalRoaXNPYmogPSB2YWx1ZS0+dG9PYmplY3QoZXhlYyk7CiAgICAgICAgIEpTT2Jq
ZWN0ICpvYmpWYWx1ZSA9IHB0ci0+R2V0VmFsdWUoKS0+dG9PYmplY3QoZXhlYyk7CiAKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBKU09iamVjdFJlZiBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDYWxsCiAg
ICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEpTT2JqZWN0UmVmIGpzQXJnID0gKEpTT2JqZWN0UmVmKUNGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoYXJncywgaSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBrZ3NBcmcgPSBKU09i
amVjdEtKU1ZhbHVlKChKU1VzZXJPYmplY3QqKWpzQXJnKTsKKyAgICAgICAgICAgIEpTVmFsdWVQ
dHIga2dzQXJnID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kilqc0FyZyk7CiAgICAg
ICAgICAgICBsaXN0QXJncy5hcHBlbmQoa2dzQXJnKTsKICAgICAgICAgfQogCkBAIC0xNjUsNyAr
MTY1LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbAogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9ialZhbHVlLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAg
ICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgSlNWYWx1ZSogIHJlc3VsdFZhbHVlID0gY2FsbChleGVjLCBvYmpWYWx1ZSwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBrc2pUaGlzT2JqLCBsaXN0QXJncyk7CisgICAgICAgIEpTVmFs
dWVQdHIgIHJlc3VsdFZhbHVlID0gY2FsbChleGVjLCBvYmpWYWx1ZSwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBrc2pUaGlzT2JqLCBsaXN0QXJncyk7CiAgICAgICAgIEpTVmFsdWVXcmFwcGVyKiB3cmFw
cGVyVmFsdWUgPSBuZXcgSlNWYWx1ZVdyYXBwZXIocmVzdWx0VmFsdWUpOwogICAgICAgICBKU09i
amVjdENhbGxCYWNrcyBjYWxsQmFja3M7CiAgICAgICAgIEdldEpTT2JlY3RDYWxsQmFja3MoY2Fs
bEJhY2tzKTsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
NSArMzUsMTUgQEAKIAogY2xhc3MgSlNWYWx1ZVdyYXBwZXIgewogcHVibGljOgotICAgIEpTVmFs
dWVXcmFwcGVyKEpTVmFsdWUqKTsKKyAgICBKU1ZhbHVlV3JhcHBlcihKU1ZhbHVlUHRyKTsKICAg
ICB2aXJ0dWFsIH5KU1ZhbHVlV3JhcHBlcigpOwogCiAgICAgc3RhdGljIHZvaWQgR2V0SlNPYmVj
dENhbGxCYWNrcyhKU09iamVjdENhbGxCYWNrcyYgY2FsbEJhY2tzKTsKIAotICAgIEpTVmFsdWUq
IEdldFZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciBHZXRWYWx1ZSgpOwogCiBwcml2YXRlOgotICAg
IFByb3RlY3RlZFB0cjxKU1ZhbHVlPiBmVmFsdWU7CisgICAgUHJvdGVjdGVkSlNWYWx1ZVB0ciBm
VmFsdWU7CiAgICAgCiAgICAgc3RhdGljIHZvaWQgSlNPYmplY3REaXNwb3NlKHZvaWQgKmRhdGEp
OwogICAgIHN0YXRpYyBDRkFycmF5UmVmIEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXModm9pZCAq
ZGF0YSk7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
OSArNTYsOSBAQCBDYWxsVHlwZSBVc2VyT2JqZWN0SW1wOjpnZXRDYWxsRGF0YShDYWxsCiAgICAg
cmV0dXJuIGZKU1VzZXJPYmplY3QgPyBmSlNVc2VyT2JqZWN0LT5nZXRDYWxsRGF0YShjYWxsRGF0
YSkgOiBDYWxsVHlwZU5vbmU7CiB9CiAKLUpTVmFsdWUqIFVzZXJPYmplY3RJbXA6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xpc3Qg
JmFyZ3MpCitKU1ZhbHVlUHRyIFVzZXJPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCiB7Ci0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgSlNVc2VyT2JqZWN0KiBqc1RoaXNPYmogPSBLSlNWYWx1ZVRv
SlNPYmplY3QodGhpc09iaiwgZXhlYyk7CiAgICAgaWYgKGpzVGhpc09iaikgewogICAgICAgICBD
RkluZGV4IGFyZ0NvdW50ID0gYXJncy5zaXplKCk7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBV
c2VyT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZQogICAgIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwogfQogCi1KU1ZhbHVlKiAgVXNlck9iamVj
dEltcDo6dXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgVXNlck9iamVj
dEltcDo6dXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBVc2VyT2JqZWN0SW1w
ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8VXNlck9iamVjdEltcCAqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKTsKICAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3Qgc2hvdWxkIGhhdmUgZ3VhcmRl
ZCBhZ2FpbnN0IGEgbnVsbCBmSlNVc2VyT2JqZWN0LgpAQCAtMTIxLDcgKzEyMSw3IEBAIEpTVmFs
dWUqICBVc2VyT2JqZWN0SW1wOjp1c2VyT2JqZWN0R2V0dGUKICAgICBDRlN0cmluZ1JlZiBjZlBy
b3BOYW1lID0gSWRlbnRpZmllclRvQ0ZTdHJpbmcocHJvcGVydHlOYW1lKTsKICAgICBKU1VzZXJP
YmplY3QgKmpzUmVzdWx0ID0gdGhpc09iai0+ZkpTVXNlck9iamVjdC0+Q29weVByb3BlcnR5KGNm
UHJvcE5hbWUpOwogICAgIFJlbGVhc2VDRlR5cGUoY2ZQcm9wTmFtZSk7Ci0gICAgSlNWYWx1ZSog
cmVzdWx0ID0gSlNPYmplY3RLSlNWYWx1ZShqc1Jlc3VsdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBKU09iamVjdEtKU1ZhbHVlKGpzUmVzdWx0KTsKICAgICBqc1Jlc3VsdC0+UmVsZWFzZSgp
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0MCw3ICsxNDAsNyBAQCBib29sIFVzZXJPYmpl
Y3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgICAgIGpzUmVzdWx0LT5SZWxlYXNlKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIGtq
c1ZhbHVlID0gdG9QcmltaXRpdmUoZXhlYyk7CisgICAgICAgIEpTVmFsdWVQdHIga2pzVmFsdWUg
PSB0b1ByaW1pdGl2ZShleGVjKTsKICAgICAgICAgaWYgKCFranNWYWx1ZS0+aXNVbmRlZmluZWRP
ck51bGwoKSkgewogICAgICAgICAgICAgSlNPYmplY3QgKmtqc09iamVjdCA9IGtqc1ZhbHVlLT50
b09iamVjdChleGVjKTsKICAgICAgICAgICAgIGlmIChranNPYmplY3QtPmdldFByb3BlcnR5U2xv
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQpAQCAtMTUwLDcgKzE1MCw3IEBAIGJvb2wgVXNl
ck9iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIFVz
ZXJPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQordm9pZCBVc2VyT2JqZWN0SW1wOjpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIGludCBhdHRyKQogewogICAgIGlmICghZkpTVXNlck9iamVjdCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTY5LDkgKzE2OSw5IEBAIEpTVXNlck9iamVjdCogVXNlck9iamVjdElt
cDo6R2V0SlNVc2VyT2IKICAgICByZXR1cm4gZkpTVXNlck9iamVjdDsKIH0KIAotSlNWYWx1ZSog
VXNlck9iamVjdEltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBKU1R5cGUpIGNvbnN0
CitKU1ZhbHVlUHRyIFVzZXJPYmplY3RJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywg
SlNUeXBlKSBjb25zdAogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIEpTVXNlck9iamVjdCog
anNPYmpQdHIgPSBLSlNWYWx1ZVRvSlNPYmplY3QodG9PYmplY3QoZXhlYyksIGV4ZWMpOwogICAg
IENGVHlwZVJlZiBjZlZhbHVlID0ganNPYmpQdHIgPyBqc09ialB0ci0+Q29weUNGVmFsdWUoKSA6
IDA7CiAgICAgaWYgKGNmVmFsdWUpIHsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlz
aW9uIDM5NjE2KQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMSArNDYsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldFBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAotICAgIHZpcnR1
YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhp
c09iaiwgY29uc3QgQXJnTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IEFyZ0xp
c3QgJmFyZ3MpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
ICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogCi0gICAgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0
YXRlKiwgSlNUeXBlIHByZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OworICAg
IEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlIHByZWZlcnJlZFR5cGUg
PSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0OwpAQCAtNTksMTMgKzU5LDEzIEBAIHB1YmxpYzoKIAogICAgIEpTVXNlck9i
amVjdCAqR2V0SlNVc2VyT2JqZWN0KCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5
cGUpCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1Zh
bHVlKiB1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgdXNl
ck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgSlNVc2VyT2JqZWN0KiBmSlNVc2VyT2JqZWN0
OwogfTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTk3IEBACisyMDA5LTAxLTA1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJh
cmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSogd2l0aCBuZXcgd3JhcHBl
ciBjbGFzcywgSlNWYWx1ZVB0ci4KKyAgICAgICAgU2VlIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyBmb3IgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQXR0ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0F0dHI6OnNldFZhbHVlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFt
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246OmN1c3Rv
bVB1dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVs
QXJyYXlDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUGl4ZWxBcnJheTo6Z2V0
QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVsQXJyYXk6OmluZGV4U2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SFRNTENhbnZhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZyb21S
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnN0cm9rZVRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2xpcGJvYXJk
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjp0eXBlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ2xpcGJvYXJkOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpz
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0NvbnNvbGU6OnByb2ZpbGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Q
b3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3Vz
dG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0
b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Wb2lkQ2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVm9pZENhbGxiYWNrKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlND
dXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01BcHBsaWNhdGlvbkNhY2hlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNh
dGlvbkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01BcHBsaWNhdGlvbkNh
Y2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRp
b25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nT3JOdWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzT3duZWRTdHJpbmdPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6anNT
dHJpbmdPclVuZGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ09yRmFsc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2spOgorICAgICAgICAo
V2ViQ29yZTo6dmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0Q3Vy
cmVudEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRET01FeGNlcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpnZXRET01PYmpl
Y3RXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERPTU5vZGVXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JD
cmVhdGVKU0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmpl
Y3Q6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAo
anNET01XaW5kb3dCYXNlQ3J5cHRvKToKKyAgICAgICAgKGpzRE9NV2luZG93QmFzZUV2ZW50KToK
KyAgICAgICAgKGpzRE9NV2luZG93QmFzZUltYWdlKToKKyAgICAgICAgKGpzRE9NV2luZG93QmFz
ZU1lc3NhZ2VDaGFubmVsKToKKyAgICAgICAgKGpzRE9NV2luZG93QmFzZU9wdGlvbik6CisgICAg
ICAgIChqc0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChqc0RPTVdpbmRv
d0Jhc2VBdWRpbyk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VXb3JrZXIpOgorICAgICAgICAo
anNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3Nvcik6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jh
c2VFdmVudCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyk6CisgICAgICAgIChz
ZXRKU0RPTVdpbmRvd0Jhc2VJbWFnZSk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VNZXNz
YWdlQ2hhbm5lbCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24pOgorICAgICAg
ICAoc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKToKKyAgICAgICAgKHNldEpTRE9NV2luZG93QmFz
ZVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKHNldEpTRE9NV2luZG93QmFzZVhTTFRQcm9jZXNz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjaGlsZEZyYW1lR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6aW5kZXhHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpjbGVhcik6CisgICAgICAgICh3aW5kb3dQcm90b0Z1bmNPcGVuKToKKyAg
ICAgICAgKHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyk6CisgICAgICAgICh3aW5kb3dQ
cm90b0Z1bmNOb3RJbXBsZW1lbnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6OnNldFJldHVyblZhbHVlU2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6Omluc3RhbGxUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KU0RPTVdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Omxvb2t1cEdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6bG9va3VwU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGltZW91dE9ySW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldFRpbWVvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OmNsZWFyVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvdzo6c2V0SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmNs
ZWFySW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmF0b2IpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmJ0b2EpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9ET01XaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRm9jdXNGdW5jdGlvbkdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dT
aGVsbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OnB1dFdpdGhB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6Omxvb2t1cEdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6bG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFbGVtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXds
eUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudDo6Y2xpcGJvYXJkRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmV2ZW50UGFyYW1ldGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNFdmVudFRhcmdldC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXRCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGVDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50
TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxBbGxDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBbGxDb2xs
ZWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFw
cGxldEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQXBwbGV0RWxl
bWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFwcGxldEVsZW1lbnQ6
Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJD
b3JlOjpjYWxsSFRNTENvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVj
dGlvbjo6bmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpp
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEb2N1
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6bmFtZUdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6YWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpzZXRBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Ondy
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpjdXN0b21QdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxG
b3JtRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lRWxlbWVu
dDo6c2V0U3JjKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lRWxlbWVudDo6c2V0TG9j
YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MSUZyYW1lRWxlbWVudDo6c2V0U3JjKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxPYmplY3RFbGVtZW50OjpjdXN0b21QdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MT2JqZWN0RWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
T3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uOjppbmRleFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjpyZW1vdmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MU2VsZWN0RWxlbWVudDo6cmVt
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdEluZGV4U2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTSFRNTFNlbGVjdEVsZW1lbnQ6OmluZGV4U2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0
aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRp
Y0ZvcndhcmRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3Rh
dGljR29GdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OmN1c3Rv
bVB1dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRP
YmplY3RXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdGVkT2JqZWN0V3Jh
cHBlcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6
OnByZXBhcmVJbmNvbWluZ1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdGVkT2JqZWN0V3Jh
cHBlcjo6d3JhcE91dGdvaW5nVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVj
dG9yQ2FsbGJhY2tXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ2Fs
bGJhY2tXcmFwcGVyOjp3cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ2FsbGJh
Y2tXcmFwcGVyOjpwcmVwYXJlSW5jb21pbmdWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVj
dG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmFwT3V0Z29pbmdWYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSmF2
YVNjcmlwdENhbGxGcmFtZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OnNjb3BlQ2hhaW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5j
dGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVsb2FkRnVu
Y3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1
bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmN1c3RvbVB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIcmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTG9jYXRpb246OnNldFByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRp
b246OnNldEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0UG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjpzZXRQYXRobmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0
aW9uOjpzZXRTZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SGFzaCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZXBsYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTTG9jYXRpb246OnJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjph
c3NpZ24pOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6dG9TdHJpbmcpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNN
ZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3Nh
Z2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01p
bWVUeXBlQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNaW1lVHlwZUFycmF5
OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05hbWVkTm9kZU1hcDo6bmFtZUdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmVl
ZHNZb3VUdWJlUXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6SlNOYXZpZ2F0b3I6OmFwcFZlcnNp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU05vZGU6Omluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6
OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OnJlbW92ZUNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRp
b246OkpTTm9kZUZpbHRlckNvbmRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0
ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9Ob2RlRmlsdGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVJdGVy
YXRvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVJdGVyYXRvcjo6bmV4dE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYWxsTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlTGlzdDo6bmFtZUdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BsdWdp
bjo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVu
Y3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnJ1bnRpbWVPYmplY3RDdXN0b21QdXQpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbFBs
dWdpbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FjaGVkVmFs
dWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6Omhhc0luc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSR0JDb2xv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1JHQkNvbG9yKToKKyAgICAgICAgKGpzUkdC
Q29sb3JSZWQpOgorICAgICAgICAoanNSR0JDb2xvckdyZWVuKToKKyAgICAgICAgKGpzUkdCQ29s
b3JCbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU1JHQkNvbG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlv
bjo6ZXhlY3V0ZVNxbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFu
Y2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdFbGVtZW50SW5zdGFuY2U6OmFk
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdFbGVtZW50SW5zdGFuY2U6
OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVuZ3Ro
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTGVuZ3RoOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHTWF0cml4OjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJp
eDo6aW52ZXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
TWF0cml4Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnJvdGF0ZUZy
b21WZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OmZsaXBYKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjpmbGlwWSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R01hdHJpeDo6c2tld1gpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNrZXdZKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlzdEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xpc3Q6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdQYXRoU2VnTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bh
dGhTZWdMaXN0OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUGF0aFNlZ0xp
c3Q6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaEdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpmaW5pc2hTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVyUmVhZE9u
bHlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmNsZWFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHUG9pbnRMaXN0OjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
UG9pbnRMaXN0OjppbnNlcnRJdGVtQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9p
bnRMaXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRl
bSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5p
c2hTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZH
VHJhbnNmb3JtTGlzdDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5z
Zm9ybUxpc3Q6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1N0b3JhZ2U6OmN1c3RvbVB1dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdHls
ZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNU
ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1RyZWVXYWxrZXI6OnBhcmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVl
V2Fsa2VyOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bGFz
dENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHRCYXNl
OjpwdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29y
a2VyQ29udGV4dDo6c2V0U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6
OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0
cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRw
UmVxdWVzdDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpnZXRS
ZXNwb25zZUhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpvdmVy
cmlkZU1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OmFkZEV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpyZXNw
b25zZVRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRk
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjppbXBv
cnRTdHlsZXNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNm
b3JtVG9GcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5z
Zm9ybVRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpzZXRQ
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6
aXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6
anNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06Cisg
ICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVu
dHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToK
KyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtX
ZWJTY3JpcHRPYmplY3Qgd2ViU2NyaXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoK1tXZWJT
Y3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9v
dE9iamVjdDpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdFByaXZh
dGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZh
dWx0KToKKyAgICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgor
ICAgICAgICAoX05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX0hhc01ldGhvZCk6Cisg
ICAgICAgIChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5j
cHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpDSW5zdGFuY2U6Om51bWJlclZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0
YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5oOgorICAgICAg
ICAqIGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmll
bGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNGaWVsZDo6
c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuaDoKKyAg
ICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dE5QVmFyaWFudFRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5oOgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5j
ZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpudW1iZXJWYWx1ZSk6Cisg
ICAgICAgIChKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKYXZhSW5zdGFu
Y2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZSk6
CisgICAgICAgIChKYXZhSW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9qbmkv
am5pX2luc3RhbmNlLmg6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QuaDoKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVj
dDo6Y2FsbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpT
T2JqZWN0OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAg
ICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKEph
dmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2puaV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToK
KyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcDoKKyAgICAgICAgKEphdmFBcnJh
eTo6Y29udmVydEpPYmplY3RUb0FycmF5KToKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlzcGF0Y2hW
YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KToKKyAgICAgICAgKEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAg
ICAgICAoSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUFycmF5
OjpzZXRWYWx1ZUF0KToKKyAgICAgICAgKEphdmFBcnJheTo6dmFsdWVBdCk6CisgICAgICAgICog
YnJpZGdlL2puaS9qbmlfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3V0aWxp
dHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydEFycmF5SW5zdGFuY2VUb0ph
dmFBcnJheSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6
CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oOgorICAgICAgICAqIGJyaWRnZS9v
YmpjL1dlYlNjcmlwdE9iamVjdC5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfY2xhc3Mu
aDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6T2JqY0NsYXNzOjpmYWxsYmFja09iamVjdCk6CisgICAgICAgICogYnJpZGdlL29i
amMvb2JqY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
bW06CisgICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChPYmpj
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpz
ZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpnZXRWYWx1
ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUp
OgorICAgICAgICAoT2JqY0luc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChPYmpjSW5z
dGFuY2U6Om51bWJlclZhbHVlKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVl
KToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL29i
amMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tP
YmplY3RJbXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxkOjp2YWx1ZUZyb21J
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb09iamNPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0FycmF5OjpzZXRWYWx1ZUF0KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNBcnJheTo6dmFsdWVBdCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Ok9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uv
b2JqYy9vYmpjX3V0aWxpdHkuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHku
bW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJp
ZGdlL3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmdldFZh
bHVlT2ZGaWVsZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6c2V0VmFsdWVP
ZkZpZWxkKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Oklu
c3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6SW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlOjp2YWx1ZU9mKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5j
cHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAg
KEpTQzo6UnVudGltZUFycmF5OjppbmRleEdldHRlcik6CisgICAgICAgIChKU0M6OlJ1bnRpbWVB
cnJheTo6cHV0KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAo
SlNDOjpSdW50aW1lQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0
dGVyKToKKyAgICAgICAgKEpTQzo6Y2FsbFJ1bnRpbWVNZXRob2QpOgorICAgICAgICAqIGJyaWRn
ZS9ydW50aW1lX21ldGhvZC5oOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OlJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWN0R2V0dGVyKToKKyAgICAgICAg
KEpTQzo6UnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpSdW50
aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIpOgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0
SW1wOjpwdXQpOgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUp
OgorICAgICAgICAoSlNDOjpjYWxsUnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OmNhbGxS
dW50aW1lQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgor
ICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxs
RnJhbWUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9m
aWxlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGVOb2RlLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6CisKIDIwMDktMDEtMDUg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBm
aXguCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYx
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLXZvaWQgSlNBdHRyOjpzZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbHVlKQordm9pZCBKU0F0dHI6OnNldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBdHRyKiBpbXAgPSBzdGF0aWNfY2FzdDxBdHRyKj4oaW1w
bCgpKTsKICAgICBTdHJpbmcgYXR0clZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2so
ZXhlYywgdmFsdWUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgQ1NTUnVsZSogcnVsZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENTU1J1
bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3
IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjYW5HZXRJdGVtc0YKIAogLy8gRklYTUU6
IFlvdSBjYW4gZ2V0IHRoZXNlIHByb3BlcnRpZXMsIGFuZCBzZXQgdGhlbSAoc2VlIGN1c3RvbVB1
dCBiZWxvdyksCiAvLyBidXQgeW91IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gZW51bWVyYXRlIHRo
ZW0uCi1KU1ZhbHVlKiBKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDU1NTdHlsZURlY2xhcmF0aW9uKiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNDU1NTdHlsZURlY2xhcmF0aW9uKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSk7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1ZhbHVlKiBKU0NTU1N0eWxlRGVjbGFyYXRp
b246Om5hbWVHZXR0CiB9CiAKIAotYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OmN1c3RvbVB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCitib29sIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIGlmICghaXNDU1NQ
cm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NTVmFsdWUqIHZhbHVl
KQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NTVmFsdWUqIHZhbHVlKQogewog
ICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uaAkocmV2aXNpb24gMzk2
MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNDYW52YXNQaXhl
bEFycmF5OjpnZXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KQorICAgIGlubGlu
ZSBKU1ZhbHVlUHRyIEpTQ2FudmFzUGl4ZWxBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OwogICAg
ICAgICBpZiAoIWltcGwoKS0+Z2V0KGluZGV4LCByZXN1bHQpKQpAQCAtMzksNyArMzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6ZnJvbShyZXN1
bHQpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBKU0NhbnZhc1BpeGVsQXJyYXk6Omlu
ZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqIHZhbHVl
KQorICAgIGlubGluZSB2b2lkIEpTQ2FudmFzUGl4ZWxBcnJheTo6aW5kZXhTZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGRvdWJsZSBwaXhlbFZhbHVlID0gdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBKU1ZhbHVlKiB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgQ2FudmFzU3R5bGUqIHN0eWxlKQorc3RhdGljIEpTVmFsdWVQdHIgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUt
PmNhbnZhc0dyYWRpZW50KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52
YXNHcmFkaWVudCgpKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIEpTVmFsdWUqIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBDYQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3Io
KSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHls
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0
eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpj
cmVhdGUoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgpKTsKQEAgLTYzLDI3ICs2MywyNyBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1MQ2FuCiAgICAgcmV0dXJuIDA7CiB9CiAK
LUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VTdHlsZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRvSlMoZXhl
YywgaW1wbCgpLT5zdHJva2VTdHlsZSgpKTsgICAgICAgIAogfQogCi12b2lkIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGltcGwoKS0+c2V0U3Ry
b2tlU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUoZXhlYywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+Zmls
bFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxs
U3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
dmFsdWUpCiB7CiAgICAgaW1wbCgpLT5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUoZXhl
YywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEZpbGxDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogY29udGV4dCA9IGltcGwoKTsKIApAQCAtMTIwLDcgKzEyMCw3IEBAIEpTVmFsdWUqIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0g
ICAgCiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29u
dGV4dCA9IGltcGwoKTsKIApAQCAtMTU4LDcgKzE1OCw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c3Ryb2tlUmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKICAg
ICAKQEAgLTE3Miw3ICsxNzIsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3RyCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVlKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAogICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKIApAQCAtMTgyLDcgKzE4
Miw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmEKICAgICAvLyAg
ICAgZHJhd0ltYWdlKGltZywgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoKQogICAgIC8v
IENvbXBvc2l0ZSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uLgogICAgIC8vIFRoZSBpbWcgcGFyYW1ldGVyIGNhbiBiZSBhIDxpbWc+IG9yIDxjYW52
YXM+IGVsZW1lbnQuCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOworICAg
IEpTVmFsdWVQdHIgdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmICghdmFsdWUtPmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAg
ICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CkBAIC0yMzcsMTEgKzIzNywxMSBAQCBK
U1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAgICAgCi0gICAgSlNWYWx1ZSogdmFs
dWUgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBhcmdzLmF0KGV4
ZWMsIDApOwogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1
ZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIAotSlNWYWx1ZSogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTaGFkb3coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAgLTMwMywxOCAr
MzAzLDE4IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXQKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRl
cm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKLSAgICBKU1ZhbHVlKiB2YWx1
ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVl
KTsKIAogICAgIGlmIChvLT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKSB7
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIEpTVmFsdWUqIHBhdHRlcm4gPSB0
b0pTKGV4ZWMsCisgICAgICAgIEpTVmFsdWVQdHIgcGF0dGVybiA9IHRvSlMoZXhlYywKICAgICAg
ICAgICAgIGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywg
YXJncy5hdChleGVjLCAxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CkBAIC0zMjIsNyArMzIyLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmNyZQogICAgIH0KICAgICBpZiAoby0+aW5oZXJpdHMoJkpTSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgSlNW
YWx1ZSogcGF0dGVybiA9IHRvSlMoZXhlYywKKyAgICAgICAgSlNWYWx1ZVB0ciBwYXR0ZXJuID0g
dG9KUyhleGVjLAogICAgICAgICAgICAgY29udGV4dC0+Y3JlYXRlUGF0dGVybihzdGF0aWNfY2Fz
dDxIVE1MQ2FudmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1w
bCgpKSwKICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCBh
cmdzLmF0KGV4ZWMsIDEpKSwgZWMpLmdldCgpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKQEAgLTMzMiw3ICszMzIsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Y3JlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwogICAgIC8vIHB1dEltYWdlRGF0
YShJbWFnZURhdGEsIHgsIHkpCkBAIC0zNTAsNyArMzUwLDcgQEAgSlNWYWx1ZSogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnB1dAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1K
U1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbFRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
eyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKQEAg
LTM2OCw3ICszNjgsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zmls
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K0pTVmFsdWVQdHIgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApAQCAtNjMsNyArNjMsNyBAQCBK
U1ZhbHVlKiBKU0NsaXBib2FyZDo6dHlwZXMoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwogfQogCi1KU1ZhbHVlKiBKU0NsaXBib2FyZDo6Y2xlYXJE
YXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlND
bGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKQEAgLTgxLDcgKzgxLDcg
QEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdAogICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiY2xlYXJEYXRhOiBJbnZhbGlkIG51bWJlciBv
ZiBhcmd1bWVudHMiKTsKIH0KIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OmdldERhdGEoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NsaXBib2FyZDo6
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8g
RklYTUU6IEl0IGRvZXMgbm90IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBKUyBiaW5kaW5ncyB0byB0
aHJvdyBvbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMuCiAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDEpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpnZXREYXRhKEV4
ZWNTdGF0ZSoKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsKIH0KIAotSlNWYWx1
ZSogSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBKU0NsaXBib2FyZDo6c2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7
CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6c2V0RGF0YShFeGVj
U3RhdGUqCiAgICAgcmV0dXJuIGpzQm9vbGVhbihjbGlwYm9hcmQtPnNldERhdGEoYXJncy5hdChl
eGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGFyZ3MuYXQoZXhlYywgMSktPnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NsaXBib2FyZDo6c2V0RHJh
Z0ltYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBDbGlw
Ym9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NvbnNvbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
b25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SlNDOjpQcm9maWxlPiA+
IFByb2ZpbGVzQXJyYXk7CiAKLUpTVmFsdWUqIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0NvbnNvbGU6OnByb2ZpbGVzKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKICAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxlcyA9IGltcGwo
KS0+cHJvZmlsZXMoKTsKICAgICBBcmdMaXN0IGxpc3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFj
azo6aGFuZGxlRXZlCiAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCi0g
ICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihl
eGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJh
Y2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxs
RGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgdm9pZCBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6aGFuZAogICAgIAogICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0g
bV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwor
ICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmll
cihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAkocmV2aXNpb24gMzk2
MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHZvaWQgSlNDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjazo6aGFuZGwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0g
ICAgICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworCisgICAgSlNWYWx1ZVB0ciBmdW5jdGlv
biA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIp
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkgewpAQCAtNzEsOSArNzEsOSBAQCB2b2lkIEpTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJh
Y2s6OmhhbmRsCiAgICAgICAgIH0KICAgICAgICAgZnVuY3Rpb24gPSBtX2NhbGxiYWNrOwogICAg
IH0KLSAgICAgICAgCisKICAgICBSZWZQdHI8SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
cHJvdGVjdCh0aGlzKTsKLSAgICAgICAgCisKICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgYXJncy5h
cHBlbmQodG9KUyhleGVjLCB0cmFuc2FjdGlvbikpOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhl
YywgcmVzdWx0U2V0KSk7CkBAIC04MSwxNCArODEsMTQgQEAgdm9pZCBKU0N1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrOjpoYW5kbAogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2so
KTsKICAgICBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fY2FsbGJh
Y2ssIGFyZ3MpOwogICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwotICAgICAg
ICAKKwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICByZXBvcnRDdXJy
ZW50RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICAKKwogICAgICAgICByYWlzZWRFeGNlcHRpb24g
PSB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRz
UmVuZGVyaW5nKCk7CiB9Ci0gICAgCisKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjoKICAgICAgICAgCiAgICAgSlNDOjpKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGhhbmRsZUV2ZW50RnVuY3Rp
b24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQi
KSk7CisgICAgSlNWYWx1ZVB0ciBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGhh
bmRsZUV2ZW50Q2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlRXZlbnRDYWxsVHlwZSA9IGhh
bmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRhKGhhbmRsZUV2ZW50Q2FsbERhdGEpOwogICAg
IENhbGxEYXRhIGNhbGxiYWNrQ2FsbERhdGE7CkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDdXN0
b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjoKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMs
IHRyYW5zYWN0aW9uKSk7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBlcnJvcikpOwogICAg
ICAgICAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAg
Z2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwogICAgIGlmIChoYW5kbGVFdmVudENh
bGxUeXBlICE9IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmVzdWx0ID0gY2FsbChleGVjLCBoYW5k
bGVFdmVudEZ1bmN0aW9uLCBoYW5kbGVFdmVudENhbGxUeXBlLCBoYW5kbGVFdmVudENhbGxEYXRh
LCBtX2NhbGxiYWNrLCBhcmdzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKU0N1c3RvbVNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s6OmhhbgogICAgICAgICAKICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNl
KTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5jdGlvbiA9IG1fZGF0YS0+
Y2FsbGJhY2soKS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwor
ICAgIEpTVmFsdWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IG1fZGF0YS0+Y2FsbGJhY2soKS0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRh
IGhhbmRsZUV2ZW50Q2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlRXZlbnRDYWxsVHlwZSA9
IGhhbmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRhKGhhbmRsZUV2ZW50Q2FsbERhdGEpOwog
ICAgIENhbGxEYXRhIGNhbGxiYWNrQ2FsbERhdGE7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBib29sIEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiAgICAgICAgIAogICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBmdW5jdGlv
biA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIp
KTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAg
ICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CkBAIC03Niw3ICs3Niw3IEBAIGJvb2wg
SlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sKICAgICBBcmdMaXN0IGFyZ3M7CiAg
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBlcnJvcikpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0
Q2hlY2soKTsKICAgICByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fY2FsbGJhY2ssIGFyZ3MpOwogICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRD
aGVjaygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZv
aWRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBKU0N1
c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogICAgICAgICAKICAgICBKU0M6OkpTTG9j
ayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBtX2NhbGxi
YWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgSlNW
YWx1ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtODYsNyArODYsNyBAQCB2b2lkIEpTQ3VzdG9tVm9p
ZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAgICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1Jl
bmRlcmluZygpOwogfQogIAotUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENhbGxiYWNr
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4gdG9Wb2lkQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKCFvYmpl
Y3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICB9OwogCi0gICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlKik7CisgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENhbGxiYWNrKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLVBhc3NSZWZQdHI8SlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXI+IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPEpTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyPiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTgxLDcgKzgxLDcgQEAg
U3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
IAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKKyAgICBKU1ZhbHVlUHRyIGZ1
bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxv
b2t1cE5hbWVzcGFjZVVSSSIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIFN0cmluZyBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhl
eGVjLCBwcmVmaXgpKTsKIAogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsK
LSAgICBKU1ZhbHVlKiByZXR2YWwgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOworICAgIEpTVmFsdWVQdHIgcmV0dmFsID0g
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2N1c3RvbVJlc29sdmVy
LCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKIAogICAgIFN0
cmluZyByZXN1bHQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21YUGF0aE5TUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlciA6
IHB1YmxpYyBYUGF0aE5TUmVzb2x2ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcj4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTsKICAg
ICAgICAgCiAgICAgICAgIHZpcnR1YWwgfkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyKCk7CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFw
cGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBA
IHZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrKCkKICAgICB9CiB9CiAKLUpTVmFsdWUq
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNE
T01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwog
ICAgIGlmICghZnJhbWUpCkBAIC05MSw3ICs5MSw3IEBAIEpTVmFsdWUqIEpTRE9NQXBwbGljYXRp
b25DYWNoZTo6YWRkKEV4ZWMKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBKU1ZhbHVlKiBKU0RP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZShFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNE
T01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQpAQCAtMTE2LDcgKzExNiw3IEBAIEpTVmFsdWUqIEpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6YWRkRXZlbnQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01BcHBsaWNhdGlv
bkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RP
TUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYg
KCFnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQwLDcwICszNDAsNzAgQEAgdm9pZCBtYXJrRE9NT2JqZWN0V3Jh
cHBlcihKU0dsb2JhbERhdGEmIAogICAgIHdyYXBwZXItPm1hcmsoKTsKIH0KIAotSlNWYWx1ZSog
anNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCitKU1ZhbHVl
UHRyIGpzU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogewog
ICAgIGlmIChzLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBqc093bmVkU3RyaW5nT3JOdWxsKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKK0pTVmFsdWVQdHIganNPd25lZFN0cmlu
Z09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICByZXR1cm4ganNPd25lZFN0
cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK0pTVmFsdWVQdHIganNTdHJpbmdPclVuZGVmaW5l
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQog
Ci1KU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtVUkwmIHVy
bCkKK0pTVmFsdWVQdHIganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJM
JiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5nKCkpOwogfQogCi1KU1ZhbHVl
KiBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS1VSTCYgdXJsKQor
SlNWYWx1ZVB0ciBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS1VS
TCYgdXJsKQogewogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5nKCkpOwogfQogCi1K
U1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBLVVJMJiB1cmwp
CitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtVUkwm
IHVybCkKIHsKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmluZygpKTsKIH0KIAot
VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlKQorVVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKICAgICByZXR1cm4gdmFsdWUtPnRvU3RyaW5nKGV4ZWMp
OwogfQogCi1VU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK1VTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gVVN0
cmluZygpOwogICAgIHJldHVybiB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiB9CiAKLXZvaWQgcmVw
b3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBleGNlcHRpb24pCit2
b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBleGNl
cHRpb24pCiB7CiAgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24tPnRvU3RyaW5n
KGV4ZWMpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24tPnRvT2Jq
ZWN0KGV4ZWMpOwpAQCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiBleGUKIAogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKIH0KQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEV4CiAgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOwogICAg
IGdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZGVzY3JpcHRpb24pOwogCi0gICAgSlNW
YWx1ZSogZXJyb3JPYmplY3QgPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciBlcnJvck9iamVj
dCA9IG5vVmFsdWUoKTsKICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKICAgICAgICAg
Y2FzZSBET01FeGNlcHRpb25UeXBlOgogICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4
ZWMsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwpAQCAtNDg5LDcgKzQ4
OSw3IEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnIKICAgICAgICAg
d2luZG93LT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotSlNWYWx1ZSogb2JqZWN0
VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgb2JqZWN0VG9T
dHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVu
Y1RvU3RyaW5nKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2Fj
aGVET01PYmplY3RXcmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0LCB3cmFwcGVyKTsK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBw
ZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUqIGdldERPTU9iamVj
dFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmplY3QpCisgICAgdGVt
cGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNW
YWx1ZVB0ciBnZXRET01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFz
cyogb2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGNhY2hlRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIG9iamVj
dCwgd3JhcHBlcik7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KLSAgICB0ZW1wbGF0
ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
KiBnZXRET01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBET01DbGFzcyogb2Jq
ZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFz
cywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWVQdHIgZ2V0RE9NT2JqZWN0V3Jh
cHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCwgU1ZHRWxlbWVudCog
Y29udGV4dCkKICAgICB7CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBjYWNoZURPTU5vZGVXcmFwcGVyKG5vZGUtPmRvY3VtZW50KCksIG5vZGUsIHdyYXBw
ZXIpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
V3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSogZ2V0RE9N
Tm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBub2RlKQorICAgIHRl
bXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpT
VmFsdWVQdHIgZ2V0RE9NTm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNz
KiBub2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CkBAIC0xNDcsMjkgKzE0NywyOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6
OkpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNUYWJsZSk7CiAKLSAg
ICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSogZXhj
ZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZVB0ciBleGNlcHRpb24pOwogICAgIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRhdGlvbiBl
eGNlcHRpb24gY29kZSBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlv
biBzdGF0ZS4KICAgICB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbkNvZGUpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBudWxsIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotICAg
IEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJM
Jik7IC8vIG51bGwgaWYgdGhlIFVSTCBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3Ry
aW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIG51bGwgaWYgdGhl
IHN0cmluZyBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3RyaW5nT3JOdWxsKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyBudWxsIGlmIHRoZSBVUkwgaXMgbnVsbAogCi0g
ICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLSAgICBKU0M6
OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJM
Jik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKKyAgICBKU0M6OkpTVmFsdWVQdHIg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1
bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3Ry
aW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIHVuZGVmaW5l
ZCBpZiB0aGUgVVJMIGlzIG51bGwKIAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPckZhbHNl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhl
IHN0cmluZyBpcyBudWxsCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhlIFVSTCBpcyBu
dWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAor
ICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBLVVJMJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhlIFVSTCBpcyBudWxsCiAKICAgICAvLyBT
ZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3IgYW55
IFVTdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKICAgICAvLyBvYmplY3Qs
IHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFw
cGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgotICAgIEpTQzo6SlNWYWx1ZSoganNPd25l
ZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6VVN0cmluZyYpOyAKKyAg
ICBKU0M6OkpTVmFsdWVQdHIganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6VVN0cmluZyYpOyAKIAotICAgIEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopOyAvLyBudWxsIGlmIHRo
ZSB2YWx1ZSBpcyBudWxsCi0gICAgSlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTsgLy8gbnVsbCBp
ZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKKyAgICBKU0M6OlVTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIpOyAv
LyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCisgICAgSlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQ
dHIpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZAogCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8VD4gcHRyKSB7IHJldHVybiB0b0pTKGV4ZWMsIHB0ci5nZXQo
KSk7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZVB0ciB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFQ+IHB0cikgeyByZXR1cm4gdG9K
UyhleGVjLCBwdHIuZ2V0KCkpOyB9CiAKICAgICBib29sIGNoZWNrTm9kZVNlY3VyaXR5KEpTQzo6
RXhlY1N0YXRlKiwgTm9kZSopOwogCkBAIC0xNzksNyArMTc5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJh
bWUqKTsKICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZy
YW1lKiwgU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJh
bWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIEpTQzo6SlNWYWx1ZSogb2Jq
ZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIEpT
Qzo6SlNWYWx1ZVB0ciBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShOb2RlKik7
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6
Om1hcmsoKQogICAgIH0KIH0KIAotSlNFdmVudExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6
ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitKU0V2ZW50
TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWVQ
dHIgdmFsLCBib29sIGlzSW5saW5lKQogewogICAgIGlmICghdmFsLT5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTk1LDcgKzk1LDcgQEAgSlNFdmVudExpc3RlbmVyKiBKU0RPTUds
b2JhbE9iamVjdDo6ZmluZAogICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KG9iamVjdCk7CiB9CiAK
LVBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3Jl
YXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbCwgYm9vbCBpc0lubGlu
ZSkKK1Bhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9y
Q3JlYXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgdmFsLCBib29sIGlz
SW5saW5lKQogewogICAgIGlmIChKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTRXZl
bnRMaXN0ZW5lcih2YWwsIGlzSW5saW5lKSkKICAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwpAQCAt
MTA3LDcgKzEwNyw3IEBAIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE8K
ICAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QodmFsKSwgdGhpcywg
aXNJbmxpbmUpLmdldCgpOwogfQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogSlNET01H
bG9iYWxPYmplY3Q6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqLCBK
U1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciog
SlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoIXZhbC0+aXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTYsNyArMTE2LDcgQEAgSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsTwogICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0
KGFzT2JqZWN0KHZhbCkpOwogfQogCi1QYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitQYXNz
UmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6Zmlu
ZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMs
IHZhbCwgaXNJbmxpbmUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTYgKzU0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwogCiAg
ICAgICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIsIHJldHVybnMg
MCBpZiBubyBleGlzdGluZyBvbmUuCi0gICAgICAgIEpTRXZlbnRMaXN0ZW5lciogZmluZEpTRXZl
bnRMaXN0ZW5lcihKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFsc2UpOworICAgICAg
ICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU1ZhbHVlUHRyLCBi
b29sIGlzSW5saW5lID0gZmFsc2UpOwogCiAgICAgICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3
cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMg
R0MtcHJvdGVjdGVkLgotICAgICAgICBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gZmluZE9y
Q3JlYXRlSlNFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9v
bCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+
IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBGaW5kcyBhIHdyYXBw
ZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVudExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8g
ZXhpc3Rpbmcgb25lLgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwg
Ym9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBGaW5kcyBv
ciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlzdGVu
ZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFzc1JlZlB0cjxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFs
c2UpOworICAgICAgICBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBmaW5k
T3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+IExpc3RlbmVyc01hcDsKICAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDI5ICs2OSwy
OSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgSlNWYWx1ZSogd2luZG93UHJv
dG9GdW5jT3BlbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlhbG9nKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiB3aW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVlKiBqc0RPTVdpbmRv
d0Jhc2VDcnlwdG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwor
c3RhdGljIEpTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHdpbmRv
d1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHdpbmRvd1Byb3RvRnVuY05v
dEltcGxlbWVudGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworCitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VDcnlwdG8oRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpT
VmFsdWVQdHIganNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dCYXNl
RXZlbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogLy8gQ29uc3RydWN0
b3JzCi1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1zdGF0
aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dC
YXNlSW1hZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1zdGF0aWMgSlNWYWx1
ZSoganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dC
YXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1zdGF0
aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93
QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKLXN0YXRpYyBKU1Zh
bHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlT3B0
aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwotc3RhdGljIEpTVmFsdWUqIGpz
RE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFzZVhN
TEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwotc3RhdGljIEpT
VmFsdWUqIGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0cik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RPTVdpbmRvd0Jh
c2VJbWFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOworc3RhdGljIEpTVmFs
dWVQdHIganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RP
TVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RPTVdp
bmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNldEpT
RE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRp
YyB2b2lkIHNldEpTRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyKTsKIAogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5sdXQuaCIKIApA
QCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZU1v
ZGEKIH0KIAogc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRXhlY1N0YXRlKiBleGVjLCBGcmFt
ZSogb3BlbmVyRnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLAotICAgIGNvbnN0IFN0cmluZyYgZnJh
bWVOYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIEpTVmFsdWUqIGRp
YWxvZ0FyZ3MpCisgICAgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFdpbmRvd0ZlYXR1
cmVzJiB3aW5kb3dGZWF0dXJlcywgSlNWYWx1ZVB0ciBkaWFsb2dBcmdzKQogewogICAgIEZyYW1l
KiBhY3RpdmVGcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
KS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7CkBAIC0yNzYsNyAr
Mjc2LDcgQEAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IAogICAgIHJl
dHVybiBwYWdlLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKIH0KIAotc3RhdGljIEpTVmFs
dWUqIHNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIEpTVmFsdWUqIGRpYWxvZ0FyZ3MsIGNvbnN0IFN0cmluZyYgZmVhdHVyZUFy
Z3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBzaG93TW9kYWxEaWFsb2coRXhlY1N0YXRlKiBleGVjLCBG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBKU1ZhbHVlUHRyIGRpYWxvZ0FyZ3MsIGNv
bnN0IFN0cmluZyYgZmVhdHVyZUFyZ3MpCiB7CiAgICAgaWYgKCFjYW5TaG93TW9kYWxEaWFsb2dO
b3coZnJhbWUpIHx8ICFhbGxvd1BvcFVwKGV4ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSogc2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0CiAKICAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1ZSBlaXRoZXIganVzdCBiZWZv
cmUgY2xlYXJpbmcgdGhlIGRpYWxvZyB3aW5kb3cncwogICAgIC8vIHByb3BlcnRpZXMgKGluIEpT
RE9NV2luZG93QmFzZTo6Y2xlYXIpLCBvciB3aGVuIG9uIHJldHVybiBmcm9tIHJ1bk1vZGFsLgot
ICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gbm9WYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgcmV0
dXJuVmFsdWUgPSBub1ZhbHVlKCk7CiAgICAgZGlhbG9nV2luZG93LT5zZXRSZXR1cm5WYWx1ZVNs
b3QoJnJldHVyblZhbHVlKTsKICAgICBkaWFsb2dGcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+cnVu
TW9kYWwoKTsKICAgICBkaWFsb2dXaW5kb3ctPnNldFJldHVyblZhbHVlU2xvdCgwKTsKQEAgLTM1
NSwxMiArMzU1LDEyIEBAIHN0YXRpYyBKU1ZhbHVlKiBzaG93TW9kYWxEaWFsb2coRXhlY1N0YXQK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUNy
eXB0byhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikK
K0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlQ3J5cHRvKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OyAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKIH0KIAotSlNWYWx1ZSoganNET01XaW5kb3dCYXNl
RXZlbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VFdmVudChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
aWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNl
KCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC0zNjksMTQgKzM2OSwxNCBAQCBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VFdmVudChF
eGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmN1cnJlbnRFdmVudCgpKTsKIH0KIAot
SlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRv
d0Jhc2VJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2Uq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTSW1hZ2VDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOwogfQogCi1KU1ZhbHVlKiBqc0RPTVdpbmRvd0Jh
c2VNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VD
aGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICNpZiBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcpCiAgICAgaWYgKCFz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTM4NywyMSArMzg3LDIxIEBAIEpTVmFsdWUqIGpz
RE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEUKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBqc0RP
TVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VPcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU09wdGlvbkNv
bnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKSk7CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhNTEh0dHBS
ZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKIH0KIAotSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVk
aW8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmpl
Y3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC00MTQsNyAr
NDE0LDcgQEAgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKgogI2VuZGlm
CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpz
RE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgaWYg
KCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTQyNSw3ICs0MjUsNyBAQCBKU1ZhbHVlKiBq
c0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlCiAjZW5kaWYKIH0KIAotSlNWYWx1ZSoganNE
T01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFz
ZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogI2lmIEVOQUJMRShYU0xUKQogICAgIGlmICghc3RhdGlj
X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC00MzYsNyArNDM2LDcgQEAgSlNWYWx1ZSoganNET01XaW5k
b3dCYXNlWFNMVFByb2Nlc3NvcihFeAogI2VuZGlmCiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dC
YXNlRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSog
dmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNf
Y2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVj
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlRXZlbnQoRXhlY1N0YXRlKiAKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2Uq
Pih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkV2ZW50IiksIHZhbHVl
KTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dC
YXNlQXVkaW8oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZVB0
ciB2YWx1ZSkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNP
YmplY3QpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm47CkBAIC00NTIs
NyArNDUyLDcgQEAgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUqIAogICAg
IHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoSWRl
bnRpZmllcihleGVjLCAiQXVkaW8iKSwgdmFsdWUpOwogfQogCi12b2lkIHNldEpTRE9NV2luZG93
QmFzZUltYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUq
IHZhbHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghc3RhdGlj
X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhl
YykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogCiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJJbWFnZSIpLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpT
RE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RP
TVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlTWVz
c2FnZUNoYW5uZWwoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2Jq
ZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIk1lc3NhZ2VDaGFubmVsIiksIHZhbHVl
KTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93
QmFzZU9wdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVl
UHRyIHZhbHVlKQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhp
c09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ3
Niw3ICs0NzYsNyBAQCB2b2lkIHNldEpTRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqCiAg
ICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJ
ZGVudGlmaWVyKGV4ZWMsICJPcHRpb24iKSwgdmFsdWUpOwogfQogCi12b2lkIHNldEpTRE9NV2lu
ZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1Zh
bHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSoKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
d0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIldvcmtlciIp
LCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lk
IHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgc2V0SlNET01XaW5kb3dC
YXNlWE1MSHR0cFJlcXVlc3QoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0
aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlhNTEh0dHBSZXF1ZXN0Iiks
IHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTAyLDE3ICs1MDIsMTcgQEAgdm9pZCBzZXRKU0RPTVdpbmRvd0Jh
c2VYU0xUUHJvY2Vzc29yKEV4ZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpT
RE9NV2luZG93QmFzZTo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZVB0ciBKU0RPTVdpbmRvd0Jhc2U6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPmNoaWxk
KEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKS0+ZG9tV2luZG93KCkpOwogfQogCi1KU1ZhbHVl
KiBKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNET01XaW5k
b3dCYXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGlj
X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwo
KS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90LmluZGV4KCkpLT5kb21XaW5kb3coKSk7CiB9
CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgRG9j
dW1lbnQqIGRvYyA9IHRoaXNPYmotPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKQEAgLTU1
Niw3ICs1NTYsNyBAQCBib29sIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAK
ICAgICAvLyBEbyBwcm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRoYXQgZnVuY3Rpb25zIGFuZCBh
dHRyaWJ1dGVzIGluIHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKICAgICAvLyBwcmVjZWRlbmNlIG92
ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKLSAgICBKU1ZhbHVlKiBwcm90byA9IHBy
b3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBwcm90b3R5cGUoKTsKICAgICBpZiAo
cHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICgh
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTU5NCw3ICs1OTQsNyBAQCBib29sIEpTRE9NV2lu
ZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEpTRE9NV2luZG93
QmFzZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0RPTVdpbmRv
d0Jhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGNvbnN0
IEhhc2hFbnRyeSogZW50cnkgPSBKU0RPTVdpbmRvd0Jhc2VUYWJsZS5lbnRyeShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewpAQCAtNzE3LDcgKzcxNyw3IEBAIEpTR2xvYmFs
RGF0YSogSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0cKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKICAgICBpZiAoIXdpbmRvdykKQEAg
LTc4OCw3ICs3ODgsNyBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVuKEV4ZWNTdGF0ZSog
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygpKTsgLy8gZ2xvYmFsIG9i
amVjdAogfQogCi1KU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2coRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyh0aGlzVmFs
dWUpOwogICAgIGlmICghd2luZG93KQpAQCAtODAzLDcgKzgwMyw3IEBAIEpTVmFsdWUqIHdpbmRv
d1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZygKICAgICByZXR1cm4gc2hvd01vZGFsRGlhbG9nKGV4
ZWMsIGZyYW1lLCB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFy
Z3MuYXQoZXhlYywgMCkpLCBhcmdzLmF0KGV4ZWMsIDEpLCB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMikpKTsKIH0KIAotSlNWYWx1ZSog
d2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHdpbmRvd1By
b3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0b0pTRE9NV2luZG93
KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CkBAIC04MTIsNyArODEyLDcgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50
ZWQoRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01XaW5kb3dCYXNlOjpzZXRS
ZXR1cm5WYWx1ZVNsb3QoSlNWYWx1ZSoqIHNsb3QpCit2b2lkIEpTRE9NV2luZG93QmFzZTo6c2V0
UmV0dXJuVmFsdWVTbG90KEpTVmFsdWVQdHIqIHNsb3QpCiB7CiAgICAgZCgpLT5yZXR1cm5WYWx1
ZVNsb3QgPSBzbG90OwogfQpAQCAtODI5LDcgKzgyOSw3IEBAIGludCBKU0RPTVdpbmRvd0Jhc2U6
Omluc3RhbGxUaW1lb3V0KGNvbnMKICAgICByZXR1cm4gaW5zdGFsbFRpbWVvdXQobmV3IFNjaGVk
dWxlZEFjdGlvbihoYW5kbGVyKSwgdCwgc2luZ2xlU2hvdCk7CiB9CiAKLWludCBKU0RPTVdpbmRv
d0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuYywgY29u
c3QgQXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2ludCBKU0RPTVdpbmRv
d0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jLCBj
b25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewogICAgIHJldHVy
biBpbnN0YWxsVGltZW91dChuZXcgU2NoZWR1bGVkQWN0aW9uKGV4ZWMsIGZ1bmMsIGFyZ3MpLCB0
LCBzaW5nbGVTaG90KTsKIH0KQEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIEpTRE9NV2luZG93QmFz
ZTo6ZGlzY29ubmVjdEZyYW1lKCkKIHsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBE
T01XaW5kb3cqIGRvbVdpbmRvdykKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqLCBET01XaW5k
b3cqIGRvbVdpbmRvdykKIHsKICAgICBpZiAoIWRvbVdpbmRvdykKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwpAQCAtODYwLDcgKzg2MCw3IEBAIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEZy
YW1lKiBmcmFtZSkKICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT53
aW5kb3coKTsKIH0KIAotSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNWYWx1ZSogdmFsdWUp
CitKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlm
ICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE2ICs2MSwx
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7
CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CiAKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KGNvbnN0IEpTQzo6VVN0cmluZyYgaGFu
ZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgICAgIGludCBpbnN0YWxsVGltZW91
dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAgIGludCBpbnN0YWxs
VGltZW91dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciBmdW5jdGlvbiwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICAgICAgdm9p
ZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsK
IAogICAgICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0dXJuIHZhbHVlIHdo
ZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgotICAgICAgICB2b2lkIHNldFJldHVyblZhbHVlU2xv
dChKU0M6OkpTVmFsdWUqKiBzbG90KTsKKyAgICAgICAgdm9pZCBzZXRSZXR1cm5WYWx1ZVNsb3Qo
SlNDOjpKU1ZhbHVlUHRyKiBzbG90KTsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IGltcGw7
CiAKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsKKyAgICAgICAg
ICAgIEpTQzo6SlNWYWx1ZVB0ciogcmV0dXJuVmFsdWVTbG90OwogICAgICAgICAgICAgSlNET01X
aW5kb3dTaGVsbCogc2hlbGw7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUqIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSogbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZVB0ciBjaGlsZEZyYW1lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWVQdHIgbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICB2b2lkIGNsZWFySGVs
cGVyT2JqZWN0UHJvcGVydGllcygpOwogICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoU2NoZWR1
bGVkQWN0aW9uKiwgaW50IGludGVydmFsLCBib29sIHNpbmdsZVNob3QpOwpAQCAtMTE5LDExICsx
MTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAvLyBSZXR1cm5zIGEg
SlNET01XaW5kb3cgb3IganNOdWxsKCkKLSAgICBKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBET01XaW5kb3cqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIERPTVdpbmRvdyopOwogCiAgICAgLy8gUmV0dXJucyBKU0RPTVdpbmRvdyBvciAwCiAg
ICAgSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJhbWUqKTsKLSAgICBKU0RPTVdpbmRvdyog
dG9KU0RPTVdpbmRvdyhKU0M6OkpTVmFsdWUqKTsKKyAgICBKU0RPTVdpbmRvdyogdG9KU0RPTVdp
bmRvdyhKU0M6OkpTVmFsdWVQdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYx
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6ZGVmaW5lU2V0dGVy
KEV4ZWNTdGF0ZQogICAgIEJhc2U6OmRlZmluZVNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHNl
dHRlckZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6Omxvb2t1cEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pTVmFsdWVQ
dHIgSlNET01XaW5kb3c6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBPbmx5IGFsbG93IGxvb2tpbmctdXAgZ2V0
dGVycyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgogICAgIGlmICghYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6bG9v
a3VwR2V0dGVyKEV4ZWNTCiAgICAgcmV0dXJuIEJhc2U6Omxvb2t1cEdldHRlcihleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6bG9va3VwU2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorSlNWYWx1ZVB0ciBK
U0RPTVdpbmRvdzo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIC8vIE9ubHkgYWxsb3cgbG9va2luZy11cCBzZXR0ZXJz
IGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCiAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93Ojpsb29rdXBT
ZXR0ZXIoRXhlY1MKICAgICByZXR1cm4gQmFzZTo6bG9va3VwU2V0dGVyKGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0g
YXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1l
KCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpTRE9N
V2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU0RP
TVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIERPTVdpbmRvdyogd2luZG93ID0gaW1wbCgpOwog
CkBAIC0xNzUsOSArMTc1LDkgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4
ZWNTdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogc2V0
VGltZW91dE9ySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBKU0RPTVdpbmRvdyogd2luZG93LCBj
b25zdCBBcmdMaXN0JiBhcmdzLCBib29sIHRpbWVvdXQpCitzdGF0aWMgSlNWYWx1ZVB0ciBzZXRU
aW1lb3V0T3JJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NV2luZG93KiB3aW5kb3csIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIGJvb2wgdGltZW91dCkKIHsKLSAgICBKU1ZhbHVlKiB2ID0gYXJn
cy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAg
IGludCBkZWxheSA9IGFyZ3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKHYt
PmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3Rh
bGxUaW1lb3V0KGFzU3RyaW5nKHYpLT52YWx1ZSgpLCBkZWxheSwgdGltZW91dCkpOwpAQCAtMTg5
LDM0ICsxODksMzQgQEAgc3RhdGljIEpTVmFsdWUqIHNldFRpbWVvdXRPckludGVydmFsKEV4ZQog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1lb3V0KGV4ZWMsIHYs
IGFyZ3NUYWlsLCBkZWxheSwgdGltZW91dCkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6
c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICByZXR1cm4gc2V0VGltZW91dE9ySW50ZXJ2YWwoZXhlYywgdGhpcywg
YXJncywgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVhclRpbWVvdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRv
dzo6Y2xlYXJUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICByZW1vdmVUaW1lb3V0KGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhlYykpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6c2V0SW50
ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIHJldHVybiBzZXRUaW1lb3V0T3JJbnRlcnZhbChleGVjLCB0aGlzLCBhcmdz
LCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVhckludGVydmFsKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6
OmNsZWFySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJlbW92ZVRpbWVvdXQoYXJncy5hdChleGVjLCAwKS0+dG9JbnQzMihleGVjKSk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjphdG9iKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5k
b3c6OmF0b2IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlm
IChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIEpTVmFsdWUqIHYgPSBhcmdz
LmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAg
aWYgKHYtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIApA
QCAtMjM3LDEyICsyMzcsMTIgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OmF0b2IoRXhlY1N0YXRl
KiBleAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRhdGEoKSwgb3V0LnNp
emUoKSkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93OjpidG9hKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkg
PCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBl
bm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBKU1ZhbHVlKiB2ID0gYXJncy5hdChleGVjLCAwKTsK
KyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmICh2LT5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAKQEAgLTI2Miw3ICsyNjIs
NyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSk7CiB9CiAKLUpT
VmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjc2LDcgKzI3Niw3
IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEUKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCkBAIC0yOTAsNyArMjkwLDcgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OnJl
bW92ZUV2ZW50TGlzdGVuZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1ET01XaW5k
b3cqIHRvRE9NV2luZG93KEpTVmFsdWUqIHZhbHVlKQorRE9NV2luZG93KiB0b0RPTVdpbmRvdyhK
U1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtMzAyLDIyICszMDIsMjIgQEAgRE9NV2luZG93KiB0b0RPTVdpbmRvdyhK
U1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0
YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG5vbkNhY2hp
bmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBu
ZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNET01X
aW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0
YXRpY0JsdXJGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbm9uQ2FjaGlu
Z1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzRE9NV2lu
ZG93UHJvdG90eXBlRnVuY3Rpb25CbHVyKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRp
Y0ZvY3VzRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG5vbkNhY2hpbmdT
dGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNET01XaW5k
b3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRp
Y1Bvc3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG5vbkNh
Y2hpbmdTdGF0aWNQb3N0TWVzc2FnZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAg
IHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDIsIHByb3BlcnR5TmFt
ZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKTsKIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMCArMzUsMTAgQEAgaW5saW5lIGNvbnN0IEpTRE9NV2luZG93KiBhc0pTRE9NV2luZG93
KAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvdyo+KGdsb2JhbE9iamVj
dCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0
ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwotSlNDOjpKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQmx1ckZ1bmN0aW9u
R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVu
Y3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25z
dCBKU0M6OlByb3BlcnR5U2xvdCYpOwotSlNDOjpKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljUG9z
dE1lc3NhZ2VGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CitKU0M6OkpTVmFsdWVQdHIgbm9uQ2Fj
aGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworSlNDOjpKU1ZhbHVlUHRy
IG5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworSlNDOjpKU1Zh
bHVlUHRyIG5vbkNhY2hpbmdTdGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKK0pT
Qzo6SlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU0RPTVdpbmRvdzo6Y3VzdG9tR2V0T3du
UHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBAIC0xMjMsNyArMTIz
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTRE9NV2luZG93OjpjdXN0b21HZQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgSlNET01XaW5kb3c6OmN1c3RvbVB1dChKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSogdmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90JiBzbG90KQoraW5saW5lIGJvb2wg
SlNET01XaW5kb3c6OmN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSwgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFpbXBsKCktPmZyYW1lKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwu
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEyICs4MiwxMiBAQCBib29sIEpTRE9NV2lu
ZG93U2hlbGw6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIG1fd2luZG93LT5nZXRPd25Q
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBKU0RPTVdp
bmRvd1NoZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTRE9N
V2luZG93U2hlbGw6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IG1fd2luZG93LT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNET01XaW5kb3dTaGVsbDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQordm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXRXaXRoQXR0cmlidXRlcyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBtX3dpbmRvdy0+cHV0V2l0aEF0dHJp
YnV0ZXMoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyk7CiB9CkBAIC0xMTcs
MTIgKzExNywxMiBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OmRlZmluZVNldHRlcihFeGVjCiAg
ICAgbV93aW5kb3ctPmRlZmluZVNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHNldHRlckZ1bmN0
aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dTaGVsbDo6bG9va3VwR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorSlNWYWx1ZVB0ciBK
U0RPTVdpbmRvd1NoZWxsOjpsb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIG1fd2luZG93LT5sb29rdXBHZXR0
ZXIoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dTaGVsbDo6
bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIG1f
d2luZG93LT5sb29rdXBTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KQEAgLTE2MCw3ICsx
NjAsNyBAQCB2b2lkKiBKU0RPTVdpbmRvd1NoZWxsOjpvcGVyYXRvciBuZXcoc2l6CiAvLyBDb252
ZXJzaW9uIG1ldGhvZHMKIC8vIC0tLS0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBGcmFt
ZSogZnJhbWUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiwgRnJhbWUqIGZyYW1lKQogewog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG90eXBlKSAKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQdHIg
cHJvdG90eXBlKSAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpOyAKICAg
ICAgICAgfQpAQCAtNjksMjIgKzY5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgICAgdmlydHVhbCBKU0M6OlVTdHJpbmcgY2xhc3NO
YW1lKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0
ZXMoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlUHRyLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5QXR0cmlidXRlcyhKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVHZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlND
OjpKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5l
U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNPYmplY3QqIHNldHRlckZ1bmN0aW9uKTsKLSAgICAgICAgdmlydHVhbCBKU0M6
OkpTVmFsdWUqIGxvb2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIGxvb2t1
cFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgbG9va3VwR2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBsb29rdXBTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgSlND
OjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0KCk7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlND
OjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KIAogICAg
ICAgICBKU0RPTVdpbmRvdyogbV93aW5kb3c7CiAgICAgfTsKIAotICAgIEpTQzo6SlNWYWx1ZSog
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBGcmFtZSopOwogICAgIEpTRE9NV2luZG93U2hlbGwqIHRvSlNET01X
aW5kb3dTaGVsbChGcmFtZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLUpTVmFsdWUqIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RhdGFiYXNlOjpjaGFuZ2VWZXJz
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBTdHJpbmcg
b2xkVmVyc2lvbiA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwogICAgIFN0cmlu
ZyBuZXdWZXJzaW9uID0gYXJncy5hdChleGVjLCAxKS0+dG9TdHJpbmcoZXhlYyk7CkBAIC04Niw3
ICs4Niw3IEBAIEpTVmFsdWUqIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1MKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNEYXRhYmFzZTo6dHJhbnNhY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0Rh
dGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgSlNPYmplY3QqIG9iamVjdDsKICAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIHZvaWQgSlNEb2N1bWVudDo6bWFyaygpCiAgICAgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250
ZXh0KCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGltcGwoKSk7CiB9CiAKLUpTVmFs
dWUqIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQ
dHIgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEZy
YW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKS0+ZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQpAQCAtNTgsNyArNTgsNyBAQCBKU1ZhbHVlKiBKU0RvY3VtZW50Ojpsb2Nh
dGlvbihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygp
LT5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
KiAKICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uoc3RyLCBhY3Rp
dmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2UsIHVzZXJHZXN0dXJl
KTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVu
dCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50KiBkb2N1bWVudCkK
IHsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0aW5nU3JjVG9KYXZh
CiAgICAgcmV0dXJuIHRydWU7CiB9IAogCi1KU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRWxl
bWVudDo6c2V0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBBdG9taWNTdHJpbmcgbmFtZSA9IGFy
Z3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNzYsNyArNzYsNyBAQCBKU1ZhbHVl
KiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShFeGVjU3RhCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLUpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXR0ciogbmV3QXR0ciA9IHRvQXR0cihhcmdzLmF0
KGV4ZWMsIDApKTsKQEAgLTg5LDEyICs4OSwxMiBAQCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5vZGUoRXhlCiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwo
ZXhlYywgaW1wLCBuZXdBdHRyLT5uYW1lKCksIG5ld0F0dHItPnZhbHVlKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywg
V1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGVjKSkpOworICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6OmdldFB0cihpbXAtPnNldEF0dHJpYnV0
ZU5vZGUobmV3QXR0ciwgZWMpKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5T
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNFbGVt
ZW50OjpzZXRBdHRyaWJ1dGVOUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFj
ZVVSSSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkp
OwpAQCAtMTEwLDcgKzExMCw3IEBAIEpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTlMo
RXhlY1MKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNFbGVtZW50
OjpzZXRBdHRyaWJ1dGVOb2RlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgQXR0ciogbmV3QXR0ciA9IHRvQXR0cihhcmdzLmF0KGV4ZWMsIDApKTsKQEAgLTEyMywxMiAr
MTIzLDEyIEBAIEpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEUKICAgICBp
ZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAsIG5ld0F0dHItPm5h
bWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6OmdldFB0cihpbXAtPnNldEF0
dHJpYnV0ZU5vZGVOUyhuZXdBdHRyLCBlYykpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHRv
SlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlTlMobmV3QXR0ciwgZWMp
KSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgRWxlbWVudCog
ZWxlbWVudCkKK0pTVmFsdWVQdHIgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMsIEVs
ZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNFdmVudDo6Y2xpcGJvYXJkRGF0YShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBpbXBsKCktPmlzQ2xpcGJvYXJkRXZlbnQo
KSA/IHRvSlMoZXhlYywgaW1wbCgpLT5jbGlwYm9hcmREYXRhKCkpIDoganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50KiBldmVudCkKK0pTVmFs
dWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50KiBldmVudCkKIHsKICAgICBKU0xvY2sg
bG9jayhmYWxzZSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgSlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5jdGlvbiA9
IGxpc3RlbmVyLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7Cisg
ICAgSlNWYWx1ZVB0ciBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbGlzdGVuZXItPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGhhbmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRh
KGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CkBAIC0xMDEs
MTIgKzEwMSwxMiBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAg
ICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpOwogICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
ZXhlYywgZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCA/IGdsb2JhbERhdGEtPmR5bmFt
aWNHbG9iYWxPYmplY3QgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUqIHJldHZh
bDsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR2YWw7CiAgICAgICAgIGlmIChoYW5kbGVFdmVudEZ1
bmN0aW9uKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7
CiAgICAgICAgICAgICByZXR2YWwgPSBjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbGlzdGVuZXIsIGFyZ3MpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB0aGlz
VmFsdWU7CiAgICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKICAgICAgICAgICAgICAgICB0
aGlzVmFsdWUgPSBnbG9iYWxPYmplY3QtPnRvVGhpc09iamVjdChleGVjKTsKICAgICAgICAgICAg
IGVsc2UKQEAgLTI2Myw3ICsyNjMsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6
bGlzdGVuZXJPCiB9CiAKIC8vIEhlbHBlciBmdW5jdGlvbgotaW5saW5lIEpTVmFsdWUqIGV2ZW50
UGFyYW1ldGVyTmFtZShKU0xhenlFdmVudExpc3RlbmVyOjpMYXp5RXZlbnRMaXN0ZW5lclR5cGUg
dHlwZSwgRXhlY1N0YXRlKiBleGVjKQoraW5saW5lIEpTVmFsdWVQdHIgZXZlbnRQYXJhbWV0ZXJO
YW1lKEpTTGF6eUV2ZW50TGlzdGVuZXI6OkxhenlFdmVudExpc3RlbmVyVHlwZSB0eXBlLCBFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBKU0xhenlFdmVu
dExpc3RlbmVyOjpIVE1MTGF6eUV2ZW50TGlzdGVuZXI6CkBAIC0zMTksNyArMzE5LDcgQEAgdm9p
ZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAgICAgICAvLyAoYW5kIHRo
ZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxl
clNjb3BlKQogICAgICAgICBTY29wZUNoYWluIHNjb3BlID0gbGlzdGVuZXJBc0Z1bmN0aW9uLT5z
Y29wZSgpOwogCi0gICAgICAgIEpTVmFsdWUqIHRoaXNPYmogPSB0b0pTKGV4ZWMsIG1fb3JpZ2lu
YWxOb2RlKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB0aGlzT2JqID0gdG9KUyhleGVjLCBtX29yaWdp
bmFsTm9kZSk7CiAgICAgICAgIGlmICh0aGlzT2JqLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KGFzT2JqZWN0KHRoaXNPYmopKS0+cHVz
aEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIGxpc3RlbmVyQXNG
dW5jdGlvbi0+c2V0U2NvcGUoc2NvcGUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0
ZSogZXhlYywgRXZlbnRUYXJnZXQqIHRhcmdldCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEV2ZW50VGFyZ2V0OwogCi0gICAgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgRXZlbnRUYXJnZXQqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEV2ZW50VGFyZ2V0Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDEzICs3NCwxMyBAQAogICAgIG1hY3JvKHNwZWNpZmljRXZlbnRUYXJnZXQsIE9uVW5s
b2FkLCB1bmxvYWRFdmVudCkgXAogCiAjZGVmaW5lIEVWRU5UX0xJU1RFTkVSX0dFVFRFUihzcGVj
aWZpY0V2ZW50VGFyZ2V0LCBuYW1lLCBldmVudCkgXAotSlNDOjpKU1ZhbHVlKiBqcyMjc3BlY2lm
aWNFdmVudFRhcmdldCMjbmFtZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90JiBzbG90KSBcCitKU0M6OkpTVmFsdWVQdHIganMj
I3NwZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCkgXAogeyBcCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEpTIyNzcGVjaWZpY0V2ZW50VGFyZ2V0Kj4oc2xvdC5zbG90QmFzZSgp
KS0+Z2V0TGlzdGVuZXIoZXZlbnQpOyBcCiB9IFwKIAogI2RlZmluZSBFVkVOVF9MSVNURU5FUl9T
RVRURVIoc3BlY2lmaWNFdmVudFRhcmdldCwgbmFtZSwgZXZlbnQpIFwKLXZvaWQgc2V0SlMjI3Nw
ZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEpTQzo6SlNWYWx1ZSogdmFsdWUpIFwKK3ZvaWQgc2V0SlMjI3NwZWNp
ZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNPYmplY3Qq
IGJhc2VPYmplY3QsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSkgXAogeyBcCiAgICAgc3RhdGljX2Nh
c3Q8SlMjI3NwZWNpZmljRXZlbnRUYXJnZXQqPihiYXNlT2JqZWN0KS0+c2V0TGlzdGVuZXIoZXhl
YywgZXZlbnQsIHZhbHVlKTsgXAogfSBcCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXROb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNFdmVudFRhcmdl
dE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xv
YmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWds
b2JhbE9iamVjdCkKQEAgLTUyLDcgKzUyLDcgQEAgSlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGU6
OmFkZEV2ZW50TGlzdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBK
U0V2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChp
bXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjEgKzM5LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2
YWx1ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25P
cHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoIXZh
bHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7CiAKLSAgICBKU1ZhbHVlKiBlbmFibGVIaWdoQWNjdXJhY3lW
YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImVuYWJsZUhpZ2hBY2N1
cmFjeSIpKTsKKyAgICBKU1ZhbHVlUHRyIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYm9vbCBl
bmFibGVIaWdoQWNjdXJhY3kgPSBlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBKU1ZhbHVlKiB0aW1lb3V0VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJ0aW1lb3V0IikpOworICAgIEpTVmFsdWVQdHIgdGltZW91dFZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHVuc2lnbmVkIHRpbWVvdXQg
PSB0aW1lb3V0VmFsdWUtPnRvVUludDMyKGV4ZWMpOwpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0CiAgICAgcmV0dXJuIFBvc2l0aW9uT3B0
aW9uczo6Y3JlYXRlKGVuYWJsZUhpZ2hBY2N1cmFjeSwgdGltZW91dCk7CiB9CiAKLUpTVmFsdWUq
IEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3Np
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gQXJn
dW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNr
LCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+
IHBvc2l0aW9uQ2FsbGJhY2s7CkBAIC0xMDIsNyArMTAyLDcgQEAgSlNWYWx1ZSogSlNHZW9sb2Nh
dGlvbjo6Z2V0Q3VycmVudFBvc2l0aQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1K
U1ZhbHVlKiBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gQXJndW1l
bnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAo
b3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBv
c2l0aW9uQ2FsbGJhY2s7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxl
Y3Rpb24uaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFs
bENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlKiBwcm90bykg
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7IAogICAgICAgICB9CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBib29sIEpTSFRN
TEFwcGxldEVsZW1lbnQ6OmN1c3RvbUdldE93blByCiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCB0aGlzKTsK
IH0KIAotYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmN1c3RvbVB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0
Q3VzdG9tUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcGwoKSwgc2xvdCk7CiB9CkBA
IC01Myw3ICs1Myw3IEBAIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Y2FuR2V0SXRlbXNGb3IK
ICAgICByZXR1cm4gcHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IjsKIH0K
IAotSlNWYWx1ZSogSlNIVE1MQXBwbGV0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIEpTVmFsdWUqIGdldE5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBIVE1MQ29sbGVjdGlv
biogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorc3RhdGljIEpTVmFsdWVQ
dHIgZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xsZWN0aW9uKiBpbXBsLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+IG5hbWVkSXRlbXM7CiAgICAgaW1wbC0+bmFtZWRJdGVtcyhwcm9wZXJ0eU5hbWUsIG5hbWVk
SXRlbXMpOwpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZ2V0TmFtZWRJdGVtcyhF
eGVjU3RhdGUqCiAKIC8vIEhUTUxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5
IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwsCiAvLyBzbyB0aGF0IGRvY3VtZW50LmZvcm1zLml0
ZW0oMCkgYW5kIGRvY3VtZW50LmZvcm1zKDApIGJvdGggd29yay4KLXN0YXRpYyBKU1ZhbHVlKiBj
YWxsSFRNTENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbEhUTUxD
b2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTAyLDEzICsxMDIsMTMgQEAgYm9vbCBKU0hU
TUxDb2xsZWN0aW9uOjpjYW5HZXRJdGVtc0Zvck5hbQogICAgIHJldHVybiAhZ2V0TmFtZWRJdGVt
cyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpLT5pc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBKU0hUTUxDb2xsZWN0aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MQ29sbGVj
dGlvbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiBnZXROYW1lZEl0
ZW1zKGV4ZWMsIHRoaXNPYmotPmltcGwoKSwgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSog
SlNIVE1MQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgb2s7CiAgICAgdWludDMyX3QgaW5kZXgg
PSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2ssIGZhbHNlKTsK
QEAgLTExNywxMiArMTE3LDEyIEBAIEpTVmFsdWUqIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhl
Y1N0YXQKICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCBpbXBsKCksIElkZW50aWZpZXIo
ZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSog
SlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gZ2V0TmFtZWRJdGVt
cyhleGVjLCBpbXBsKCksIElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xs
ZWN0aW9uKiBjb2xsZWN0aW9uKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSFRN
TENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCiB7CiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBib29sIEpTSFRNTERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoCiAgICAgcmV0dXJuIGF0
b21pY1Byb3BlcnR5TmFtZSAmJiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0
eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUp
KTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU0hUTUxEb2N1bWVudCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTSFRN
TERvY3VtZW50Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgSFRNTERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXNPYmotPmltcGwoKSk7
CkBAIC03OCwxNiArNzgsMTcgQEAgSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlYwogCiAvLyBDdXN0b20gYXR0cmlidXRlcwogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6
YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6OmFs
bChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gSWYgImFsbCIgaGFzIGJlZW4gb3Zl
cndyaXR0ZW4sIHJldHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBpZiAoSlNWYWx1ZSog
diA9IGdldERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJhbGwiKSkpCisgICAgSlNWYWx1ZVB0ciB2
ID0gZ2V0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgImFsbCIpKTsKKyAgICBpZiAodikKICAgICAg
ICAgcmV0dXJuIHY7CiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnQqPihpbXBsKCkpLT5hbGwoKS5nZXQoKSk7CiB9CiAKLXZvaWQgSlNIVE1MRG9jdW1lbnQ6
OnNldEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxEb2N1
bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICAv
LyBBZGQgImFsbCIgdG8gdGhlIHByb3BlcnR5IG1hcC4KICAgICBwdXREaXJlY3QoSWRlbnRpZmll
cihleGVjLCAiYWxsIiksIHZhbHVlKTsKQEAgLTk1LDcgKzk2LDcgQEAgdm9pZCBKU0hUTUxEb2N1
bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZQogCiAvLyBDdXN0b20gZnVuY3Rpb25zCiAKLUpTVmFs
dWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb3Ro
ZXIgYnJvd3NlcnMsIHBhc3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAyIHBhcmFtZXRlcnMg
dG8gdGhlIHdpbmRvdy4KICAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7CkBAIC0xMDMsNyArMTA0
LDcgQEAgSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRlKgogICAgICAgICBp
ZiAoZnJhbWUpIHsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdyYXBwZXIgPSB0b0pT
RE9NV2luZG93U2hlbGwoZnJhbWUpOwogICAgICAgICAgICAgaWYgKHdyYXBwZXIpIHsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IHdyYXBwZXItPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJvcGVuIikpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24g
PSB3cmFwcGVyLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAib3BlbiIpKTsKICAgICAgICAg
ICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgICAgICAgICAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTEzOCwxNCArMTM5LDE0IEBAIHN0YXRp
YyBTdHJpbmcgd3JpdGVIZWxwZXIoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0hUTUxEb2N1bWVu
dDo6d3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIERv
Y3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+aW1wbCgpLT5kb2N1bWVudCgpOwogICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1
bWVudCo+KGltcGwoKSktPndyaXRlKHdyaXRlSGVscGVyKGV4ZWMsIGFyZ3MpLCBhY3RpdmVEb2N1
bWVudCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTERv
Y3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01X
aW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5kb2N1bWVudCgpOwog
ICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPndyaXRlKHdyaXRlSGVscGVy
KGV4ZWMsIGFyZ3MpICsgIlxuIiwgYWN0aXZlRG9jdW1lbnQpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2
MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6
OmN1c3RvbUdldE93blBybwogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNI
VE1MRW1iZWRFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgaW1wbCgpLCBzbG90KTsKIH0KQEAgLTUzLDcgKzUzLDcgQEAg
Ym9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTgogICAgIHJldHVybiBwcm9w
ZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwogfQogCi1KU1ZhbHVlKiBKU0hU
TUxFbWJlZEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIg
SlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
cmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNI
VE1MRm9ybUVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmEKICAgICByZXR1cm4gbmFtZWRJdGVtcy5z
aXplKCk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEZvcm1FbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTEZvcm1FbGVtZW50OjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0
KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpOwogICAgIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFsbG93U2V0
dGluZ0phdmFzY3JpcAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTSFRNTEZyYW1lRWxl
bWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTSFRN
TEZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkK
IHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVt
ZW50Kj4oaW1wbCgpKTsKICAgICBTdHJpbmcgc3JjVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCB2YWx1ZSk7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSlNIVE1MRnJhbWVF
bGVtZW50OjpzZXRTcmMoRXhlY1N0YXQKICAgICByZXR1cm47CiB9CiAKLXZvaWQgSlNIVE1MRnJh
bWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQor
dm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBTdHJpbmcgbG9jYXRpb25WYWx1ZSA9
IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgSlNIVE1M
RnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJdGVtc0YKICAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUt
Pmhhc1RhZ05hbWUoZnJhbWVUYWcpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxGcmFtZVNldEVsZW1l
bnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTEZyYW1lU2V0RWxl
bWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0hUTUxFbGVtZW50KiB0aGlz
T2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxJRnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEhUTUxJRnJhbWVFbGVtZW50KiBp
bXAgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KGltcGwoKSk7CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgSlNIVE1MSW5w
dXRFbGVtZW50OjpjdXN0b21HZXRPd25Qcm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFs
dWUqIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorSlNWYWx1ZVB0ciBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbXBsKCkpOwogICAgIGlmICghaW5wdXQtPmNhbkhh
dmVTZWxlY3Rpb24oKSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSogSlNIVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25TdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbnB1dC0+c2VsZWN0
aW9uU3RhcnQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9u
RW5kKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1MSW5wdXRFbGVtZW50
OjpzZWxlY3Rpb25FbmQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGltcGwoKSk7CiAg
ICAgaWYgKCFpbnB1dC0+Y2FuSGF2ZVNlbGVjdGlvbigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYx
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50
OjpjdXN0b21HZXRPd25QcgogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9CiAKLWJvb2wgSlNI
VE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1c3RvbVB1dChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBsKCksIHNsb3QpOwogfQpAQCAtNTMsNyArNTMsNyBA
QCBib29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yCiAgICAgcmV0dXJuIHBy
b3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCI7CiB9CiAKLUpTVmFsdWUqIEpT
SFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQ
dHIgSlNIVE1MT2JqZWN0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTMgKzM1LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSlNWYWx1ZSogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0aChFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpsZW5ndGgo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1w
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgpKTsKICAgICByZXR1
cm4ganNOdW1iZXIoZXhlYywgaW1wLT5sZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQor
dm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0
YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CkBAIC02MCwxNCArNjAsMTQgQEAgdm9pZCBKU0hUTUxPcHRpb25zQ29sbGVj
dGlvbjo6c2V0TGVuZ3RoKAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiB9CiAKLXZv
aWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxPcHRpb25zQ29sbGVj
dGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1
ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19j
YXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7CiAgICAgSFRNTFNlbGVjdEVsZW1l
bnQqIGJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGltcC0+YmFzZSgpKTsK
ICAgICBzZWxlY3RJbmRleFNldHRlcihiYXNlLCBleGVjLCBpbmRleCwgdmFsdWUpOwogfQogCi1K
U1ZhbHVlKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFk
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSFRNTE9wdGlv
bnNDb2xsZWN0aW9uKiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihp
bXBsKCkpOwogICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hUTUxPcHRpb25FbGVt
ZW50KGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVlKiBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0hUTUxPcHRpb25zQ29sbGVjdGlv
bjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVj
dGlvbio+KGltcGwoKSk7CiAgICAgSlNIVE1MU2VsZWN0RWxlbWVudCogYmFzZSA9IHN0YXRpY19j
YXN0PEpTSFRNTFNlbGVjdEVsZW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMsIGltcC0+YmFzZSgp
KSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUqIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudCo+KGltcGwoKSk7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNWYWx1ZSogSlNIVE1M
U2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci12b2lkIHNlbGVjdEluZGV4U2V0dGVyKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKiB2YWx1ZSkKK3Zv
aWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBzZWxlY3QtPnJlbW92
ZShpbmRleCk7CkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNl
bGVjdEVsZW1lbnQKICAgICB9CiB9CiAKLXZvaWQgSlNIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUq
IHZhbHVlKQordm9pZCBKU0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAg
ICBzZWxlY3RJbmRleFNldHRlcihzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGltcGwo
KSksIGV4ZWMsIGluZGV4LCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2VsZWN0
SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGluZGV4LCBKU0M6OkpTVmFsdWUqKTsKK3ZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVj
dEVsZW1lbnQqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWVQ
dHIpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBub25DYWNoaW5nU3RhdGljQmFj
a0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGlj
QmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMp
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90
eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY0Zv
cndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3Rv
dHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNHb0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljR29G
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uR28pOwogfQpAQCAtOTIsNyArOTIsNyBAQCBib29sIEpTSGlzdG9yeTo6Y3VzdG9tR2V0
T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNIaXN0b3J5Ojpj
dXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIFB1
dFByb3BlcnR5U2xvdCYpCitib29sIEpTSGlzdG9yeTo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAg
ICAgLy8gT25seSBhbGxvdyBwdXR0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCiAg
ICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhlYywgaW1wbCgpLT5mcmFtZSgpKSkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEltYWdlRGF0
YSogaW1hZ2VEYXRhKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSW1hZ2VEYXRh
KiBpbWFnZURhdGEpCiB7CiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0
V3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IHN0YXRpYyBHbG9iYWxPYmplY3RXcmFwcGVyTWFwJiB3cmFwcGVycygKIAogY29uc3QgQ2xhc3NJ
bmZvIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6c19pbmZvID0geyAiSlNJbnNwZWN0ZWRPYmpl
Y3RXcmFwcGVyIiwgJkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpzX2luZm8sIDAsIDAgfTsK
IAotSlNWYWx1ZSogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKEV4ZWNTdGF0ZSogdW53
cmFwcGVkRXhlYywgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpCitKU1ZhbHVlUHRyIEpTSW5zcGVj
dGVkT2JqZWN0V3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTVmFsdWVQ
dHIgdW53cmFwcGVkVmFsdWUpCiB7CiAgICAgaWYgKCF1bndyYXBwZWRWYWx1ZS0+aXNPYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIHVud3JhcHBlZFZhbHVlOwpAQCAtNjEsNyArNjEsNyBAQCBKU1Zh
bHVlKiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoCiAgICAgICAgIGlmIChKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSB3cmFwcGVyTWFwLT5nZXQodW53cmFwcGVkT2Jq
ZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCi0gICAgSlNWYWx1ZSogcHJvdG90
eXBlID0gdW53cmFwcGVkT2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICBKU1ZhbHVlUHRyIHByb3Rv
dHlwZSA9IHVud3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgQVNTRVJUKHByb3RvdHlw
ZS0+aXNOdWxsKCkgfHwgcHJvdG90eXBlLT5pc09iamVjdCgpKTsKIAogICAgIGlmIChwcm90b3R5
cGUtPmlzTnVsbCgpKQpAQCAtOTYsNyArOTYsNyBAQCBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6
On5KU0luc3BlY3RlZE9iCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU0luc3BlY3RlZE9iamVjdFdy
YXBwZXI6OnByZXBhcmVJbmNvbWluZ1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbHVlKSBj
b25zdAorSlNWYWx1ZVB0ciBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OnByZXBhcmVJbmNvbWlu
Z1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgdmFsdWUpIGNvbnN0CiB7CiAgICAgLy8gVGhl
IEluc3BlY3RvciBpcyBvbmx5IGFsbG93ZWQgdG8gcGFzcyBwcmltaXRpdmUgdmFsdWVzIGFuZCB3
cmFwcGVkIG9iamVjdHMgdG8gb2JqZWN0cyBmcm9tIHRoZSBpbnNwZWN0ZWQgcGFnZS4KIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RX
cmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyIDogcHVibGljIEpTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUqIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1
ZSogdW53cmFwcGVkVmFsdWUpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIHdyYXAo
SlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0ciB1bndyYXBwZWRW
YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcigpOwogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkBAIC00OCw4ICs0OCw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGFsbG93c0NhbGxB
c0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAg
ICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogcHJlcGFyZUluY29taW5nVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogd3JhcE91dGdvaW5nVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0
IHsgcmV0dXJuIHdyYXAodW53cmFwcGVkRXhlYywgdW53cmFwcGVkVmFsdWUpOyB9CisgICAgICAg
IHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB3cmFwT3V0Z29pbmdWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVl
KSBjb25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsgfQog
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZzX2luZm87IH0KICAgICB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NjE2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIFN0cnVjdHVyZSogbGVha0luc3Bl
Y3RvckNhbGxiYWNrVwogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLUpTVmFsdWUqIEpTSW5z
cGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmFwKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNW
YWx1ZSogdW53cmFwcGVkVmFsdWUpCitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFw
cGVyOjp3cmFwKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZVB0ciB1bndyYXBwZWRW
YWx1ZSkKIHsKICAgICBpZiAoIXVud3JhcHBlZFZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gdW53cmFwcGVkVmFsdWU7CkBAIC02Niw3ICs2Niw3IEBAIEpTVmFsdWUqIEpTSW5zcGVj
dG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmEKICAgICBpZiAoSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIqIHdyYXBwZXIgPSB3cmFwcGVycygpLmdldCh1bndyYXBwZWRPYmplY3QpKQogICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKIAotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHVud3JhcHBlZE9iamVj
dC0+cHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB1bndyYXBwZWRPYmpl
Y3QtPnByb3RvdHlwZSgpOwogICAgIEFTU0VSVChwcm90b3R5cGUtPmlzTnVsbCgpIHx8IHByb3Rv
dHlwZS0+aXNPYmplY3QoKSk7CiAKICAgICBpZiAocHJvdG90eXBlLT5pc051bGwoKSkgewpAQCAt
ODgsNyArODgsNyBAQCBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6fkpTSW5zcGVjdG9yCiAg
ICAgd3JhcHBlcnMoKS5yZW1vdmUodW53cmFwcGVkT2JqZWN0KCkpOwogfQogCi1KU1ZhbHVlKiBK
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6cHJlcGFyZUluY29taW5nVmFsdWUoRXhlY1N0YXRl
KiB1bndyYXBwZWRFeGVjLCBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSkgY29uc3QKK0pTVmFsdWVQ
dHIgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OnByZXBhcmVJbmNvbWluZ1ZhbHVlKEV4ZWNT
dGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1ZSkgY29uc3QKIHsK
ICAgICBpZiAoSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBhc1dyYXBwZXIo
dW53cmFwcGVkVmFsdWUpKSB7CiAgICAgICAgIC8vIFRoZSBvbmx5IHRpbWUgYSB3cmFwcGVyIHNo
b3VsZCBiZSBwYXNzZWQgaW50byBhIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyIGlzIHdoZW4g
YSBjbGllbnQtc2lkZSBzdG9yYWdlIGNhbGxiYWNrCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlciA6IHB1YmxpYyBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiB3cmFw
KEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZh
bHVlKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZVB0ciB3cmFwKEpTQzo6RXhlY1N0YXRl
KiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpOwogCiAgICAg
ICAgIHZpcnR1YWwgfkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKCk7CiAKQEAgLTQ0LDggKzQ0
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3ND
YWxsQXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICB2aXJ0dWFs
IEpTQzo6SlNWYWx1ZSogcHJlcGFyZUluY29taW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVud3Jh
cHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIEpTQzo6SlNWYWx1ZSogd3JhcE91dGdvaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHVu
d3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0IHsgcmV0dXJu
IHdyYXAodW53cmFwcGVkRXhlYywgdW53cmFwcGVkVmFsdWUpOyB9CisgICAgICAgIHZpcnR1YWwg
SlNDOjpKU1ZhbHVlUHRyIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiB1bndy
YXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB3cmFwT3V0Z29pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBjb25zdCB7
IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsgfQogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gbm9WYWx1ZSgpOwotICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGltcGwoKS0+ZXZhbHVhdGUoYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVB0ciBleGNlcHRpb24gPSBub1ZhbHVl
KCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRlKGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CkBAIC00NCwxMiArNDQsMTIg
QEAgSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdChF
eGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZVB0ciBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNP
YmplY3QoRXhlY1N0YXRlKikgY29uc3QKIHsKICAgICByZXR1cm4gaW1wbCgpLT50aGlzT2JqZWN0
KCkgPyBpbXBsKCktPnRoaXNPYmplY3QoKSA6IGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlKiBKU0ph
dmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0
ciBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIHN3aXRjaCAoaW1wbCgpLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBEZWJ1Z2dlckNhbGxG
cmFtZTo6RnVuY3Rpb25UeXBlOgpAQCAtNjIsNyArNjIsNyBAQCBKU1ZhbHVlKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OnR5cGUoRXhlCiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVl
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorSlNWYWx1ZVB0ciBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLT5zY29wZUNoYWluKCkpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBub25DYWNoaW5n
U3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBub25D
YWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJl
dHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDEsIHByb3BlcnR5TmFtZSwg
anNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAKLUpTVmFsdWUqIG5vbkNh
Y2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIg
bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAg
IHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFt
ZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2FkKTsKIH0KIAotSlNWYWx1ZSogbm9u
Q2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0
ciBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgMSwgcHJvcGVydHlO
YW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pOwogfQpAQCAtOTMsNyArOTMs
NyBAQCBib29sIEpTTG9jYXRpb246OmN1c3RvbUdldE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQorYm9vbCBKU0xvY2F0aW9uOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMgdm9pZCBuYXZpZ2F0
ZUlmQWxsb3dlZChFeGVjU3RhdGUqCiAgICAgfQogfQogCi12b2lkIEpTTG9jYXRpb246OnNldEhy
ZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0
SHJlZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZy
YW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CkBAIC0xNTcsNyArMTU3
LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYwogICAgIG5hdmln
YXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0
aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBK
U0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUp
CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFt
ZSk7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVj
U3RhdGUqIAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsK
IH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
dmFsdWUpCit2b2lkIEpTTG9jYXRpb246OnNldEhvc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
UHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBB
U1NFUlQoZnJhbWUpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9z
dChFeGVjU3RhdGUqIGV4ZWMKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJs
LCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwo
KS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQg
SlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiAKICAgICBuYXZpZ2F0ZUlmQWxsb3dl
ZChleGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0UG9y
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRQ
b3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTIwNiw3ICsyMDYs
NyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBvcnQoRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdh
dGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRp
b246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpT
TG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1l
KTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNT
dGF0ZSogCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwog
fQogCi12b2lkIEpTTG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAg
ICBBU1NFUlQoZnJhbWUpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0
U2VhcmNoKEV4ZWNTdGF0ZSogZXgKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwg
dXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZy
YW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEpTTG9j
YXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhl
YywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9uOjpyZXBsYWNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNMb2Nh
dGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0y
NjEsNyArMjYxLDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIAog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9uOjpyZWxv
YWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNMb2NhdGlv
bjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0yNzgsNyArMjc4
LDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0xvY2F0aW9uOjph
c3NpZ24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjk1LDcgKzI5
NSw3IEBAIEpTVmFsdWUqIEpTTG9jYXRpb246OmFzc2lnbihFeGVjU3RhdGUqIGUKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNMb2NhdGlvbjo6dG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNMb2NhdGlvbjo6dG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKLSAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2NvbnRleHRXcmFwcGVy
OworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgbV9jb250ZXh0V3JhcHBlcjsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNNZXNz
YWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBjb25zdCBVU3RyaW5nJiBtZXNzYWdlID0gYXJn
cy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CkBAIC03Myw3ICs3Myw3IEBAIEpTVmFsdWUq
IEpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW8KICAgICByZXR1cm4gdG9KUyhleGVjLCBp
bXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTWVzc2FnZVBvcnQ6OmFk
ZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFsdWUqIEpT
TWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTWVzc2FnZVBvcnQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFs
T2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2Jh
bE9iamVjdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVU
eXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGJvb2wg
SlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUKICAgICByZXR1cm4gbWltZVR5cGVB
cnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpT
TWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBK
U01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU01p
bWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU01pbWVUeXBlQXJyYXkqPihhc09i
amVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5p
bXBsKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGJvb2wgSlNOYW1lZE5vZGVNYXA6OmNhbkdldEl0ZW1zRm9yTmFtZSgK
ICAgICByZXR1cm4gaW1wbC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFs
dWUqIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
UHRyIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNOYW1lZE5vZGVNYXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVkTm9kZU1hcCo+KGFz
T2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmot
PmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpKU05h
bWVkTm9kZXNDb2xsCiB7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxlbmd0
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbiogdGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qPihhc09iamVjdChzbG90LnNsb3RCYXNl
KCkpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+bV9ub2Rlcy0+c2l6ZSgp
KTsKIH0KIAotSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTTmFt
ZWROb2Rlc0NvbGxlY3Rpb24qPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1
cm4gdG9KUyhleGVjLCAoKnRoaXNPYmotPm1fbm9kZXMpW3Nsb3QuaW5kZXgoKV0uZ2V0KCkpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmgJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpT
Qzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlKiBwcm90b3R5cGUpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50
aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlKiBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWVQdHIgbGVuZ3RoR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYs
IGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgT3duUHRyPFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiA+IG1fbm9kZXM7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHN0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSoKICAgICBpZiAoIXRo
aXNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IElkZW50aWZpZXIsIGlzU2FmYXJpRnVuY3Rpb24sIChleGVjLCAiaXNTYWZhcmkiKSk7
Ci0gICAgSlNWYWx1ZSogaXNTYWZhcmlGdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldERpcmVjdChp
c1NhZmFyaUZ1bmN0aW9uTmFtZSk7CisgICAgSlNWYWx1ZVB0ciBpc1NhZmFyaUZ1bmN0aW9uID0g
dGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2FmYXJpRnVuY3Rpb25OYW1lKTsKICAgICBpZiAoaXNT
YWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNT
dGF0ZSoKIAogI2VuZGlmCiAKLUpTVmFsdWUqIEpTTmF2aWdhdG9yOjphcHBWZXJzaW9uKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNOYXZpZ2F0b3I6OmFwcFZlcnNpb24oRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIE5hdmlnYXRvciogaW1wID0gc3RhdGljX2Nhc3Q8
TmF2aWdhdG9yKj4oaW1wbCgpKTsKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgaW50IEV4cGVjdGlv
bkNvZGU7CiAKLUpTVmFsdWUqIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNOb2RlOjppbnNlcnRCZWZvcmUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGJvb2wgb2sgPSBpbXBsKCktPmluc2VydEJlZm9yZSh0b05vZGUoYXJncy5h
dChleGVjLCAwKSksIHRvTm9kZShhcmdzLmF0KGV4ZWMsIDEpKSwgZWMsIHRydWUpOwpAQCAtNzYs
NyArNzYsNyBAQCBKU1ZhbHVlKiBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUqCiAgICAg
cmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlKiBKU05vZGU6OnJlcGxhY2VDaGlsZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZTo6cmVw
bGFjZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIG9rID0gaW1wbCgpLT5yZXBsYWNlQ2hpbGQo
dG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpLCB0b05vZGUoYXJncy5hdChleGVjLCAxKSksIGVjLCB0
cnVlKTsKQEAgLTg2LDcgKzg2LDcgQEAgSlNWYWx1ZSogSlNOb2RlOjpyZXBsYWNlQ2hpbGQoRXhl
Y1N0YXRlKgogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSogSlNOb2RlOjpyZW1v
dmVDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgb2sgPSBpbXBsKCktPnJl
bW92ZUNoaWxkKHRvTm9kZShhcmdzLmF0KGV4ZWMsIDApKSwgZWMpOwpAQCAtOTYsNyArOTYsNyBA
QCBKU1ZhbHVlKiBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpz
TnVsbCgpOwogfQogCi1KU1ZhbHVlKiBKU05vZGU6OmFwcGVuZENoaWxkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNOb2RlOjphcHBlbmRDaGlsZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYm9vbCBvayA9IGltcGwoKS0+YXBwZW5kQ2hpbGQodG9Ob2RlKGFyZ3Mu
YXQoZXhlYywgMCkpLCBlYywgdHJ1ZSk7CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBKU05vZGU6
Om1hcmsoKQogICAgIEFTU0VSVChtYXJrZWQoKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGNyZWF0ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQorc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBjcmVhdGVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhl
YywgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgQVNTRVJUKCFnZXRDYWNo
ZWRET01Ob2RlV3JhcHBlcihub2RlLT5kb2N1bWVudCgpLCBub2RlKSk7CkBAIC0yMTgsNyArMjE4
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogY3JlYXRlV3JhcAogICAgIHJldHVy
biB3cmFwcGVyOyAgICAKIH0KICAgICAKLUpTVmFsdWUqIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0
YXRlKiBleGVjLCBOb2RlKiBub2RlKQorSlNWYWx1ZVB0ciB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNT
dGF0ZSogZXhlYywgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBKU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVk
KEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZXhlYywgbm9kZSk7CiB9
CiAgICAgCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkKK0pTVmFs
dWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTTm9kZUZpbHRlckNvbmRpdGlvbikKIAotSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpK
U05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZSogZmlsdGVyKQorSlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZVB0ciBmaWx0ZXIpCiAgICAgOiBtX2Zp
bHRlcihmaWx0ZXIpCiB7CiB9CkBAIC02NSw3ICs2NSw3IEBAIHNob3J0IEpTTm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZSgKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCi0gICAgSlNWYWx1ZSogcmVz
dWx0ID0gY2FsbChleGVjLCBtX2ZpbHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2ZpbHRlciwg
YXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjYWxsKGV4ZWMsIG1fZmlsdGVyLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG1fZmlsdGVyLCBhcmdzKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9u
IDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmlsdGVyQ29uZGl0
aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTTm9kZUZpbHRl
ckNvbmRpdGlvbj4gY3JlYXRlKEpTQzo6SlNWYWx1ZSogZmlsdGVyKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKU05vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6OkpTVmFsdWVQdHIg
ZmlsdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTTm9k
ZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsKKyAgICAg
ICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZVB0ciBmaWx0ZXIpOwogCiAgICAg
ICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAgICAgICBKU0M6OkpTVmFsdWUqIG1f
ZmlsdGVyOworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgbV9maWx0ZXI7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxMiBAQCB2
b2lkIEpTTm9kZUZpbHRlcjo6bWFyaygpCiAgICAgRE9NT2JqZWN0OjptYXJrKCk7CiB9CiAKLUpT
VmFsdWUqIEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIGltcGwoKS0+YWNjZXB0Tm9kZShleGVjLCB0b05vZGUoYXJncy5hdChleGVjLCAwKSkpKTsK
IH0KIAotUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNWYWx1ZSogdmFsdWUp
CitQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU1ZhbHVlUHRyIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoJkpTTm9kZUZpbHRlcjo6c19pbmZvKSkKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTTm9kZUZpbHRlcio+KGFzT2JqZWN0KHZhbHVlKSktPmlt
cGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgSlNOb2Rl
SXRlcmF0b3I6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygpOwogfQogCi1KU1ZhbHVlKiBK
U05vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWVQdHIgSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMsIGVjKTsKQEAgLTUyLDcgKzUyLDcgQEAg
SlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdAogICAgIHJldHVybiB0b0pT
KGV4ZWMsIG5vZGUuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6cHJldmlv
dXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTTm9k
ZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikK
IHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGlt
cGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMsIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIE5lZWQgdG8g
c3VwcG9ydCBjYWxsIHNvIHRoYXQgbGlzdCgwKSB3b3Jrcy4KLXN0YXRpYyBKU1ZhbHVlKiBjYWxs
Tm9kZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE5vZGVMaXN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4
ZWMsIDApLT50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2spOwpAQCAtNTYsNyArNTYsNyBAQCBi
b29sIEpTTm9kZUxpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjCiAgICAgcmV0dXJuIGltcGwt
Pml0ZW1XaXRoTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU05vZGVMaXN0Ojpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTTm9kZUxpc3Q6Om5hbWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05vZGVMaXN0KiB0aGlzT2JqID0gc3Rh
dGljX2Nhc3Q8SlNOb2RlTGlzdCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+aXRlbVdpdGhOYW1lKHByb3BlcnR5TmFt
ZSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgYm9vbCBKU1BsdWdpbkFy
cmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRQogICAgIHJldHVybiBwbHVnaW5BcnJheS0+Y2FuR2V0
SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1Z2luQXJyYXk6
Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNQbHVnaW5BcnJheTo6
bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTUGx1Z2luQXJyYXkqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lZEl0ZW0ocHJv
cGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcAko
cmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBib29sIEpTUGx1Z2luOjpjYW5HZXRJ
dGVtc0Zvck5hbWUoRXhlY1N0CiAgICAgcmV0dXJuIHBsdWdpbi0+Y2FuR2V0SXRlbXNGb3JOYW1l
KHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbio+
KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNP
YmotPmltcGwoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMzk2
MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIFJ1bnRpbWVPYmplY3RJbXAq
IGdldFJ1bnRpbWVPYmplYwogICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3Jl
YXRlUnVudGltZU9iamVjdChleGVjLCBpbnN0YW5jZSk7CiB9CiAKLUpTVmFsdWUqIHJ1bnRpbWVP
YmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+
KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAtNjksNyArNjks
NyBAQCBKU1ZhbHVlKiBydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJu
IHJ1bnRpbWVPYmplY3QgPyBydW50aW1lT2JqZWN0IDoganNVbmRlZmluZWQoKTsKIH0KIAotSlNW
YWx1ZSogcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlUHRyIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkBAIC05MCw3ICs5MCw3
IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgSFRNTEVsZW1l
bnQqIGVsZW1lbnQsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgcnVudGltZU9iamVjdEN1
c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wKiBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGlt
ZU9iamVjdChleGVjLCBlbGVtZW50KTsKICAgICBpZiAoIXJ1bnRpbWVPYmplY3QpCkBAIC0xMDEs
MTEgKzEwMSwxMSBAQCBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoRXhlY1N0YXRlKiBlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsUGx1Z2luKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogZnVuY3Rpb24sIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSW5z
dGFuY2UqIGluc3RhbmNlID0gcGx1Z2luSW5zdGFuY2Uoc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVu
dCo+KGZ1bmN0aW9uKS0+aW1wbCgpKTsKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsK
KyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4
ZWMsIGFyZ3MpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5o
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAvLyBSdW50aW1lIG9iamVjdCBzdXBwb3J0IGNvZGUgZm9yIEpTSFRN
TEFwcGxldEVsZW1lbnQsIEpTSFRNTEVtYmVkRWxlbWVudCBhbmQgSlNIVE1MT2JqZWN0RWxlbWVu
dC4KIAotICAgIEpTQzo6SlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0g
ICAgSlNDOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIEpTQzo6SlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBK
U0M6OkpTVmFsdWVQdHIgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYsIEpTSFRNTEVs
ZW1lbnQqKTsKLSAgICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFsdWUqLCBIVE1MRWxlbWVudCosIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVlUHRyLCBI
VE1MRWxlbWVudCosIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlNDOjpDYWxsVHlwZSBy
dW50aW1lT2JqZWN0R2V0Q2FsbERhdGEoSFRNTEVsZW1lbnQqLCBKU0M6OkNhbGxEYXRhJik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNRdWFy
YW50aW5lZE8KIAogY29uc3QgQ2xhc3NJbmZvIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpz
X2luZm8gPSB7ICJKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciIsIDAsIDAsIDAgfTsKIAotSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dy
YXBwZXIoSlNWYWx1ZSogdmFsdWUpCitKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDksOSArNDks
OSBAQCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogSlNRdWFyYW50aW5lCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKj4ob2JqZWN0KTsKIH0KIAot
SlNWYWx1ZSogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZhbHVlR2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjYWNoZWRWYWx1ZUdldHRlcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIEpTVmFsdWUqIHYgPSBzbG90LnNsb3RCYXNlKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0g
c2xvdC5zbG90QmFzZSgpOwogICAgIEFTU0VSVCh2KTsKICAgICByZXR1cm4gdjsKIH0KQEAgLTEx
MSw3ICsxMTEsNyBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25QCiAg
ICAgUHJvcGVydHlTbG90IHVud3JhcHBlZFNsb3QobV91bndyYXBwZWRPYmplY3QpOwogICAgIGJv
b2wgcmVzdWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmdldE93blByb3BlcnR5U2xvdCh1bndyYXBw
ZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllciwgdW53cmFwcGVkU2xvdCk7CiAgICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0
VmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIpOworICAgICAgICBKU1ZhbHVl
UHRyIHVud3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVj
U3RhdGUoKSwgaWRlbnRpZmllcik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHdyYXBPdXRnb2lu
Z1ZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRWYWx1ZSksIGNhY2hlZFZhbHVl
R2V0dGVyKTsKICAgICB9CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyOjpnZXRPd25QCiAgICAgUHJvcGVydHlTbG90IHVud3JhcHBlZFNsb3QobV91
bndyYXBwZWRPYmplY3QpOwogICAgIGJvb2wgcmVzdWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmdl
dE93blByb3BlcnR5U2xvdCh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllciwgdW53cmFw
cGVkU2xvdCk7CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBKU1ZhbHVlKiB1bndyYXBwZWRW
YWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0VmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50
aWZpZXIpOworICAgICAgICBKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xv
dC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllcik7CiAgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHdyYXBPdXRnb2luZ1ZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndy
YXBwZWRWYWx1ZSksIGNhY2hlZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKQEAgLTEzOSw3ICsxMzks
NyBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25QCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSogdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6
OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoIWFsbG93c1Nl
dFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEpT
UXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlCiAgICAgdHJhbnNmZXJFeGNlcHRpb25U
b0V4ZWNTdGF0ZShleGVjKTsKIH0KIAotdm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6
cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghYWxsb3dz
U2V0UHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDkgKzE5Nyw5IEBAIEpTT2Jq
ZWN0KiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y28KICAgICBDb25zdHJ1Y3RUeXBlIHVu
d3JhcHBlZENvbnN0cnVjdFR5cGUgPSB3cmFwcGVyLT5tX3Vud3JhcHBlZE9iamVjdC0+Z2V0Q29u
c3RydWN0RGF0YSh1bndyYXBwZWRDb25zdHJ1Y3REYXRhKTsKICAgICBBU1NFUlQodW53cmFwcGVk
Q29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlTm9uZSk7CiAKLSAgICBKU1ZhbHVlKiB1bndy
YXBwZWRSZXN1bHQgPSBKU0M6OmNvbnN0cnVjdCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUo
KSwgd3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENvbnN0cnVjdFR5cGUsIHVu
d3JhcHBlZENvbnN0cnVjdERhdGEsIHByZXBhcmVkQXJncyk7CisgICAgSlNWYWx1ZVB0ciB1bndy
YXBwZWRSZXN1bHQgPSBKU0M6OmNvbnN0cnVjdCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUo
KSwgd3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENvbnN0cnVjdFR5cGUsIHVu
d3JhcHBlZENvbnN0cnVjdERhdGEsIHByZXBhcmVkQXJncyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1
bHRWYWx1ZSA9IHdyYXBwZXItPndyYXBPdXRnb2luZ1ZhbHVlKHdyYXBwZXItPnVud3JhcHBlZEV4
ZWNTdGF0ZSgpLCB1bndyYXBwZWRSZXN1bHQpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0VmFsdWUg
PSB3cmFwcGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUo
KSwgdW53cmFwcGVkUmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0VmFsdWUtPmlzT2JqZWN0KCkp
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBhc09iamVjdChyZXN1bHRWYWx1ZSk7CiAKQEAgLTIx
OSw3ICsyMTksNyBAQCBDb25zdHJ1Y3RUeXBlIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyCiAg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1ib29sIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBK
U1ZhbHVlKiBwcm90bykKK2Jvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omhhc0luc3Rh
bmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNWYWx1ZVB0ciBwcm90bykK
IHsKICAgICBpZiAoIWFsbG93c0hhc0luc3RhbmNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTIzMSwxMSArMjMxLDExIEBAIGJvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6Omhh
c0luc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBzdGF0aWNfY2FzdDxKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlcio+KGZ1bmN0aW9uKTsKIAotICAgIEpTVmFsdWUqIHByZXBhcmVk
VGhpc1ZhbHVlID0gd3JhcHBlci0+cHJlcGFyZUluY29taW5nVmFsdWUoZXhlYywgdGhpc1ZhbHVl
KTsKKyAgICBKU1ZhbHVlUHRyIHByZXBhcmVkVGhpc1ZhbHVlID0gd3JhcHBlci0+cHJlcGFyZUlu
Y29taW5nVmFsdWUoZXhlYywgdGhpc1ZhbHVlKTsKIAogICAgIEFyZ0xpc3QgcHJlcGFyZWRBcmdz
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKQEAgLTI0Nyw5
ICsyNDcsOSBAQCBKU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FsCiAgICAg
Q2FsbFR5cGUgdW53cmFwcGVkQ2FsbFR5cGUgPSB3cmFwcGVyLT5tX3Vud3JhcHBlZE9iamVjdC0+
Z2V0Q2FsbERhdGEodW53cmFwcGVkQ2FsbERhdGEpOwogICAgIEFTU0VSVCh1bndyYXBwZWRDYWxs
VHlwZSAhPSBDYWxsVHlwZU5vbmUpOwogCi0gICAgSlNWYWx1ZSogdW53cmFwcGVkUmVzdWx0ID0g
SlNDOjpjYWxsKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB3cmFwcGVyLT5tX3Vud3Jh
cHBlZE9iamVjdCwgdW53cmFwcGVkQ2FsbFR5cGUsIHVud3JhcHBlZENhbGxEYXRhLCBwcmVwYXJl
ZFRoaXNWYWx1ZSwgcHJlcGFyZWRBcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHVud3JhcHBlZFJlc3Vs
dCA9IEpTQzo6Y2FsbCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwgd3JhcHBlci0+bV91
bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENhbGxUeXBlLCB1bndyYXBwZWRDYWxsRGF0YSwgcHJl
cGFyZWRUaGlzVmFsdWUsIHByZXBhcmVkQXJncyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSB3
cmFwcGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwg
dW53cmFwcGVkUmVzdWx0KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHdyYXBwZXItPndyYXBP
dXRnb2luZ1ZhbHVlKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRSZXN1
bHQpOwogCiAgICAgd3JhcHBlci0+dHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIg
OiBwdWJsaWMgSlNDOjpKU09iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIGFzV3JhcHBlcihKU0M6OkpTVmFsdWUqKTsKKyAgICAg
ICAgc3RhdGljIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBhc1dyYXBwZXIoSlNDOjpKU1Zh
bHVlUHRyKTsKIAogICAgICAgICB2aXJ0dWFsIH5KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcigp
OwogCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlKiBwcm90bykg
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Ok92ZXJyaWRlc0hhc0luc3Rh
bmNlKSk7IAogICAgICAgICB9CkBAIC01OSw4ICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNWYWx1ZVB0ciwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWVQdHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUqLCB1
bnNpZ25lZCk7CkBAIC02OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6Q2FsbERhdGEmKTsKICAgICAg
ICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0
cnVjdERhdGEmKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBKU0M6OkpTVmFsdWUqIHByb3RvKTsKKyAgICAgICAgdmly
dHVhbCBib29sIGhhc0luc3RhbmNlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyLCBK
U0M6OkpTVmFsdWVQdHIgcHJvdG8pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYpOwogCkBAIC04
MiwxNCArODIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzQ2FsbEFzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJbmNvbWluZ1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUqIHVud3JhcHBlZFZh
bHVlKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiB3cmFwT3V0Z29p
bmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlKiB1bndy
YXBwZWRWYWx1ZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBw
cmVwYXJlSW5jb21pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpK
U1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgSlND
OjpKU1ZhbHVlUHRyIHdyYXBPdXRnb2luZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRF
eGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpIGNvbnN0ID0gMDsKIAotICAgICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBjYWNoZWRWYWx1ZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgY2FjaGVkVmFsdWVHZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
CiAgICAgICAgIHZvaWQgdHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0
ZSopIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUqIGNhbGwoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwgSlNDOjpKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGNh
bGwoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwgSlNDOjpKU1ZhbHVl
UHRyIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiAgICAgICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgY29u
c3QgSlNDOjpBcmdMaXN0Jik7CiAKICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV91bndy
YXBwZWRHbG9iYWxPYmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHAJKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1z
dGF0aWMgSlNWYWx1ZSoganNSR0JDb2xvclJlZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSoganNSR0JDb2xvckdyZWVu
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBqc1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc1JHQkNvbG9yUmVk
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGpzUkdCQ29sb3JHcmVlbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc1JHQkNvbG9y
Qmx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAKIC8qCiBAYmVnaW4gSlNSR0JDb2xvclRhYmxlCkBAIC01OSw3ICs1OSw3IEBAIGJvb2wgSlNS
R0JDb2xvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWMKICAgICByZXR1cm4gZ2V0U3RhdGljVmFs
dWVTbG90PEpTUkdCQ29sb3IsIERPTU9iamVjdD4oZXhlYywgJkpTUkdCQ29sb3JUYWJsZSwgdGhp
cywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1ZSogZ2V0SlNSR0JDb2xvcihFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQorSlNWYWx1ZVB0ciBnZXRKU1JHQkNvbG9yKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29sb3IpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNSR0JDb2xvcihleGVjLCBjb2xvcik7CiB9CkBAIC02OCwxNyArNjgsMTcgQEAgSlNWYWx1ZSog
Z2V0SlNSR0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotSlNWYWx1ZSoganNSR0JDb2xvclJlZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzUkdCQ29sb3JS
ZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoKHN0YXRpY19jYXN0PEpTUkdCQ29sb3IqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+
aW1wbCgpID4+IDE2KSAmIDB4RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiB9
CiAKLUpTVmFsdWUqIGpzUkdCQ29sb3JHcmVlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzUkdCQ29sb3JH
cmVlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZSgoc3RhdGljX2Nhc3Q8SlNSR0JDb2xvcio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkp
LT5pbXBsKCkgPj4gOCkgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwog
fQogCi1KU1ZhbHVlKiBqc1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzUkdCQ29sb3JC
bHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0YXRpY19jYXN0PEpTUkdCQ29sb3IqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+
aW1wbCgpICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKIH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNSR0JDb2xvci5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUq
IHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KQEAgLTUyLDcgKzUyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2NvbG9yOwogICAgIH07CiAKLSAg
ICBKU0M6OkpTVmFsdWUqIGdldEpTUkdCQ29sb3IoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBj
b2xvcik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIGdldEpTUkdCQ29sb3IoSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBjb2xvcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMUmVzdWx0U2V0
Um93TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NRTFJl
c3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICBpbnQgaW5k
ZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtNTYsNyAr
NTYsNyBAQCBKU1ZhbHVlKiBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlCiAgICAgdW5z
aWduZWQgdmFsdWVzSW5kZXggPSBpbmRleCAqIG51bUNvbHVtbnM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUNvbHVtbnM7IGkrKykgewogICAgICAgICBjb25zdCBTUUxWYWx1ZSYg
dmFsdWUgPSBtX2ltcGwtPnZhbHVlcygpW3ZhbHVlc0luZGV4ICsgaV07Ci0gICAgICAgIEpTVmFs
dWUqIGpzVmFsdWUgPSBub1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IG5v
VmFsdWUoKTsKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCi1KU1ZhbHVlKiBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTUUxUcmFuc2FjdGlv
bjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU1LDcgKzU1LDcgQEAgSlNWYWx1
ZSogSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeAogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiBsZW5ndGhWYWx1ZSA9
IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgICAg
ICBKU1ZhbHVlUHRyIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBsZW5ndGhWYWx1ZS0+dG9VSW50MzIoZXhlYyk7CkBAIC02Myw3ICs2Myw3IEBAIEpTVmFsdWUq
IEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXgKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBvYmplY3QtPmdldChl
eGVjLCBpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBvYmplY3QtPmdldChleGVj
LCBpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NWR0VsZW1lbnRJbnN0
YW5jZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpc3RlbmVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC00OCw3ICs0OCw3
IEBAIEpTVmFsdWUqIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudEwKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDEzICsyNiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUqIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlUHRyIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAg
ICAgU1ZHTGVuZ3RoIGltcCgqaW1wbCgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW1w
LnZhbHVlKGNvbnRleHQoKSkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR0xlbmd0aDo6Y29udmVydFRv
U3BlY2lmaWVkVW5pdHMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8U1ZH
TGVuZ3RoPiogd3JhcHBlciA9IGltcGwoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR01hdHJpeEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
KiBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7
CiAKQEAgLTM3LDEwICszNywxMCBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhl
Y1N0YXRlCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxB
ZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLm11bHRpcGx5KHNlY29uZE1hdHJpeCkpLmdldCgp
LCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6aW52ZXJzZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6
aW52ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEFmZmluZVRy
YW5zZm9ybSBpbXAoKmltcGwoKSk7Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4
ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGlt
cC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0
ciByZXN1bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJh
bnNmb3JtPjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwog
CiAgICAgaWYgKCFpbXAuaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEUpOwpAQCAtNDgsNyAr
NDgsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6aW52ZXJzZShFeGVjU3RhdGUqCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnRyYW5zbGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4Ojp0
cmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFm
ZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKQEAgLTU4LDcgKzU4LDcgQEAgSlNWYWx1ZSog
SlNTVkdNYXRyaXg6OnRyYW5zbGF0ZShFeGVjU3RhdAogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpT
U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC50cmFu
c2xhdGUoeCwgeSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NW
R01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU1NWR01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKQEAgLTY2LDcg
KzY2LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0ZSogZQogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3Jt
Pjo6Y3JlYXRlKGltcC5zY2FsZShzY2FsZUZhY3RvcikpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkp
OwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnNjYWxl
Tm9uVW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtNzYsNyArNzYsNyBAQCBKU1ZhbHVl
KiBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKEV4CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
SlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnNj
YWxlTm9uVW5pZm9ybShzY2FsZUZhY3RvclgsIHNjYWxlRmFjdG9yWSkpLmdldCgpLCBtX2NvbnRl
eHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnJvdGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtODQsMTQgKzg0LDE0IEBAIEpTVmFsdWUqIEpTU1ZH
TWF0cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0
YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAucm90YXRlKGFu
Z2xlKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4
Ojpyb3RhdGVGcm9tVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwo
KSk7CiAgCiAgICAgZmxvYXQgeCA9IGFyZ3MuYXQoZXhlYywgMCktPnRvRmxvYXQoZXhlYyk7CiAg
ICAgZmxvYXQgeSA9IGFyZ3MuYXQoZXhlYywgMSktPnRvRmxvYXQoZXhlYyk7CiAKLSAgICBKU0M6
OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxB
ZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnJvdGF0ZUZyb21WZWN0b3IoeCwgeSkpLmdldCgp
LCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4
ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGlt
cC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIAogICAg
IGlmICh4ID09IDAuMCB8fCB5ID09IDAuMCkKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IFNWR0V4Y2VwdGlvbjo6U1ZHX0lOVkFMSURfVkFMVUVfRVJSKTsKQEAgLTk5LDE5ICs5OSwxOSBA
QCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OmZsaXBYKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4OjpmbGlwWChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwo
KSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZp
bmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLmZsaXBYKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkp
OwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6ZmxpcFkoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OmZsaXBZKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsK
ICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRy
YW5zZm9ybT46OmNyZWF0ZShpbXAuZmxpcFkoKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9
CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3WChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4Ojpza2V3WChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1w
bCgpKTsKIApAQCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3WChF
eGVjU3RhdGUqIGUKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuc2tld1goYW5nbGUpKS5nZXQoKSwgbV9j
b250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNrZXdZKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnNr
ZXdZKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
UGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NW
R1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUq
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2VnKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNv
bnRleHQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2VnKiBvYmpl
Y3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJl
dHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnTGlz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhT
ZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1
ZSogSlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JikKK0pTVmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKIApAQCAtNDgsNyAr
NDgsNyBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVjU3RhCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRp
YWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2VnKiBu
ZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtNTcsMTQgKzU3LDE0
IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXgKIAogICAgIFNWR1Bh
dGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGltcC0+aW5pdGlhbGl6ZShuZXdJdGVtLCBlYykpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0Lmdl
dCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29u
dGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkp
OyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0
OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKQEAgLTc4LDEyICs3OCwx
MiBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTCiAgICAgU1ZHUGF0
aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4oaW1wbCgpKTsKICAg
ICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmdldEl0ZW0oaW5kZXgsIGVjKSk7
CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQu
Z2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9j
b250ZXh0LmdldCgpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZv
cmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NW
R1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQYXRoU2Vn
KiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtOTcsMTQgKzk3
LDE0IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWYKIAogICAgIFNW
R1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7
CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1w
LT5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2NvbnRleHQuZ2V0KCkp
OworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGlt
cC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgp
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9jb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlcGxhY2VJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNT
VkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNWR1BhdGhTZWcqIG5l
d0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdChleGVjLCAwKSk7CkBAIC0xMTgsMTQgKzExOCwx
NCBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbShFCiAKICAgICBTVkdQ
YXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3QqPihpbXBsKCkpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKGltcC0+
cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAg
SlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5yZXBs
YWNlSXRlbShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgpKTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFu
Z2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1BhdGhTZWdMaXN0
OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKQEAgLTE0MCwyMSArMTQwLDIxIEBAIEpTVmFs
dWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXgKIAogICAgIFJlZlB0cjxTVkdQYXRo
U2VnPiBvYmooaW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOwogCi0gICAgSlNDOjpKU1ZhbHVl
KiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iai5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICBK
U0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBvYmouZ2V0KCksIG1fY29udGV4dC5n
ZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29udGV4dC0+
c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjphcHBl
bmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNTVkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZHUGF0aFNlZyog
bmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KGV4ZWMsIDApKTsKIAogICAgIFNWR1BhdGhT
ZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGltcGwoKSk7CiAKLSAg
ICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5hcHBl
bmRJdGVtKG5ld0l0ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVl
UHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5hcHBlbmRJdGVtKG5ld0l0
ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKIAogICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRB
dHRyaWJ1dGVOYW1lKCkpOyAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQb2lu
dExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
b2ludExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2lu
dD4gUE9ETGlzdEl0ZW07CiB0eXBlZGVmIFNWR0xpc3Q8UmVmUHRyPFBPRExpc3RJdGVtPiA+IFNW
R1BvaW50TGlzdEJhc2U7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRM
aXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVl
UHRyIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdF
bGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0
ZW0gPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoR2V0dGVyKEV4
ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGUoaXRlbS5nZXQoKSwgbGlzdC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSog
ZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1l
bnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbSA+
IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRMaXN0KiBsaXN0
LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIEpT
VmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIAogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFs
dWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9u
Q29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1Jl
ZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGZpbmlzaFNldHRlclJl
YWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1l
bnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4g
aXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5
UmVzdQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8Rmxv
YXRQb2ludD46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1KU1ZhbHVlKiBK
U1NWR1BvaW50TGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pT
VmFsdWVQdHIgSlNTVkdQb2ludExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5jbGVhcihl
Yyk7CkBAIC03Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpjbGVhcihFeGVj
U3RhdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdQb2lu
dExpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU1ZH
UG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcgKzgwLDcgQEAgSlNWYWx1
ZSogSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlYwogICAgICAgICBsaXN0SW1wLT5pbml0
aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdChleGVjLCAwKSkpLCBl
YykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHUG9pbnRMaXN0OjpnZXRJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBib29sIGlu
ZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihl
eGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6
OmdldEl0ZW0oRXhlY1N0YQogICAgICAgICBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwog
fQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHUG9pbnRMaXN0Ojpp
bnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDEp
LT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBKU1ZhbHVlKiBK
U1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yCiAgICAgICAgIGxpc3RJbXAtPmluc2VydEl0
ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0KGV4ZWMsIDApKSks
IGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1Bv
aW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhl
YywgMSktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xMjUsNyArMTI1LDcgQEAgSlNWYWx1
ZSogSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZQogICAgICAgICBsaXN0SW1wLT5yZXBs
YWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQoZXhlYywgMCkpKSwg
aW5kZXgsIGVjKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZW1vdmVJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdQb2lu
dExpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywg
MCktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xNDAsNyArMTQwLDcgQEAgSlNWYWx1ZSog
SlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlYwogICAgICAgICBsaXN0SW1wLT5yZW1vdmVJ
dGVtKGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRl
bShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZH
UG9pbnRMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2ludExpc3RCYXNlKiBs
aXN0SW1wID0gaW1wbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9y
bUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdU
cmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBTVkdQT0RMaXN0SXRlbTxT
VkdUcmFuc2Zvcm0+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJlZlB0cjxQT0RMaXN0
SXRlbT4gPiBTVkdUcmFuc2Zvcm1MaXN0QmFzZTsKIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250
ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVt
KQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3Qs
IFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC00Miw3ICs0Miw3IEBAIHN0YXRpYyBKU1Zh
bHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsK
IH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0
LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNo
U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNv
bnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0
ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhlY1N0YXRl
KiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxp
c3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgp
LCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVz
dWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRl
eHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0p
CitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zv
cm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQogewogICAgIGlmIChl
YykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAtNjMsNyArNjMsNyBA
QCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1CiAgICAgcmV0dXJuIHRv
SlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxTVkdUcmFuc2Zvcm0+OjpjcmVhdGUo
Kml0ZW0pLmdldCgpLCBjb250ZXh0KTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1NW
R1RyYW5zZm9ybUxpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5jbGVhcihlYyk7CkBAIC03
Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1MKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdU
cmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcgKzgwLDcgQEAgSlNW
YWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKAogICAgICAgICBsaXN0SW1wLT5p
bml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3MuYXQoZXhlYywg
MCkpKSwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFu
c2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMs
IDApLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSog
SlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZQogICAgICAgICBsaXN0SW1wLT5nZXRJdGVt
KGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0
ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBp
bmRleCA9IGFyZ3MuYXQoZXhlYywgMSktPnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTEw
LDcgKzExMCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRlbUIKICAg
ICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9yZShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1Ry
YW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBK
U1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgYm9vbCBpbmRleE9r
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdChleGVjLCAxKS0+dG9VSW50MzIoZXhlYywg
aW5kZXhPayk7CkBAIC0xMjUsNyArMTI1LDcgQEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjpyZXBsYWNlSXRlbQogICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShQT0RMaXN0SXRlbTo6
Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQog
Ci1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJl
bW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJv
b2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywgMCktPnRvVUlu
dDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJh
bnNmb3JtTGlzdDo6cmVtb3ZlSXRlbSgKICAgICAgICAgbGlzdEltcC0+cmVtb3ZlSXRlbShpbmRl
eCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFu
c2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3Jh
Z2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNTdG9y
YWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1MKICAgICByZXR1cm4gaW1wbC0+Y29udGFpbnMo
cHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNTdG9yYWdlOjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTU3RvcmFnZSogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3RvcmFn
ZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiBqc1N0cmluZ09yTnVs
bChleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1lKSk7CkBAIC01Niw3
ICs1Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICBp
ZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTU3RvcmFnZSwgQmFzZT4oZXhlYywgc19pbmZvLnByb3BI
YXNoVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gdGhpcy0+cHJvdG90
eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUoKTsKICAg
ICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NzQsNyArNzQsNyBAQCBib29sIEpTU3RvcmFnZTo6Y3VzdG9tR2V0UHJvcGVydHlOYW1lcyhFCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3RvcmFnZTo6Y3VzdG9tUHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JikKK2Jvb2wgSlNTdG9yYWdlOjpjdXN0b21QdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlm
IHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4K
ICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0
ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKQEAgLTgzLDcgKzgz
LDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZQogICAgIGlmIChn
ZXRTdGF0aWNWYWx1ZVNsb3Q8SlNTdG9yYWdlLCBCYXNlPihleGVjLCBzX2luZm8ucHJvcEhhc2hU
YWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSB0aGlzLT5wcm90b3R5cGUo
KTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHRoaXMtPnByb3RvdHlwZSgpOwogICAgIGlm
IChwcm90b3R5cGUtPmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgU3R5bGVT
aGVldCogc3R5bGVTaGVldCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFN0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBib29sIEpTU3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtCiAgICAgcmV0dXJuIHN0
eWxlU2hlZXRMaXN0LT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSog
SlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciBKU1N0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5bGVTaGVldExpc3Qq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MU3R5bGVFbGVtZW50KiBlbGVt
ZW50ID0gdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMsIFRleHQqIHRleHQpCitK
U1ZhbHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBUZXh0KiB0ZXh0KQog
ewogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmsoKQogICAgIERPTU9i
amVjdDo6bWFyaygpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTVHJlZVdhbGtl
cjo6cGFyZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIE5v
ZGUqIG5vZGUgPSBpbXBsKCktPnBhcmVudE5vZGUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQpAQCAtNDUsNyArNDUsNyBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnBhcmVu
dE5vZGUoRXhlY1N0CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1Zh
bHVlKiBKU1RyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JikKK0pTVmFsdWVQdHIgSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGls
ZChleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01Myw3ICs1Myw3IEBA
IEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3QKICAgICByZXR1cm4gdG9K
UyhleGVjLCBub2RlKTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENoaWxk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTVHJlZVdhbGtl
cjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IGltcGwoKS0+bGFzdENoaWxkKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKQEAgLTYxLDcgKzYxLDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpsYXN0Q2hp
bGQoRXhlY1N0YQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1
ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNpYmxp
bmcoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNjksNyArNjksNyBA
QCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTCiAgICAgcmV0dXJuIHRv
SlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3Vz
U2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1Ry
ZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGluZyhleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC03Nyw3ICs3Nyw3IEBAIEpTVmFsdWUqIEpT
VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEUKICAgICByZXR1cm4gdG9KUyhleGVjLCBub2Rl
KTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTVHJlZVdhbGtlcjo6cHJldmlv
dXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9k
ZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c05v
ZGUoRXhlYwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAotSlNWYWx1ZSog
SlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckNvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNXb3JrZXJDb250ZQogCiBjb25z
dCBDbGFzc0luZm8gSlNXb3JrZXJDb250ZXh0QmFzZTo6c19pbmZvID0geyAiV29ya2VyQ29udGV4
dCIsIDAsIDAsIGdldEpTV29ya2VyQ29udGV4dEJhc2VUYWJsZSB9OwogCi12b2lkIEpTV29ya2Vy
Q29udGV4dEJhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNX
b3JrZXJDb250ZXh0QmFzZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgbG9va3VwUHV0PEpTV29ya2VyQ29udGV4dEJhc2UsIEJhc2U+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIGdldEpTV29ya2VyQ29udGV4dEJhc2VUYWJsZShleGVjKSwgdGhpcywgc2xv
dCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuaAko
cmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIEpTV29ya2VyQ29udGV4dEJhc2UoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4s
IFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4pOwogICAgICAgICB2aXJ0dWFsIH5KU1dvcmtlckNv
bnRleHRCYXNlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0
ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgICAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsMTcgKzY1LDE3IEBAIHZvaWQgSlNXb3JrZXJDb250ZXh0OjptYXJrKCkKICAg
ICB9CiB9CiAKLUpTVmFsdWUqIEpTV29ya2VyQ29udGV4dDo6c2VsZihFeGVjU3RhdGUqKSBjb25z
dAorSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhlY1N0YXRlKikgY29uc3QKIHsK
ICAgICByZXR1cm4gYXNWYWx1ZSgpOwogfQogCi12b2lkIEpTV29ya2VyQ29udGV4dDo6c2V0U2Vs
ZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU1dvcmtlckNvbnRleHQ6
OnNldFNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIHB1dERp
cmVjdChJZGVudGlmaWVyKGV4ZWMsICJzZWxmIiksIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSogSlNX
b3JrZXJDb250ZXh0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNXb3JrZXJDb250ZXh0OjphZGRFdmVudExpc3RlbmVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBSZWZQdHI8SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZmluZE9yQ3JlYXRlSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSk7CiAgICAgaWYgKCFsaXN0
ZW5lcikKQEAgLTg0LDcgKzg0LDcgQEAgSlNWYWx1ZSogSlNXb3JrZXJDb250ZXh0OjphZGRFdmVu
dExpc3RlbgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1dvcmtl
ckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKICAgICBpZiAoIWxpc3RlbmVyKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDcgQEAgdm9pZCBKU1dvcmtlcjo6bWFyaygpCiAgICAgfQogfQogCi1KU1ZhbHVl
KiBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTV29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC03MCw3ICs3MCw3IEBAIEpT
VmFsdWUqIEpTV29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWMKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1dvcmtlcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxP
YmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFs
T2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgdm9p
ZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrKCkKIH0KIAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwotSlNW
YWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBh
cmd1bWVudHMiKTsKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0
OjpvcGVuKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUq
IEpTWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0
SGVhZGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAo
YXJncy5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CkBAIC0xMjcsMTMgKzEyNywxMyBAQCBKU1Zh
bHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0Ojpz
ZW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAgICAgIGltcGwoKS0+
c2VuZChlYyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbCA9IGFyZ3MuYXQoZXhl
YywgMCk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsID0gYXJncy5hdChleGVjLCAwKTsKICAgICAg
ICAgaWYgKHZhbC0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGltcGwoKS0+c2Vu
ZChlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZhbC0+aXNPYmplY3QoJkpTRG9jdW1lbnQ6OnNfaW5m
bykpCkBAIC0xNDcsNyArMTQ3LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChF
eGVjU3RhdAogICAgIGludCBzaWduZWRMaW5lTnVtYmVyOwogICAgIGludHB0cl90IHNvdXJjZUlE
OwogICAgIFVTdHJpbmcgc291cmNlVVJMOwotICAgIEpTVmFsdWUqIGZ1bmN0aW9uOworICAgIEpT
VmFsdWVQdHIgZnVuY3Rpb247CiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVMYXN0
Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGZ1bmN0
aW9uKTsKICAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzaWduZWRMaW5lTnVtYmVy
ID49IDAgPyBzaWduZWRMaW5lTnVtYmVyIDogMCk7CiAgICAgaW1wbCgpLT5zZXRMYXN0U2VuZFVS
TChzb3VyY2VVUkwpOwpAQCAtMTU2LDE4ICsxNTYsMTggQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVx
dWVzdDo6c2VuZChFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6OmdldFJl
c3BvbnNlSGVhZGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBKU1ZhbHVlKiBoZWFkZXIgPSBqc1N0cmluZ09yTnVsbChleGVjLCBpbXBs
KCktPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLCBl
YykpOworICAgIEpTVmFsdWVQdHIgaGVhZGVyID0ganNTdHJpbmdPck51bGwoZXhlYywgaW1wbCgp
LT5nZXRSZXNwb25zZUhlYWRlcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSwgZWMp
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiBoZWFkZXI7CiB9
CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5cGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0
OjpvdmVycmlkZU1pbWVUeXBlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CkBAIC0xNzYsNyArMTc2
LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNaW1lVAogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjphZGRFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtMTg4LDcgKzE4OCw3IEBAIEpTVmFsdWUqIEpT
WE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJl
cXVlc3Q6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9N
R2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCkKQEAgLTIwMCw3ICsyMDAsNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1
ZXN0OjpyZW1vdmVFdmVudExpCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFs
dWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1wbCgp
LT5yZXNwb25zZVRleHQoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6
Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRk
RXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTg5LDcgKzg5LDcgQEAgSlNW
YWx1ZSogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbgogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlZXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hTTFRQcm9j
ZXNzb3I6OmltcG9ydFN0eWxlc2hlZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEpTVmFsdWUqIG5vZGVWYWwgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpT
VmFsdWVQdHIgbm9kZVZhbCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaWYgKG5vZGVWYWwtPmlz
T2JqZWN0KCZKU05vZGU6OnNfaW5mbykpIHsKICAgICAgICAgSlNOb2RlKiBub2RlID0gc3RhdGlj
X2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qobm9kZVZhbCkpOwogICAgICAgICBpbXBsKCktPmltcG9y
dFN0eWxlc2hlZXQobm9kZS0+aW1wbCgpKTsKQEAgLTU4LDEwICs1OCwxMCBAQCBKU1ZhbHVlKiBK
U1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogbm9kZVZhbCA9IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAg
SlNWYWx1ZSogZG9jVmFsID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIG5vZGVW
YWwgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZG9jVmFsID0gYXJncy5hdChl
eGVjLCAxKTsKICAgICBpZiAobm9kZVZhbC0+aXNPYmplY3QoJkpTTm9kZTo6c19pbmZvKSAmJiBk
b2NWYWwtPmlzT2JqZWN0KCZKU0RvY3VtZW50OjpzX2luZm8pKSB7CiAgICAgICAgIFdlYkNvcmU6
Ok5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChub2RlVmFsKSktPmlt
cGwoKTsKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc3Rh
dGljX2Nhc3Q8SlNEb2N1bWVudCo+KGFzT2JqZWN0KGRvY1ZhbCkpLT5pbXBsKCkpOwpAQCAtNzEs
OSArNzEsOSBAQCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogbm9kZVZhbCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBub2RlVmFsID0gYXJncy5hdChleGVjLCAw
KTsKICAgICBpZiAobm9kZVZhbC0+aXNPYmplY3QoJkpTTm9kZTo6c19pbmZvKSkgewogICAgICAg
ICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChub2RlVmFsKSk7
CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0RG9jdW1lbnQgPSBpbXBsKCktPnRyYW5z
Zm9ybVRvRG9jdW1lbnQobm9kZS0+aW1wbCgpKTsKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSog
SlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvYwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nlc3Nvcjo6
c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBpZiAoYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmdzLmF0KGV4
ZWMsIDIpLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsgLy8gVGhyb3cgZXhjZXB0aW9uPwpAQCAtOTYsNyArOTYsNyBAQCBKU1ZhbHVlKiBKU1hTTFRQ
cm9jZXNzb3I6OnNldFBhcmFtZXRlcihFCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYU0xUUHJvY2Vzc29yOjpnZXRQYXJh
bWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChh
cmdzLmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6
OmdldFBhcmFtZXRlcihFCiAgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQoZXhlYywgdmFs
dWUpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nl
c3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEzIEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NoZWR1bGVkQWN0
aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlvbiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK1NjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJncykK
ICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiB7CiAgICAgQXJnTGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYXJncy5lbmQoKTsKLSAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgZm9yIChBcmdMaXN0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7CisgICAgfQogfQogCiB2b2lkIFNj
aGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICovCiAgICAgY2xhc3Mg
U2NoZWR1bGVkQWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjaGVkdWxlZEFjdGlvbihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlKiBmdW5jdGlvbiwgY29uc3QgSlNDOjpB
cmdMaXN0Jik7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlUHRyIGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKICAgICAgICAg
U2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmluZyYgY29kZSkKICAgICAgICAgICAgIDogbV9jb2Rl
KGNvZGUpCiAgICAgICAgIHsKQEAgLTQ2LDggKzQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZXhlY3V0ZShKU0RPTVdpbmRvd1NoZWxsKik7CiAK
LSAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBtX2Z1bmN0aW9uOwotICAg
ICAgICBWZWN0b3I8SlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiA+IG1fYXJnczsKKyAg
ICAgICAgSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyIG1fZnVuY3Rpb247CisgICAgICAgIFZlY3Rv
cjxKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI+IG1fYXJnczsKICAgICAgICAgU3RyaW5nIG1fY29k
ZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBTY3JpcHRDYWxsU3RhY2s6OlNj
cmlwdENhbGxTdGFjayhFeGVjU3RhCiAgICAgaW50IHNpZ25lZExpbmVOdW1iZXI7CiAgICAgaW50
cHRyX3Qgc291cmNlSUQ7CiAgICAgVVN0cmluZyB1cmxTdHJpbmc7Ci0gICAgSlNWYWx1ZSogZnVu
Y3Rpb247CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbjsKIAogICAgIGV4ZWMtPmludGVycHJldGVy
KCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBzaWduZWRMaW5lTnVtYmVyLCBzb3VyY2VJRCwg
dXJsU3RyaW5nLCBmdW5jdGlvbik7CiAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBTY3JpcHRDYWxs
U3RhY2s6OmluaXRpYWxpemUoKQogICAgIGlmICghbV9jYWxsZXIgfHwgbV9pbml0aWFsaXplZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNWYWx1ZSogZnVuYyA9IG1fZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVDYWxsZXIobV9leGVjLCBtX2NhbGxlcik7CisgICAgSlNWYWx1ZVB0ciBm
dW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIG1fY2Fs
bGVyKTsKICAgICB3aGlsZSAoIWZ1bmMtPmlzTnVsbCgpKSB7CiAgICAgICAgIEludGVybmFsRnVu
Y3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24oZnVuYyk7CiAgICAg
ICAgIEFyZ0xpc3QgZW1wdHlBcmdMaXN0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBO
UE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0CiAgICAgLy8gQ3JlYXRlIGEg
SlNPYmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
SlNWYWx1ZSoganNFbGVtZW50VmFsdWUgPSB0b0pTKGV4ZWMsIHBsdWdpbik7CisgICAgSlNWYWx1
ZVB0ciBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZXhlYywgcGx1Z2luKTsKICAgICBpZiAoIWpzRWxl
bWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
VmFsdWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBTdHJpbmc7CiAK
IGNsYXNzIFNjcmlwdFZhbHVlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRWYWx1ZShKU0M6OkpTVmFs
dWUqIHZhbHVlID0gSlNDOjpub1ZhbHVlKCkpIDogbV92YWx1ZSh2YWx1ZSkge30KKyAgICBTY3Jp
cHRWYWx1ZShKU0M6OkpTVmFsdWVQdHIgdmFsdWUgPSBKU0M6Om5vVmFsdWUoKSkgOiBtX3ZhbHVl
KHZhbHVlKSB7fQogCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZS5nZXQoKTsgfQorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogICAgIGJvb2wgZ2V0U3RyaW5nKFN0cmluZyYgcmVzdWx0
KSBjb25zdDsKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wgaXNVbmRlZmluZWQo
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0M6OkpTVmFsdWU+
IG1fdmFsdWU7CisgICAgSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyIG1fdmFsdWU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2Ny
aXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRp
YyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
QVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcobmFtZSkpKTsK
KyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIFN0cmluZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMjk5LDcgKzI5OSw3IEBAIHN0YXRpYyB2
b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIG5pbDsKIAog
ICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNr
KCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJnTGlzdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBh
cmdMaXN0KTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5zdG9wVGlt
ZW91dENoZWNrKCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTMyNCw3
ICszMjQsNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5zdGFy
dFRpbWVvdXRDaGVjaygpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RG
cm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5l
bnRseSBoZWxkCiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCBTdHJpbmcoa2V5KSkpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IFtzZWxmIF9pbXBd
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcoa2V5KSkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRp
b25Ub0NvbnNvbGUoZXhlYyk7CkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlz
dEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OwogCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IFtzZWxm
IF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gW3NlbGYg
X2ltcF0tPmdldChleGVjLCBpbmRleCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNTA0LDcgKzUwNCw3
IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICByZXR1cm4g
dG9SZWYoW3NlbGYgX2ltcF0pOwogfQogCi0rIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6
KEpTVmFsdWUqKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KFJvb3RPYmplY3QqKW9yaWdpblJvb3RP
YmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9vdE9iamVjdAorKyAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlUHRyKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KFJvb3RP
YmplY3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9vdE9iamVj
dAogewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoKSkgewogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QodmFsdWUpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyB2b2lkIGdl
dExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKCkgIT0gJlJ1bnRpbWVPYmpl
Y3RJbXA6OnNfaW5mbykgewotICAgICAgICAgICAgSlNWYWx1ZSogcnVudGltZU9iamVjdCA9IG9i
amVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmplY3Qi
KSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJ1bnRpbWVPYmplY3QgPSBvYmplY3QtPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikpOwogICAgICAg
ICAgICAgaWYgKHJ1bnRpbWVPYmplY3QgJiYgcnVudGltZU9iamVjdC0+aXNPYmplY3QoKSkKICAg
ICAgICAgICAgICAgICBvYmplY3QgPSBhc09iamVjdChydW50aW1lT2JqZWN0KTsKICAgICAgICAg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0
ZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRP
YmplY3RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogfQogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCAoUHJpdmF0ZSkKLSsg
KGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKil2YWx1ZSBvcmlnaW5S
b290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJv
b3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CisrIChpZClf
Y29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1ZVB0cil2YWx1ZSBvcmlnaW5Sb290
T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RP
YmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CiArIChpZClzY3Jp
cHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSZWYpanNPYmplY3Qgb3JpZ2luUm9vdE9iamVj
dDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCByb290T2JqZWN0
OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0OwogLSAoaWQpX2luaXQ7CiAt
IChpZClfaW5pdFdpdGhKU09iamVjdDooSlNDOjpKU09iamVjdCopaW1wIG9yaWdpblJvb3RPYmpl
Y3Q6KFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4pb3JpZ2luUm9vdE9iamVj
dCByb290T2JqZWN0OihQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+KXJvb3RP
YmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHN1YiBHZW5lcmF0
ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAgICBteSBAZ2V0T3duUHJvcGVydHlTbG90SW1wbCA9
ICgpOwogCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOYW1lZE5vZGVNYXAiIG9yICRpbnRl
cmZhY2VOYW1lIGVxICJIVE1MQ29sbGVjdGlvbiIpIHsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWUqIHByb3RvID0gcHJv
dG90eXBlKCk7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAg
ICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWVQdHIgcHJvdG8gPSBwcm90b3R5cGUoKTtcbiIpOwog
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChwcm90by0+aXNP
YmplY3QoKSAmJiBzdGF0aWNfY2FzdDwke25hbWVzcGFjZU1heWJlfUpTT2JqZWN0Kj4oYXNPYmpl
Y3QocHJvdG8pKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSlcbiIpOwogICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gZmFsc2U7XG5c
biIpOwogICAgIH0KQEAgLTQ3MSw5ICs0NzEsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAg
ICMgR2V0dGVycwogICAgIGlmICgkaGFzU2V0dGVyKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2
b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlKik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21J
bmRleFNldHRlciJ9OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgY3Vz
dG9tUHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1Zh
bHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn07CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0UHJvcGVy
dHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
IHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWVQdHIpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3Vz
dG9tSW5kZXhTZXR0ZXIifTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29s
IGN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6
SlNWYWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn07CiAgICAgfQogCiAgICAgIyBD
bGFzcyBpbmZvCkBAIC00ODMsMTMgKzQ4MywxMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAj
IFN0cnVjdHVyZSBJRAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikgewog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LAotICAgICAgICAgICAgIiAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJv
dG90eXBlKVxuIiAuCisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgog
ICAgICAgICAgICAgIiAgICB7XG4iIC4KICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpOZWVkc1RoaXNDb252ZXJzaW9u
KSk7XG4iIC4KICAgICAgICAgICAgICIgICAgfVxuXG4iKTsKICAgICB9IGVsc2lmICgkaGFzR2V0
dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAgICAgICAgICAiICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1Zh
bHVlKiBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAgICAgICIgICAgc3RhdGljIFBhc3NSZWZQdHI8
SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQdHIgcHJvdG90eXBl
KVxuIiAuCiAgICAgICAgICAgICAiICAgIHtcbiIgLgogICAgICAgICAgICAgIiAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSkpO1xuIiAuCiAgICAgICAgICAgICAiICAgIH1cblxuIik7CkBAIC01MjEsMTMg
KzUyMSwxMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU09iamVjdCogc2V0dGVyRnVuY3Rpb24p
O1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tRGVmaW5lU2V0
dGVyIn07CiAKICAgICAjIEN1c3RvbSBsb29rdXBHZXR0ZXIgZnVuY3Rpb24KLSAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBsb29rdXBHZXR0ZXIoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7XG4iKSBp
ZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Mb29rdXBHZXR0ZXIifTsK
KyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIGxv
b2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUxv
b2t1cEdldHRlciJ9OwogCiAgICAgIyBDdXN0b20gbG9va3VwU2V0dGVyIGZ1bmN0aW9uCi0gICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogbG9va3VwU2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
O1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTG9va3VwU2V0
dGVyIn07CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1
ZVB0ciBsb29rdXBTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Mb29rdXBTZXR0ZXIifTsKIAogICAgICMgQ29uc3RydWN0b3Igb2JqZWN0IGdldHRlcgot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSogZ2V0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkdlbmVyYXRlQ29uc3RydWN0b3IifTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlQ29u
c3RydWN0b3IifTsKIAogICAgIG15ICRudW1DdXN0b21GdW5jdGlvbnMgPSAwOwogICAgIG15ICRu
dW1DdXN0b21BdHRyaWJ1dGVzID0gMDsKQEAgLTU0NywxNSArNTQ3LDE1IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogCiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0
dHJpYnV0ZXN9KSB7CiAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSogIiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29u
c3Q7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6
SlNWYWx1ZVB0ciAiIC4gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIpOwogICAgICAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNvZGVHZW5l
cmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2Zp
cnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdl
dHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6
OkpTVmFsdWUqICIgLiAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0O1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWVQdHIgIiAuICRjb2Rl
R2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpT
Qzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9KSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFkb25seS8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHNldCIgLiAk
Y29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4g
IihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNvZGVHZW5lcmF0b3It
PldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC01NzAsNyArNTcwLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewog
ICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tIn0pIHsKICAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxl
bWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBKU0M6OkpTVmFsdWUqICIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAi
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZVB0ciAiIC4gJGZ1bmN0
aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJn
TGlzdCYpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MDIsMjEg
KzYwMiwyMSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgSW5kZXggZ2V0dGVyCiAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBp
bmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0
IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwog
ICAgIH0KICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9t
SW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6
SlNWYWx1ZSogZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZVB0ciBnZXRC
eUluZGV4KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1xuIik7CiAgICAgfQogICAg
IAogICAgICMgSW5kZXggc2V0dGVyCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5k
ZXgsIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6
OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgfQogICAgICMgTmFtZSBnZXR0ZXIKICAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTmFtZUdldHRlciJ9IHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0pIHsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByaXZhdGU6XG4iKTsKICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoSlNDOjpF
eGVjU3RhdGUqLCAkaW1wbENsYXNzTmFtZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpO1xuIik7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSog
bmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0
IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAg
ICAgfQogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOwpAQCAtNjMwLDI4ICs2
MzAsMjggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICBpZiAoISRoYXNQYXJlbnQgfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVUb0pTIn0pIHsKICAgICAgICAg
aWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlw
ZT4qLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNTVkdQT0RU
eXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOwogICAgICAg
ICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFt
ZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUqIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIp
OworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKiwgU1ZHRWxlbWVudCogY29udGV4dCk7XG4iKTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6
OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgJGltcGxUeXBlKik7XG4iKTsKICAgICAgICAgfQogCiAgICAgICAgICMgUmVzb2x2
ZSBhbWJpZ3VpdHkgd2l0aCBFdmVudFRhcmdldCB0aGF0IG90aGVyd2lzZSBleGlzdHMuCiAgICAg
ICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIpIHsKLSAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBFdmVudFRhcmdldE5vZGUqIG5vZGUpIHsgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nh
c3Q8Tm9kZSo+KG5vZGUpKTsgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiaW5saW5lIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBFdmVu
dFRhcmdldE5vZGUqIG5vZGUpIHsgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8Tm9kZSo+
KG5vZGUpKTsgfVxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCEkaGFzUGFyZW50IHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlTmF0aXZlQ29udmVydGVy
In0pIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSopO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVyZmFj
ZU5hbWV9KEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgfSBlbHNpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIk5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpKU1ZhbHVlKik7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVmUHRyPE5vZGVGaWx0
ZXI+IHRvTm9kZUZpbHRlcihKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJGltcGxDbGFzc05hbWUqIHRvJHtp
bnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1lKiB0byR7aW50ZXJmYWNlTmFtZX0oSlNDOjpKU1Zh
bHVlUHRyKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
Tm9kZSIgb3IgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiIG9yICRpbnRlcmZhY2VOYW1lIGVx
ICJUZXh0IikgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1
ZSogdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosICRpbnRlcmZhY2VOYW1lKik7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosICRpbnRlcmZhY2VOYW1lKik7XG4iKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKQEAgLTY3MSw3
ICs2NzEsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDAg
fHwgJG51bUNvbnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LAotICAgICAgICAgICAgIiAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6
OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG90eXBlKVxuIiAu
CisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgogICAgICAgICAgICAg
IiAgICB7XG4iIC4KICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUpKTtcbiIgLgog
ICAgICAgICAgICAgIiAgICB9XG4iKTsKQEAgLTY4NCw3ICs2ODQsNyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gRnVuY3Rpb25zXG5cbiIpOwog
ICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsK
ICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJz
dCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tf
dWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2Z1bmN0aW9uTmFtZX0oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWVQdHIg
JHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNW
YWx1ZVB0ciwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNjkyLDE2ICs2OTIsMTYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIi8vIEF0dHJpYnV0ZXNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0
dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgICAgICBteSAkZ2V0
dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3Qo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5
cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29uc3RydWN0b3IiIDogIiIpOwotICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciAk
e2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBK
U0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgICAgICB1bmxlc3MgKCRhdHRyaWJ1dGUt
PnR5cGUgPX4gL3JlYWRvbmx5LykgewogICAgICAgICAgICAgICAgIG15ICRzZXR0ZXIgPSAic2V0
SlMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAv
Q29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3RvciIgOiAiIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgInZvaWQgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgInZvaWQgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVy
YXRlQ29uc3RydWN0b3IifSkgewogICAgICAgICAgICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50
ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyICR7Z2V0dGVyfShKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90
Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzA5LDcgKzcwOSw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBDb25zdGFudHNcblxu
Iik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRz
fSkgewogICAgICAgICAgICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICRj
b2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRjb25zdGFudC0+bmFtZSk7Ci0gICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2dldHRlcn0oSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyICR7
Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpT
Qzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA1Niw3ICsx
MDU2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBteSAk
Z2V0RnVuY3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gICRjb2RlR2VuZXJhdG9y
LT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8gIkNvbnN0cnVjdG9yIiA6ICIiKTsK
ICAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRuYW1lKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiSlNWYWx1ZSogJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZVB0ciAke2dldEZ1bmN0aW9uTmFtZX0oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKIAogICAg
ICAgICAgICAgICAgIG15ICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uID0gIiI7CkBA
IC0xMTI0LDEwICsxMTI0LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBpbXAoKnN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTtcbiIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxD
bGFzc05hbWUsICIiLCAiaW1wLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVjKSIsICJzdGF0aWNf
Y2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkiKSAuICI7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNW
YWx1ZVB0ciByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGltcGxDbGFzc05hbWUsICIiLCAiaW1wLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVj
KSIsICJzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSki
KSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBz
dGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09i
amVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUs
ICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uLCAiaW1wLT4kaW1wbEdldHRlckZ1bmN0
aW9uTmFtZShlYykiLCAic3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xv
dEJhc2UoKSkpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAkaW1wbENsYXNzTmFt
ZUZvclZhbHVlQ29udmVyc2lvbiwgImltcC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoZWMpIiwg
InN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKSIpIC4g
IjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpOwpAQCAt
MTE0MCw3ICsxMTQwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZUNvbnN0cnVjdG9y
In0pIHsKICAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlvbk5hbWUgPSAianMi
IC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwogCi0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtj
b25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJh
c2UoKSkpLT5nZXRDb25zdHJ1Y3RvcihleGVjKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuIik7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifTsKIAogICAgICAgICBpZiAoJGhh
c1NldHRlcikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NO
YW1lfTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYm9vbCBvaztcbiIpOwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKIAogICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhh
c0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKVxuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpbmRleFNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiIpOwog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybjtcbiIpOwpAQCAt
MTE5Niw3ICsxMTk2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgIG15ICRwdXRGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4gJGludGVyZmFjZU5h
bWUgLiAgJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpIC4gKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3RvciIgOiAiIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2Rl
R2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1lKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7cHV0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSlcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7cHV0RnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVl
KVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHkifSkgewpAQCAt
MTI4NCw3ICsxMjg0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVDb25zdHJ1Y3Rv
ciJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtjbGFzc05hbWV9
OjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpXG57XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU1ZhbHVlUHRyICR7Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKVxue1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcj4oZXhlYyk7XG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTEyOTcs
NyArMTI5Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAk
ZnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAi
UHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPm5hbWUpOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRp
b25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBs
ZW1lbnRhdGlvbkZ1bmN0aW9uIn0gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWUpOwogCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IkpTVmFsdWUqICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKVxuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKIAogICAgICAg
ICAgICAgJGltcGxLSlNJbmNsdWRleyJFcnJvci5oIn0gPSAxOwpAQCAtMTQxOCw3ICsxNDE4LDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAi
anMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkY29uc3Rh
bnQtPm5hbWUpOwogCiAgICAgICAgICAgICAjIEZJWE1FOiB0aGlzIGNhc3RzIGludG8gaW50IHRv
IG1hdGNoIG91ciBwcmV2aW91cyBiZWhhdmlvciB3aGljaCB0dXJuZWQgMHhGRkZGRkZGRiBpbiAt
MSBmb3IgTm9kZUZpbHRlci5TSE9XX0FMTAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU1ZhbHVlKiAke2dldHRlcn0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU1ZhbHVlUHRyICR7Z2V0dGVyfShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oIiAuICRjb25zdGFudC0+dmFsdWUgLiAiKSk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTE0MjYs
NyArMTQyNiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFsdWUqICR7Y2xhc3NOYW1lfTo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuSlNWYWx1ZVB0ciAke2NsYXNzTmFtZX06OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8JGNs
YXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpO1xuIik7CiAgICAgICAgIGlmIChJ
bmRleEdldHRlclJldHVybnNTdHJpbmdzKCRpbXBsQ2xhc3NOYW1lKSkgewpAQCAtMTQ0NCwxMSAr
MTQ0NCwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgaWYgKCghJGhhc1Bh
cmVudCBvciAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZVRvSlMifSkg
YW5kICFVc2VzTWFudWFsVG9KU0ltcGxlbWVudGF0aW9uKCRpbXBsQ2xhc3NOYW1lKSkgewogICAg
ICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlND
OjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVy
PCRwb2RUeXBlPiogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogb2JqZWN0LCBTVkdFbGVtZW50
KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5lZWRpbmdDb250ZXh0
UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCAkaW1wbFR5cGUq
IG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOworICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsICRp
bXBsVHlwZSogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgJGltcGxUeXBlKiBvYmplY3QpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsICRpbXBsVHlwZSogb2JqZWN0KVxuIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtMTQ2NCw5ICsxNDY0LDkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgIGlmICgoISRoYXNQYXJlbnQgb3IgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkgYW5kICEkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYXRpdmVDb252ZXJ0ZXIifSkgewogICAg
ICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHBv
ZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSogdmFsdWUpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEpT
Qzo6SlNWYWx1ZVB0ciB2YWx1ZSlcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVyZmFjZU5hbWV9KEpT
Qzo6SlNWYWx1ZSogdmFsdWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
JGltcGxDbGFzc05hbWUqIHRvJHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWVQdHIgdmFsdWUp
XG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CkBA
IC0xNTE1LDcgKzE1MTUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2Fs
bCgpCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAicmV0dXJuIGpzVW5k
ZWZpbmVkKCk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1Zh
bHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwgIiIsICRmdW5jdGlv
blN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwgIiIs
ICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIp
IGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKIAogICAgICAgICBpZiAoJHBvZFR5
cGUpIHsKQEAgLTE5NzIsNyArMTk3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgIHsg
CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0
VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAogICAgIH0KSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9OUF9qc29i
amVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9vbCBfTlBOX0ludm9rZURl
ZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgICAgIEpTVmFs
dWUqIGZ1bmN0aW9uID0gb2JqLT5pbXA7CisgICAgICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBv
YmotPmltcDsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBib29sIF9OUE5fSW52
b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFy
Z3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICBQ
cm90ZWN0ZWRQdHI8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGltZW91dENoZWNrKCk7
Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdFYgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGZ1bmN0aW9uLCBhcmdMaXN0KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHRWID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBmdW5jdGlvbiwg
YXJnTGlzdCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVjaygpOwogCiAg
ICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBj
YWxsLgpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmpl
Y3QqIG8sIE4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IG9iai0+aW1w
LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7
CisgICAgICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwogICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2Fs
bERhdGEoY2FsbERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpA
QCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8s
IE4KICAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCwg
cm9vdE9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIFByb3RlY3RlZFB0cjxKU0dsb2JhbE9iamVj
dD4gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIGds
b2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ViA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFy
Z0xpc3QpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdFYgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iai0+aW1wLCBhcmdMaXN0KTsKICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0
dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0yMDYsNyArMjA2LDcgQEAg
Ym9vbCBfTlBOX0V2YWx1YXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QUwogICAgICAgICBnbG9iYWxP
YmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21w
bGV0aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICAgICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7
CiAgICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKQEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQ
LCBOUE9iamVjdCogbywgCiAgICAgICAgIFByaXZhdGVJZGVudGlmaWVyKiBpID0gc3RhdGljX2Nh
c3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihwcm9wZXJ0eU5hbWUpOwogICAgICAgICAKICAgICAgICAg
SlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGkt
PnZhbHVlLnN0cmluZykpOwogICAgICAgICBlbHNlCkBAIC0zNjQsNyArMzY0LDcgQEAgYm9vbCBf
TlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogCiAgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSogZnVuYyA9IG9iai0+aW1wLT5n
ZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAhZnVuYy0+aXNVbmRlZmluZWQoKTsKICAgICB9CkBA
IC00MzIsNyArNDMyLDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBj
bwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxs
IHRoZSBjb25zdHJ1Y3RvciBvYmplY3QuCi0gICAgICAgIEpTVmFsdWUqIGNvbnN0cnVjdG9yID0g
b2JqLT5pbXA7CisgICAgICAgIEpTVmFsdWVQdHIgY29uc3RydWN0b3IgPSBvYmotPmltcDsKICAg
ICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBl
IGNvbnN0cnVjdFR5cGUgPSBjb25zdHJ1Y3Rvci0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3RE
YXRhKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpCkBA
IC00NDIsNyArNDQyLDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBj
bwogICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCBy
b290T2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0
PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgZ2xv
YmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHRW
ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdMaXN0KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHRWID0gY29uc3RydWN0KGV4
ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KTsK
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCwxMiArNzgsMTIgQEAgdm9pZCBJbnN0YW5jZTo6ZW5kKCkKICAgICB2aXJ0
dWFsRW5kKCk7CiB9CiAKLUpTVmFsdWUqIEluc3RhbmNlOjpnZXRWYWx1ZU9mRmllbGQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBGaWVsZCogYUZpZWxkKSBjb25zdAorSlNWYWx1ZVB0ciBJbnN0YW5j
ZTo6Z2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGFGaWVsZCkg
Y29uc3QKIHsKICAgICByZXR1cm4gYUZpZWxkLT52YWx1ZUZyb21JbnN0YW5jZShleGVjLCB0aGlz
KTsKIH0KIAotdm9pZCBJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgRmllbGQqIGFGaWVsZCwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAordm9pZCBJbnN0YW5j
ZTo6c2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGFGaWVsZCwg
SlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgYUZpZWxkLT5zZXRWYWx1ZVRvSW5zdGFu
Y2UoZXhlYywgdGhpcywgYVZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgJKHJldmlzaW9uIDM5NjE2
KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1
MCw4IEBAIHR5cGVkZWYgVmVjdG9yPE1ldGhvZCo+IE1ldGhvZExpc3Q7CiBjbGFzcyBGaWVsZCB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5z
dGFuY2UqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShF
eGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUqKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBKU1ZhbHVlUHRyIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3Rh
bmNlKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlUHRyKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5GaWVsZCgpIHsgfQogfTsKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIE1ldGhvZExp
c3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIEZpZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5j
ZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGZhbGxiYWNrT2JqZWN0KEV4ZWNT
dGF0ZSosIEluc3RhbmNlKiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwg
SW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQog
CiAgICAgdmlydHVhbCB+Q2xhc3MoKSB7IH0KIH07CkBAIC0xMDcsMjUgKzEwNywyNSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdCA9IDA7CiAgICAg
Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiwgY29uc3Qg
RmllbGQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGdldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJikgY29uc3QgeyByZXR1cm4ganNVbmRl
ZmluZWQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mRmllbGQoRXhlY1N0YXRlKiwg
Y29uc3QgRmllbGQqLCBKU1ZhbHVlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdl
dFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBGaWVsZCopIGNvbnN0OworICAgIHZpcnR1
YWwgSlNWYWx1ZVB0ciBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYpIGNvbnN0IHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IEZpZWxkKiwgSlNWYWx1ZVB0
cikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZp
ZWxkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKikge30KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyKSB7fQogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSos
IGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRl
KiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KKyAgICB2aXJ0dWFs
IEpTVmFsdWVQdHIgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0
JikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0NvbnN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBKU1Zh
bHVlKiBpbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSos
IGNvbnN0IEFyZ0xpc3QmKSB7IHJldHVybiBub1ZhbHVlKCk7IH0KICAgICAKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpIHsg
fQogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZh
dWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QgPSAwOwog
ICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
IHsgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGdldENsYXNzKCktPm5hbWUoKSk7IH0KKyAgICB2aXJ0
dWFsIEpTVmFsdWVQdHIgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IHsgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsIGdldENsYXNzKCktPm5hbWUoKSk7IH0KICAgICAKICAgICBSb290T2JqZWN0
KiByb290T2JqZWN0KCkgY29uc3Q7CiAgICAgCkBAIC0xNDUsOCArMTQ1LDggQEAgcHVibGljOgog
ICAgIEFycmF5KFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwogICAgIHZpcnR1YWwgfkFycmF5KCk7
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICosIHVuc2lnbmVk
IGluZGV4LCBKU1ZhbHVlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVB
dChFeGVjU3RhdGUgKiwgdW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWVQdHIpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVBdChFeGVjU3RhdGUgKiwgdW5z
aWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5n
dGgoKSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMTMgQEAgUnVudGltZUFycmF5OjpSdW50aW1l
QXJyYXkoRXhlY1N0YXRlKiBleAogewogfQogCi1KU1ZhbHVlKiBSdW50aW1lQXJyYXk6Omxlbmd0
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
dGhpc09iai0+Z2V0TGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlKiBSdW50aW1lQXJyYXk6OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgUnVudGltZUFycmF5OjppbmRleEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIHRoaXNPYmotPmdldENvbmNy
ZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBzbG90LmluZGV4KCkpOwpAQCAtODMsNyArODMsNyBA
QCBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpOwogfQogCi12b2lk
IFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBS
dW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCAKICAgICBKU09iamVjdDo6cHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIFJ1bnRpbWVBcnJh
eTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqIHZhbHVlKQor
dm9pZCBSdW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmIChpbmRleCA+PSBnZXRMZW5ndGgoKSkgewogICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IpOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0cik7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpOwpAQCAtNTYsMTQgKzU2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1Zh
bHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZVB0ciBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBPd25QdHI8QmluZGluZ3M6OkFycmF5PiBfYXJyYXk7
CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgUnVudGltZU1ldGhvZDo6UnVudGltZU1ldGhvZChFeGVjU3RhdGUqIAogewog
fQogCi1KU1ZhbHVlKiBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVNZXRob2Qq
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oYXNPYmplY3Qoc2xvdC5zbG90
QmFzZSgpKSk7CiAKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBSdW50aW1lTWV0aG9kOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoRQogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNh
bGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBj
YWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgUnVudGltZU1l
dGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8UnVudGltZU1ldGhvZCo+KGZ1bmN0aW9uKTsKIApA
QCAtODQsNyArODQsNyBAQCBzdGF0aWMgSlNWYWx1ZSogY2FsbFJ1bnRpbWVNZXRob2QoRXhlY1N0
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhpc09iaiBpcyB0aGUgRE9NIG9iamVjdCBm
b3IgYSBwbHVnaW4sIGdldCB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAvLyBydW50aW1lIG9i
amVjdCBmcm9tIHRoZSBET00gb2JqZWN0LgotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IHRoaXNW
YWx1ZS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmplY3Qi
KSk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSB0aGlzVmFsdWUtPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikpOwogICAgICAgICBpZiAodmFs
dWUtPmlzT2JqZWN0KCZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKSAgICAKICAgICAgICAgICAg
IGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihhc09iamVjdCh2YWx1ZSkpOwog
ICAgICAgICBlbHNlCkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBjYWxsUnVudGlt
ZU1ldGhvZChFeGVjU3QKICAgICAgICAgcmV0dXJuIFJ1bnRpbWVPYmplY3RJbXA6OnRocm93SW52
YWxpZEFjY2Vzc0Vycm9yKGV4ZWMpOwogICAgICAgICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGV4ZWMsICptZXRo
b2QtPm1ldGhvZHMoKSwgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnN0YW5jZS0+
aW52b2tlTWV0aG9kKGV4ZWMsICptZXRob2QtPm1ldGhvZHMoKSwgYXJncyk7CiAgICAgaW5zdGFu
Y2UtPmVuZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBJbXBsZW1l
bnRzSGFzSW5zdGFuY2UpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUq
IGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7
CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgUnVudGltZU9iamVjdEltcDo6aW52YWxpZGF0ZSgpCiAgICAgaW5zdGFu
Y2UgPSAwOwogfQogCi1KU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBSdW50aW1lT2JqZWN0SW1wOjpmYWxs
YmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVPYmplY3RJ
bXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmot
Pmluc3RhbmNlOwpAQCAtNzcsMTQgKzc3LDE0IEBAIEpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6
OmZhbGxiYWNrT2JqZWMKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIAogICAgIENsYXNzICphQ2xh
c3MgPSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBhQ2xhc3Mt
PmZhbGxiYWNrT2JqZWN0KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gYUNsYXNzLT5mYWxsYmFja09iamVjdChleGVjLCBpbnN0YW5j
ZS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKIAogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAg
ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6
OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVPYmplY3RJ
bXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7ICAgIAogICAgIFJ1bnRpbWVPYmpl
Y3RJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNP
YmotPmluc3RhbmNlOwpAQCAtOTYsMTQgKzk2LDE0IEBAIEpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJ
bXA6OmZpZWxkR2V0dGVyKEUKIAogICAgIENsYXNzICphQ2xhc3MgPSBpbnN0YW5jZS0+Z2V0Q2xh
c3MoKTsKICAgICBGaWVsZCogYUZpZWxkID0gYUNsYXNzLT5maWVsZE5hbWVkKHByb3BlcnR5TmFt
ZSwgaW5zdGFuY2UuZ2V0KCkpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGluc3RhbmNlLT5nZXRW
YWx1ZU9mRmllbGQoZXhlYywgYUZpZWxkKTsgCisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnN0
YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAogICAgIAogICAgIGluc3RhbmNl
LT5lbmQoKTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZVB0ciBSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBSdW50aW1lT2JqZWN0SW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVj
dEltcCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIFJlZlB0cjxJbnN0YW5jZT4g
aW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTExNSw3ICsxMTUsNyBAQCBKU1ZhbHVl
KiBSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoCiAKICAgICBDbGFzcyAqYUNsYXNzID0g
aW5zdGFuY2UtPmdldENsYXNzKCk7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gYUNsYXNz
LT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQoKSk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSwg
bWV0aG9kTGlzdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBuZXcgKGV4ZWMpIFJ1bnRpbWVN
ZXRob2QoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIAogICAgIGluc3RhbmNlLT5l
bmQoKTsKICAgICAgICAgICAgIApAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgUnVudGltZU9iamVj
dEltcDo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUnVu
dGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBS
dW50aW1lT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4
ZWMpOwpAQCAtMjAyLDIzICsyMDIsMjMgQEAgYm9vbCBSdW50aW1lT2JqZWN0SW1wOjpkZWxldGVQ
cm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNWYWx1ZSogUnVudGltZU9iamVj
dEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KSBjb25zdAorSlNWYWx1ZVB0ciBSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KGV4ZWMpOwogICAgIAogICAgIFJlZlB0cjxJbnN0YW5jZT4gcHJvdGVjdG9yKGluc3RhbmNlKTsK
ICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+
ZGVmYXVsdFZhbHVlKGV4ZWMsIGhpbnQpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gaW5zdGFu
Y2UtPmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxSdW50aW1lT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9i
amVjdEltcCo+KGZ1bmN0aW9uKS0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKICAgICBpbnN0YW5j
ZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVs
dE1ldGhvZChleGVjLCBhcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5p
bnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjM1LDExICsyMzUsMTEgQEAgSlNPYmplY3QqIGNhbGxS
dW50aW1lQ29uc3RydWN0b3IoRXhlY1N0YQogewogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFu
Y2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGNvbnN0cnVjdG9yKS0+Z2V0SW50ZXJu
YWxJbnN0YW5jZSgpKTsKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBpbnN0YW5jZS0+aW52b2tlQ29uc3RydWN0KGV4ZWMsIGFyZ3MpOworICAgIEpTVmFsdWVQ
dHIgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZUNvbnN0cnVjdChleGVjLCBhcmdzKTsKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgCiAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdC0+aXNPYmplY3QoKSA/IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4ocmVzdWx0KSA6IGNvbnN0
cnVjdG9yOworICAgIHJldHVybiByZXN1bHQtPmlzT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KHJlc3VsdC0+YXNDZWxsKCkpIDogY29uc3RydWN0b3I7CiB9CiAKIENvbnN0cnVjdFR5
cGUgUnVudGltZU9iamVjdEltcDo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25z
dHJ1Y3REYXRhKQpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAzOTYxNikK
KysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDkgKzM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJ1bnRpbWVPYmplY3RJbXAoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSos
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiAsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVh
bCBKU1ZhbHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7
CiAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYpOwogICAgIApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHBy
b3RvdHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICB9CkBAIC03MCw5
ICs3MCw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogICAgIAotICAgIHN0YXRpYyBKU1ZhbHVl
KiBmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGZpZWxkR2V0dGVyKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0
aWMgSlNWYWx1ZSogbWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmYWxsYmFja09iamVj
dEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgZmllbGRHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRy
IG1ldGhvZEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CiAKICAgICBSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZTsKIH07
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCBib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0CiAgICAgcmV0dXJuIF9v
YmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdDsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpp
bnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBDSW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZExpc3QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gT3ZlcmxvYWRpbmcgbWV0aG9kcyBhcmUgbm90IGFsbG93
ZWQgYnkgTlBPYmplY3RzLiAgU2hvdWxkIG9ubHkgYmUgb25lCiAgICAgLy8gbmFtZSBtYXRjaCBm
b3IgYSBwYXJ0aWN1bGFyIG1ldGhvZC4KQEAgLTEwMSwxMyArMTAxLDEzIEBAIEpTVmFsdWUqIENJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGEKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZjQXJnc1tpXSk7CiAKLSAg
ICBKU1ZhbHVlKiByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZy
ZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5nZXQoKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRW
YWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9v
dE9iamVjdC5nZXQoKSk7CiAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJp
YW50KTsKICAgICByZXR1cm4gcmVzdWx0VmFsdWU7CiB9CiAKIAotSlNWYWx1ZSogQ0luc3RhbmNl
OjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+
aW52b2tlRGVmYXVsdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMzAsNyAr
MTMwLDcgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKAogICAgIGZv
ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFs
dWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFy
aWFudFRvVmFsdWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywg
JnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsKICAgICBfTlBOX1JlbGVhc2VWYXJp
YW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwogICAgIHJldHVybiByZXN1bHRWYWx1ZTsKIH0KQEAg
LTE0MCw3ICsxNDAsNyBAQCBib29sIENJbnN0YW5jZTo6c3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25z
CiAgICAgcmV0dXJuIF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0OwogfQogICAgIAotSlNWYWx1
ZSogQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFfb2JqZWN0LT5fY2xh
c3MtPmNvbnN0cnVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNjMsMTIg
KzE2MywxMiBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVjCiAgICAg
Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRW
YWx1ZSgmY0FyZ3NbaV0pOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBW
YXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkpOwor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVj
LCAmcmVzdWx0VmFyaWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkpOwogICAgIF9OUE5fUmVsZWFzZVZh
cmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7CiAgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQog
Ci1KU1ZhbHVlKiBDSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpkZWZh
dWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNv
bnN0CiB7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQogICAgICAgICByZXR1cm4gc3Ry
aW5nVmFsdWUoZXhlYyk7CkBAIC0xNzcsMjYgKzE3NywyNiBAQCBKU1ZhbHVlKiBDSW5zdGFuY2U6
OmRlZmF1bHRWYWx1ZShFeGVjU3RhCiAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CiB9CiAKLUpT
VmFsdWUqIENJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNW
YWx1ZVB0ciBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBjaGFyIGJ1ZlsxMDI0XTsKICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiTlBP
YmplY3QgJXAsIE5QQ2xhc3MgJXAiLCBfb2JqZWN0LCBfb2JqZWN0LT5fY2xhc3MpOwogICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBidWYpOwogfQogCi1KU1ZhbHVlKiBDSW5zdGFuY2U6Om51bWJl
clZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpudW1i
ZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBzb21ldGhpbmcgc2Vuc2libGUuCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDApOwogfQog
Ci1KU1ZhbHVlKiBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CitKU1ZhbHVlUHRyIENJ
bnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHNvbWV0aGluZyBzZW5zaWJsZS4KICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIH0KIAot
SlNWYWx1ZSogQ0luc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgCitKU1Zh
bHVlUHRyIENJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IAogewogICAg
IHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY19p
bnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCwyMSArNTAsMjEgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgQ2xh
c3MgKmdldENsYXNzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZhbHVlT2YoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVl
UHRyIHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGRl
ZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAg
ICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBN
ZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlRGVmYXVsdE1ldGhvZChF
eGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CiAgICAgCiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VDb25zdHJ1
Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBp
bnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsK
IAotICAgIEpTVmFsdWUqIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFs
dWUqIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIGJvb2xlYW5W
YWx1ZSgpIGNvbnN0OworICAgIEpTVmFsdWVQdHIgc3RyaW5nVmFsdWUoRXhlY1N0YXRlKikgY29u
c3Q7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBK
U1ZhbHVlUHRyIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogICAgIAogICAgIE5QT2JqZWN0ICpnZXRP
YmplY3QoKSBjb25zdCB7IHJldHVybiBfb2JqZWN0OyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L2MvY19ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfcnVudGlt
ZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNvbnN0IGNoYXIqIENGaWVsZDo6bmFt
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGktPmlzU3RyaW5nID8gaS0+dmFsdWUuc3RyaW5nIDogMDsK
IH0KIAotSlNWYWx1ZSogQ0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAorSlNWYWx1ZVB0ciBDRmllbGQ6OnZhbHVlRnJv
bUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0CiB7
CiAgICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IENJbnN0
YW5jZSo+KGluc3QpOwogICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
CkBAIC02Nyw3ICs2Nyw3IEBAIEpTVmFsdWUqIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhl
Y1MKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9m
aWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3Vs
dCkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY29udmVydE5QVmFyaWFudFRvVmFs
dWUoZXhlYywgJnByb3BlcnR5LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKTsKKyAgICAgICAgICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgJnByb3Bl
cnR5LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKTsKICAgICAgICAgICAgIF9OUE5fUmVsZWFzZVZh
cmlhbnRWYWx1ZSgmcHJvcGVydHkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQpAQCAtNzUsNyArNzUsNyBAQCBKU1ZhbHVlKiBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgQ0ZpZWxkOjpzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdCwgSlNW
YWx1ZSogYVZhbHVlKSBjb25zdAordm9pZCBDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29u
c3QKIHsKICAgICBjb25zdCBDSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q0luc3RhbmNlKj4oaW5zdCk7CiAgICAgTlBPYmplY3QqIG9iaiA9IGluc3RhbmNlLT5nZXRPYmpl
Y3QoKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JyaWRnZS9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBAIGNs
YXNzIENGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CiBwdWJsaWM6CiAgICAgQ0ZpZWxkKE5QSWRlbnRp
ZmllciBpZGVudCkgOiBfZmllbGRJZGVudGlmaWVyKGlkZW50KSB7IH0KIAotICAgIHZpcnR1YWwg
SlNWYWx1ZSogdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNv
bnN0IEluc3RhbmNlKiwgSlNWYWx1ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2
YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFu
Y2UqLCBKU1ZhbHVlUHRyKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBj
b25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDM5
NjE2KQorKysgV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHN0YXRpYyBTdHJpbmcgY29udmVydFVURjhUb1VURjE2V2l0aExhdGkK
IH0KIAogLy8gVmFyaWFudCB2YWx1ZSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFy
aWFudFZhbHVlKCkKLXZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWx1ZSwgTlBWYXJpYW50KiByZXN1bHQpCit2b2lkIGNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgTlBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogCkBAIC0xMDUsNyArMTA1LDcgQEAg
dm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIAogICAgIH0KIH0KIAotSlNW
YWx1ZSogY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZh
cmlhbnQqIHZhcmlhbnQsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCitKU1ZhbHVlUHRyIGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJp
YW50LCBSb290T2JqZWN0KiByb290T2JqZWN0KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsK
ICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JyaWRnZS9jL2NfdXRpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIGVu
dW0gTlBfVmFsdWVUeXBlIHsKIH07CiAKIFdlYkNvcmU6OlN0cmluZyBjb252ZXJ0TlBTdHJpbmdU
b1VURjE2KGNvbnN0IE5QU3RyaW5nICpzdHJpbmcpOwotdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFy
aWFudChFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgTlBWYXJpYW50KiByZXN1bHQpOwotSlNWYWx1ZSog
Y29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgTlBWYXJpYW50KiwgUm9v
dE9iamVjdCopOwordm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqLCBKU1Zh
bHVlUHRyLCBOUFZhcmlhbnQqIHJlc3VsdCk7CitKU1ZhbHVlUHRyIGNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IE5QVmFyaWFudCosIFJvb3RPYmplY3QqKTsKIElkZW50
aWZpZXIgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKTsKIAog
c3RydWN0IFByaXZhdGVJZGVudGlmaWVyIHsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
aW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFu
Y2UuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIENsYXNzICpKYXZhSW5zdGFu
Y2U6OmdldENsYXNzKCkgY29uc3QgCiAgICAgcmV0dXJuIF9jbGFzczsKIH0KIAotSlNWYWx1ZSog
SmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
UHRyIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewog
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKQEAgLTkyLDIzICs5MiwyMyBAQCBKU1ZhbHVl
KiBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHUpOwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSmF2YUluc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgamRvdWJsZSBkb3VibGVWYWx1ZSA9IGNhbGxKTklN
ZXRob2Q8amRvdWJsZT4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJkb3VibGVWYWx1ZSIsICIoKUQi
KTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZG91YmxlVmFsdWUpOwogfQogCi1KU1ZhbHVl
KiBKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFJbnN0
YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAgICBqYm9vbGVhbiBib29sZWFuVmFsdWUg
PSBjYWxsSk5JTWV0aG9kPGpib29sZWFuPihfaW5zdGFuY2UtPl9pbnN0YW5jZSwgImJvb2xlYW5W
YWx1ZSIsICIoKVoiKTsKICAgICByZXR1cm4ganNCb29sZWFuKGJvb2xlYW5WYWx1ZSk7CiB9CiAK
LUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVl
UHRyIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1l
dGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCiB7CiAgICAgaW50IGks
IGNvdW50ID0gYXJncy5zaXplKCk7CiAgICAganZhbHVlICpqQXJnczsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHRWYWx1ZTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdFZhbHVlOwogICAgIE1ldGhvZCAqbWV0
aG9kID0gMDsKICAgICBzaXplX3QgbnVtTWV0aG9kcyA9IG1ldGhvZExpc3Quc2l6ZSgpOwogICAg
IApAQCAtMTU3LDcgKzE1Nyw3IEBAIEpTVmFsdWUqIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9k
IChFeGUKICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKICAgICBpZiAocm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCkpIHsKICAgICAgICAgam9iamVjdCBvYmogPSBfaW5zdGFuY2UtPl9pbnN0YW5j
ZTsKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7CiAgICAg
ICAgIGNvbnN0IGNoYXIgKmNhbGxpbmdVUkwgPSAwOyAgLy8gRklYTUUsIG5lZWQgdG8gcHJvcGFn
YXRlIGNhbGxpbmcgVVJMIHRvIEphdmEKICAgICAgICAgaGFuZGxlZCA9IGRpc3BhdGNoSk5JQ2Fs
bChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9kLT5pc1N0YXRp
YygpLCBqTWV0aG9kLT5KTklSZXR1cm5UeXBlKCksIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpB
cmdzLCByZXN1bHQsIGNhbGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKICAgICAgICAg
aWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7CkBAIC0yODMsNyArMjgzLDcgQEAgSlNWYWx1ZSog
SmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4ZQogICAgIHJldHVybiByZXN1bHRWYWx1ZTsK
IH0KIAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFJbnN0
YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKICAgICAgICAg
cmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwpAQCAtMjk5LDcgKzI5OSw3IEBAIEpTVmFsdWUqIEph
dmFJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWMKICAgICByZXR1cm4gdmFsdWVPZihleGVjKTsK
IH0KIAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QgCitKU1ZhbHVlUHRyIEphdmFJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0IAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKIH0KSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2luc3RhbmNlLmgJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uvam5p
L2puaV9pbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNiArNzcsMTYgQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgQ2xhc3MgKmdldENsYXNzKCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCBKU1ZhbHVlKiB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwg
SlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUp
IGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0
OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZU1l
dGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZCwgY29uc3QgQXJn
TGlzdCYgYXJncyk7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncyk7
CiAKICAgICBqb2JqZWN0IGphdmFJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIF9pbnN0YW5jZS0+
X2luc3RhbmNlOyB9CiAgICAgCi0gICAgSlNWYWx1ZSogc3RyaW5nVmFsdWUoRXhlY1N0YXRlKikg
Y29uc3Q7Ci0gICAgSlNWYWx1ZSogbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAg
SlNWYWx1ZSogYm9vbGVhblZhbHVlKCkgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBzdHJpbmdWYWx1
ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIG51bWJlclZhbHVlKEV4ZWNTdGF0
ZSopIGNvbnN0OworICAgIEpTVmFsdWVQdHIgYm9vbGVhblZhbHVlKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIEJpbmRpbmdMYW5ndWFnZSBnZXRCaW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCB7IHJldHVy
biBKYXZhTGFuZ3VhZ2U7IH0KIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QuaAkocmV2
aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDggKzkwLDggQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBqdmFs
dWUgaW52b2tlKEpTT2JqZWN0Q2FsbENvbnRleHQqKTsKIAotICAgIGpvYmplY3QgY29udmVydFZh
bHVlVG9KT2JqZWN0KEpTVmFsdWUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBjb252ZXJ0Sk9iamVj
dFRvVmFsdWUoRXhlY1N0YXRlKiwgam9iamVjdCkgY29uc3Q7CisgICAgam9iamVjdCBjb252ZXJ0
VmFsdWVUb0pPYmplY3QoSlNWYWx1ZVB0cikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBjb252ZXJ0
Sk9iamVjdFRvVmFsdWUoRXhlY1N0YXRlKiwgam9iamVjdCkgY29uc3Q7CiAgICAgdm9pZCBnZXRM
aXN0RnJvbUpBcnJheShFeGVjU3RhdGUqLCBqb2JqZWN0QXJyYXksIEFyZ0xpc3QmKSBjb25zdDsK
ICAgICAKICAgICBSb290T2JqZWN0KiByb290T2JqZWN0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfanNvYmplY3QubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uv
am5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIGpv
YmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmco
bWV0aG9kTmFtZSkpOwotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gX2ltcC0+Z2V0KGV4ZWMsIGlk
ZW50aWZpZXIpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBfaW1wLT5nZXQoZXhlYywgaWRl
bnRpZmllcik7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZU5vbmUpCkBAIC0zMDMsNyArMzAzLDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmNh
bGwoanN0cmluZyBtZXRobwogICAgIEFyZ0xpc3QgYXJnTGlzdDsKICAgICBnZXRMaXN0RnJvbUpB
cnJheShleGVjLCBhcmdzLCBhcmdMaXN0KTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBKU0M6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgX2ltcCwgYXJnTGlzdCk7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgX2ltcCwgYXJnTGlzdCk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
PnN0b3BUaW1lb3V0Q2hlY2soKTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3Qo
cmVzdWx0KTsKQEAgLTMxMyw3ICszMTMsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChq
c3RyaW5nIHNjcmlwCiB7CiAgICAgSlNfTE9HICgic2NyaXB0ID0gJXNcbiIsIEphdmFTdHJpbmco
c2NyaXB0KS5VVEY4U3RyaW5nKCkpOwogICAgIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKQEAgLTM0
Nyw3ICszNDcsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0TWVtYmVyKGpzdHJpbmcgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKICAgICAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0
ID0gX2ltcC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1l
KSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKSkpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZVRvSk9iamVjdChyZXN1bHQpOwogfQpAQCAtMzk3LDcgKzM5Nyw3IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0OjpnZXRTbG90KGppbnQgaW5kZXgKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlNMb2NrIGxvY2soZmFs
c2UpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgcmV0dXJu
IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwogfQpAQCAtNDg1LDcgKzQ4NSw3IEBAIGps
b25nIEphdmFKU09iamVjdDo6Y3JlYXRlTmF0aXZlKGpsb25nIG4KICAgICByZXR1cm4gbmF0aXZl
SGFuZGxlOwogfQogCi1qb2JqZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0
KEpTVmFsdWUqIHZhbHVlKSBjb25zdAoram9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1
ZVRvSk9iamVjdChKU1ZhbHVlUHRyIHZhbHVlKSBjb25zdAogewogICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKICAgICAKQEAgLTU3MSw3ICs1NzEsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y29u
dmVydFZhbHVlVG9KT2JqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSmF2YUpT
T2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IHRo
ZU9iamVjdCkgY29uc3QKK0pTVmFsdWVQdHIgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRv
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IHRoZU9iamVjdCkgY29uc3QKIHsKICAgICAv
LyBJbnN0YW5jZXMgb2YgbmV0c2NhcGUuamF2YXNjcmlwdC5KU09iamVjdCBnZXQgY29udmVydGVk
IGJhY2sgdG8KICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMuICBBbGwgb3RoZXIgb2JqZWN0cyBh
cmUgd3JhcHBlZC4gIEl0J3Mgbm90CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCShyZXZpc2lv
biAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKICAgICAg
ICBleGNlcHRpb25EZXNjcmlwdGlvbjooTlNTdHJpbmcgKiopZXhjZXB0aW9uU3RyaW5nOwogQGVu
ZAogCi1ib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGlj
LCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBq
dmFsdWUgJnJlc3VsdCwgY29uc3QgY2hhciosIEpTVmFsdWUqJiBleGNlcHRpb25EZXNjcmlwdGlv
bikKK2Jvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3Qgdm9pZCogdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMs
IEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2
YWx1ZSAmcmVzdWx0LCBjb25zdCBjaGFyKiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uRGVzY3JpcHRp
b24pCiB7CiAgICAgaWQgdmlldyA9IChpZCl0YXJnZXRBcHBsZXRWaWV3OwogICAgIApJbmRleDog
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUv
YnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAgSmF2YUZpZWxkOjpKYXZhRmllbGQgKEpOSUVudiAqZW52LCBqb2JqZQogICAgIF9maWVsZCA9
IG5ldyBKT2JqZWN0V3JhcHBlcihhRmllbGQpOwogfQogCi1KU1ZhbHVlKiBKYXZhQXJyYXk6OmNv
bnZlcnRKT2JqZWN0VG9BcnJheShFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNv
bnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKK0pTVmFs
dWVQdHIgSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBq
b2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmplY3QpCiB7CiAgICAgaWYgKHR5cGVbMF0gIT0gJ1snKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKQEAgLTkzLDcgKzkzLDcgQEAganZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0
Y2hWYWx1ZUZyb21JbnN0YQogICAgICAgICB7CiAgICAgICAgICAgICBSb290T2JqZWN0KiByb290
T2JqZWN0ID0gaW5zdGFuY2UtPnJvb3RPYmplY3QoKTsKICAgICAgICAgICAgIGlmIChyb290T2Jq
ZWN0ICYmIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSogZXhjZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZVB0ciBleGNlcHRpb25EZXNjcmlwdGlvbiA9IG5vVmFsdWUoKTsKICAgICAgICAgICAg
ICAgICBqdmFsdWUgYXJnc1sxXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBh
cmdzWzBdLmwgPSBqaW5zdGFuY2U7CkBAIC0xMDYsMTEgKzEwNiwxMSBAQCBqdmFsdWUgSmF2YUZp
ZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSogSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3RhbmNlKiBpKSBjb25zdCAKK0pTVmFsdWVQdHIgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpKSBjb25zdCAKIHsKICAgICBj
b25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3Rh
bmNlICo+KGkpOwogCi0gICAgSlNWYWx1ZSoganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAg
IEpTVmFsdWVQdHIganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIHN3aXRjaCAo
X0pOSVR5cGUpIHsKICAgICAgICAgY2FzZSBhcnJheV90eXBlOgpAQCAtMTc1LDcgKzE3NSw3IEBA
IHZvaWQgSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW4KICAgICAgICAgewogICAg
ICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7
CiAgICAgICAgICAgICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUo
KSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9W
YWx1ZSgpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uRGVzY3JpcHRpb24g
PSBub1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMl07CiAgICAgICAgICAg
ICAgICAganZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgICAgICAKQEAgLTE4OSw3ICsxODksNyBA
QCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAgICAgfQogfQogCi12
b2lkIEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SW5zdGFuY2UqIGksIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3QKK3ZvaWQgSmF2YUZpZWxkOjpzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1
ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihpKTsKICAgICBqdmFsdWUgamF2YVZh
bHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFWYWx1ZSwgX0pOSVR5cGUsIHR5cGUo
KSk7CkBAIC0zODYsNyArMzg2LDcgQEAgUm9vdE9iamVjdCogSmF2YUFycmF5Ojpyb290T2JqZWN0
KCkgY29ucwogICAgIHJldHVybiBfcm9vdE9iamVjdCAmJiBfcm9vdE9iamVjdC0+aXNWYWxpZCgp
ID8gX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOwogfQogCi12b2lkIEphdmFBcnJheTo6c2V0VmFsdWVB
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0
Cit2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3QKIHsKICAgICBKTklFbnYgKmVudiA9IGdldEpO
SUVudigpOwogICAgIGNoYXIgKmphdmFDbGFzc05hbWUgPSAwOwpAQCAtNDU0LDcgKzQ1NCw3IEBA
IHZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXgKIH0KIAogCi1KU1ZhbHVl
KiBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkgY29u
c3QKK0pTVmFsdWVQdHIgSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBK
TklUeXBlIGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShfdHlwZVsxXSk7Cklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw4
IEBAIGNsYXNzIEphdmFGaWVsZCA6IHB1YmxpYyBGaWVsZAogcHVibGljOgogICAgIEphdmFGaWVs
ZCAoSk5JRW52ICplbnYsIGpvYmplY3QgYUZpZWxkKTsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSog
dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFu
Y2UpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNl
LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
ICpuYW1lKCkgY29uc3QgeyByZXR1cm4gX25hbWUuVVRGOFN0cmluZygpOyB9CiAgICAgdmlydHVh
bCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gX3R5cGUuVVRGOFN0cmluZygpOyB9
CkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBwdWJsaWM6CiAKICAgICBSb290T2JqZWN0KiByb290T2Jq
ZWN0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEpTVmFsdWUqIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5z
aWduZWQgaW50IGluZGV4LCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBK
U1ZhbHVlUHRyIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0OwogICAgIAog
ICAgIGpvYmplY3QgamF2YUFycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5LT5faW5zdGFuY2U7
IH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBjb252ZXJ0Sk9iamVjdFRvQXJyYXkgKEV4ZWNTdGF0
ZSogZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxS
b290T2JqZWN0Pik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgY29udmVydEpPYmplY3RUb0FycmF5
IChFeGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBh
c3NSZWZQdHI8Um9vdE9iamVjdD4pOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxKT2JqZWN0V3Jh
cHBlcj4gX2FycmF5OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCShyZXZpc2lv
biAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0
YW5jZVRvSmF2CiAgICAgICAgICAgICAgICAgZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9TdHJp
bmciKSwKICAgICAgICAgICAgICAgICBlbnYtPk5ld1N0cmluZ1VURigiIikpOwogICAgICAgICAg
ICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAg
IEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAg
ICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAg
ICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoamFycmF5LGksCiAgICAgICAgICAgICAg
ICAgICAgIGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcoZW52LCAoY29uc3QgamNoYXIgKilzdHJp
bmdWYWx1ZS5kYXRhKCksIHN0cmluZ1ZhbHVlLnNpemUoKSkpOwpAQCAtMzc3LDcgKzM3Nyw3IEBA
IHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBi
b29sZWFuX3R5cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5O
ZXdCb29sZWFuQXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJy
YXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsdWUgPSAoamJv
b2xlYW4paXRlbS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5TZXRCb29s
ZWFuQXJyYXlSZWdpb24oKGpib29sZWFuQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEs
ICZ2YWx1ZSk7CiAgICAgICAgICAgICB9CkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGpvYmpl
Y3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewog
ICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0J5dGVBcnJheShsZW5n
dGgpOwogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsK
ICAgICAgICAgICAgICAgICBqYnl0ZSB2YWx1ZSA9IChqYnl0ZSlpdGVtLT50b051bWJlcihleGVj
KTsKICAgICAgICAgICAgICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbigoamJ5dGVBcnJheSlq
YXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTM5
Nyw3ICszOTcsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAg
ICAgICAgIGNhc2UgY2hhcl90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFy
cmF5KWVudi0+TmV3Q2hhckFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0ZW0g
PSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBpdGVt
ID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyaW5n
VmFsdWUgPSBpdGVtLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgICAgICAgICBqY2hhciB2YWx1
ZSA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLnNpemUoKSA+IDApCkBAIC00
MTAsNyArNDEwLDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgog
ICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0
QXJyYXkpZW52LT5OZXdTaG9ydEFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0
ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpzaG9ydCB2YWx1
ZSA9IChqc2hvcnQpaXRlbS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5T
ZXRTaG9ydEFycmF5UmVnaW9uKChqc2hvcnRBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUp
MSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTQyMCw3ICs0MjAsNyBAQCBzdGF0aWMgam9i
amVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAgICAgIGNhc2UgaW50X3R5cGU6IHsK
ICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdJbnRBcnJheShsZW5n
dGgpOwogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsK
ICAgICAgICAgICAgICAgICBqaW50IHZhbHVlID0gKGppbnQpaXRlbS0+dG9OdW1iZXIoZXhlYyk7
CiAgICAgICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJlZ2lvbigoamludEFycmF5KWphcnJh
eSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtNDMwLDcg
KzQzMCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAg
ICAgY2FzZSBsb25nX3R5cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdMb25nQXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpz
QXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamxvbmcgdmFsdWUgPSAoamxv
bmcpaXRlbS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5TZXRMb25nQXJy
YXlSZWdpb24oKGpsb25nQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7
CiAgICAgICAgICAgICB9CkBAIC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVy
dEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsKICAgICAgICAg
ICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdGbG9hdEFycmF5KGxlbmd0aCk7CiAg
ICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIEpTVmFsdWUqIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZVB0ciBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAg
ICAgICAgICAgIGpmbG9hdCB2YWx1ZSA9IChqZmxvYXQpaXRlbS0+dG9OdW1iZXIoZXhlYyk7CiAg
ICAgICAgICAgICAgICAgZW52LT5TZXRGbG9hdEFycmF5UmVnaW9uKChqZmxvYXRBcnJheSlqYXJy
YXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTQ1MCw3
ICs0NTAsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAg
ICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJy
YXkpZW52LT5OZXdEb3VibGVBcnJheShsZW5ndGgpOwogICAgICAgICAgICAgZm9yKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBpdGVt
ID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgaXRl
bSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAgICBqZG91YmxlIHZhbHVl
ID0gKGpkb3VibGUpaXRlbS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5T
ZXREb3VibGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6
ZSkxLCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtNDY4LDcgKzQ2OCw3IEBAIHN0YXRpYyBq
b2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKIH0KIAogCi1qdmFsdWUgY29udmVydFZh
bHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwgSk5JVHlwZSBfSk5J
VHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKK2p2YWx1ZSBjb252ZXJ0VmFsdWVUb0pW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIEpOSVR5cGUgX0pOSVR5cGUs
IGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCiB7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwog
ICAgIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgSk5JVHlwZSBKTklUeXBlRnJvbUNsYXNzTmFtZShjb25zdCBjaGFyIAogSk5JVHlw
ZSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKTsKIGNvbnN0IGNoYXIgKnNpZ25h
dHVyZUZyb21QcmltaXRpdmVUeXBlKEpOSVR5cGUgdHlwZSk7CiAKLWp2YWx1ZSBjb252ZXJ0VmFs
dWVUb0pWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgSk5JVHlwZSwgY29uc3QgY2hhciogamF2
YUNsYXNzTmFtZSk7CitqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNW
YWx1ZVB0ciwgSk5JVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSk7CiAKIGp2YWx1ZSBn
ZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSk5JVHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICpzaWduYXR1cmUpOwogCkBAIC0yNzcsNyArMjc3LDcgQEAgVCBjYWxsSk5JU3Rh
dGljTWV0aG9kKGpjbGFzcyBjbHMsIGNvbnN0IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAg
Ci1ib29sIGRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBs
ZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBq
bWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlJiByZXN1bHQsIGNvbnN0IGNo
YXIqIGNhbGxpbmdVUkwsIEpTVmFsdWUqJiBleGNlcHRpb25EZXNjcmlwdGlvbik7Citib29sIGRp
c3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBq
b2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQg
bWV0aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVlJiByZXN1bHQsIGNvbnN0IGNoYXIqIGNhbGxp
bmdVUkwsIEpTVmFsdWVQdHImIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQmluZGluZ3MKIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5oCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICsgKE5TU3RyaW5nICopd2ViU2NyaXB0
TmFtZUZvcktleTooY29uc3QgY2hhciAqKW5hbWU7CiArIChCT09MKWlzS2V5RXhjbHVkZWRGcm9t
V2ViU2NyaXB0Oihjb25zdCBjaGFyICopbmFtZTsKIAotKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2Jq
Y1ZhbHVlOihKU0M6OkpTVmFsdWUqKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooSlNDOjpCaW5kaW5n
czo6Um9vdE9iamVjdCopcm9vdE9iamVjdDsKKysgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1
ZTooSlNDOjpKU1ZhbHVlUHRyKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6
OlJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdCopcm9vdE9iamVjdDsKIC0gX2luaXRXaXRoSlNPYmplY3Q6KEpTQzo6SlNPYmpl
Y3QqKWltcCBvcmlnaW5Sb290T2JqZWN0OihQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+KW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooUGFzc1JlZlB0cjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0Pilyb290T2JqZWN0OwogLSAoSlNDOjpKU09iamVjdCAqKV9pbXA7CiBA
ZW5kCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MuaAkocmV2aXNpb24gMzk2MTYpCisrKyBX
ZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChjb25z
dCBJZGVudGlmaWVyJiwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKICAgICB2aXJ0dWFsIEZp
ZWxkICpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBmYWxsYmFja09iamVjdChFeGVjU3RhdGUgKmV4
ZWMsIEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsK
KyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlICpleGVjLCBJ
bnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAgICAg
CiAgICAgQ2xhc3NTdHJ1Y3RQdHIgaXNhKCkgeyByZXR1cm4gX2lzYTsgfQogICAgIApJbmRleDog
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YnJpZGdlL29iamMvb2JqY19jbGFzcy5tbQkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2Jy
aWRnZS9vYmpjL29iamNfY2xhc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NCw3ICsyNDQsNyBA
QCBGaWVsZCogT2JqY0NsYXNzOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50CiAgICAgcmV0dXJuIGFG
aWVsZDsKIH0KIAotSlNWYWx1ZSogT2JqY0NsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIEluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KQorSlNWYWx1ZVB0ciBPYmpjQ2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgT2JqY0luc3RhbmNlKiBvYmpjSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxPYmpjSW5zdGFuY2Uq
PihpbnN0YW5jZSk7CiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gb2JqY0luc3RhbmNlLT5nZXRPYmpl
Y3QoKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCShyZXZpc2lvbiAzOTYx
NikKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwyMyArNDgsMjMgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgQ2xhc3MgKmdl
dENsYXNzKCkgY29uc3Q7CiAgICAgICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVPZihF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIg
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0Owog
ICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0
IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGlu
dm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9rZURlZmF1bHRNZXRob2QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29u
c3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZva2VEZWZhdWx0TWV0aG9k
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1NldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9m
VW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyKTsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUq
IGdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldFZhbHVlT2ZVbmRlZmlu
ZWRGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkgY29uc3Q7CiAK
ICAgICBPYmplY3RTdHJ1Y3RQdHIgZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gX2luc3RhbmNl
LmdldCgpOyB9CiAgICAgCi0gICAgSlNWYWx1ZSogc3RyaW5nVmFsdWUoRXhlY1N0YXRlKikgY29u
c3Q7Ci0gICAgSlNWYWx1ZSogbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNW
YWx1ZSogYm9vbGVhblZhbHVlKCkgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBzdHJpbmdWYWx1ZShF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSop
IGNvbnN0OworICAgIEpTVmFsdWVQdHIgYm9vbGVhblZhbHVlKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIEJpbmRpbmdMYW5ndWFnZSBnZXRCaW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCB7IHJldHVybiBP
YmplY3RpdmVDTGFuZ3VhZ2U7IH0KIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2lu
c3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbQkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFu
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNCw5ICsxMjQsOSBAQCBib29sIE9iamNJbnN0YW5j
ZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0CiAgICAgcmV0dXJuIFtfaW5zdGFuY2UuZ2V0KCkgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnZva2VEZWZhdWx0TWV0aG9kV2l0aEFyZ3VtZW50
czopXTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdz
KQorSlNWYWx1ZVB0ciBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCiB7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGZhbHNlKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJl
Y2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIApAQCAtMjQ2LDEyICsyNDYsMTIgQEAgSlNW
YWx1ZSogT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlYwogCiAgICAgLy8gV29yayBhcm91
bmQgcHJvYmxlbSBpbiBzb21lIHZlcnNpb25zIG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJr
ZWQgdm9sYXRpbGUgYW5kCiAgICAgLy8gaXQgY2FuJ3QgaGFuZGxlIGNvcHlpbmcgZnJvbSBhIHZv
bGF0aWxlIHRvIG5vbi12b2xhdGlsZS4KLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlKiY+
KHJlc3VsdCk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNWYWx1ZVB0ciY+KHJlc3VsdCk7CiB9
CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6aW52
b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCiB7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJl
c3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZmFsc2UpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVj
YXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogICAgIHNldEdsb2JhbEV4Y2VwdGlvbihuaWwp
OwpAQCAtMjk3LDcgKzI5Nyw3IEBAIEpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVs
dE1ldGgKIAogICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBH
Q0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZAogICAgIC8vIGl0IGNhbid0
IGhhbmRsZSBjb3B5aW5nIGZyb20gYSB2b2xhdGlsZSB0byBub24tdm9sYXRpbGUuCi0gICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SlNWYWx1ZSomPihyZXN1bHQpOworICAgIHJldHVybiBjb25zdF9jYXN0
PEpTVmFsdWVQdHImPihyZXN1bHQpOwogfQogCiBib29sIE9iamNJbnN0YW5jZTo6c3VwcG9ydHNT
ZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKQpAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgT2JqY0lu
c3RhbmNlOjpzdXBwb3J0c1NldFZhbHVlT2ZVbmQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgSlNWYWx1ZSogYVZhbHVlKQordm9pZCBPYmpj
SW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5LCBKU1ZhbHVlUHRyIGFWYWx1ZSkKIHsKICAgICBpZCB0YXJn
ZXRPYmplY3QgPSBnZXRPYmplY3QoKTsKIApAQCAtMzMyLDkgKzMzMiw5IEBAIHZvaWQgT2JqY0lu
c3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICB9CiB9CiAKLUpTVmFsdWUqIE9iamNJ
bnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHkpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6Z2V0
VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHkpIGNvbnN0CiB7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsK
KyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgaWQgdGFy
Z2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKQEAgLTM1OCwxMCArMzU4LDEwIEBAIEpTVmFsdWUq
IE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW4KIAogICAgIC8vIFdvcmsgYXJvdW5kIHBy
b2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFya2VkIHZv
bGF0aWxlIGFuZAogICAgIC8vIGl0IGNhbid0IGhhbmRsZSBjb3B5aW5nIGZyb20gYSB2b2xhdGls
ZSB0byBub24tdm9sYXRpbGUuCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNWYWx1ZSomPihyZXN1
bHQpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWVQdHImPihyZXN1bHQpOwogfQogCi1K
U1ZhbHVlKiBPYmpjSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjpk
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQp
IGNvbnN0CiB7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQogICAgICAgICByZXR1cm4g
c3RyaW5nVmFsdWUoZXhlYyk7CkBAIC0zNzQsMjQgKzM3NCwyNCBAQCBKU1ZhbHVlKiBPYmpjSW5z
dGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjCiAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CiB9CiAK
LUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorSlNWYWx1ZVB0ciBPYmpjSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKICAgICByZXR1cm4gY29udmVydE5TU3RyaW5nVG9TdHJpbmcoZXhlYywgW2dldE9i
amVjdCgpIGRlc2NyaXB0aW9uXSk7CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6bnVtYmVy
VmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjSW5zdGFuY2U6Om51
bWJlclZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogIEltcGxl
bWVudCBzb21ldGhpbmcgc2Vuc2libGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgMCk7CiB9
CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKK0pTVmFsdWVQ
dHIgT2JqY0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiAg
SW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZQogICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2Up
OwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBj
b25zdCAKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwogfQpJbmRleDogV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfcnVudGltZS5oCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVi
bGljOgogICAgIE9iamNGaWVsZChJdmFyU3RydWN0UHRyKTsKICAgICBPYmpjRmllbGQoQ0ZTdHJp
bmdSZWYgbmFtZSk7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUZyb21JbnN0YW5j
ZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKikg
Y29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0
ZSosIGNvbnN0IEluc3RhbmNlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9J
bnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWVQdHIpIGNvbnN0Owog
ICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqbmFtZSgpIGNvbnN0OwogICAgICAgICAKQEAg
LTc5LDEzICs3OSwxMyBAQCBjbGFzcyBPYmpjQXJyYXkgOiBwdWJsaWMgQXJyYXkgewogcHVibGlj
OgogICAgIE9iamNBcnJheShPYmplY3RTdHJ1Y3RQdHIsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4p
OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbnQgaW5kZXgsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVl
KiB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBp
bmRleCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2
YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKICAgICAKICAgICBPYmplY3RT
dHJ1Y3RQdHIgZ2V0T2JqY0FycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5LmdldCgpOyB9CiAK
LSAgICBzdGF0aWMgSlNWYWx1ZSogY29udmVydE9iamNBcnJheVRvQXJyYXkoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RTdHJ1Y3RQdHIgYW5PYmplY3QpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGNv
bnZlcnRPYmpjQXJyYXlUb0FycmF5KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0U3RydWN0UHRyIGFu
T2JqZWN0KTsKIAogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8T2JqZWN0U3RydWN0UHRyPiBfYXJy
YXk7CkBAIC0xMDQsMTcgKzEwNCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIH0KIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3Rv
dHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgdmly
dHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfcnVudGltZS5tbQkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCw5IEBAIGNv
bnN0IGNoYXIqIE9iamNGaWVsZDo6bmFtZSgpIGNvbnN0IAogICAgIHJldHVybiBbKE5TU3RyaW5n
KilfbmFtZS5nZXQoKSBVVEY4U3RyaW5nXTsKIH0KIAotSlNWYWx1ZSogT2JqY0ZpZWxkOjp2YWx1
ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSkg
Y29uc3QKK0pTVmFsdWVQdHIgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSkgY29uc3QKIHsKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2Jq
Y0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKQEAgLTEyOCwxMCArMTI4LDEw
IEBAIEpTVmFsdWUqIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXgKIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZAogICAgIC8vIGl0IGNhbid0IGhhbmRsZSBjb3B5aW5nIGZy
b20gYSB2b2xhdGlsZSB0byBub24tdm9sYXRpbGUuCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNW
YWx1ZSomPihyZXN1bHQpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWVQdHImPihyZXN1
bHQpOwogfQogCi1zdGF0aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsdWUpCitzdGF0aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSk7CiAgICAgaWYgKCFyb290T2JqZWN0KQpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyBp
ZCBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QoRXhlY1MKICAgICByZXR1cm4gW3dlYlNjcmlwdE9i
amVjdENsYXNzKCkgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnZhbHVlIG9yaWdpblJvb3RPYmpl
Y3Q6cm9vdE9iamVjdC5nZXQoKSByb290T2JqZWN0OnJvb3RPYmplY3QuZ2V0KCldOwogfQogCi12
b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SW5zdGFuY2UqIGluc3RhbmNlLCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0Cit2b2lkIE9iamNGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGlu
c3RhbmNlLCBKU1ZhbHVlUHRyIGFWYWx1ZSkgY29uc3QKIHsKICAgICBpZCB0YXJnZXRPYmplY3Qg
PSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0
KCk7CiAgICAgaWQgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QoZXhlYywgYVZhbHVl
KTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBPYmpjQXJyYXk6Ok9iamNBcnJheShPYmplY3RTdHJ1Y3RQ
dHIgYSwgCiB7CiB9CiAKLXZvaWQgT2JqY0FycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0Cit2b2lkIE9iamNB
cnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNW
YWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFbX2FycmF5LmdldCgpIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zZXJ0T2JqZWN0OmF0SW5kZXg6KV0pIHsKICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJBcnJheSBpcyBub3QgbXV0YWJsZS4iKTsKQEAg
LTE4Nyw3ICsxODcsNyBAQCB2b2lkIE9iamNBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4
CiAgICAgfQogfQogCi1KU1ZhbHVlKiBPYmpjQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNBcnJheTo6dmFsdWVB
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAo
aW5kZXggPiBbX2FycmF5LmdldCgpIGNvdW50XSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgUmFuZ2VFcnJvciwgIkluZGV4IGV4Y2VlZHMgYXJyYXkgc2l6ZS4iKTsKQEAgLTIyMiwx
NiArMjIyLDE2IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXIKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpCit2
b2lkIE9iamNGYWxsYmFja09iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogfQogCi1zdGF0aWMgSlNWYWx1
ZSogY2FsbE9iakNGYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpT
VmFsdWVQdHIgY2FsbE9iakNGYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8p
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7CiAKICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxS
dW50aW1lT2JqZWN0SW1wKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAgICAgSW5zdGFuY2UqIGlu
c3RhbmNlID0gaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CkBAIC0yNzQsNyArMjc0LDcgQEAg
Ym9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlbGV0ZVByb3BlcgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotSlNWYWx1ZSogT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBP
YmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIF9pbnN0YW5jZS0+Z2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKGV4ZWMsIF9pdGVtKTsKIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L29iamMvb2JqY191dGlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3V0aWxpdHkuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfdXRpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw5IEBAIHR5cGVkZWYgZW51
bSB7CiAKIGNsYXNzIFJvb3RPYmplY3Q7CiAKLU9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNW
YWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgT2JqY1ZhbHVlVHlwZSk7Ci1KU1ZhbHVlKiBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZyk7
Ci1KU1ZhbHVlKiBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqLCB2b2lkKiBidWZm
ZXIsIE9iamNWYWx1ZVR5cGUsIFJvb3RPYmplY3QqKTsKK09iamNWYWx1ZSBjb252ZXJ0VmFsdWVU
b09iamNWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCBPYmpjVmFsdWVUeXBlKTsKK0pTVmFs
dWVQdHIgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAq
bnNzdHJpbmcpOworSlNWYWx1ZVB0ciBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUq
LCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUsIFJvb3RPYmplY3QqKTsKIE9iamNWYWx1ZVR5
cGUgb2JqY1ZhbHVlVHlwZUZvclR5cGUoY29uc3QgY2hhciAqdHlwZSk7CiAKIGJvb2wgY29udmVy
dEpTTWV0aG9kTmFtZVRvT2JqYyhjb25zdCBjaGFyICpKU05hbWUsIGNoYXIgKmJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHJl
dmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIGNvbnZlcnRKU01ldGhvZE5hbWVU
b09iamMoY29uc3QgY2hhCiAgICAgW10sIG90aGVyICAgICAgIGV4Y2VwdGlvbgogCiAqLwotT2Jq
Y1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
dmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSkKK09iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlw
ZSkKIHsKICAgICBPYmpjVmFsdWUgcmVzdWx0OwogICAgIGRvdWJsZSBkID0gMDsKQEAgLTE5NCw3
ICsxOTQsNyBAQCBPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCitKU1ZhbHVlUHRyIGNvbnZlcnROU1N0
cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQogewogICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAKQEAgLTIwMyw3ICsyMDMsNyBAQCBKU1ZhbHVlKiBj
b252ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhCiAgICAgY2hhcnMgPSAodW5pY2hhciAqKW1h
bGxvYyhzaXplb2YodW5pY2hhcikqbGVuZ3RoKTsKICAgICBbbnNzdHJpbmcgZ2V0Q2hhcmFjdGVy
czpjaGFyc107CiAgICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciopY2hhcnMsIGxlbmd0aCk7Ci0g
ICAgSlNWYWx1ZSogYVZhbHVlID0ganNTdHJpbmcoZXhlYywgdSk7CisgICAgSlNWYWx1ZVB0ciBh
VmFsdWUgPSBqc1N0cmluZyhleGVjLCB1KTsKICAgICBmcmVlKCh2b2lkICopY2hhcnMpOwogICAg
IHJldHVybiBhVmFsdWU7CiB9CkBAIC0yMjYsNyArMjI2LDcgQEAgSlNWYWx1ZSogY29udmVydE5T
U3RyaW5nVG9TdHJpbmcoRXhlY1N0YQogICAgIGlkICAgICAgICAgICAgICBvYmplY3Qgd3JhcHBl
cgogICAgIG90aGVyICAgICAgICAgICBzaG91bGQgbm90IGhhcHBlbgogKi8KLUpTVmFsdWUqIGNv
bnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogYnVmZmVyLCBPYmpj
VmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCitKU1ZhbHVlUHRyIGNvbnZl
cnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogYnVmZmVyLCBPYmpjVmFs
dWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7CiAgICAgSlNMb2NrIGxvY2so
ZmFsc2UpOwogICAgIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBzdHJ1Y3QgQ29u
c29sZU1lc3NhZ2UgewogICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlOwogICAgIE1lc3NhZ2VMZXZl
bCBsZXZlbDsKICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBWZWN0b3I8UHJvdGVjdGVkUHRyPEpT
VmFsdWU+ID4gd3JhcHBlZEFyZ3VtZW50czsKKyAgICBWZWN0b3I8UHJvdGVjdGVkSlNWYWx1ZVB0
cj4gd3JhcHBlZEFyZ3VtZW50czsKICAgICBWZWN0b3I8U2NyaXB0U3RyaW5nPiBmcmFtZXM7CiAg
ICAgdW5zaWduZWQgbGluZTsKICAgICBTdHJpbmcgdXJsOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgSlNPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplYwogfQogCiAv
LyBFdmFsdWF0ZSBzb21lIEphdmFTY3JpcHQgY29kZSBpbiB0aGUgc2NvcGUgb2YgdGhpcyBmcmFt
ZS4KLUpTVmFsdWUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcm
IHNjcmlwdCwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKK0pTVmFsdWVQdHIgSmF2YVNjcmlw
dENhbGxGcmFtZTo6ZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlUHRyJiBl
eGNlcHRpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lz
VmFsaWQpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCShyZXZp
c2lvbiAzOTYxNikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGNvbnN0IEpTQzo6U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4oKSBjb25zdDsKIAogICAg
ICAgICBKU0M6OkpTT2JqZWN0KiB0aGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAgICAgIEpTQzo6SlNW
YWx1ZSogZXZhbHVhdGUoY29uc3QgSlNDOjpVU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSom
IGV4Y2VwdGlvbikgY29uc3Q7CisgICAgICAgIEpTQzo6SlNWYWx1ZVB0ciBldmFsdWF0ZShjb25z
dCBKU0M6OlVTdHJpbmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlUHRyJiBleGNlcHRpb24pIGNvbnN0
OwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJh
bWU+IGNhbGxlciwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lKTsKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDM5NjE2KQorKysgV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYs
NyArMjc2LDcgQEAgSlNDbGFzc1JlZiBQcm9maWxlQ2xhc3MoKQogICAgIHJldHVybiBwcm9maWxl
Q2xhc3M7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxlKiBwcm9m
aWxlKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsZSogcHJvZmlsZSkK
IHsKICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBK
U0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb2ZpbGUqKTsKKyAgICBK
U0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvZmlsZSopOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHRQcm9maWxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNj
cmlwdFByb2ZpbGVOb2RlLmNwcAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2luc3BlY3Rv
ci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0
LDcgQEAgSlNDbGFzc1JlZiBQcm9maWxlTm9kZUNsYXNzKCkKICAgICByZXR1cm4gcHJvZmlsZU5v
ZGVDbGFzczsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFByb2ZpbGVOb2Rl
KiBwcm9maWxlTm9kZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFByb2ZpbGVO
b2RlKiBwcm9maWxlTm9kZSkKIHsKICAgICBpZiAoIXByb2ZpbGVOb2RlKQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5v
ZGUuaAkocmV2aXNpb24gMzk2MTYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJv
ZmlsZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIEpTQ2xhc3NSZWYgUHJvZmlsZU5vZGVDbGFz
cygpOwotICAgIEpTQzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvZmls
ZU5vZGUqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvZmlsZU5vZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCShyZXZpc2lvbiAzOTYxNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCB1c2luZyBKU0M6OkV4ZWNT
dGF0ZTsKIHVzaW5nIEpTQzo6SlNMb2NrOwogdXNpbmcgSlNDOjpKU09iamVjdDsKIHVzaW5nIEpT
Qzo6SlNWYWx1ZTsKK3VzaW5nIEpTQzo6SlNWYWx1ZVB0cjsKIHVzaW5nIEpTQzo6VVN0cmluZzsK
IAogdXNpbmcgc3RkOjptaW47CkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIGNoYXIqIGNyZWF0
ZVVURjhTdHJpbmcoY29uc3QgU3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBi
b29sIGdldFN0cmluZyhTY3JpcHRDb250cm9sbGVyKiBwcm94eSwgSlNWYWx1ZSogcmVzdWx0LCBT
dHJpbmcmIHN0cmluZykKK3N0YXRpYyBib29sIGdldFN0cmluZyhTY3JpcHRDb250cm9sbGVyKiBw
cm94eSwgSlNWYWx1ZVB0ciByZXN1bHQsIFN0cmluZyYgc3RyaW5nKQogewogICAgIGlmICghcHJv
eHkgfHwgIXJlc3VsdCB8fCByZXN1bHQtPmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI1OSw3ICsyNjAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0
KFBsdWdpblJlCiAgICAgCiAgICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUg
cGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
ZSBwYXJlbnQgZnJhbWUuCiAgICAgUmVmUHRyPEZyYW1lPiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50
RnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4
ZWN1dGVTY3JpcHQoanNTdHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5l
eGVjdXRlU2NyaXB0KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKS5qc1Zh
bHVlKCk7CiAKICAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpKSB7CiAgICAgICAgIFN0
cmluZyByZXN1bHRTdHJpbmc7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTU0LDcgKzk1NCw4IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkg
ICAKICAgICAvLyByZXBvcnQgdGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KIAogICAgIGlm
IChKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudCgpLT5mcmFtZSgp
KSkgewotICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlKiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2Jq
ZWN0V3JhcHBlcigqd2luZG93LT5nbG9iYWxEYXRhKCksIHRoaXMpKQorICAgICAgICBKU0M6OkpT
VmFsdWVQdHIgd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKndpbmRvdy0+Z2xv
YmFsRGF0YSgpLCB0aGlzKTsKKyAgICAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgICAgICBKU0M6
OkhlYXA6OmhlYXAod3JhcHBlciktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4
dC5zaXplKCkgKiAyKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzOTYxNikKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MDktMDEtMDUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwg
dXNlcyBvZiBKU1ZhbHVlKiB3aXRoIG5ldyB3cmFwcGVyIGNsYXNzLCBKU1ZhbHVlUHRyLgorICAg
ICAgICBTZWUgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbGVkIGRlc2Ny
aXB0aW9uLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdl
c3R1cmU6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgor
ICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOl0p
OgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXhjZXB0aW9uXSk6CisgICAgICAgICgt
W1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisgICAgICAgICgt
W1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisKIDIw
MDktMDEtMDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAz
OTYxNikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtODIsNiArODIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KICNpbXBvcnQgPFdl
YkNvcmUvdmlzaWJsZV91bml0cy5oPgogI2ltcG9ydCA8cnVudGltZS9KU0xvY2suaD4KKyNpbXBv
cnQgPHJ1bnRpbWUvSlNWYWx1ZS5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC04OSw3ICs5MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpTTG9jazsKLXVz
aW5nIEpTQzo6SlNWYWx1ZTsKK3VzaW5nIEpTQzo6SlNWYWx1ZVB0cjsKIAogLyoKIEhlcmUgaXMg
dGhlIGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25z
OgpAQCAtNjU2LDcgKzY1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNv
dXJjZSgKIHsKICAgICBBU1NFUlQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CiAg
ICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCkt
PmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVzZXJHZXN0dXJlKS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0
ZVNjcmlwdChzdHJpbmcsIGZvcmNlVXNlckdlc3R1cmUpLmpzVmFsdWUoKTsKIAogICAgIGlmICgh
X3ByaXZhdGUtPmNvcmVGcmFtZSkgLy8gSW4gY2FzZSB0aGUgc2NyaXB0IHJlbW92ZWQgb3VyIGZy
YW1lIGZyb20gdGhlIHBhZ2UuCiAgICAgICAgIHJldHVybiBAIiI7CkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMzk2MTYpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGlu
ZU51bWJlCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0Q2FsbEZyYW1lIChXZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlSW50ZXJuYWwpCiAKLS0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1
ZSopdmFsdWU7CistIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWVQdHIpdmFs
dWU7CiAKIEBlbmQKIApAQCAtMTA5LDcgKzEwOSw3IEBAIE5TU3RyaW5nICogY29uc3QgV2ViU2Ny
aXB0RXJyb3JMaW5lTnVtYmUKICAgICBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUgPSAwOwog
fQogCi0tIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUqKXZhbHVlCistIChp
ZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWVQdHIpdmFsdWUKIHsKICAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMjA0LDcgKzIwNCw3IEBAIE5TU3RyaW5n
ICogY29uc3QgV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmUKICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1
Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTVmFsdWUqIGV4Y2Vw
dGlvbiA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXhjZXB0aW9uKCk7CisgICAgSlNW
YWx1ZVB0ciBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV4Y2VwdGlv
bigpOwogICAgIHJldHVybiBleGNlcHRpb24gPyBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFs
dWU6ZXhjZXB0aW9uXSA6IG5pbDsKIH0KIApAQCAtMjIxLDggKzIyMSw4IEBAIE5TU3RyaW5nICog
Y29uc3QgV2ViU2NyaXB0RXJyb3JMaW5lTnVtYmUKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsK
IAotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKFN0cmluZyhzY3JpcHQp
LCBleGNlcHRpb24pOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uID0gbm9WYWx1ZSgpOworICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0
ZShTdHJpbmcoc2NyaXB0KSwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAg
ICByZXR1cm4gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOmV4Y2VwdGlvbl07CiAgICAg
cmV0dXJuIHJlc3VsdCA/IFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHRdIDog
bmlsOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDM5NjE2KQorKysgV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBA
QAogI2ltcG9ydCA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8cnVudGltZS9KU0xvY2suaD4KKyNpbXBvcnQg
PHJ1bnRpbWUvSlNWYWx1ZS5oPgogI2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KICNpbXBvcnQgPG9i
amMvb2JqYy1hdXRvLmg+CiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgpAQCAtMzYyMyw3
ICszNjI0LDcgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAg
IHJldHVybiBjb3JlRnJhbWUtPnNob3VsZENsb3NlKCk7CiB9CiAKLXN0YXRpYyBOU0FwcGxlRXZl
bnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IGpzVmFsdWUpCitzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIGpzVmFsdWUpCiB7CiAgICAgTlNBcHBsZUV2
ZW50RGVzY3JpcHRvciogYWVEZXNjID0gMDsKICAgICBpZiAoanNWYWx1ZS0+aXNCb29sZWFuKCkp
CkBAIC0zNjY1LDcgKzM2NjYsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVE
ZXNjRnJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFlRGVzYzsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBKU1ZhbHVlKiBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZl
KGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9QcmltaXRp
dmUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2
ZW50RGVzY3JpcHRvciBudWxsRGVzY3JpcHRvcl07CkBAIC0zNjg1LDcgKzM2ODYsNyBAQCBzdGF0
aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgaWYgKCFjb3JlRnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0gY29yZUZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChz
Y3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNvcmVGcmFt
ZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCk7CiAgICAg
aWYgKCFyZXN1bHQpIC8vIEZJWE1FOiBwYXNzIGVycm9ycwogICAgICAgICByZXR1cm4gMDsKICAg
ICBKU0xvY2sgbG9jayhmYWxzZSk7CkluZGV4OiBXZWJLaXQvd2luL1dlYlNjcmlwdENhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJTY3JpcHRDYWxsRnJhbWUuY3BwCShy
ZXZpc2lvbiAzOTYxNikKKysrIFdlYktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1V
U3RyaW5nIFdlYlNjcmlwdENhbGxGcmFtZTo6anNWYWx1ZVRvU3RyaW5nKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNWYWx1ZSoganN2YWx1ZSkKK1VTdHJpbmcgV2ViU2NyaXB0Q2FsbEZyYW1lOjpq
c1ZhbHVlVG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlUHRyIGpzdmFsdWUp
CiB7CiAgICAgaWYgKCFqc3ZhbHVlKQogICAgICAgICByZXR1cm4gInVuZGVmaW5lZCI7CkBAIC0x
ODIsNyArMTgyLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JpcHRDYWxsRgog
CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogCi0gICAgSlNWYWx1ZSogc2NyaXB0RXhlY3V0aW9u
UmVzdWx0ID0gdmFsdWVCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyhzY3JpcHQpOwor
ICAgIEpTVmFsdWVQdHIgc2NyaXB0RXhlY3V0aW9uUmVzdWx0ID0gdmFsdWVCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0RnJvbVN0cmluZyhzY3JpcHQpOwogICAgICpyZXN1bHQgPSBXZWJDb3JlOjpCU3Ry
aW5nKGpzVmFsdWVUb1N0cmluZyhtX3N0YXRlLCBzY3JpcHRFeGVjdXRpb25SZXN1bHQpKS5yZWxl
YXNlKCk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIyMSw3ICsyMjEsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlNjcmlwdENhbGxGCiAgICAgSWRlbnRpZmllciBpZGVudEtleSht
X3N0YXRlLCByZWludGVycHJldF9jYXN0PFVDaGFyKj4oa2V5KSwgU3lzU3RyaW5nTGVuKGtleSkp
OwogCiAjaWYgMAotICAgIEpTVmFsdWUqIGpzdmFsdWUgPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1
ZVB0ciBqc3ZhbHVlID0gbm9WYWx1ZSgpOwogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbiA9IG1f
c3RhdGUtPnNjb3BlQ2hhaW4oKTsKICAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNj
b3BlQ2hhaW4uYmVnaW4oKTsgaXQgIT0gc2NvcGVDaGFpbi5lbmQoKSAmJiAhanN2YWx1ZTsgKytp
dCkKICAgICAgICAganN2YWx1ZSA9ICgqaXQpLT5nZXQobV9zdGF0ZSwgaWRlbnRLZXkpOwpAQCAt
MjMxLDcgKzIzMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2NyaXB0Q2FsbEYK
ICAgICByZXR1cm4gU19PSzsKIH0KIAotSlNWYWx1ZSogV2ViU2NyaXB0Q2FsbEZyYW1lOjp2YWx1
ZUJ5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKEJTVFIgc2NyaXB0KQorSlNWYWx1ZVB0
ciBXZWJTY3JpcHRDYWxsRnJhbWU6OnZhbHVlQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcoQlNUUiBzY3JpcHQpCiB7CiAjaWYgMAogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX3N0YXRl
OwpAQCAtMjQwLDcgKzI0MCw3IEBAIEpTVmFsdWUqIFdlYlNjcmlwdENhbGxGcmFtZTo6dmFsdWVC
eUV2YWwKICAgICAvLyBmaW5kICJldmFsIgogICAgIEpTT2JqZWN0KiBldmFsID0gMDsKICAgICBp
ZiAoc3RhdGUtPnNjb3BlTm9kZSgpKSB7ICAvLyAiZXZhbCIgd29uJ3Qgd29yayB3aXRob3V0IGNv
bnRleHQgKGkuZS4gYXQgZ2xvYmFsIHNjb3BlKQotICAgICAgICBKU1ZhbHVlKiB2ID0gZ2xvYk9i
ai0+Z2V0KHN0YXRlLCAiZXZhbCIpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBnbG9iT2JqLT5n
ZXQoc3RhdGUsICJldmFsIik7CiAgICAgICAgIGlmICh2LT5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKQogICAgICAgICAgICAgZXZhbCA9IGFzT2JqZWN0KHYpOwog
ICAgICAgICBlbHNlCkBAIC0yNDgsMTMgKzI0OCwxMyBAQCBKU1ZhbHVlKiBXZWJTY3JpcHRDYWxs
RnJhbWU6OnZhbHVlQnlFdmFsCiAgICAgICAgICAgICBzdGF0ZSA9IGdsb2JPYmotPmdsb2JhbEV4
ZWMoKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlKiBzYXZlZEV4Y2VwdGlvbiA9IHN0YXRlLT5leGNl
cHRpb24oKTsKKyAgICBKU1ZhbHVlUHRyIHNhdmVkRXhjZXB0aW9uID0gc3RhdGUtPmV4Y2VwdGlv
bigpOwogICAgIHN0YXRlLT5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgVVN0cmluZyBjb2RlKHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihzY3JpcHQpLCBTeXNTdHJpbmdMZW4oc2NyaXB0KSk7CiAK
ICAgICAvLyBldmFsdWF0ZQotICAgIEpTVmFsdWUqIHNjcmlwdEV4ZWN1dGlvblJlc3VsdDsKKyAg
ICBKU1ZhbHVlUHRyIHNjcmlwdEV4ZWN1dGlvblJlc3VsdDsKICAgICBpZiAoZXZhbCkgewogICAg
ICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKHN0YXRlLCBj
b2RlKSk7CkluZGV4OiBXZWJLaXQvd2luL1dlYlNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDM5NjE2KQorKysg
V2ViS2l0L3dpbi9XZWJTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTAg
Kzc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLyogW291dCwgcmV0dmFsXSAqLyBCU1RSKiB2YWx1
ZSk7CiAKICAgICAvLyBIZWxwZXIgYW5kIGFjY2Vzc29ycwotICAgIHZpcnR1YWwgSlNDOjpKU1Zh
bHVlKiB2YWx1ZUJ5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKEJTVFIgc2NyaXB0KTsK
KyAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZUJ5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nKEJTVFIgc2NyaXB0KTsKICAgICB2aXJ0dWFsIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAotICAgIHN0YXRpYyBKU0M6OlVTdHJpbmcg
anNWYWx1ZVRvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKik7CisgICAgc3Rh
dGljIEpTQzo6VVN0cmluZyBqc1ZhbHVlVG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWVQdHIpOwogCiBwcml2YXRlOgogICAgIFVMT05HIG1fcmVmQ291bnQ7CkluZGV4OiBXZWJL
aXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJ
KHJldmlzaW9uIDM5NjE2KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY4Myw3ICsyNjgzLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3
OjpzdHJpbgogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0g
ICAgSlNDOjpKU1ZhbHVlKiBzY3JpcHRFeGVjdXRpb25SZXN1bHQgPSBjb3JlRnJhbWUtPmxvYWRl
cigpLT5leGVjdXRlU2NyaXB0KFdlYkNvcmU6OlN0cmluZyhzY3JpcHQpLCB0cnVlKS5qc1ZhbHVl
KCk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHNjcmlwdEV4ZWN1dGlvblJlc3VsdCA9IGNvcmVGcmFt
ZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoV2ViQ29yZTo6U3RyaW5nKHNjcmlwdCksIHRydWUp
LmpzVmFsdWUoKTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkKICAgICAgICAgcmV0
dXJuIEVfRkFJTDsKICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRpb25SZXN1bHQtPmlzU3RyaW5n
KCkpIHsK
</data>
<flag name="review"
          id="12543"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26480</attachid>
            <date>2009-01-06 16:30:55 -0800</date>
            <delta_ts>2009-01-06 16:30:55 -0800</delta_ts>
            <desc>patch relative to 603, to test on windows [tot was broken earlier.]</desc>
            <filename>patch.JSValuePtr.phase2616b603.txt</filename>
            <type>text/plain</type>
            <size>918796</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODgyIEBACisyMDA5LTAxLTA1ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSog
d2l0aCBhIG5ldyBzbWFydCBwb2ludGVyIHR5cGUsIEpTVmFsdWVQdHIuCisgICAgICAgIAorICAg
ICAgICBBIEphdmFTY3JpcHQgdmFsdWUgbWF5IGJlIGEgaGVhcCBvYmplY3Qgb3IgYm94ZWQgcHJp
bWl0aXZlLCByZXByZXNlbnRlZCBieSBhCisgICAgICAgIHBvaW50ZXIsIG9yIG1heSBiZSBhbiB1
bmJveGVkIGltbWVkaWF0ZSB2YWx1ZSwgc3VjaCBhcyBhbiBpbnRlZ2VyLiAgU2luY2UgYQorICAg
ICAgICB2YWx1ZSBtYXkgZHluYW1pY2FsbHkgbmVlZCB0byBjb250YWluIGVpdGhlciBhIHBvaW50
ZXIgdmFsdWUgb3IgYW4gaW1tZWRpYXRlLAorICAgICAgICB3ZSBlbmNvZGUgaW1tZWRpYXRlcyBh
cyBwb2ludGVyIHZhbHVlcyAoc2luY2UgYWxsIHZhbGlkIEpTQ2VsbCBwb2ludGVycyBhcmUKKyAg
ICAgICAgYWxsb2NhdGVkIGF0IGFsbGlnbmVkIGFkZGVzc2VzLCB1bmFsaWduZWQgYWRkcmVzc2Vz
IGFyZSBhdmFpbGFibGUgdG8gZW5jb2RlCisgICAgICAgIGltbWVkaWF0ZXMpLiAgQXMgc3VjaCBh
bGwgSmF2YVNjcmlwdCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIHVzaW5nIGEgSlNWYWx1ZSouCisK
KyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbmN1bWJlcmVkIGJ5IGEgbnVtYmVyIG9m
IGNvbnN0cmFpbnRzLiAgSXQgdGllcyB0aGUKKyAgICAgICAgSlNWYWx1ZSByZXByZXNlbnRhdGlv
biB0byB0aGUgc2l6ZSBvZiBwb2ludGVyIG9uIHRoZSBwbGF0Zm9ybSwgd2hpY2gsIGZvcgorICAg
ICAgICBleGFtcGxlLCBtZWFucyB0aGF0IHdlIGN1cnJlbnRseSBjYW4gcmVwcmVzZW50IGRpZmZl
cmVudCByYW5nZXMgb2YgaW50ZWdlcnMKKyAgICAgICAgYXMgaW1tZWRpYXRlcyBvbiB4ODYgYW5k
IHg4Ni02NC4gIEl0IGFsc28gcHJldmVudHMgdXMgZnJvbSBvdmVybG9hZGluZyB0aGUKKyAgICAg
ICAgdG8tYm9vbGVhbiBjb252ZXJzaW9uIHVzZWQgdG8gdGVzdCBmb3Igbm9WYWx1ZSgpIC0gZWZm
ZWN0aXZlbHkgZm9yY2luZyB1cworICAgICAgICB0byByZXByZXNlbnQgbm9WYWx1ZSgpIGFzIDAu
ICBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGJlIHByb2JsZW1hdGljIHdlcmUgd2UKKyAgICAgICAg
dG8gd2lzaCB0byBlbmNvZGUgaW50ZWdlciB2YWx1ZXMgZGlmZmVyZW50bHkgKGUuZy4gd2VyZSB3
ZSB0byB1c2UgdGhlIHY4CisgICAgICAgIGVuY29kaW5nLCB3aGVyZSBwb2ludGVycyBhcmUgdGFn
Z2VkIHdpdGggMSBhbmQgaW50ZWdlcnMgd2l0aCAwLCB0aGVuIHRoZQorICAgICAgICBpbW1lZGlh
dGUgaW50ZWdlciAwIHdvdWxkIGNvbmZsaWN0IHdpdGggbm9WYWx1ZSgpKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHJlcGxhY2VzIGFsbCB1c2FnZSBvZiBKU1ZhbHVlKiB3aXRoIGEgbmV3IGNsYXNz
LCBKU1ZhbHVlUHRyLAorICAgICAgICB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIHBvaW50ZXIuICBK
U1ZhbHVlUHRyIG1haW50YWlucyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMKKyAgICAgICAgSlNWYWx1
ZSosIG92ZXJsb2FkaW5nIG9wZXJhdG9yLT4gYW5kIG9wZXJhdG9yIGJvb2wgc3VjaCB0aGF0IHBy
ZXZpb3VzCisgICAgICAgIG9wZXJhdGlvbnMgaW4gdGhlIGNvZGUgb24gdmFyaWFibGVzIG9mIHR5
cGUgSlNWYWx1ZSogYXJlIHN0aWxsIHN1cHBvcnRlZC4KKworICAgICAgICBJbiBvcmRlciB0byBw
cm92aWRlIGEgUHJvdGVjdFB0cjw+IHR5cGUgd2l0aCBzdXBwb3J0IGZvciB0aGUgbmV3IHZhbHVl
CisgICAgICAgIHJlcHJlc2VudGF0aW9uICh3aXRob3V0IHVzaW5nIHRoZSBpbnRlcm5hbCBKU1Zh
bHVlIHR5cGUgZGlyZWN0bHkpLCBhIG5ldworICAgICAgICBQcm90ZWN0SlNWYWx1ZVB0ciB0eXBl
IGhhcyBiZWVuIGFkZGVkLCBlcXVpdmFsZW50IHRvIHRoZSBwcmV2aW91cyB0eXBlCisgICAgICAg
IFByb3RlY3RQdHI8SlNWYWx1ZT4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBsaWtlbHkgdGhl
IGZpcnN0IGluIGEgc2VxdWVuY2Ugb2YgdGhyZWUgY2hhbmdlcy4gIFdpdGggdGhlCisgICAgICAg
IHZhbHVlIG5vdyBlbmNhcHN1bGF0ZWQgaXQgd2lsbCBsaWtlbHkgbWFrZSBzZW5zZSB0byBtaWdy
YXRlIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZyb20gSlNWYWx1ZSBpbnRvIEpTVmFsdWVQ
dHIsIHN1Y2ggdGhhdCB0aGUgaW50ZXJuYWwgcG9pbnRlciByZXByZXNlbnRhdGlvbgorICAgICAg
ICBuZWVkIG5vdCBiZSBleHBvc2VkLiAgVGhyb3VnaCBtaWdyYXRpbmcgdGhlIGZ1bmN0aW9uYWxp
dHkgdG8gdGhlIHdyYXBwZXIKKyAgICAgICAgY2xhc3MgdGhlIGV4aXN0aW5nIEpTVmFsdWUgc2hv
dWxkIGJlIHJlbmRlcmVkIHJlZHVuZGFudCwgYW5kIHRoZSBjbGFzcyBpcworICAgICAgICBsaWtl
bHkgdG8gYmUgcmVtb3ZlZCAodGhlIEpTVmFsdWVQdHIgbm93IHdyYXBwaW5nIGEgcG9pbnRlciB0
byBhIEpTQ2VsbCkuCisgICAgICAgIEF0IHRoaXMgc3RhZ2UgaXQgd2lsbCBsaWtlbHkgbWFrZSBz
ZW5zZSB0byByZW5hbWUgSlNWYWx1ZVB0ciB0byBKU1ZhbHVlLgorCisgICAgICAgICogQVBJL0FQ
SUNhc3QuaDoKKyAgICAgICAgKHRvSlMpOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQ
SS9KU0Jhc2UuY3BwOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlwdCk6CisgICAgICAgICogQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbCk6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6
OmFzQ2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6
Ojo6aGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjo6OmNhbGwpOgorICAgICAgICAoSlNDOjo6
OnN0YXRpY1ZhbHVlR2V0dGVyKToKKyAgICAgICAgKEpTQzo6OjpzdGF0aWNGdW5jdGlvbkdldHRl
cik6CisgICAgICAgIChKU0M6Ojo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0Nv
bnRleHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChK
U09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU09iamVjdFNldFByb3RvdHlwZSk6
CisgICAgICAgIChKU09iamVjdEdldFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJv
cGVydHkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAo
SlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNw
cDoKKyAgICAgICAgKEpTVmFsdWVHZXRUeXBlKToKKyAgICAgICAgKEpTVmFsdWVJc1VuZGVmaW5l
ZCk6CisgICAgICAgIChKU1ZhbHVlSXNOdWxsKToKKyAgICAgICAgKEpTVmFsdWVJc0Jvb2xlYW4p
OgorICAgICAgICAoSlNWYWx1ZUlzTnVtYmVyKToKKyAgICAgICAgKEpTVmFsdWVJc1N0cmluZyk6
CisgICAgICAgIChKU1ZhbHVlSXNPYmplY3QpOgorICAgICAgICAoSlNWYWx1ZUlzT2JqZWN0T2ZD
bGFzcyk6CisgICAgICAgIChKU1ZhbHVlSXNFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNTdHJp
Y3RFcXVhbCk6CisgICAgICAgIChKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNWYWx1ZVRvQm9vbGVhbik6CisgICAgICAgIChKU1ZhbHVlVG9OdW1iZXIpOgorICAg
ICAgICAoSlNWYWx1ZVRvU3RyaW5nQ29weSk6CisgICAgICAgIChKU1ZhbHVlVG9PYmplY3QpOgor
ICAgICAgICAoSlNWYWx1ZVByb3RlY3QpOgorICAgICAgICAoSlNWYWx1ZVVucHJvdGVjdCk6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OnZhbHVlVG9Tb3VyY2VTdHJpbmcpOgorICAgICAgICAoSlND
Ojpjb25zdGFudE5hbWUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVuZXhwZWN0ZWRDb25zdGFudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUNhY2hl
OjpnZXQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRVbmV4cGVjdGVkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWRKU1YpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFNjb3BlZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHV0U2NvcGVkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdF
cnJvcik6CisgICAgICAgIChKU0M6OmtleUZvckltbWVkaWF0ZVN3aXRjaCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpKU1ZhbHVlSGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkpTVmFsdWVIYXNoVHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpEZWJ1Z2dlckNhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpl
eGNlcHRpb24pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6dGhpc1ZhbHVlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxs
RnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRFeGNlcHRpb24pOgorICAgICAg
ICAoSlNDOjpFeGVjU3RhdGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
ZXhjZXB0aW9uU2xvdCk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFkRXhjZXB0aW9uKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmZh
c3RJc051bWJlcik6CisgICAgICAgIChKU0M6OmZhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
ZmFzdFRvVUludDMyKToKKyAgICAgICAgKEpTQzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNM
ZXNzRXEpOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6anNB
ZGQpOgorICAgICAgICAoSlNDOjpqc1R5cGVTdHJpbmdGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6
OmpzSXNPYmplY3RUeXBlKToKKyAgICAgICAgKEpTQzo6anNJc0Z1bmN0aW9uVHlwZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnJlc29sdmVTa2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9i
YWwpOgorICAgICAgICAoSlNDOjppbmxpbmVSZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpyZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXNv
bHZlQmFzZUFuZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVC
YXNlQW5kRnVuYyk6CisgICAgICAgIChKU0M6OmlzTm90T2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2lu
ZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmNoZWNrVGltZW91dCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjcmVh
dGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6OmNhY2hlUHJvdG90eXBlQ2hhaW4pOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6Y291bnRQcm90b3R5cGVDaGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJl
dHJpZXZlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlQ2Fs
bGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJldHJpZXZlTGFzdENhbGxlcik6Cisg
ICAgICAgIChKU0M6OkludGVycHJldGVyOjp0cnlDVElDYWNoZVB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmV0
dXJuVG9UaHJvd1RyYW1wb2xpbmUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2NvbnZlcnRfdGhpcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYWRkKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfaW5jKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfc2Vjb25kKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfc2VsZl9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3RfZnVsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9hcnJheV9mYWlsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
Y3RpX29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2Rl
bF9ieV9pZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0
aV9vcF9zdWIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV92YWxfYXJyYXkpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl90cnVlKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfYmFzZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2
ZV9za2lwKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2Jh
bCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfZGl2KToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y3RpX29wX2VxKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hp
ZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRub3QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X3Jlc29sdmVfd2l0aF9iYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9t
b2QpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfcG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3Vy
c2hpZnQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhvcik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfYml0b3IpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpj
dGlfb3BfdGhyb3cpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5h
bWUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29wX3R5cGVvZik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OmN0aV9vcF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2lzX3N0cmluZyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3BfaXNfb2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19mdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6Y3RpX29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfdG9fanNudW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y3RpX29w
X2luKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpjdGlfb3BfbmV3X2Vycm9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90
aHJvdyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpp
c0pTU3RyaW5nKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAo
SlNDOjpSZWdpc3Rlcjo6KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6OlJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXI6OmpzVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6
Z2V0SlNWYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6Oik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoU2xvd19vcF9yc2hpZnQpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjp1bmxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1l
dGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmlzT3BlcmFuZENvbnN0YW50MzFCaXRJbW1lZGlhdGVJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6cmVzaXplUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SklU
OjpwYXRjaEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6SklUOjpwYXRjaFB1dEJ5SWRSZXBs
YWNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
UHJpbnQpOgorICAgICAgICAoZnVuY3Rpb25EZWJ1Zyk6CisgICAgICAgIChmdW5jdGlvbkdDKToK
KyAgICAgICAgKGZ1bmN0aW9uVmVyc2lvbik6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAg
ICAgIChmdW5jdGlvbkxvYWQpOgorICAgICAgICAoZnVuY3Rpb25SZWFkbGluZSk6CisgICAgICAg
IChmdW5jdGlvblF1aXQpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChK
U0M6Ok51bGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcnJheU5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OlZvaWROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6CisgICAgICAgIChKU0M6OlJldHVy
bk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OnByb2Nlc3NDbGF1c2VMaXN0KToK
KyAgICAgICAgKEpTQzo6RXZhbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uQm9keU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zb2xlU3Rh
cnQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OmRpZEV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOgorICAgICAg
ICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9BcmdMaXN0LmNwcDoK
KyAgICAgICAgKEpTQzo6QXJnTGlzdDo6c2xvd0FwcGVuZCk6CisgICAgICAgICogcnVudGltZS9B
cmdMaXN0Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6QXJn
TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkFyZ3VtZW50czo6cHV0KToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OmFzQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6cHV0UHJvcGVydHkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
Q29uY2F0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVy
c2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29ydCk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZvckVhY2gpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OmFzQm9vbGVhbk9iamVjdCk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
Ojpwcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6aGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5o
OgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpDb21wbGV0aW9uKToKKyAgICAgICAgKEpTQzo6
Q29tcGxldGlvbjo6dmFsdWUpOgorICAgICAgICAoSlNDOjpDb21wbGV0aW9uOjpzZXRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkNvbXBsZXRpb246OmlzVmFsdWVDb21wbGV0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RGF0ZSk6CisgICAgICAg
IChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZU5vdyk6CisgICAgICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OmFzRGF0ZUluc3RhbmNlKToKKyAgICAgICAg
KiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0
ZVByb3RvRnVuY1RvVGltZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBy
b3RvRnVuY0dldFVUQ0RhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToK
KyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXRIb3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENI
b3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jR2V0U2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jU2V0VGltZSk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToK
KyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1NldFVUQ01pbGxpc2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNv
bmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAg
ICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJz
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0
VVRDRGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxs
WWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxF
cnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRF
eGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvck1lc3NhZ2Up
OgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcik6CisgICAgICAgIChKU0M6
OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUZ1
bmN0aW9uRXJyb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNh
bGxGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAg
KEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9u
UHJvdG9GdW5jQXBwbHkpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0NhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKToK
KyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OmFzR2V0dGVyU2V0dGVy
KToKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAgICAq
IHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0ludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRp
b246OnB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc0FjdGl2YXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OnN0b3JhZ2VTaXplKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnB1dFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6Om1hcmspOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6YXNBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6Z2V0SlNOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0M6OmFzQ2VsbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6Z2V0SlNOdW1i
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmNhbGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphcmd1bWVudHNHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjphc0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
RGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjptYXJrSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnJlc2V0UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvOjpHbG9iYWxQcm9w
ZXJ0eUluZm8pOgorICAgICAgICAoSlNDOjphc0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvdG90eXBlRm9yTG9va3VwKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlKToKKyAgICAgICAg
KEpTQzo6ZGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAo
SlNDOjpnbG9iYWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jUGFyc2VG
bG9hdCk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNJc05hTik6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNJc0Zpbml0ZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEpT
Qzo6Z2xvYmFsRnVuY0VuY29kZVVSSSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFbmNvZGVV
UklDb21wb25lbnQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY1VuZXNjYXBlKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0pTQ1By
aW50KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAg
ICAgICogcnVudGltZS9KU0ltbWVkaWF0ZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRl
Ojp0b1RoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6dG9PYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTSW1tZWRpYXRlLmg6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpT
SW1tZWRpYXRlOjppc051bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1Bvc2l0
aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkpTSW1tZWRpYXRlOjppc1VuZGVmaW5lZE9yTnVsbCk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjppc05lZ2F0aXZlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6Omlz
RWl0aGVySW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmlzQW55SW1tZWRp
YXRlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUpOgorICAg
ICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6
OkpTSW1tZWRpYXRlOjp4b3JJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1l
ZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpy
aWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6
YWRkSW1tZWRpYXRlTnVtYmVycyk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpzdWJJbW1l
ZGlhdGVOdW1iZXJzKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OmluY0ltbWVkaWF0ZU51
bWJlcik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om1ha2VJbnQpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZUJvb2wp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6bWFrZVVuZGVmaW5lZCk6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjptYWtlTnVsbCk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpp
bnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjp1aW50VmFsdWUpOgorICAgICAg
ICAoSlNDOjpKU0ltbWVkaWF0ZTo6Ym9vbFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUp
OgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUpOgorICAgICAgICAo
SlNDOjpKU0ltbWVkaWF0ZTo6dW5kZWZpbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNJ
bW1lZGlhdGU6Om51bGxJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6emVy
b0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUpOgor
ICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKToKKyAgICAgICAgKEpT
Qzo6SlNJbW1lZGlhdGU6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRUcnVuY2F0ZWRVSW50MzIpOgorICAgICAgICAoSlNDOjpKU0ltbWVkaWF0ZTo6ZnJvbSk6Cisg
ICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMik6CisgICAgICAgIChK
U0M6OkpTSW1tZWRpYXRlOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTSW1tZWRpYXRlOjpn
ZXRVSW50MzIpOgorICAgICAgICAoSlNDOjpqc051bGwpOgorICAgICAgICAoSlNDOjpqc0Jvb2xl
YW4pOgorICAgICAgICAoSlNDOjpqc1VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwpOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojppc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvVUlu
dDMyKToKKyAgICAgICAgKEpTQzo6dG9JbnQzMik6CisgICAgICAgIChKU0M6OnRvVUludDMyKToK
KyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU05v
dEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6Omdl
dFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OnB1dCk6Cisg
ICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTTm90QW5P
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU051bWJlckNlbGwu
Y3BwOgorICAgICAgICAoSlNDOjpKU051bWJlckNlbGw6OnRvUHJpbWl0aXZlKToKKyAgICAgICAg
KEpTQzo6SlNOdW1iZXJDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpK
U051bWJlckNlbGw6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXJDZWxsKToK
KyAgICAgICAgKEpTQzo6anNOYU4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg6
CisgICAgICAgIChKU0M6OkpTTnVtYmVyQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6YXNOdW1iZXJDZWxsKToKKyAgICAgICAgKEpTQzo6anNOdW1iZXIpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0pTTnVtYmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om1hcmspOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEpTQzo6Y2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZh
dWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6bG9va3VwU2V0dGVyKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERpcmVjdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RMb2NhdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpsb2NhdGlvbkZvck9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3RP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5saW5l
R2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEZvcldyaXRlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xv
dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvUHJpbWl0aXZlKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpT
UHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldFByaW1pdGl2ZU51bWJlcik6CisgICAgICAgICogcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0
b3I6Om5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
U3RhdGljU2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVj
dDo6SlNTdGF0aWNTY29wZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpnZXRQcmltaXRpdmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjphc1N0cmluZyk6
CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
Om1ha2VJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjppbW1lZGlhdGVWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OkpTVmFsdWVQdHIpOgorICAgICAgICAoSlND
OjpKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVB0cjo6aGFz
VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUHRyOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZVB0cjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6
OmVuY29kZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWVQdHI6OmRlY29kZSk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoSlNDOjpub1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yIT0pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2Jq
ZWN0OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OnN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNXcmFwcGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjptYXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0pTV3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJP
YmplY3Q6OmludGVybmFsVmFsdWUpOgorICAgICAgICAoSlNDOjpKU1dyYXBwZXJPYmplY3Q6OnNl
dEludGVybmFsVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAgICAgICAg
KEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3Vw
Lmg6CisgICAgICAgIChKU0M6Omxvb2t1cFB1dCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNBQ29zKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgor
ICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90
b0Z1bmNBVGFuMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHAp
OgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jRmxvb3IpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6CisgICAgICAg
IChKU0M6Om1hdGhQcm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jUG93
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1JhbmRvbSk6CisgICAgICAgIChKU0M6Om1h
dGhQcm90b0Z1bmNSb3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW4pOgorICAg
ICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU3FydCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNUYW4pOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpN
YXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6bnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZSk6CisgICAgICAgIChKU0M6Om51bWJlckNv
bnN0cnVjdG9yTmVnSW5maW5pdHkpOgorICAgICAgICAoSlNDOjpudW1iZXJDb25zdHJ1Y3RvclBv
c0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6bnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZSk6Cisg
ICAgICAgIChKU0M6Om51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUpOgorICAgICAgICAoSlNDOjpj
YWxsTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1i
ZXJPYmplY3Q6OmdldEpTTnVtYmVyKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVyRnJv
bUltbWVkaWF0ZU51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om51bWJl
clByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAg
ICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChKU0M6Om51bWJlclBy
b3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1By
ZWNpc2lvbik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgIChKU0M6OmNhbGxPYmplY3RDb25z
dHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNJc1By
b3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKToK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpT
Qzo6b2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jTG9va3VwU2V0dGVyKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jUHJvcGVy
dHlJc0VudW1lcmFibGUpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6ZXF1YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OnN0cmljdEVxdWFsKToKKyAgICAgICAgKEpTQzo6c3RyaWN0RXF1
YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OnRocm93T3V0T2ZNZW1vcnlFcnJvcik6CisgICAg
ICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmVxdWFsU2xvd0Nhc2VJ
bmxpbmUpOgorICAgICAgICAoSlNDOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xv
dDo6ZnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTbG90Lmg6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlTbG90OjpnZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6cHV0
VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldFZhbHVlU2xvdCk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eVNsb3Q6OnNldEN1c3RvbSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9t
SW5kZXgpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNsb3RCYXNlKToKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlTbG90OjpzZXRCYXNlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90
OjopOgorICAgICAgICAqIHJ1bnRpbWUvUHJvdGVjdC5oOgorICAgICAgICAoSlNDOjpnY1Byb3Rl
Y3QpOgorICAgICAgICAoSlNDOjpnY1VucHJvdGVjdCk6CisgICAgICAgIChKU0M6OlByb3RlY3Rl
ZFB0cjo6UHJvdGVjdGVkUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkUHRyOjpvcGVyYXRv
ciBKU1ZhbHVlUHRyKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVj
dGVkSlNWYWx1ZVB0cik6CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6OmdldCk6
CisgICAgICAgIChKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI6Om9wZXJhdG9yIEpTVmFsdWVQdHIp
OgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpvcGVyYXRvci0+KToKKyAgICAg
ICAgKEpTQzo6OjpQcm90ZWN0ZWRQdHIpOgorICAgICAgICAoSlNDOjo6On5Qcm90ZWN0ZWRQdHIp
OgorICAgICAgICAoSlNDOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UHJvdGVjdGVkSlNW
YWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIpOgorICAgICAgICAoSlNDOjpQcm90ZWN0ZWRK
U1ZhbHVlUHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbik6CisgICAgICAgIChK
U0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMZWZ0Q29udGV4dCk6CisgICAgICAgIChKU0M6OlJl
Z0V4cENvbnN0cnVjdG9yOjpnZXRSaWdodENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdFeHBD
b25zdHJ1Y3RvckRvbGxhcjEpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxh
cjIpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMpOgorICAgICAgICAo
SlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcjUpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYp
OgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcpOgorICAgICAgICAoSlND
OjpyZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjgpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1
Y3RvckRvbGxhcjkpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvcklucHV0KToKKyAg
ICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVj
dG9yTGFzdFBhcmVuKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OnB1dCk6CisgICAgICAgIChKU0M6OnNldFJlZ0V4
cENvbnN0cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlNDOjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11
bHRpbGluZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgIChKU0M6
OmNhbGxSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5oOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6YXNSZWdFeHBDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5
OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6cmVnRXhwT2JqZWN0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0SWdub3Jl
Q2FzZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdE11bHRpbGluZSk6CisgICAgICAgIChK
U0M6OnJlZ0V4cE9iamVjdFNvdXJjZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cE9iamVjdExhc3RJ
bmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6
c2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojp0
ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVjKToKKyAgICAgICAgKEpTQzo6
Y2FsbFJlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
Ojphc1JlZ0V4cE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUZXN0KToKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9GdW5jRXhlYyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUp
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21DaGFy
Q29kZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKToKKyAgICAg
ICAgKEpTQzo6Y2FsbFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmFzU3RyaW5nT2JqZWN0KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmg6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckF0KToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0NvbmNhdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0lu
ZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY01hdGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQmlnKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JvbGQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdHJpa2Up
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250Y29sb3Ip
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xp
bmspOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZUNhY2hlZFBy
b3RvdHlwZUNoYWluKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJv
dG90eXBlV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0b3Jl
ZFByb3RvdHlwZSk6CisKIDIwMDktMDEtMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsOSBAQCBfX1pO
M0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185CiBfX1pOM0pTQzEwdGhyb3dFcnJv
ckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVBLYwogX19aTjNKU0MxMHRocm93RXJyb3JF
UE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0MxMUpT
SW1tZWRpYXRlMTJub25JbmxpbmVOYU5FdgotX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0
RVBOU183SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b1N0
cmluZ0VQTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRVBOU183
SlNWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b09iamVjdEVO
U18xMEpTVmFsdWVQdHJFUE5TXzlFeGVjU3RhdGVFCitfX1pOM0pTQzExSlNJbW1lZGlhdGU4dG9T
dHJpbmdFTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNKU0MxMUpTSW1tZWRpYXRlOXByb3RvdHlwZUVO
U18xMEpTVmFsdWVQdHJFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzExUHJvZmlsZU5vZGU0c29y
dEVQRmJSS04zV1RGNlJlZlB0cklTMF9FRVM1X0UKIF9fWk4zSlNDMTFjaGVja1N5bnRheEVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29kZUUKIF9fWk4zSlNDMTJEYXRlSW5zdGFuY2U0aW5m
b0UKQEAgLTEyMCw3ICsxMjAsNyBAQCBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MTR0b1RoaXNKU1N0
cmluZ0VQCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0MTZnZXRQcm9wZXJ0eU5hbWVzRVBOU185RXhl
Y1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RQogX19aTjNKU0MxMlN0cmluZ09iamVjdDE4
Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18x
MlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxOGdldE93blByb3BlcnR5U2xv
dEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNKU0MxMlN0cmluZ09i
amVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRVJO
U18xNVB1dFByb3BlcnR5U2xvdEUKK19fWk4zSlNDMTJTdHJpbmdPYmplY3QzcHV0RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNfMTVQdXRQcm9wZXJ0
eVNsb3RFCiBfX1pOM0pTQzEyU3RyaW5nT2JqZWN0NGluZm9FCiBfX1pOM0pTQzEyU3RyaW5nT2Jq
ZWN0QzJFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRVJL
TlNfN1VTdHJpbmdFCiBfX1pOM0pTQzEyanNOdW1iZXJDZWxsRVBOU185RXhlY1N0YXRlRWQKQEAg
LTEzMSw5ICsxMzEsOSBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZUdldHRlckVQ
CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0
MTRzZXRUaW1lb3V0VGltZUVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxNnN0b3BUaW1lb3V0
Q2hlY2tFdgotX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFagorX19aTjNKU0MxNEpT
R2xvYmFsT2JqZWN0MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVOU18xMEpTVmFsdWVQdHJFagogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0MTdzdGFy
dFRpbWVvdXRDaGVja0V2Ci1fX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RF
CitfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2Jq
ZWN0NG1hcmtFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgpAQCAtMTUyLDEzICsxNTIs
MTMgQEAgX19aTjNKU0MxNlBhcnNlclJlZkNvdW50ZWQzcmVmRXYKIF9fWk4zSlNDMTZQYXJzZXJS
ZWZDb3VudGVkNWRlcmVmRXYKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjIxc2V0RHVtcHNH
ZW5lcmF0ZWRDb2RlRWIKIF9fWk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheTNhZGRFUE5TXzdVU3Ry
aW5nM1JlcEUKLV9fWk4zSlNDMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNf
N0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVTQl9SS05TXzdBcmdMaXN0RUUKLV9fWk4zSlNDMTdQ
cm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRWlSS05TXzEwSWRlbnRpZmllckVQRlBO
U183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVM3X1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0Mx
N1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
OVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzEwSlNWYWx1ZVB0ckVTMl9QTlNf
OEpTT2JqZWN0RVNBX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxN1Byb3RvdHlwZUZ1bmN0aW9u
QzFFUE5TXzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGTlNfMTBKU1ZhbHVlUHRyRVMy
X1BOU184SlNPYmplY3RFUzZfUktOU183QXJnTGlzdEVFCiBfX1pOM0pTQzE3Y29uc3RydWN0RnVu
Y3Rpb25FUE5TXzlFeGVjU3RhdGVFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05T
XzdVU3RyaW5nRWkKIF9fWk4zSlNDMTljb25zdHJ1Y3RFbXB0eUFycmF5RVBOU185RXhlY1N0YXRl
RQogX19aTjNKU0MxOWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyMGNvbnN0cnVjdEVt
cHR5T2JqZWN0RVBOU185RXhlY1N0YXRlRQotX19aTjNKU0MyM29iamVjdFByb3RvRnVuY1RvU3Ry
aW5nRVBOU185RXhlY1N0YXRlRVBOU184SlNPYmplY3RFUE5TXzdKU1ZhbHVlRVJLTlNfN0FyZ0xp
c3RFCitfX1pOM0pTQzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFUE5T
XzhKU09iamVjdEVOU18xMEpTVmFsdWVQdHJFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDMjNzZXRV
cFN0YXRpY0Z1bmN0aW9uU2xvdEVQTlNfOUV4ZWNTdGF0ZUVQS05TXzlIYXNoRW50cnlFUE5TXzhK
U09iamVjdEVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzRI
ZWFwMTFvYmplY3RDb3VudEV2CiBfX1pOM0pTQzRIZWFwMTRhbGxvY2F0ZU51bWJlckVtCkBAIC0x
NzAsMTQgKzE3MCwxNCBAQCBfX1pOM0pTQzRIZWFwMjBwcm90ZWN0ZWRPYmplY3RDb3VudEV2CiBf
X1pOM0pTQzRIZWFwMjRzZXRHQ1Byb3RlY3ROZWVkc0xvY2tpbmdFdgogX19aTjNKU0M0SGVhcDI1
cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c0V2CiBfX1pOM0pTQzRIZWFwMjZwcm90ZWN0ZWRHbG9i
YWxPYmplY3RDb3VudEV2Ci1fX1pOM0pTQzRIZWFwNGhlYXBFUE5TXzdKU1ZhbHVlRQorX19aTjNK
U0M0SGVhcDRoZWFwRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDNEhlYXA2aXNCdXN5RXYKIF9f
Wk4zSlNDNEhlYXA3Y29sbGVjdEV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgotX19aTjNKU0M0
SGVhcDdwcm90ZWN0RVBOU183SlNWYWx1ZUUKK19fWk4zSlNDNEhlYXA3cHJvdGVjdEVOU18xMEpT
VmFsdWVQdHJFCiBfX1pOM0pTQzRIZWFwOGFsbG9jYXRlRW0KLV9fWk4zSlNDNEhlYXA5dW5wcm90
ZWN0RVBOU183SlNWYWx1ZUUKLV9fWk4zSlNDNGNhbGxFUE5TXzlFeGVjU3RhdGVFUE5TXzdKU1Zh
bHVlRU5TXzhDYWxsVHlwZUVSS05TXzhDYWxsRGF0YUVTM19SS05TXzdBcmdMaXN0RQorX19aTjNK
U0M0SGVhcDl1bnByb3RlY3RFTlNfMTBKU1ZhbHVlUHRyRQorX19aTjNKU0M0Y2FsbEVQTlNfOUV4
ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJFTlNfOENhbGxUeXBlRVJLTlNfOENhbGxEYXRhRVMyX1JL
TlNfN0FyZ0xpc3RFCiBfX1pOM0pTQzVlcXVhbEVQS05TXzdVU3RyaW5nM1JlcEVTM18KIF9fWk4z
SlNDNkpTQ2VsbDExZ2V0Q2FsbERhdGFFUk5TXzhDYWxsRGF0YUUKIF9fWk4zSlNDNkpTQ2VsbDEx
Z2V0SlNOdW1iZXJFdgpAQCAtMTg3LDggKzE4Nyw4IEBAIF9fWk4zSlNDNkpTQ2VsbDE0dG9UaGlz
SlNTdHJpbmdFUE5TXzlFeGUKIF9fWk4zSlNDNkpTQ2VsbDE2Z2V0Q29uc3RydWN0RGF0YUVSTlNf
MTNDb25zdHJ1Y3REYXRhRQogX19aTjNKU0M2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5T
XzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNK
U0M2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3Bl
cnR5U2xvdEUKLV9fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKLV9fWk4zSlNDNkpTQ2Vs
bDNwdXRFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKK19fWk4zSlNDNkpTQ2VsbDNwdXRF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRVJOU18xNVB1
dFByb3BlcnR5U2xvdEUKK19fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzEw
SlNWYWx1ZVB0ckUKIF9fWk4zSlNDNkpTQ2VsbDlnZXRPYmplY3RFdgogX19aTjNKU0M2SlNDZWxs
bndFbVBOU185RXhlY1N0YXRlRQogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUVQTlNf
OUV4ZWNTdGF0ZUUKQEAgLTE5OSw3ICsxOTksNyBAQCBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRWIK
IF9fWk4zSlNDNkpTTG9jazlsb2NrQ291bnRFdgogX19aTjNKU0M2SlNMb2NrQzFFUE5TXzlFeGVj
U3RhdGVFCiBfX1pOM0pTQzZQYXJzZXI1cGFyc2VFUE5TXzEySlNHbG9iYWxEYXRhRVBpUE5TXzdV
U3RyaW5nRQotX19aTjNKU0M3QXJnTGlzdDEwc2xvd0FwcGVuZEVQTlNfN0pTVmFsdWVFCitfX1pO
M0pTQzdBcmdMaXN0MTBzbG93QXBwZW5kRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDN0NTdHJp
bmdEMUV2CiBfX1pOM0pTQzdDU3RyaW5nYVNFUktTMF8KIF9fWk4zSlNDN0pTQXJyYXk0aW5mb0UK
QEAgLTIyMSw3ICsyMjEsNyBAQCBfX1pOM0pTQzhEZWJ1Z2dlcjZhdHRhY2hFUE5TXzE0SlNHbG9i
YWxPCiBfX1pOM0pTQzhEZWJ1Z2dlcjZkZXRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pO
M0pTQzhEZWJ1Z2dlckMyRXYKIF9fWk4zSlNDOERlYnVnZ2VyRDJFdgotX19aTjNKU0M4SlNPYmpl
Y3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUVTNF8KK19fWk4zSlND
OEpTT2JqZWN0MTFoYXNJbnN0YW5jZUVQTlNfOUV4ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJFUzNf
CiBfX1pOM0pTQzhKU09iamVjdDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRVBTMF8KIF9fWk4zSlNDOEpTT2JqZWN0MTJkZWZpbmVTZXR0ZXJFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFUFMwXwogX19aTjNKU0M4SlNPYmplY3QxMmxvb2t1cEdl
dHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKQEAgLTIzMiwxOSArMjMyLDE5
IEBAIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBwZWRPYmplY3RFdgogX19aTjNKU0M4SlNPYmpl
Y3QxNmdldFByb3BlcnR5TmFtZXNFUE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJy
YXlFCiBfX1pOM0pTQzhKU09iamVjdDE3Y3JlYXRlSW5oZXJpdG9ySURFdgogX19aTjNKU0M4SlNP
YmplY3QxN3B1dERpcmVjdEZ1bmN0aW9uRVBOU185RXhlY1N0YXRlRVBOU18xNkludGVybmFsRnVu
Y3Rpb25FagotX19aTjNKU0M4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVqCi1fX1pOM0pTQzhKU09iamVjdDE3
cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUVqCitfX1pOM0pT
QzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfMTBKU1ZhbHVlUHRyRWoKK19fWk4zSlNDOEpTT2JqZWN0MTdwdXRXaXRoQXR0cmli
dXRlc0VQTlNfOUV4ZWNTdGF0ZUVqTlNfMTBKU1ZhbHVlUHRyRWoKIF9fWk4zSlNDOEpTT2JqZWN0
MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUK
LV9fWk4zSlNDOEpTT2JqZWN0MThnZXRQcmltaXRpdmVOdW1iZXJFUE5TXzlFeGVjU3RhdGVFUmRS
UE5TXzdKU1ZhbHVlRQotX19aTjNKU0M4SlNPYmplY3QyMmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3RF
Uk5TXzEyUHJvcGVydHlTbG90RVBQTlNfN0pTVmFsdWVFCitfX1pOM0pTQzhKU09iamVjdDE4Z2V0
UHJpbWl0aXZlTnVtYmVyRVBOU185RXhlY1N0YXRlRVJkUk5TXzEwSlNWYWx1ZVB0ckUKK19fWk4z
SlNDOEpTT2JqZWN0MjJmaWxsR2V0dGVyUHJvcGVydHlTbG90RVJOU18xMlByb3BlcnR5U2xvdEVQ
TlNfMTBKU1ZhbHVlUHRyRQogX19aTjNKU0M4SlNPYmplY3QyM2FsbG9jYXRlUHJvcGVydHlTdG9y
YWdlRW1tCi1fX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFUE5TXzdKU1ZhbHVlRVJOU18xNVB1dFByb3BlcnR5U2xvdEUKLV9fWk4zSlNDOEpTT2Jq
ZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQorX19aTjNKU0M4SlNPYmplY3Qz
cHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzEwSlNWYWx1ZVB0ckVSTlNf
MTVQdXRQcm9wZXJ0eVNsb3RFCitfX1pOM0pTQzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVF
ak5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOEpTT2JqZWN0NG1hcmtFdgogX19aTjNKU0M4UHJv
ZmlsZXIxM3N0b3BQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4z
SlNDOFByb2ZpbGVyMTRzdGFydFByb2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5n
RQogX19aTjNKU0M4UHJvZmlsZXI4cHJvZmlsZXJFdgotX19aTjNKU0M4ZXZhbHVhdGVFUE5TXzlF
eGVjU3RhdGVFUk5TXzEwU2NvcGVDaGFpbkVSS05TXzEwU291cmNlQ29kZUVQTlNfN0pTVmFsdWVF
CitfX1pOM0pTQzhldmFsdWF0ZUVQTlNfOUV4ZWNTdGF0ZUVSTlNfMTBTY29wZUNoYWluRVJLTlNf
MTBTb3VyY2VDb2RlRU5TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOGpzU3RyaW5nRVBOU18xMkpT
R2xvYmFsRGF0YUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0M5Q29kZUJsb2NrRDFFdgogX19aTjNK
U0M5Q29kZUJsb2NrRDJFdgpAQCAtMjUyLDEzICsyNTIsMTMgQEAgX19aTjNKU0M5U3RydWN0dXJl
MTdzdG9wSWdub3JpbmdMZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUxOHN0YXJ0SWdub3JpbmdM
ZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQUzBfUktO
U18xMElkZW50aWZpZXJFalJtCiBfX1pOM0pTQzlTdHJ1Y3R1cmUyMm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBFdgotX19aTjNKU0M5U3RydWN0dXJlMjVjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uRVBT
MF9QTlNfN0pTVmFsdWVFCitfX1pOM0pTQzlTdHJ1Y3R1cmUyNWNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb25FUFMwX05TXzEwSlNWYWx1ZVB0ckUKIF9fWk4zSlNDOVN0cnVjdHVyZTI4YWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbkVSS05TXzEwSWRlbnRpZmllckVqCiBfX1pOM0pTQzlTdHJ1Y3R1
cmUzZ2V0RVJLTlNfMTBJZGVudGlmaWVyRVJqCiBfX1pOM0pTQzlTdHJ1Y3R1cmU0MGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVFUFMwX1JLTlNfMTBJZGVudGlmaWVyRWpS
bQotX19aTjNKU0M5U3RydWN0dXJlQzFFUE5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRQorX19a
TjNKU0M5U3RydWN0dXJlQzFFTlNfMTBKU1ZhbHVlUHRyRVJLTlNfOFR5cGVJbmZvRQogX19aTjNK
U0M5U3RydWN0dXJlRDFFdgotX19aTjNKU0M5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVBOU183
SlNWYWx1ZUVOU18xM0NvbnN0cnVjdFR5cGVFUktOU18xM0NvbnN0cnVjdERhdGFFUktOU183QXJn
TGlzdEUKK19fWk4zSlNDOWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVOU18xMEpTVmFsdWVQdHJF
TlNfMTNDb25zdHJ1Y3RUeXBlRVJLTlNfMTNDb25zdHJ1Y3REYXRhRVJLTlNfN0FyZ0xpc3RFCiBf
X1pOM0pTQ2VxRVJLTlNfN1VTdHJpbmdFUEtjCiBfX1pOM0pTQ2VxRVJLTlNfN1VTdHJpbmdFUzJf
CiBfX1pOM0pTQ2d0RVJLTlNfN1VTdHJpbmdFUzJfCkBAIC0zMDUsNyArMzA1LDcgQEAgX19aTjNX
VEY4Q29sbGF0b3JDMUVQS2MKIF9fWk4zV1RGOENvbGxhdG9yRDFFdgogX19aTjNXVEY4ZmFzdEZy
ZWVFUHYKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxNHJldHJpZXZlQ2FsbGVyRVBOU185RXhlY1N0
YXRlRVBOU18xNkludGVybmFsRnVuY3Rpb25FCi1fX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRy
aWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSUE5TXzdKU1Zh
bHVlRQorX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0cmlldmVMYXN0Q2FsbGVyRVBOU185RXhl
Y1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzEwSlNWYWx1ZVB0ckUKIF9fWk5LM0pTQzEyRGF0
ZUluc3RhbmNlN2dldFRpbWVFUmRSaQogX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMnRvVGhpc1N0
cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0OHRvU3RyaW5nRVBO
U185RXhlY1N0YXRlRQpAQCAtMzE2LDcgKzMxNiw3IEBAIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9i
amVjdDIxZ2V0UHJvcGVydHkKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWUxMHRoaXNPYmpl
Y3RFdgogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEyZnVuY3Rpb25OYW1lRXYKIF9fWk5L
M0pTQzE3RGVidWdnZXJDYWxsRnJhbWU0dHlwZUV2Ci1fX1pOSzNKU0MxN0RlYnVnZ2VyQ2FsbEZy
YW1lOGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFUlBOU183SlNWYWx1ZUUKK19fWk5LM0pTQzE3RGVi
dWdnZXJDYWxsRnJhbWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSTlNfMTBKU1ZhbHVlUHRyRQog
X19aTkszSlNDNEhlYXAxMHN0YXRpc3RpY3NFdgogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzT2Jq
ZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzU3RyaW5nRVBOU185
RXhlY1N0YXRlRQpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3Jl
L2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE0ICs2NywxNCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogc3RhdGljIHZvaWQgY2xlYW51cEdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CiBz
dGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcmIGZp
bGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlv
blByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdDKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBmdW5j
dGlvbkxvYWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Owotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uUXVp
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25EZWJ1ZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblZlcnNpb24oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBmdW5jdGlvblJ1bihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uTG9hZChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblF1aXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIHN0cnVjdCBP
cHRpb25zIHsKICAgICBPcHRpb25zKCkKQEAgLTE3NCw3ICsxNzQsNyBAQCBHbG9iYWxPYmplY3Q6
Okdsb2JhbE9iamVjdChjb25zdCBWZWN0b3I8CiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAiYXJndW1lbnRzIiksIGFycmF5KTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25Q
cmludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGkgIT0gMCkKQEAg
LTE4OCwyNyArMTg4LDI3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVj
LCAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25EZWJ1
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZnByaW50ZihzdGRlcnIs
ICItLT4gJXNcbiIsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5jX3N0cigpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZnVu
Y3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAg
ICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgLy8gV2Ug
bmVlZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1vemlsbGEgSlMg
dGVzdHMgYnV0IGZvciBub3cKICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSBkbyBhbnkgdmVyc2lv
bi1zcGVjaWZpYyBoYW5kbGluZwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBmdW5jdGlvblJ1bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFN0
b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgVVN0cmluZyBmaWxlTmFtZSA9IGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMjI1LDcgKzIyNSw3IEBAIEpTVmFsdWUqIGZ1bmN0aW9u
UnVuKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICByZXR1cm4ganNOdW1iZXIoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CiB9CiAKLUpTVmFsdWUq
IGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0aW9uTG9hZChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3Ry
aW5nIGZpbGVOYW1lID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgVmVj
dG9yPGNoYXI+IHNjcmlwdDsKQEAgLTIzOCw3ICsyMzgsNyBAQCBKU1ZhbHVlKiBmdW5jdGlvbkxv
YWQoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUqIGZ1bmN0aW9uUmVhZGxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZnVuY3Rpb25SZWFkbGluZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
VmVjdG9yPGNoYXIsIDI1Nj4gbGluZTsKICAgICBpbnQgYzsKQEAgLTI1Miw3ICsyNTIsNyBAQCBK
U1ZhbHVlKiBmdW5jdGlvblJlYWRsaW5lKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIGxpbmUuZGF0YSgpKTsKIH0KIAotSlNWYWx1ZSogZnVuY3Rpb25RdWl0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGZ1bmN0aW9uUXVpdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgY2xlYW51cEdsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERh
dGEoKSk7CiAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShy
ZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDEyICsyNiwxNSBAQAogI2lmbmRlZiBBUElDYXN0X2gKICNkZWZpbmUgQVBJ
Q2FzdF9oCiAKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKICAgICBjbGFzcyBK
U0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAg
ICBjbGFzcyBKU1ZhbHVlUHRyOwogfQogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0Nv
bnRleHRHcm91cCogSlNDb250ZXh0R3JvdXBSZWY7CkBAIC01Myw5ICs1Niw5IEBAIGlubGluZSBK
U0M6OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnQKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxKU0M6OkV4ZWNTdGF0ZSo+KGMpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pT
KEpTVmFsdWVSZWYgdikKK2lubGluZSBKU0M6OkpTVmFsdWVQdHIgdG9KUyhKU1ZhbHVlUmVmIHYp
CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpKU1ZhbHVlKj4oY29uc3RfY2Fz
dDxPcGFxdWVKU1ZhbHVlKj4odikpOworICAgIHJldHVybiBKU0M6OkpTVmFsdWVQdHI6OmRlY29k
ZShyZWludGVycHJldF9jYXN0PEpTQzo6SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihjb25zdF9j
YXN0PE9wYXF1ZUpTVmFsdWUqPih2KSkpOwogfQogCiBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9K
UyhKU09iamVjdFJlZiBvKQpAQCAtNzMsMTQgKzc2LDE0IEBAIGlubGluZSBKU0M6OkpTR2xvYmFs
RGF0YSogdG9KUyhKU0NvbnRleHQKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpT
R2xvYmFsRGF0YSo+KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAK
LWlubGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6SlNWYWx1ZSogdikKK2lubGluZSBKU1ZhbHVl
UmVmIHRvUmVmKEpTQzo6SlNWYWx1ZVB0ciB2KQogewotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEpTVmFsdWVSZWY+KHYpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVS
ZWY+KEpTQzo6SlNWYWx1ZVB0cjo6ZW5jb2RlKHYpKTsKIH0KIAotaW5saW5lIEpTVmFsdWVSZWYq
IHRvUmVmKEpTQzo6SlNWYWx1ZSoqIHYpCitpbmxpbmUgSlNWYWx1ZVJlZiogdG9SZWYoSlNDOjpK
U1ZhbHVlUHRyKiB2KQogewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWYq
Pihjb25zdF9jYXN0PGNvbnN0IEpTQzo6SlNWYWx1ZSoqPih2KSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZio+KHYpOwogfQogCiBpbmxpbmUgSlNPYmplY3RSZWYgdG9S
ZWYoSlNDOjpKU09iamVjdCogbykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1
YmxpYzoKICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBj
b25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNy
ZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7IAogICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNI
YXNJbnN0YW5jZSB8IEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7IAogICAgIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAz
OTYwMykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEpTQ2FsbGJhY2tGdW5jdGlvbjo6SlNDYWxsYmFj
a0Z1bmN0aW9uKEUKIHsKIH0KIAotSlNWYWx1ZSogSlNDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FsbGJhY2tGdW5jdGlvbjo6
Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiBmdW5jdGlvblJlZiA9IHRvUmVm
KGZ1bmN0aW9uT2JqZWN0KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5j
dGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCiAgICAgLy8gcmVmYWN0b3IgdGhlIGNvZGUgc28g
dGhpcyBvdmVycmlkZSBpc24ndCBuZWNlc3NhcnkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykgCiAgICAg
eyAKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5U2xvdCkpOyAKICAgICB9CkBAIC00OCw3
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxs
RGF0YSYpOwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUqIGNhbGwoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOworICAgIHN0YXRpYyBKU1ZhbHVl
UHRyIGNhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CiAKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDM5NjAz
KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3REYXRhLT5qc0NsYXNzOyB9CiAgICAgYm9vbCBp
bmhlcml0cyhKU0NsYXNzUmVmKSBjb25zdDsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICB7
IAogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVj
dFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNlKSk7IAog
ICAgIH0KQEAgLTU5LDEyICs1OSwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVl
UHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0
ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNJ
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90byk7
CisgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0
ciB2YWx1ZSwgSlNWYWx1ZVB0ciBwcm90byk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCkBAIC03NywxNCArNzcs
MTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdChFeGVjU3RhdGUqKTsKICAKLSAgICBzdGF0
aWMgSlNDYWxsYmFja09iamVjdCogYXNDYWxsYmFja09iamVjdChKU1ZhbHVlKik7CisgICAgc3Rh
dGljIEpTQ2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoSlNWYWx1ZVB0cik7CiAgCi0g
ICAgc3RhdGljIEpTVmFsdWUqIGNhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGZ1bmN0aW9uT2Jq
ZWN0LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIGNv
bnN0cnVjdChFeGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3Qm
KTsKICAgIAotICAgIHN0YXRpYyBKU1ZhbHVlKiBzdGF0aWNWYWx1ZUdldHRlcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpT
VmFsdWUqIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogY2FsbGJhY2tHZXR0
ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVB0
ciBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgY2FsbGJhY2tHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAg
ICAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIHsKICAgICAgICAgSlNDYWxsYmFja09iamVj
dERhdGEodm9pZCogcHJpdmF0ZURhdGEsIEpTQ2xhc3NSZWYganNDbGFzcykKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24g
Mzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogdGVt
cGxhdGUgPGNsYXNzIEJhc2U+Ci1pbmxpbmUgSlNDYWxsYmFja09iamVjdDxCYXNlPiogSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6YXNDYWxsYmFja09iamVjdChKU1ZhbHVlKiB2YWx1ZSkKK2lubGlu
ZSBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+KiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojphc0NhbGxi
YWNrT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVl
KS0+aW5oZXJpdHMoJmluZm8pKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09i
amVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpnZXRPd25Qcm9wZQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4K
LXZvaWQgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZXhlYyk7
CiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXMpOwpAQCAtMjc3LDcgKzI3Nyw3
IEBAIEpTT2JqZWN0KiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+Ojpjb25zdHIKIH0KIAogdGVtcGxh
dGUgPGNsYXNzIEJhc2U+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46Omhhc0luc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpTVmFsdWUqKQorYm9vbCBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
dmFsdWUsIEpTVmFsdWVQdHIpCiB7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihl
eGVjKTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpcyk7CkBAIC0zMDQsNyAr
MzA0LDcgQEAgQ2FsbFR5cGUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Z2V0Q2FsbAogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNh
bGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYWxsYmFja09iamVj
dDxCYXNlPjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbk9iamVjdCwg
SlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNDb250
ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiBmdW5jdGlvblJl
ZiA9IHRvUmVmKGZ1bmN0aW9uT2JqZWN0KTsKQEAgLTQyNyw3ICs0MjcsNyBAQCBib29sIEpTQ2Fs
bGJhY2tPYmplY3Q8QmFzZT46OmluaGVyaXRzKEpTCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBCYXNl
PgotSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljVmFsdWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGlj
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0
aGlzT2JqID0gYXNDYWxsYmFja09iamVjdChzbG90LnNsb3RCYXNlKCkpOwogICAgIApAQCAtNDQ5
LDcgKzQ0OSw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY1YKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+
OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0Nh
bGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBhc0NhbGxiYWNrT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSk7CiAgICAgCkBAIC00NzQsNyArNDc0LDcgQEAgSlNWYWx1ZSogSlNDYWxs
YmFja09iamVjdDxCYXNlPjo6c3RhdGljRgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KLUpT
VmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IGFz
Q2FsbGJhY2tPYmplY3Qoc2xvdC5zbG90QmFzZSgpKTsKICAgICAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTR2xv
YmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+KGdsb2JhbE9iamVjdENsYXNzKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBn
bG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOworICAgIEpTVmFsdWVQdHIgcHJvdG90
eXBlID0gZ2xvYmFsT2JqZWN0Q2xhc3MtPnByb3RvdHlwZShleGVjKTsKICAgICBpZiAoIXByb3Rv
dHlwZSkKICAgICAgICAgcHJvdG90eXBlID0ganNOdWxsKCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5y
ZXNldFByb3RvdHlwZShwcm90b3R5cGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
ZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU09iamVjdFJlZiBKU09iamVj
dE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0
ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUqIGpzUHJv
dG90eXBlID0ganNDbGFzcyAKKyAgICBKU1ZhbHVlUHRyIGpzUHJvdG90eXBlID0ganNDbGFzcyAK
ICAgICAgICAgPyBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykKICAgICAgICAgOiBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgIApAQCAtMjMzLDcgKzIz
Myw3IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm90b3R5cGUoSlNDb250ZXgKIHZvaWQgSlNP
YmplY3RTZXRQcm90b3R5cGUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFs
dWVSZWYgdmFsdWUpCiB7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwot
ICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFs
dWUgPSB0b0pTKHZhbHVlKTsKIAogICAgIGpzT2JqZWN0LT5zZXRQcm90b3R5cGUoanNWYWx1ZS0+
aXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7CiB9CkBAIC0yNTcsNyArMjU3LDcgQEAg
SlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29udGV4dAogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IGpzT2Jq
ZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCkpKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSBqc09iamVjdC0+Z2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYy0+ZXhjZXB0aW9uKCkpOwpAQCAtMjc0LDcgKzI3NCw3IEBA
IHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3QKIAogICAgIEpTT2JqZWN0
KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlO
YW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpKTsKLSAgICBKU1ZhbHVlKiBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7
CiAKICAgICBpZiAoYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIG5h
bWUpKQogICAgICAgICBqc09iamVjdC0+cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgbmFtZSwganNW
YWx1ZSwgYXR0cmlidXRlcyk7CkBAIC0yOTgsNyArMjk4LDcgQEAgSlNWYWx1ZVJlZiBKU09iamVj
dEdldFByb3BlcnR5QXRJbmRleChKUwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywgcHJv
cGVydHlJbmRleCk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVj
LCBwcm9wZXJ0eUluZGV4KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLT5l
eGNlcHRpb24oKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5
QXRJbmRleChKU0NvbnRleAogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZh
bHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBq
c09iamVjdC0+cHV0KGV4ZWMsIHByb3BlcnR5SW5kZXgsIGpzVmFsdWUpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2
aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogSlNUeXBlIEpTVmFsdWVHZXRUeXBlKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBKU0M6OkpTVmFsdWUqIGpzVmFsdWUg
PSB0b0pTKHZhbHVlKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUp
OwogICAgIGlmIChqc1ZhbHVlLT5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4ga0pTVHlw
ZVVuZGVmaW5lZDsKICAgICBpZiAoanNWYWx1ZS0+aXNOdWxsKCkpCkBAIC02Miw0MyArNjIsNDMg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsgLy8gcGxhY2VkIGhlcmUgdG8gYQogCiBib29sIEpTVmFs
dWVJc1VuZGVmaW5lZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc1VuZGVmaW5lZCgpOwogfQogCiBib29s
IEpTVmFsdWVJc051bGwoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNOdWxsKCk7CiB9CiAKIGJvb2wgSlNW
YWx1ZUlzQm9vbGVhbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNW
YWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRv
SlModmFsdWUpOwogICAgIHJldHVybiBqc1ZhbHVlLT5pc0Jvb2xlYW4oKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNOdW1iZXIoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNOdW1iZXIoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNTdHJpbmcoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNTdHJpbmcoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNPYmplY3QoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpT
VmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0
b0pTKHZhbHVlKTsKICAgICByZXR1cm4ganNWYWx1ZS0+aXNPYmplY3QoKTsKIH0KIAogYm9vbCBK
U1ZhbHVlSXNPYmplY3RPZkNsYXNzKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlND
bGFzc1JlZiBqc0NsYXNzKQogewotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsK
KyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBpZiAoSlNP
YmplY3QqIG8gPSBqc1ZhbHVlLT5nZXRPYmplY3QoKSkgewogICAgICAgICBpZiAoby0+aW5oZXJp
dHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbmZvKSkKQEAgLTExNSw4ICsx
MTUsOCBAQCBib29sIEpTVmFsdWVJc0VxdWFsKEpTQ29udGV4dFJlZiBjdHgsIEpTCiAgICAgZXhl
Yy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBKU0xvY2sgbG9jayhl
eGVjKTsKIAotICAgIEpTVmFsdWUqIGpzQSA9IHRvSlMoYSk7Ci0gICAgSlNWYWx1ZSoganNCID0g
dG9KUyhiKTsKKyAgICBKU1ZhbHVlUHRyIGpzQSA9IHRvSlMoYSk7CisgICAgSlNWYWx1ZVB0ciBq
c0IgPSB0b0pTKGIpOwogCiAgICAgYm9vbCByZXN1bHQgPSBlcXVhbChleGVjLCBqc0EsIGpzQik7
IC8vIGZhbHNlIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24KICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKQEAgLTEyOSw4ICsxMjksOCBAQCBib29sIEpTVmFsdWVJc0VxdWFsKEpTQ29u
dGV4dFJlZiBjdHgsIEpTCiAKIGJvb2wgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoSlNDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmIGEsIEpTVmFsdWVSZWYgYikKIHsKLSAgICBKU1ZhbHVlKiBqc0EgPSB0b0pT
KGEpOwotICAgIEpTVmFsdWUqIGpzQiA9IHRvSlMoYik7CisgICAgSlNWYWx1ZVB0ciBqc0EgPSB0
b0pTKGEpOworICAgIEpTVmFsdWVQdHIganNCID0gdG9KUyhiKTsKICAgICAKICAgICBib29sIHJl
c3VsdCA9IHN0cmljdEVxdWFsKGpzQSwganNCKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQy
LDcgKzE0Miw3IEBAIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yKEpTQ28KICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpTTG9jayBs
b2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOworICAgIEpT
VmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIEpTT2JqZWN0KiBqc0NvbnN0cnVj
dG9yID0gdG9KUyhjb25zdHJ1Y3Rvcik7CiAgICAgaWYgKCFqc0NvbnN0cnVjdG9yLT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTkxLDcgKzE5MSw3IEBAIEpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmco
SlNDb250ZXh0UmUKIGJvb2wgSlNWYWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY3R4LCBKU1Zh
bHVlUmVmIHZhbHVlKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBK
U1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0g
dG9KUyh2YWx1ZSk7CiAgICAgcmV0dXJuIGpzVmFsdWUtPnRvQm9vbGVhbihleGVjKTsKIH0KIApA
QCAtMjAxLDcgKzIwMSw3IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0
eCwKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwogICAgIEpT
TG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFsdWUpOwor
ICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogCiAgICAgZG91YmxlIG51bWJl
ciA9IGpzVmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewpAQCAtMjE5LDcgKzIxOSw3IEBAIEpTU3RyaW5nUmVmIEpTVmFsdWVUb1N0cmluZ0NvcHko
SlNDb250ZXgKICAgICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5yZWdpc3RlclRocmVhZCgpOwog
ICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlModmFs
dWUpOworICAgIEpTVmFsdWVQdHIganNWYWx1ZSA9IHRvSlModmFsdWUpOwogICAgIAogICAgIFJl
ZlB0cjxPcGFxdWVKU1N0cmluZz4gc3RyaW5nUmVmKE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoanNW
YWx1ZS0+dG9TdHJpbmcoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
QEAgLTIzNyw3ICsyMzcsNyBAQCBKU09iamVjdFJlZiBKU1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0
UmVmCiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhlYXAucmVnaXN0ZXJUaHJlYWQoKTsKICAgICBK
U0xvY2sgbG9jayhleGVjKTsKIAotICAgIEpTVmFsdWUqIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsK
KyAgICBKU1ZhbHVlUHRyIGpzVmFsdWUgPSB0b0pTKHZhbHVlKTsKICAgICAKICAgICBKU09iamVj
dFJlZiBvYmplY3RSZWYgPSB0b1JlZihqc1ZhbHVlLT50b09iamVjdChleGVjKSk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBKU1ZhbHVl
UHJvdGVjdChKU0NvbnRleHRSZWYgY3R4LCBKUwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5oZWFw
LnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKLSAgICBKU1ZhbHVl
KiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlID0gdG9KUyh2
YWx1ZSk7CiAgICAgZ2NQcm90ZWN0KGpzVmFsdWUpOwogfQogCkBAIC0yNjUsNiArMjY1LDYgQEAg
dm9pZCBKU1ZhbHVlVW5wcm90ZWN0KEpTQ29udGV4dFJlZiBjdHgsIAogICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5oZWFwLnJlZ2lzdGVyVGhyZWFkKCk7CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAK
LSAgICBKU1ZhbHVlKiBqc1ZhbHVlID0gdG9KUyh2YWx1ZSk7CisgICAgSlNWYWx1ZVB0ciBqc1Zh
bHVlID0gdG9KUyh2YWx1ZSk7CiAgICAgZ2NVbnByb3RlY3QoanNWYWx1ZSk7CiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBzdGF0aWMgVVN0cmluZyBlc2NhcGVRdW90ZXMoY29uc3QgVVN0cmluCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFVTdHJpbmcgdmFsdWVUb1NvdXJjZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbCkKK3N0YXRpYyBVU3RyaW5nIHZhbHVlVG9Tb3Vy
Y2VTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbCkKIHsKICAgICBpZiAodmFs
LT5pc1N0cmluZygpKSB7CiAgICAgICAgIFVTdHJpbmcgcmVzdWx0KCJcIiIpOwpAQCAtNzQsNyAr
NzQsNyBAQCBzdGF0aWMgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpCiAgICAgcmV0dXJuIChV
U3RyaW5nKCJyIikgKyBVU3RyaW5nOjpmcm9tKHIpKS5VVEY4U3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBDU3RyaW5nIGNvbnN0YW50TmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCBrLCBKU1ZhbHVlKiB2
YWx1ZSkKK3N0YXRpYyBDU3RyaW5nIGNvbnN0YW50TmFtZShFeGVjU3RhdGUqIGV4ZWMsIGludCBr
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIHJldHVybiAodmFsdWVUb1NvdXJjZVN0cmluZyhl
eGVjLCB2YWx1ZSkgKyAiKEBrIiArIFVTdHJpbmc6OmZyb20oaykgKyAiKSIpLlVURjhTdHJpbmco
KTsKIH0KQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUq
IGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogewog
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiBzY29wZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUqPigoKytpdCktPnUuanNDZWxsKTsKKyAg
ICAgICAgICAgIEpTVmFsdWVQdHIgc2NvcGUgPSBKU1ZhbHVlUHRyKCgrK2l0KS0+dS5qc0NlbGwp
OwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
cHJpbnRmKCJbJTRkXSByZXNvbHZlX2dsb2JhbFx0ICVzLCAlcywgJXNcbiIsIGxvY2F0aW9uLCBy
ZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHZhbHVlVG9Tb3VyY2VTdHJpbmcoZXhlYywgc2NvcGUp
LmFzY2lpKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuY19zdHIoKSk7CiAgICAg
ICAgICAgICBpdCArPSAyOwpAQCAtNzI1LDEzICs3MjUsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2ds
b2JhbF92YXI6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgSlNWYWx1ZSogc2NvcGUgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oKCsraXQpLT51
LmpzQ2VsbCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHNjb3BlID0gSlNWYWx1ZVB0cigoKytp
dCktPnUuanNDZWxsKTsKICAgICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBnZXRfZ2xvYmFsX3Zhclx0ICVzLCAlcywgJWRc
biIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHZhbHVlVG9Tb3VyY2VTdHJp
bmcoZXhlYywgc2NvcGUpLmFzY2lpKCksIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KCgrK2l0KS0+dS5qc0NlbGwpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciBzY29wZSA9IEpTVmFsdWVQdHIoKCsraXQpLT51LmpzQ2Vs
bCk7CiAgICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRmKCJbJTRk
XSBwdXRfZ2xvYmFsX3Zhclx0ICVzLCAlZCwgJXNcbiIsIGxvY2F0aW9uLCB2YWx1ZVRvU291cmNl
U3RyaW5nKGV4ZWMsIHNjb3BlKS5hc2NpaSgpLCBpbmRleCwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0
cigpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAzOTYw
MykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTIsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzICYmIGluZGV4IDwgbV9udW1WYXJzICsgbV9udW1Db25zdGFudHM7
CiAgICAgICAgIH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGdldENvbnN0YW50
KGludCBpbmRleCkKKyAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGdldENvbnN0YW50
KGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbaW5kZXggLSBtX251bVZhcnNdLmdldEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzg4
LDggKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBhZGRGdW5jdGlv
bihGdW5jRGVjbE5vZGUqIG4pIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1bnNpZ25l
ZCBzaXplID0gbV9yYXJlRGF0YS0+bV9mdW5jdGlvbnMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX2Z1
bmN0aW9ucy5hcHBlbmQobik7IHJldHVybiBzaXplOyB9CiAgICAgICAgIEZ1bmNEZWNsTm9kZSog
ZnVuY3Rpb24oaW50IGluZGV4KSBjb25zdCB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fZnVuY3Rpb25zW2luZGV4XS5nZXQoKTsgfQogCi0gICAgICAgIHVuc2lnbmVk
IGFkZFVuZXhwZWN0ZWRDb25zdGFudChKU1ZhbHVlKiB2KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50
cy5zaXplKCk7IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5hcHBlbmQodik7IHJl
dHVybiBzaXplOyB9Ci0gICAgICAgIEpTVmFsdWUqIHVuZXhwZWN0ZWRDb25zdGFudChpbnQgaW5k
ZXgpIGNvbnN0IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV91bmV4
cGVjdGVkQ29uc3RhbnRzW2luZGV4XTsgfQorICAgICAgICB1bnNpZ25lZCBhZGRVbmV4cGVjdGVk
Q29uc3RhbnQoSlNWYWx1ZVB0ciB2KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgdW5z
aWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5zaXplKCk7IG1f
cmFyZURhdGEtPm1fdW5leHBlY3RlZENvbnN0YW50cy5hcHBlbmQodik7IHJldHVybiBzaXplOyB9
CisgICAgICAgIEpTVmFsdWVQdHIgdW5leHBlY3RlZENvbnN0YW50KGludCBpbmRleCkgY29uc3Qg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3VuZXhwZWN0ZWRDb25z
dGFudHNbaW5kZXhdOyB9CiAKICAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCogcikg
eyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRh
LT5tX3JlZ2V4cHMuc2l6ZSgpOyBtX3JhcmVEYXRhLT5tX3JlZ2V4cHMuYXBwZW5kKHIpOyByZXR1
cm4gc2l6ZTsgfQogICAgICAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgQVNT
RVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9yZWdleHBzW2luZGV4XS5nZXQo
KTsgfQpAQCAtNDkzLDcgKzQ5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICAv
LyBSYXJlIENvbnN0YW50cwogICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxGdW5jRGVjbE5vZGU+
ID4gbV9mdW5jdGlvbnM7Ci0gICAgICAgICAgICBWZWN0b3I8SlNWYWx1ZSo+IG1fdW5leHBlY3Rl
ZENvbnN0YW50czsKKyAgICAgICAgICAgIFZlY3RvcjxKU1ZhbHVlUHRyPiBtX3VuZXhwZWN0ZWRD
b25zdGFudHM7CiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPFJlZ0V4cD4gPiBtX3JlZ2V4cHM7
CiAKICAgICAgICAgICAgIC8vIEp1bXAgVGFibGVzCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxDb2RlQ2FjaGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSkKKyAgICAgICAgUGFzc1JlZlB0cjxFdmFsTm9kZT4gZ2V0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgZXZhbFNvdXJjZSwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4sIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM5NjAz
KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzA1LDIyICs3MDUsMjIgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmFkZENvbnN0YW50KAogICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZENvbnN0YW50KEpTVmFsdWUqIHYp
CitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoSlNWYWx1ZVB0ciB2
KQogewotICAgIHBhaXI8SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fanNW
YWx1ZU1hcC5hZGQodiwgbV9uZXh0Q29uc3RhbnRJbmRleCk7CisgICAgcGFpcjxKU1ZhbHVlTWFw
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlUHRyOjpl
bmNvZGUodiksIG1fbmV4dENvbnN0YW50SW5kZXgpOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJlZ2lzdGVySUQmIGNvbnN0YW50ID0gbV9jYWxsZWVSZWdpc3RlcnNbbV9uZXh0
Q29uc3RhbnRJbmRleF07CiAgICAgICAgIAogICAgICAgICArK21fbmV4dENvbnN0YW50SW5kZXg7
CiAKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50UmVnaXN0ZXIodik7CisgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRDb25zdGFudFJlZ2lzdGVyKEpTVmFsdWVQdHIodikpOwogICAgICAg
ICByZXR1cm4gJmNvbnN0YW50OwogICAgIH0KIAogICAgIHJldHVybiAmcmVnaXN0ZXJGb3IocmVz
dWx0LmZpcnN0LT5zZWNvbmQpOwogfQogCi11bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6YWRk
VW5leHBlY3RlZENvbnN0YW50KEpTVmFsdWUqIHYpCit1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRv
cjo6YWRkVW5leHBlY3RlZENvbnN0YW50KEpTVmFsdWVQdHIgdikKIHsKICAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmFkZFVuZXhwZWN0ZWRDb25zdGFudCh2KTsKIH0KQEAgLTg2Nyw3ICs4NjcsNyBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoCiAgICAgLy8gTGF0ZXIg
d2UgY2FuIGRvIHRoZSBleHRyYSB3b3JrIHRvIGhhbmRsZSB0aGF0IGxpa2UgdGhlIG90aGVyIGNh
c2VzLgogICAgIGlmIChudW1iZXIgPT0gSGFzaFRyYWl0czxkb3VibGU+OjplbXB0eVZhbHVlKCkg
fHwgSGFzaFRyYWl0czxkb3VibGU+Ojppc0RlbGV0ZWRWYWx1ZShudW1iZXIpKQogICAgICAgICBy
ZXR1cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihnbG9iYWxEYXRhKCksIG51bWJlcikpOwotICAg
IEpTVmFsdWUqJiB2YWx1ZUluTWFwID0gbV9udW1iZXJNYXAuYWRkKG51bWJlciwgbm9WYWx1ZSgp
KS5maXJzdC0+c2Vjb25kOworICAgIEpTVmFsdWVQdHIgdmFsdWVJbk1hcCA9IG1fbnVtYmVyTWFw
LmFkZChudW1iZXIsIG5vVmFsdWUoKSkuZmlyc3QtPnNlY29uZDsKICAgICBpZiAoIXZhbHVlSW5N
YXApCiAgICAgICAgIHZhbHVlSW5NYXAgPSBqc051bWJlcihnbG9iYWxEYXRhKCksIG51bWJlcik7
CiAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWVJbk1hcCk7CkBAIC04NzUsMTMgKzg3NSwx
MyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoCiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNTdHJpbmcqJiB2YWx1ZUluTWFwID0gbV9z
dHJpbmdNYXAuYWRkKGlkZW50aWZpZXIudXN0cmluZygpLnJlcCgpLCAwKS5maXJzdC0+c2Vjb25k
OworICAgIEpTVmFsdWVQdHIgdmFsdWVJbk1hcCA9IG1fc3RyaW5nTWFwLmFkZChpZGVudGlmaWVy
LnVzdHJpbmcoKS5yZXAoKSwgMCkuZmlyc3QtPnNlY29uZDsKICAgICBpZiAoIXZhbHVlSW5NYXAp
CiAgICAgICAgIHZhbHVlSW5NYXAgPSBqc093bmVkU3RyaW5nKGdsb2JhbERhdGEoKSwgaWRlbnRp
Zmllci51c3RyaW5nKCkpOwogICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHZhbHVlSW5NYXApOwog
fQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCog
ZHN0LCBKU1ZhbHVlKiB2KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2Fk
KFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZVB0ciB2KQogewogICAgIFJlZ2lzdGVySUQqIGNvbnN0
YW50SUQgPSBhZGRDb25zdGFudCh2KTsKICAgICBpZiAoZHN0KQpAQCAtODg5LDEyICs4ODksNiBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoCiAgICAgcmV0dXJuIGNv
bnN0YW50SUQ7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChS
ZWdpc3RlcklEKiBkc3QsIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGNl
bGw7Ci0gICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgdmFsdWUpOwotfQotCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuZXhwZWN0ZWRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgYm9v
bCBiKQogewogICAgIGVtaXRPcGNvZGUob3BfdW5leHBlY3RlZF9sb2FkKTsKQEAgLTEwMTcsNyAr
MTAxMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICAgICBy
ZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFNj
b3BlZFZhcihSZWdpc3RlcklEKiBkc3QsIHNpemVfdCBkZXB0aCwgaW50IGluZGV4LCBKU1ZhbHVl
KiBnbG9iYWxPYmplY3QpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFNj
b3BlZFZhcihSZWdpc3RlcklEKiBkc3QsIHNpemVfdCBkZXB0aCwgaW50IGluZGV4LCBKU1ZhbHVl
UHRyIGdsb2JhbE9iamVjdCkKIHsKICAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGVt
aXRPcGNvZGUob3BfZ2V0X2dsb2JhbF92YXIpOwpAQCAtMTAzNCw3ICsxMDI4LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTYwogICAgIHJldHVybiBkc3Q7CiB9CiAK
LVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U2NvcGVkVmFyKHNpemVfdCBk
ZXB0aCwgaW50IGluZGV4LCBSZWdpc3RlcklEKiB2YWx1ZSwgSlNWYWx1ZSogZ2xvYmFsT2JqZWN0
KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTY29wZWRWYXIoc2l6ZV90
IGRlcHRoLCBpbnQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbHVlLCBKU1ZhbHVlUHRyIGdsb2JhbE9i
amVjdCkKIHsKICAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
cHV0X2dsb2JhbF92YXIpOwpAQCAtMTYwMiw3ICsxNTk2LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDYXRjaAogICAgIHJldHVybiB0YXJnZXRSZWdpc3RlcjsKIH0KIAot
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdFcnJvcihSZWdpc3RlcklEKiBk
c3QsIEVycm9yVHlwZSB0eXBlLCBKU1ZhbHVlKiBtZXNzYWdlKQorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXROZXdFcnJvcihSZWdpc3RlcklEKiBkc3QsIEVycm9yVHlwZSB0eXBl
LCBKU1ZhbHVlUHRyIG1lc3NhZ2UpCiB7CiAgICAgZW1pdE9wY29kZShvcF9uZXdfZXJyb3IpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM5
NjAzKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MCw4ICsyNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKik7
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNDZWxsKik7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZVB0
cik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmV4cGVjdGVkTG9hZChSZWdpc3RlcklEKiBk
c3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5leHBlY3RlZExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBkb3VibGUpOwogCkBAIC0yNzAsOCArMjY5LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJbihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHByb3BlcnR5LCBSZWdpc3RlcklEKiBiYXNlKSB7IHJldHVybiBlbWl0QmluYXJ5T3Aob3BfaW4s
IGRzdCwgcHJvcGVydHksIGJhc2UsIE9wZXJhbmRUeXBlcygpKTsgfQogCiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHkpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0U2NvcGVkVmFyKFJlZ2lzdGVySUQq
IGRzdCwgc2l6ZV90IHNraXAsIGludCBpbmRleCwgSlNWYWx1ZSogZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFNjb3BlZFZhcihzaXplX3Qgc2tpcCwgaW50IGluZGV4
LCBSZWdpc3RlcklEKiB2YWx1ZSwgSlNWYWx1ZSogZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldFNjb3BlZFZhcihSZWdpc3RlcklEKiBkc3QsIHNpemVfdCBza2lwLCBp
bnQgaW5kZXgsIEpTVmFsdWVQdHIgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdFB1dFNjb3BlZFZhcihzaXplX3Qgc2tpcCwgaW50IGluZGV4LCBSZWdpc3RlcklEKiB2YWx1
ZSwgSlNWYWx1ZVB0ciBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRS
ZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29sdmVXaXRoQmFzZShSZWdpc3RlcklEKiBiYXNl
RHN0LCBSZWdpc3RlcklEKiBwcm9wRHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7CkBA
IC0zMDksNyArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdENhdGNoKFJlZ2lzdGVySUQqLCBMYWJlbCogc3RhcnQsIExhYmVsKiBlbmQpOwogICAgICAg
ICB2b2lkIGVtaXRUaHJvdyhSZWdpc3RlcklEKiBleGMpIHsgZW1pdFVuYXJ5Tm9Ec3RPcChvcF90
aHJvdywgZXhjKTsgfQotICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RXJyb3IoUmVnaXN0ZXJJ
RCogZHN0LCBFcnJvclR5cGUgdHlwZSwgSlNWYWx1ZSogbWVzc2FnZSk7CisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXROZXdFcnJvcihSZWdpc3RlcklEKiBkc3QsIEVycm9yVHlwZSB0eXBlLCBKU1Zh
bHVlUHRyIG1lc3NhZ2UpOwogICAgICAgICB2b2lkIGVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpOwogCiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRQdXNoU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUpOwpAQCAtMzM5
LDEyICszMzgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxMYWJl
bD4gZW1pdENvbXBsZXhKdW1wU2NvcGVzKExhYmVsKiB0YXJnZXQsIENvbnRyb2xGbG93Q29udGV4
dCogdG9wU2NvcGUsIENvbnRyb2xGbG93Q29udGV4dCogYm90dG9tU2NvcGUpOwogCi0gICAgICAg
IHN0cnVjdCBKU1ZhbHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8SlNWYWx1ZSo+IHsKLSAgICAg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShKU1ZhbHVlKiYgc2xvdCkg
eyBzbG90ID0gSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpOyB9Ci0gICAgICAgICAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpOyB9CisgICAgICAgIHN0cnVjdCBKU1Zh
bHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPiB7Cisg
ICAgICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqJiBzbG90KSB7IHNsb3QgPSBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlh
dGU6OmltcG9zc2libGVWYWx1ZSgpKTsgfQorICAgICAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxl
dGVkVmFsdWUoSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9
PSBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKTsgfQog
ICAgICAgICB9OwogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU1ZhbHVlKiwgdW5zaWduZWQs
IFB0ckhhc2g8SlNWYWx1ZSo+LCBKU1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiwgdW5zaWduZWQsIFB0
ckhhc2g8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPiwgSlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFs
dWVNYXA7CiAKICAgICAgICAgc3RydWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgewog
ICAgICAgICAgICAgdHlwZWRlZiBpbnQgVHJhaXRUeXBlOwpAQCAtMzU2LDcgKzM1NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9OwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8VVN0cmluZzo6UmVwPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8VVN0cmluZzo6UmVwPiA+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBJZGVudGlm
aWVyTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlKj4gTnVtYmVy
TWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlUHRyPiBOdW1iZXJN
YXA7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxVU3RyaW5nOjpSZXAqLCBKU1N0cmluZyosIElk
ZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5nTWFwOwogCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMs
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKQEAgLTQwNiw4ICs0
MDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoRnVu
Y0RlY2xOb2RlKik7CiAgICAgICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEZ1bmNFeHByTm9kZSop
OwogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGFkZENvbnN0YW50KEpTVmFsdWUqKTsKLSAgICAgICAgdW5zaWduZWQg
YWRkVW5leHBlY3RlZENvbnN0YW50KEpTVmFsdWUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYWRk
Q29uc3RhbnQoSlNWYWx1ZVB0cik7CisgICAgICAgIHVuc2lnbmVkIGFkZFVuZXhwZWN0ZWRDb25z
dGFudChKU1ZhbHVlUHRyKTsKICAgICAgICAgdW5zaWduZWQgYWRkUmVnRXhwKFJlZ0V4cCopOwog
CiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgSlNPYmplY3QqIERlYnVnZ2VyQ2FsbEZyYW1lOjp0aGlzT2JqZWN0KAog
ICAgIHJldHVybiBhc09iamVjdChtX2NhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogfQogCi1KU1Zh
bHVlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc2NyaXB0LCBK
U1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25zdAorSlNWYWx1ZVB0ciBEZWJ1Z2dlckNhbGxGcmFtZTo6
ZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlUHRyJiBleGNlcHRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVy
biBub1ZhbHVlKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgRGVidWdnZXJDYWxsRnJh
bWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIGV4Y2VwdGlvbikKKyAgICAgICAgRGVi
dWdnZXJDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgZXhjZXB0aW9u
KQogICAgICAgICAgICAgOiBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICAgICAsIG1f
ZXhjZXB0aW9uKGV4Y2VwdGlvbikKICAgICAgICAgewpAQCAtNTQsMTIgKzU0LDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBjb25zdCBVU3RyaW5nKiBmdW5jdGlvbk5hbWUoKSBjb25zdDsK
ICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
KCkgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmLCBKU1Zh
bHVlKiYgZXhjZXB0aW9uKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9leGNlcHRpb247IH0KKyAgICAgICAgSlNWYWx1ZVB0ciBldmFsdWF0ZShj
b25zdCBVU3RyaW5nJiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgSlNW
YWx1ZVB0ciBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKLSAgICAgICAgSlNWYWx1
ZSogbV9leGNlcHRpb247CisgICAgICAgIEpTVmFsdWVQdHIgbV9leGNlcHRpb247CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotSlNWYWx1ZSogQ2FsbEZyYW1lOjp0aGlzVmFsdWUoKQorSlNWYWx1ZVB0
ciBDYWxsRnJhbWU6OnRoaXNWYWx1ZSgpCiB7CiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2NrKCkt
PnRoaXNSZWdpc3RlcigpXS5qc1ZhbHVlKHRoaXMpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIHRoaXNbUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2so
KTsgfQogICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJu
IHRoaXNbUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluXS5SZWdpc3Rlcjo6c2NvcGVDaGFpbigpOyB9
CiAKLSAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlKCk7CiAKICAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24g
YmVnYW4uCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCk7CkBA
IC03MywxMSArNzMsMTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBwb2ludGVyLCBz
byB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkgaW4g
bmV3IGNvZGUuCiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBwbGFjZXMgaW4g
bGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUgc29vbi4KIAot
ICAgICAgICB2b2lkIHNldEV4Y2VwdGlvbihKU1ZhbHVlKiBleGNlcHRpb24pIHsgZ2xvYmFsRGF0
YSgpLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsgfQorICAgICAgICB2b2lkIHNldEV4Y2VwdGlvbihK
U1ZhbHVlUHRyIGV4Y2VwdGlvbikgeyBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gZXhjZXB0aW9u
OyB9CiAgICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IGdsb2JhbERhdGEoKS5leGNlcHRp
b24gPSBub1ZhbHVlKCk7IH0KLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZ2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQotICAgICAgICBKU1ZhbHVlKiogZXhjZXB0
aW9uU2xvdCgpIHsgcmV0dXJuICZnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9Ci0gICAgICAgIGJv
b2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISFnbG9iYWxEYXRhKCkuZXhjZXB0aW9u
OyB9CisgICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFs
RGF0YSgpLmV4Y2VwdGlvbjsgfQorICAgICAgICBKU1ZhbHVlUHRyKiBleGNlcHRpb25TbG90KCkg
eyByZXR1cm4gJmdsb2JhbERhdGEoKS5leGNlcHRpb247IH0KKyAgICAgICAgYm9vbCBoYWRFeGNl
cHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhjZXB0aW9uOyB9CiAKICAgICAg
ICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0KICAgICAgICAgY29uc3QgQXJnTGlzdCYg
ZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKmdsb2JhbERhdGEoKS5lbXB0eUxpc3Q7IH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIGludCBkZXB0aChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgUwogCiAvLyBGSVhNRTogVGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIGNh
bGxlZCAiZ2V0TnVtYmVyIiwgbm90ICJpc051bWJlciIgKGFzIGl0IGlzIGluIEpTVmFsdWUuaCku
CiAvLyBGSVhNRTogVGhlcmUncyBubyBuZWVkIHRvIGhhdmUgYSAic2xvdyIgdmVyc2lvbiBvZiB0
aGlzLiBBbGwgdmVyc2lvbnMgc2hvdWxkIGJlIGZhc3QuCi1zdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGZhc3RJc051bWJlcihKU1ZhbHVlKiB2YWx1ZSwgZG91YmxlJiBhcmcpCitzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGZhc3RJc051bWJlcihKU1ZhbHVlUHRyIHZhbHVlLCBkb3VibGUmIGFy
ZykKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSkKICAgICAgICAgYXJn
ID0gSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbHVlKTsKQEAgLTExOCw4ICsxMTgs
OCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RJc051bWJlcihKCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIEZJWE1FOiBXaHkgZG9lc24ndCBKU1ZhbHVlKjo6dG9JbnQzMiBoYXZl
IHRoZSBIZWFwOjppc051bWJlciBvcHRpbWl6YXRpb24/Ci1zdGF0aWMgYm9vbCBmYXN0VG9JbnQz
MihKU1ZhbHVlKiB2YWx1ZSwgaW50MzJfdCYgYXJnKQorLy8gRklYTUU6IFdoeSBkb2Vzbid0IEpT
VmFsdWVQdHI6OnRvSW50MzIgaGF2ZSB0aGUgSGVhcDo6aXNOdW1iZXIgb3B0aW1pemF0aW9uPwor
c3RhdGljIGJvb2wgZmFzdFRvSW50MzIoSlNWYWx1ZVB0ciB2YWx1ZSwgaW50MzJfdCYgYXJnKQog
ewogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpKQogICAgICAgICBhcmcgPSBK
U0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsdWUpOwpAQCAtMTMwLDcgKzEzMCw3IEBA
IHN0YXRpYyBib29sIGZhc3RUb0ludDMyKEpTVmFsdWUqIHZhbHVlLCAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBmYXN0VG9VSW50MzIoSlNWYWx1ZSog
dmFsdWUsIHVpbnQzMl90JiBhcmcpCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGZhc3RUb1VJ
bnQzMihKU1ZhbHVlUHRyIHZhbHVlLCB1aW50MzJfdCYgYXJnKQogewogICAgIGlmIChKU0ltbWVk
aWF0ZTo6aXNOdW1iZXIodmFsdWUpKSB7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Z2V0VHJ1
bmNhdGVkVUludDMyKHZhbHVlLCBhcmcpKQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgZmFzdFRvVUludDMyKEoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIGpzTGVzcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEs
IEpTVmFsdWUqIHYyKQorc3RhdGljIGlubGluZSBib29sIGpzTGVzcyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICBpZiAoSlNJbW1lZGlh
dGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCiAgICAgICAgIHJldHVybiBKU0lt
bWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodjEpIDwgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRl
ZEludDMyKHYyKTsKQEAgLTE1OSw4ICsxNTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wganNMZXNz
KENhbGxGcmFtZSogY2FsCiAgICAgaWYgKGludGVycHJldGVyLT5pc0pTU3RyaW5nKHYxKSAmJiBp
bnRlcnByZXRlci0+aXNKU1N0cmluZyh2MikpCiAgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSkt
PnZhbHVlKCkgPCBhc1N0cmluZyh2MiktPnZhbHVlKCk7CiAKLSAgICBKU1ZhbHVlKiBwMTsKLSAg
ICBKU1ZhbHVlKiBwMjsKKyAgICBKU1ZhbHVlUHRyIHAxOworICAgIEpTVmFsdWVQdHIgcDI7CiAg
ICAgYm9vbCB3YXNOb3RTdHJpbmcxID0gdjEtPmdldFByaW1pdGl2ZU51bWJlcihjYWxsRnJhbWUs
IG4xLCBwMSk7CiAgICAgYm9vbCB3YXNOb3RTdHJpbmcyID0gdjItPmdldFByaW1pdGl2ZU51bWJl
cihjYWxsRnJhbWUsIG4yLCBwMik7CiAKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wganNMZXNzKENhbGxGcmFtZSogY2FsCiAgICAgcmV0dXJuIGFzU3RyaW5nKHAxKS0+dmFs
dWUoKSA8IGFzU3RyaW5nKHAyKS0+dmFsdWUoKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGpz
TGVzc0VxKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitz
dGF0aWMgaW5saW5lIGJvb2wganNMZXNzRXEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQ
dHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1t
ZWRpYXRlTnVtYmVycyh2MSwgdjIpKQogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmdldFRy
dW5jYXRlZEludDMyKHYxKSA8PSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodjIpOwpA
QCAtMTg0LDggKzE4NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUq
IGMKICAgICBpZiAoaW50ZXJwcmV0ZXItPmlzSlNTdHJpbmcodjEpICYmIGludGVycHJldGVyLT5p
c0pTU3RyaW5nKHYyKSkKICAgICAgICAgcmV0dXJuICEoYXNTdHJpbmcodjIpLT52YWx1ZSgpIDwg
YXNTdHJpbmcodjEpLT52YWx1ZSgpKTsKIAotICAgIEpTVmFsdWUqIHAxOwotICAgIEpTVmFsdWUq
IHAyOworICAgIEpTVmFsdWVQdHIgcDE7CisgICAgSlNWYWx1ZVB0ciBwMjsKICAgICBib29sIHdh
c05vdFN0cmluZzEgPSB2MS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGNhbGxGcmFtZSwgbjEsIHAxKTsK
ICAgICBib29sIHdhc05vdFN0cmluZzIgPSB2Mi0+Z2V0UHJpbWl0aXZlTnVtYmVyKGNhbGxGcmFt
ZSwgbjIsIHAyKTsKIApAQCAtMTk1LDExICsxOTUsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGpz
TGVzc0VxKENhbGxGcmFtZSogYwogICAgIHJldHVybiAhKGFzU3RyaW5nKHAyKS0+dmFsdWUoKSA8
IGFzU3RyaW5nKHAxKS0+dmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1
ZSoganNBZGRTbG93Q2FzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSogdjEsIEpTVmFs
dWUqIHYyKQorc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlUHRyIGpzQWRkU2xvd0Nhc2UoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAg
Ly8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAg
ICBKU1ZhbHVlKiBwMSA9IHYxLT50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIEpTVmFsdWUq
IHAyID0gdjItPnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciBwMSA9IHYx
LT50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIgcDIgPSB2Mi0+dG9Qcmlt
aXRpdmUoY2FsbEZyYW1lKTsKIAogICAgIGlmIChwMS0+aXNTdHJpbmcoKSB8fCBwMi0+aXNTdHJp
bmcoKSkgewogICAgICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRl
KHAxLT50b1N0cmluZyhjYWxsRnJhbWUpLnJlcCgpLCBwMi0+dG9TdHJpbmcoY2FsbEZyYW1lKS5y
ZXAoKSk7CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBKU1ZhbHVlKiBq
c0FkZFNsb3dDYQogLy8gICAgMTM5NjIgICBBZGQgY2FzZTogNSAzCiAvLyAgICA0MDAwICAgIEFk
ZCBjYXNlOiAzIDUKIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNBZGQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWVQdHIganNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIg
djEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgZG91YmxlIGxlZnQ7CiAgICAgZG91YmxlIHJpZ2h0
ID0gMC4wOwpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IGpzQWRkKENhbGwKICAgICByZXR1cm4ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBqc1R5cGVTdHJpbmdGb3JWYWx1ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSogdikKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzVHlwZVN0cmluZ0ZvclZh
bHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYgKHYtPmlz
VW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1l
LCAidW5kZWZpbmVkIik7CkBAIC0yNzMsNyArMjczLDcgQEAgc3RhdGljIEpTVmFsdWUqIGpzVHlw
ZVN0cmluZ0ZvclZhbHVlKENhbAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoY2FsbEZy
YW1lLCAib2JqZWN0Iik7CiB9CiAKLXN0YXRpYyBib29sIGpzSXNPYmplY3RUeXBlKEpTVmFsdWUq
IHYpCitzdGF0aWMgYm9vbCBqc0lzT2JqZWN0VHlwZShKU1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYg
KEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSkKICAgICAgICAgcmV0dXJuIHYtPmlzTnVsbCgp
OwpAQCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyBib29sIGpzSXNPYmplY3RUeXBlKEpTVmFsdWUq
IHYpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5cGUo
SlNWYWx1ZSogdikKK3N0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZVB0ciB2KQog
ewogICAgIGlmICh2LT5pc09iamVjdCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpA
QCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyBib29sIGpzSXNGdW5jdGlvblR5cGUoSlNWYWx1ZSog
dikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIEludGVycHJldGVy
OjpyZXNvbHZlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVl
KiYgZXhjZXB0aW9uVmFsdWUpCitORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZVB0ciYgZXhj
ZXB0aW9uVmFsdWUpCiB7CiAgICAgaW50IGRzdCA9ICh2UEMgKyAxKS0+dS5vcGVyYW5kOwogICAg
IGludCBwcm9wZXJ0eSA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwpAQCAtMzE3LDExICszMTcsMTEg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJlc29sdmUoQwogICAgICAgICBKU09i
amVjdCogbyA9ICppdGVyOwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAg
aWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsK
KyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUs
IGlkZW50KTsKICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuZXhjZXB0aW9uOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVz
dWx0OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKCsraXRlciAh
PSBlbmQpOwpAQCAtMzI5LDcgKzMyOSw3IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVy
OjpyZXNvbHZlKEMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lOTElORSBib29sIElu
dGVycHJldGVyOjpyZXNvbHZlU2tpcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24q
IHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJw
cmV0ZXI6OnJlc29sdmVTa2lwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBD
LCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKQEAgLTM1MCwxMSArMzUwLDExIEBAIE5FVkVS
X0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlU2sKICAgICAgICAgSlNPYmplY3QqIG8g
PSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qobyk7CiAgICAgICAgIGlmIChvLT5n
ZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAg
ICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7
CiAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbjsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihyZXN1bHQpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsK
QEAgLTM2Miw3ICszNjIsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2
ZVNrCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRl
cjo6cmVzb2x2ZUdsb2JhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdHJ1Y3Rpb24qIHZQQywg
SlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6
OnJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpT
VmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGludCBkc3QgPSAodlBDICsgMSktPnUu
b3BlcmFuZDsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNHbG9iYWxPYmplY3QqPigodlBDICsgMiktPnUuanNDZWxsKTsKQEAgLTM3Miw3ICszNzIsNyBA
QCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVzb2x2ZUdsCiAgICAgaW50IG9mZnNl
dCA9ICh2UEMgKyA1KS0+dS5vcGVyYW5kOwogCiAgICAgaWYgKHN0cnVjdHVyZSA9PSBnbG9iYWxP
YmplY3QtPnN0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGNhbGxGcmFtZVtkc3RdID0gZ2xvYmFsT2Jq
ZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBK
U1ZhbHVlUHRyKGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTM4MCwyMSArMzgwLDIxIEBAIE5FVkVSX0lOTElO
RSBib29sIEludGVycHJldGVyOjpyZXNvbHZlR2wKICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xv
YmFsT2JqZWN0KTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZy
YW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRW
YWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90
LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZSgpICYmICFnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAg
ICAgICAgICAgaWYgKHZQQ1s0XS51LnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICB2UENbNF0u
dS5zdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0cnVjdHVy
ZSgpLT5yZWYoKTsKICAgICAgICAgICAgIHZQQ1s0XSA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJl
KCk7CiAgICAgICAgICAgICB2UENbNV0gPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAg
ICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTVmFsdWVQdHIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNl
cHRpb247CiAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CisgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gSlNWYWx1ZVB0cihyZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTQwMiw3ICs0MDIsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6cmVz
b2x2ZUdsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlKiBpbmxpbmVSZXNvbHZlQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSWRlbnRpZmllciYg
cHJvcGVydHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQorc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZVB0ciBpbmxpbmVSZXNvbHZlQmFzZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSWRl
bnRpZmllciYgcHJvcGVydHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogewogICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKICAgICBTY29wZUNo
YWluSXRlcmF0b3IgbmV4dCA9IGl0ZXI7CkBAIC00MjksMTAgKzQyOSwxMCBAQCBORVZFUl9JTkxJ
TkUgdm9pZCBJbnRlcnByZXRlcjo6cmVzb2x2ZUJhCiB7CiAgICAgaW50IGRzdCA9ICh2UEMgKyAx
KS0+dS5vcGVyYW5kOwogICAgIGludCBwcm9wZXJ0eSA9ICh2UEMgKyAyKS0+dS5vcGVyYW5kOwot
ICAgIGNhbGxGcmFtZVtkc3RdID0gaW5saW5lUmVzb2x2ZUJhc2UoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHByb3BlcnR5KSwgY2FsbEZyYW1lLT5zY29wZUNo
YWluKCkpOworICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihpbmxpbmVSZXNvbHZlQmFz
ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkp
LCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKSkpOwogfQogCi1ORVZFUl9JTkxJTkUgYm9vbCBJbnRl
cnByZXRlcjo6cmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5z
dHJ1Y3Rpb24qIHZQQywgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIGJv
b2wgSW50ZXJwcmV0ZXI6OnJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogewogICAg
IGludCBiYXNlRHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IHByb3BEc3QgPSAo
dlBDICsgMiktPnUub3BlcmFuZDsKQEAgLTQ1MywxMiArNDUzLDEyIEBAIE5FVkVSX0lOTElORSBi
b29sIEludGVycHJldGVyOjpyZXNvbHZlQmEKICAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKICAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5
U2xvdChjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAg
ICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uOwog
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtwcm9wRHN0XSA9IHJlc3VsdDsKLSAgICAgICAg
ICAgIGNhbGxGcmFtZVtiYXNlRHN0XSA9IGJhc2U7CisgICAgICAgICAgICBjYWxsRnJhbWVbcHJv
cERzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbYmFzZURz
dF0gPSBKU1ZhbHVlUHRyKGJhc2UpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgKytpdGVyOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIE5FVkVSX0lOTElORSBib29s
IEludGVycHJldGVyOjpyZXNvbHZlQmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5FVkVSX0lO
TElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmFzZUFuZEZ1bmMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK05FVkVS
X0lOTElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmFzZUFuZEZ1bmMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQog
ewogICAgIGludCBiYXNlRHN0ID0gKHZQQyArIDEpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGZ1bmNE
c3QgPSAodlBDICsgMiktPnUub3BlcmFuZDsKQEAgLTQ5NywxMyArNDk3LDEzIEBAIE5FVkVSX0lO
TElORSBib29sIEludGVycHJldGVyOjpyZXNvbHZlQmEKICAgICAgICAgICAgIC8vIHRoYXQgaW4g
aG9zdCBvYmplY3RzIHlvdSBhbHdheXMgZ2V0IGEgdmFsaWQgb2JqZWN0IGZvciB0aGlzLgogICAg
ICAgICAgICAgLy8gV2UgYWxzbyBoYW5kbGUgd3JhcHBlciBzdWJzdGl0dXRpb24gZm9yIHRoZSBn
bG9iYWwgb2JqZWN0IGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgICAgICBKU09iamVjdCogdGhp
c09iaiA9IGJhc2UtPnRvVGhpc09iamVjdChjYWxsRnJhbWUpOwotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAg
ICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uOwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgY2FsbEZyYW1lW2Jhc2VEc3RdID0gdGhpc09iajsK
LSAgICAgICAgICAgIGNhbGxGcmFtZVtmdW5jRHN0XSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNh
bGxGcmFtZVtiYXNlRHN0XSA9IEpTVmFsdWVQdHIodGhpc09iaik7CisgICAgICAgICAgICBjYWxs
RnJhbWVbZnVuY0RzdF0gPSBKU1ZhbHVlUHRyKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICArK2l0ZXI7CkBAIC01NTAsNyArNTUwLDcgQEAgQUxX
QVlTX0lOTElORSBDYWxsRnJhbWUqIEludGVycHJldGVyOjpzbAogICAgIHJldHVybiBDYWxsRnJh
bWU6OmNyZWF0ZShyKTsKIH0KIAotc3RhdGljIE5FVkVSX0lOTElORSBib29sIGlzTm90T2JqZWN0
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBib29sIGZvckluc3RhbmNlT2YsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiB2YWx1ZSwgSlNWYWx1ZSom
IGV4Y2VwdGlvbkRhdGEpCitzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGJvb2wgZm9ySW5zdGFuY2VPZiwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHIgdmFsdWUsIEpTVmFsdWVQdHIm
IGV4Y2VwdGlvbkRhdGEpCiB7CiAgICAgaWYgKHZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC01NTgsMTIgKzU1OCwxMiBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJv
b2wgaXNOb3RPYmplY3QoQ2FsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6Y2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lz
dGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MsIGludCByZWdp
c3Rlck9mZnNldCwgSlNWYWx1ZSomIGV4Y2VwdGlvblZhbHVlKQorTkVWRVJfSU5MSU5FIEpTVmFs
dWVQdHIgSW50ZXJwcmV0ZXI6OmNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3Rl
ckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIGFyZ3YsIGludCBhcmdjLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIEpTVmFsdWVQdHImIGV4Y2VwdGlvblZhbHVlKQogewogICAgIGlmIChhcmdjIDwg
MikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU1ZhbHVlKiBwcm9ncmFt
ID0gYXJndlsxXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciBwcm9ncmFtID0g
YXJndlsxXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICBpZiAoIXByb2dyYW0tPmlzU3RyaW5n
KCkpCiAgICAgICAgIHJldHVybiBwcm9ncmFtOwpAQCAtNTc0LDcgKzU3NCw3IEBAIE5FVkVSX0lO
TElORSBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y2FsbEUKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9k
ZSA9IGNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldChjYWxsRnJhbWUsIHByb2dyYW1Tb3Vy
Y2UsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvblZhbHVlKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGlmIChldmFsTm9kZSkKICAgICAgICAgcmVzdWx0ID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksIGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFtZSksIGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKCkgLSByZWdpc3RlckZpbGUtPnN0YXJ0KCkgKyByZWdpc3Rlck9mZnNldCwgc2NvcGVD
aGFpbiwgJmV4Y2VwdGlvblZhbHVlKTsKIApAQCAtNzI4LDcgKzcyOCw3IEBAIGJvb2wgSW50ZXJw
cmV0ZXI6OmlzT3Bjb2RlKE9wY29kZSBvcGNvZGUKICNlbmRpZgogfQogCi1ORVZFUl9JTkxJTkUg
Ym9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
SlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJs
b2NrKiYgY29kZUJsb2NrKQorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENh
bGxGcmFtZShDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWVQdHIgZXhjZXB0aW9uVmFsdWUs
IHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYgY29kZUJsb2NrKQogewogICAg
IENvZGVCbG9jayogb2xkQ29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CkBAIC03NzEsNyArNzcxLDcg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVud2luZENhbAogICAgIHJldHVybiB0
cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0aHJvd0V4
Y2VwdGlvbihDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wgZXhwbGljaXRUaHJvdykKK05FVkVSX0lOTElO
RSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0LCBib29sIGV4cGxpY2l0VGhyb3cpCiB7CiAgICAgLy8gU2V0IHVwIHRoZSBleGNlcHRpb24g
b2JqZWN0CiAKQEAgLTg1NSw3ICs4NTUsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIElu
dGVycHJldGVyOjp0CiAgICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1
ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5v
ZGUqIHByb2dyYW1Ob2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4sIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pCiB7CiAg
ICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24pOwogCkBAIC04ODAs
NyArODgwLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbU5vZAogICAg
IGdsb2JhbE9iamVjdC0+Y29weUdsb2JhbHNUbyhtX3JlZ2lzdGVyRmlsZSk7CiAKICAgICBDYWxs
RnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIGNvZGVCbG9j
ay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
LSAgICBuZXdDYWxsRnJhbWVbY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKV0gPSB0aGlzT2JqOwor
ICAgIG5ld0NhbGxGcmFtZVtjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpXSA9IEpTVmFsdWVQdHIo
dGhpc09iaik7CiAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFp
biwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAwLCAwLCAwKTsKIAogICAgIGlmIChjb2RlQmxvY2st
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKQEAgLTg5MCw3ICs4OTAsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtTm9kCiAgICAgaWYgKCpwcm9maWxlcikKICAgICAgICAg
KCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgcHJvZ3JhbU5vZGUtPnNvdXJj
ZVVSTCgpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCkpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxs
UmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyKTsKIApAQCAtOTE2LDcgKzkxNiw3IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1Ob2QKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiBmdW5j
dGlvbkJvZHlOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24s
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
QXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWVQdHIqIGV4
Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlv
bik7CiAKQEAgLTkzNyw3ICs5MzcsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShG
dW5jdGlvbkJvCiAKICAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3Jl
YXRlKG9sZEVuZCk7CiAgICAgc2l6ZV90IGRzdCA9IDA7Ci0gICAgbmV3Q2FsbEZyYW1lWzBdID0g
dGhpc09iajsKKyAgICBuZXdDYWxsRnJhbWVbMF0gPSBKU1ZhbHVlUHRyKHRoaXNPYmopOwogICAg
IEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7CiAgICAgZm9yIChBcmdM
aXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICBuZXdDYWxsRnJhbWVbKytkc3RdID0gKml0OwpAQCAtOTU2LDcgKzk1Niw3IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uQm8KICAgICBpZiAoKnByb2ZpbGVy
KQogICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBmdW5jdGlv
bik7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAgICAg
ewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIp
OwogCkBAIC05NzgsMTIgKzk3OCwxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShG
dW5jdGlvbkJvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmpl
Y3QqIHRoaXNPYmosIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0
aW9uKQorSlNWYWx1ZVB0ciBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4sIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbikKIHsKICAgICByZXR1cm4gZXhlY3V0
ZShldmFsTm9kZSwgY2FsbEZyYW1lLCB0aGlzT2JqLCBtX3JlZ2lzdGVyRmlsZS5zaXplKCkgKyBl
dmFsTm9kZS0+Ynl0ZWNvZGUoc2NvcGVDaGFpbikubV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBzY29wZUNoYWluLCBleGNlcHRpb24pOwogfQogCi1K
U1ZhbHVlKiBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK0pTVmFs
dWVQdHIgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmosIGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCwg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbikKIHsKICAg
ICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlvbik7CiAKQEAgLTEwMzgs
NyArMTAzOCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxOb2RlKiAKICAg
ICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG1fcmVnaXN0ZXJG
aWxlLnN0YXJ0KCkgKyBnbG9iYWxSZWdpc3Rlck9mZnNldCk7CiAKICAgICAvLyBhIDAgY29kZUJs
b2NrIGluZGljYXRlcyBhIGJ1aWx0LWluIGNhbGxlcgotICAgIG5ld0NhbGxGcmFtZVtjb2RlQmxv
Y2stPnRoaXNSZWdpc3RlcigpXSA9IHRoaXNPYmo7CisgICAgbmV3Q2FsbEZyYW1lW2NvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyKCldID0gSlNWYWx1ZVB0cih0aGlzT2JqKTsKICAgICBuZXdDYWxsRnJh
bWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZUNoYWluLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxs
RnJhbWVGbGFnKCksIDAsIDAsIDApOwogCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbigpKQpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUoRXZhbE5vZGUqIAogICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmlsZXIp
LT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGV2YWxOb2RlLT5zb3VyY2VVUkwoKSwgZXZhbE5v
ZGUtPmxpbmVObygpKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJl
c3VsdDsKICAgICB7CiAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3Jk
KG1fc2FtcGxlcik7CiAKQEAgLTExNDksMTQgKzExNDksMTQgQEAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBnZXRDUFVUaW1lKCkKIAogLy8gV2UgaGF2ZSB0byByZXR1cm4gYSBKU1ZhbHVlIGhlcmUs
IGdjYyBzZWVtcyB0byBwcm9kdWNlIHdvcnNlIGNvZGUgaWYgCiAvLyB3ZSBhdHRlbXB0IHRvIHJl
dHVybiBhIGJvb2wKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmNoZWNrVGlt
ZW91dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorQUxXQVlTX0lOTElORSBib29sIElu
dGVycHJldGVyOjpjaGVja1RpbWVvdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICB1bnNpZ25lZCBjdXJyZW50VGltZSA9IGdldENQVVRpbWUoKTsKICAgICAKICAgICBpZiAo
IW1fdGltZUF0TGFzdENoZWNrVGltZW91dCkgewogICAgICAgICAvLyBTdXNwaWNpb3VzIGFtb3Vu
dCBvZiBsb29waW5nIGluIGEgc2NyaXB0IC0tIHN0YXJ0IHRpbWluZyBpdAogICAgICAgICBtX3Rp
bWVBdExhc3RDaGVja1RpbWVvdXQgPSBjdXJyZW50VGltZTsKLSAgICAgICAgcmV0dXJuIG5vVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCB0
aW1lRGlmZiA9IGN1cnJlbnRUaW1lIC0gbV90aW1lQXRMYXN0Q2hlY2tUaW1lb3V0OwpAQCAtMTE3
NywxMiArMTE3NywxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEludGVycHJldGVyOjpjaGVj
CiAgICAgCiAgICAgaWYgKG1fdGltZW91dFRpbWUgJiYgbV90aW1lRXhlY3V0aW5nID4gbV90aW1l
b3V0VGltZSkgewogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5zaG91bGRJbnRlcnJ1cHRTY3Jp
cHQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsgLy8gQXBwZWFzaW5nIEdDQywgYWxs
IHdlIG5lZWQgaXMgYSBub24tbnVsbCBqcyB2YWx1ZS4KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAKICAgICAgICAgcmVzZXRUaW1lb3V0Q2hlY2soKTsKICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIG5vVmFsdWUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIE5FVkVSX0lOTElO
RSBTY29wZUNoYWluTm9kZSogSW50ZXJwcmV0ZXI6OmNyZWF0ZUV4Y2VwdGlvblNjb3BlKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogdlBDKQpAQCAtMTE5MCwxNiArMTE5
MCwxNiBAQCBORVZFUl9JTkxJTkUgU2NvcGVDaGFpbk5vZGUqIEludGVycHJldGVyCiAgICAgaW50
IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgSWRlbnRpZmllciYgcHJvcGVydHkgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoKCsrdlBDKS0+dS5vcGVyYW5kKTsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICBK
U1ZhbHVlUHRyIHZhbHVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShj
YWxsRnJhbWUpOwogICAgIEpTT2JqZWN0KiBzY29wZSA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRp
Y1Njb3BlT2JqZWN0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKLSAg
ICBjYWxsRnJhbWVbZHN0XSA9IHNjb3BlOworICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0
cihzY29wZSk7CiAKICAgICByZXR1cm4gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goc2Nv
cGUpOwogfQogCiBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNhY2hlUHJvdG90eXBlQ2hhaW4oQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIEpTVmFsdWUq
IHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7Cisg
ICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChj
YWxsRnJhbWUpOwogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUocHJvdG90eXBlKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUoYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCkpOwpA
QCAtMTIwNyw3ICsxMjA3LDcgQEAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjYWNoZVByb3RvdHlw
ZUNoYQogICAgIHJldHVybiBzdHJ1Y3R1cmUtPmNhY2hlZFByb3RvdHlwZUNoYWluKCk7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1Zh
bHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElO
RSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogdlBDLCBKU1ZhbHVlUHRyIGJhc2VW
YWx1ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFJlY3Vyc2l2ZSBp
bnZvY2F0aW9uIG1heSBhbHJlYWR5IGhhdmUgc3BlY2lhbGl6ZWQgdGhpcyBpbnN0cnVjdGlvbi4K
ICAgICBpZiAodlBDWzBdLnUub3Bjb2RlICE9IGdldE9wY29kZShvcF9wdXRfYnlfaWQpKQpAQCAt
MTI4NCwxMyArMTI4NCwxMyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dW5jYWNo
ZVB1CiAgICAgdlBDWzRdID0gMDsKIH0KIAotc3RhdGljIHNpemVfdCBjb3VudFByb3RvdHlwZUNo
YWluRW50cmllc0FuZENoZWNrRm9yUHJveGllcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSogYmFzZVZhbHVlLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitzdGF0aWMgc2l6ZV90IGNv
dW50UHJvdG90eXBlQ2hhaW5FbnRyaWVzQW5kQ2hlY2tGb3JQcm94aWVzKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEpTQ2VsbCogY2VsbCA9IGFzQ2VsbChiYXNlVmFsdWUpOwogICAgIHNpemVfdCBjb3Vu
dCA9IDA7CiAKICAgICB3aGlsZSAoc2xvdC5zbG90QmFzZSgpICE9IGNlbGwpIHsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IGNlbGwtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2VsbC0+c3RydWN0dXJlKCktPnByb3RvdHlw
ZUZvckxvb2t1cChjYWxsRnJhbWUpOwogCiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHNs
b3RCYXNlIGluIGJhc2VWYWx1ZSdzIHByb3RvdHlwZSBjaGFpbiwgdGhlbiBiYXNlVmFsdWUKICAg
ICAgICAgLy8gbXVzdCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KQEAgLTEzMTUsNyAr
MTMxNSw3IEBAIHN0YXRpYyBzaXplX3QgY291bnRQcm90b3R5cGVDaGFpbkVudHJpZXMKICAgICBy
ZXR1cm4gY291bnQ7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDYWNo
ZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0
cnVjdGlvbiogdlBDLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorTkVWRVJfSU5MSU5FIHZvaWQgSW50
ZXJwcmV0ZXI6OnRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICAvLyBSZWN1cnNpdmUgaW52b2NhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHNwZWNpYWxpemVk
IHRoaXMgaW5zdHJ1Y3Rpb24uCiAgICAgaWYgKHZQQ1swXS51Lm9wY29kZSAhPSBnZXRPcGNvZGUo
b3BfZ2V0X2J5X2lkKSkKQEAgLTE0MjEsNyArMTQyMSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIElu
dGVycHJldGVyOjp1bmNhY2hlR2UKICAgICB2UENbNF0gPSAwOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBSZWdpc3RlckZpbGUq
IHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUqKiBleGNlcHRpb24p
CitKU1ZhbHVlUHRyIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZs
YWcsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZVB0ciogZXhjZXB0aW9uKQogewogICAgIC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9m
IG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0byBwdXQgdGhpcyBjb2RlCiAgICAgLy8gaGVy
ZSBiZWNhdXNlIG91ciBsYWJlbHMgYXJlIG9ubHkgaW4gc2NvcGUgaW5zaWRlIHRoaXMgZnVuY3Rp
b24uCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlCiAjZW5kaWYKIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKTsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IG5vVmFs
dWUoKTsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvblZhbHVlID0gbm9WYWx1ZSgpOwogICAgIEhh
bmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKIAogICAgIEluc3RydWN0aW9uKiB2UEMgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTQ2Niw4ICsxNDY2
LDEwIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogI2RlZmlu
ZSBDSEVDS19GT1JfVElNRU9VVCgpIFwKICAgICBpZiAoIS0tdGlja0NvdW50KSB7IFwKLSAgICAg
ICAgaWYgKChleGNlcHRpb25WYWx1ZSA9IGNoZWNrVGltZW91dChjYWxsRnJhbWUtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKSkpKSBcCisgICAgICAgIGlmIChjaGVja1RpbWVvdXQoY2FsbEZyYW1lLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpKSB7IFwKKyAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
anNOdWxsKCk7IFwKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7IFwKKyAgICAgICAgfSBcCiAg
ICAgICAgIHRpY2tDb3VudCA9IG1fdGlja3NVbnRpbE5leHRUaW1lb3V0Q2hlY2s7IFwKICAgICB9
CiAgICAgCkBAIC0xNTA2LDcgKzE1MDgsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0
ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGNvbnN0cnVjdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0
IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChjYWxsRnJhbWUpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoY29uc3Ry
dWN0RW1wdHlPYmplY3QoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKQEAgLTE1MjMsNyArMTUyNSw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGZpcnN0QXJnID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogICAgICAgICBpbnQgYXJnQ291bnQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgZmlyc3RBcmcsIGFy
Z0NvdW50KTsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBjb25zdHJ1Y3RBcnJheShjYWxsRnJh
bWUsIGFyZ3MpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoY29uc3RydWN0
QXJyYXkoY2FsbEZyYW1lLCBhcmdzKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKQEAgLTE1MzcsNyArMTUzOSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ0V4cCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChj
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5yZWdleHAocmVnRXhwKSk7CisgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gSlNWYWx1ZVB0cihuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5yZWdleHAocmVnRXhwKSkpOwogCiAgICAgICAgICsrdlBD
OwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0xNTYyLDEyICsxNTY0LDEyIEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgYXMgYSBi
b29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3Jj
MiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNW
YWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVk
aWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCiAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihzcmMxID09IHNyYzIpOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNlKGNh
bGxGcmFtZSwgc3JjMSwgc3JjMikpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c0Jvb2xlYW4oZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0g
cmVzdWx0OwogICAgICAgICB9CkBAIC0xNTgyLDcgKzE1ODQsNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIG9wZXJhdG9yLCBhbmQgcHV0cyB0
aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAg
ICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYyA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyYy0+aXNVbmRlZmluZWRPck51bGwoKSkgewog
ICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4odHJ1ZSk7CkBAIC0xNjAyLDEy
ICsxNjA0LDEyIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAg
ICAgICAgICAgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICov
CiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUp
OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEs
IHNyYzIpKQogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jvb2xlYW4oc3JjMSAhPSBz
cmMyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jv
b2xlYW4oIWVxdWFsU2xvd0Nhc2UoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgICAgICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWxTbG93Q2FzZShjYWxsRnJhbWUs
IHNyYzEsIHNyYzIpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xNjIyLDcgKzE2
MjQsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAg
ICAgIG9wZXJhdG9yLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3Rl
ciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHNyYyA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKHNyYy0+
aXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc0Jv
b2xlYW4oZmFsc2UpOwpAQCAtMTY0Miw4ICsxNjQ0LDggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICByZXN1bHQgYXMgYSBib29sZWFuIGluIHJl
Z2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJh
bmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90
aEltbWVkaWF0ZShzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNC
b29sZWFuKHNyYzEgPT0gc3JjMik7CiAgICAgICAgIGVsc2UgaWYgKEpTSW1tZWRpYXRlOjppc0Vp
dGhlckltbWVkaWF0ZShzcmMxLCBzcmMyKSAmIChzcmMxICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1t
ZWRpYXRlKCkpICYgKHNyYzIgIT0gSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpCkBAIC0x
NjYyLDggKzE2NjQsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlh
dGUoc3JjMSwgc3JjMikpCiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVhbihz
cmMxICE9IHNyYzIpOwpAQCAtMTY4Myw5ICsxNjg1LDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOworICAgICAgICBKU1Zh
bHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxG
cmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c0Jvb2xlYW4oanNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMikpOwogICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCkBAIC0x
NzAwLDkgKzE3MDIsOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc0Jvb2xlYW4oanNMZXNzRXEoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgICAgIEpT
VmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUu
b3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzQm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKICAgICAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKIApA
QCAtMTcxNiwxMSArMTcxOCwxMSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlCiAgICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIgc3JjRHN0LgogICAgICAgICAqLwog
ICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1Zh
bHVlUHRyIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYpKQotICAgICAg
ICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6aW5jSW1tZWRpYXRlTnVtYmVy
KHYpOworICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRp
YXRlOjppbmNJbW1lZGlhdGVOdW1iZXIodikpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgdi0+dG9OdW1iZXIoY2FsbEZy
YW1lKSArIDEpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxs
RnJhbWUsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgKyAxKTsKICAgICAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0gcmVzdWx0Owog
ICAgICAgICB9CkBAIC0xNzM1LDExICsxNzM3LDExIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgYmFjayBpbiByZWdpc3RlciBzcmNEc3QuCiAg
ICAgICAgICovCiAgICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMo
dikpCi0gICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjpkZWNJbW1l
ZGlhdGVOdW1iZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQ
dHIoSlNJbW1lZGlhdGU6OmRlY0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCB2LT50b051
bWJlcihjYWxsRnJhbWUpIC0gMSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKGNhbGxGcmFtZSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIDEpOwogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0g
PSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE3NTYsMTUgKzE3NTgsMTUgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShj
YWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRp
dmVPcGVyYXRpb25zKHYpKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHY7Ci0gICAg
ICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTSW1tZWRpYXRlOjppbmNJbW1lZGlhdGVOdW1i
ZXIodik7CisgICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1l
ZGlhdGU6OmluY0ltbWVkaWF0ZU51bWJlcih2KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiBudW1iZXIgPSBjYWxsRnJhbWVbc3JjRHN0XS5qc1ZhbHVlKGNhbGxGcmFt
ZSktPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgbnVtYmVy
ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0pTTnVtYmVyKGNhbGxG
cmFtZSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IG51bWJlcjsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtzcmNEc3RdID0g
anNOdW1iZXIoY2FsbEZyYW1lLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpICsgMSk7Cisg
ICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZy
YW1lLCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpICsgMSkpOwogICAgICAgICB9CiAKICAg
ICAgICAgKyt2UEM7CkBAIC0xNzc5LDE1ICsxNzgxLDE1IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxs
RnJhbWUpOwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0
aW9ucyh2KSkgewogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSB2OwotICAgICAgICAgICAg
Y2FsbEZyYW1lW3NyY0RzdF0gPSBKU0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYpOwor
ICAgICAgICAgICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1tZWRpYXRlOjpk
ZWNJbW1lZGlhdGVOdW1iZXIodikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNW
YWx1ZSogbnVtYmVyID0gY2FsbEZyYW1lW3NyY0RzdF0uanNWYWx1ZShjYWxsRnJhbWUpLT50b0pT
TnVtYmVyKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIG51bWJlciA9IGNhbGxG
cmFtZVtzcmNEc3RdLmpzVmFsdWUoY2FsbEZyYW1lKS0+dG9KU051bWJlcihjYWxsRnJhbWUpOwog
ICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1l
W2RzdF0gPSBudW1iZXI7Ci0gICAgICAgICAgICBjYWxsRnJhbWVbc3JjRHN0XSA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgbnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpOworICAgICAgICAg
ICAgY2FsbEZyYW1lW3NyY0RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbnVt
YmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpKTsKICAgICAgICAgfQogCiAgICAgICAgICsr
dlBDOwpAQCAtMTgwMiwxMiArMTgwNCwxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0
ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogc3Jj
VmFsID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIHNyY1ZhbCA9IGNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAg
ICBpZiAoTElLRUxZKHNyY1ZhbC0+aXNOdW1iZXIoKSkpCiAgICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IGNhbGxGcmFtZVtzcmNdOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IHNyY1ZhbC0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBzcmNWYWwtPnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsKICAgICAg
ICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xODIyLDEzICsxODI0LDEzIEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcmVzdWx0IGluIHJlZ2lz
dGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYyA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgKyt2UEM7CiAg
ICAgICAgIGRvdWJsZSB2OwogICAgICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYywgdikpCi0gICAg
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgLXYpOworICAgICAg
ICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgLXYp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJl
cihjYWxsRnJhbWUsIC1zcmMtPnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIC1zcmMtPnRvTnVtYmVyKGNhbGxG
cmFtZSkpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE4NDMsMTIgKzE4NDUsMTIg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBu
dW1lcmljIGFkZCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlcyBvZiB0aGUgb3BlcmFuZHMuKQogICAg
ICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBK
U1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxs
RnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJh
dGlvbnMoc3JjMSkgJiYgSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhz
cmMyKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OmFkZEltbWVk
aWF0ZU51bWJlcnMoc3JjMSwgc3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpT
VmFsdWVQdHIoSlNJbW1lZGlhdGU6OmFkZEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwog
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkKGNhbGxG
cmFtZSwgc3JjMSwgc3JjMik7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzQWRk
KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAt
MTg2MiwyMSArMTg2NCwyMSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIG51bWJlcnMpLCBhbmQgcHV0cyB0aGUgcHJvZHVjdCBpbiByZWdpc3Rl
ciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsr
dlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIg
c3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3VibGUgbGVmdDsKICAgICAgICAgZG91Ymxl
IHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJz
KHNyYzEsIHNyYzIpKSB7CiAgICAgICAgICAgICBpbnQzMl90IGxlZnQgPSBKU0ltbWVkaWF0ZTo6
Z2V0VHJ1bmNhdGVkSW50MzIoc3JjMSk7CiAgICAgICAgICAgICBpbnQzMl90IHJpZ2h0ID0gSlNJ
bW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHNyYzIpOwogICAgICAgICAgICAgaWYgKChsZWZ0
IHwgcmlnaHQpID4+IDE1ID09IDApCi0gICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBq
c051bWJlcihjYWxsRnJhbWUsIGxlZnQgKiByaWdodCk7CisgICAgICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAqIHJpZ2h0KSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051
bWJlcihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PGRvdWJsZT4obGVmdCkgKiBzdGF0aWNfY2FzdDxk
b3VibGU+KHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVl
UHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihsZWZ0KSAqIHN0YXRp
Y19jYXN0PGRvdWJsZT4ocmlnaHQpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZmFzdElzTnVtYmVy
KHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCByaWdodCkpCi0gICAgICAgICAgICBj
YWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCAqIHJpZ2h0KTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxl
ZnQgKiByaWdodCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAqIHNyYzIt
PnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgKiBzcmMyLT50b051
bWJlcihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAg
ICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xODkyLDE0
ICsxODk0LDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAg
ICAgICAgICAgcXVvdGllbnQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZCA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAg
ICAgSlNWYWx1ZSogZGl2aXNvciA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBkaXZpZGVuZCA9IGNhbGxGcmFtZVso
Kyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBkaXZpc29yID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJh
bWUpOwogICAgICAgICBkb3VibGUgbGVmdDsKICAgICAgICAgZG91YmxlIHJpZ2h0OwogICAgICAg
ICBpZiAoZmFzdElzTnVtYmVyKGRpdmlkZW5kLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoZGl2aXNv
ciwgcmlnaHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJh
bWUsIGxlZnQgLyByaWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQ
dHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IC8gcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIGRpdmlkZW5k
LT50b051bWJlcihjYWxsRnJhbWUpIC8gZGl2aXNvci0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgZGl2aWRl
bmQtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBkaXZpc29yLT50b051bWJlcihjYWxsRnJhbWUpKTsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgICAgIGNhbGxGcmFt
ZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBAIC0xOTE3LDE3ICsxOTE5LDE3IEBAIEpTVmFs
dWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGRpdmlkZW5k
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGl2aXNvciA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBkaXZpZGVuZFZhbHVlID0gY2FsbEZyYW1lW2Rp
dmlkZW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIGRpdmlzb3JWYWx1
ZSA9IGNhbGxGcmFtZVtkaXZpc29yXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgZGl2aWRlbmRWYWx1ZSA9IGNhbGxGcmFtZVtkaXZpZGVuZF0uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIGRpdmlzb3JWYWx1ZSA9IGNhbGxGcmFtZVtkaXZpc29y
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3Ro
SW1tZWRpYXRlTnVtYmVycyhkaXZpZGVuZFZhbHVlLCBkaXZpc29yVmFsdWUpICYmIGRpdmlzb3JW
YWx1ZSAhPSBKU0ltbWVkaWF0ZTo6ZnJvbSgwKSkgewotICAgICAgICAgICAgY2FsbEZyYW1lW2Rz
dF0gPSBKU0ltbWVkaWF0ZTo6ZnJvbShKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2
aWRlbmRWYWx1ZSkgJSBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIoZGl2aXNvclZhbHVl
KSk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlhdGU6
OmZyb20oSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKGRpdmlkZW5kVmFsdWUpICUgSlNJ
bW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKGRpdmlzb3JWYWx1ZSkpKTsKICAgICAgICAgICAg
ICsrdlBDOwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CiAKICAg
ICAgICAgZG91YmxlIGQgPSBkaXZpZGVuZFZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpOwotICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIGZtb2QoZCwgZGl2aXNv
clZhbHVlLT50b051bWJlcihjYWxsRnJhbWUpKSk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0
ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBmbW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1iZXIoY2Fs
bEZyYW1lKSkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxG
cmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICArK3ZQQzsKQEAgLTE5NDEsMTYgKzE5NDMsMTYg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICBy
ZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVy
YW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFs
dWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBkb3VibGUgbGVmdDsKICAgICAgICAg
ZG91YmxlIHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZl
T3BlcmF0aW9ucyhzcmMxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRp
b25zKHNyYzIpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6c3Vi
SW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0ZTo6c3ViSW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMy
KSk7CiAgICAgICAgIGVsc2UgaWYgKGZhc3RJc051bWJlcihzcmMxLCBsZWZ0KSAmJiBmYXN0SXNO
dW1iZXIoc3JjMiwgcmlnaHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJl
cihjYWxsRnJhbWUsIGxlZnQgLSByaWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTVmFsdWVQdHIoanNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IC0gcmlnaHQpKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUs
IHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSBzcmMyLT50b051bWJlcihjYWxsRnJhbWUpKTsK
KyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMx
LT50b051bWJlcihjYWxsRnJhbWUpIC0gc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0
XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTk2NSwxNiArMTk2NywxNiBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIGluIHJlZ2lzdGVyIGRz
dC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1
ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWwg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMyX3QgbGVmdDsKICAgICAgICAgdWludDMyX3Qg
cmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
dmFsLCBzaGlmdCkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzTnVtYmVyKGNhbGxG
cmFtZSwgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbCkgPDwgKEpTSW1tZWRpYXRl
OjpnZXRUcnVuY2F0ZWRVSW50MzIoc2hpZnQpICYgMHgxZikpOworICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgSlNJbW1lZGlhdGU6Omdl
dFRydW5jYXRlZEludDMyKHZhbCkgPDwgKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIo
c2hpZnQpICYgMHgxZikpKTsKICAgICAgICAgZWxzZSBpZiAoZmFzdFRvSW50MzIodmFsLCBsZWZ0
KSAmJiBmYXN0VG9VSW50MzIoc2hpZnQsIHJpZ2h0KSkKLSAgICAgICAgICAgIGNhbGxGcmFtZVtk
c3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGxl
ZnQgPDwgKHJpZ2h0ICYgMHgxZikpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1l
KSkgPDwgKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsICh2YWwtPnRvSW50MzIoY2Fs
bEZyYW1lKSkgPDwgKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAgICAg
ICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0g
PSByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE5OTAsMTYgKzE5OTIsMTYgQEAgSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0
cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KICAgICAgICAgaW50IGRz
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdmFsID0gY2FsbEZyYW1l
WygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVl
KiBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5k
XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc2hpZnQgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludDMy
X3QgbGVmdDsKICAgICAgICAgdWludDMyX3QgcmlnaHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCi0gICAgICAgICAgICBjYWxs
RnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWws
IHNoaWZ0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVk
aWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpOwogICAgICAgICBl
bHNlIGlmIChmYXN0VG9JbnQzMih2YWwsIGxlZnQpICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmln
aHQpKQotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxl
ZnQgPj4gKHJpZ2h0ICYgMHgxZikpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1Zh
bHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgbGVmdCA+PiAocmlnaHQgJiAweDFmKSkpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxG
cmFtZSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxG
cmFtZSkgJiAweDFmKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgKHZhbC0+dG9JbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMy
KGNhbGxGcmFtZSkgJiAweDFmKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjAx
NSwxMiArMjAxNywxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiB2YWwgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gY2FsbEZyYW1lWygrK3ZQQykt
PnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbCA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBzaGlmdCA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRl
TnVtYmVycyh2YWwsIHNoaWZ0KSAmJiAhSlNJbW1lZGlhdGU6OmlzTmVnYXRpdmUodmFsKSkKLSAg
ICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlh
dGVOdW1iZXJzKHZhbCwgc2hpZnQpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1Zh
bHVlUHRyKEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0
KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1i
ZXIoY2FsbEZyYW1lLCAodmFsLT50b1VJbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUlu
dDMyKGNhbGxGcmFtZSkgJiAweDFmKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgKHZhbC0+dG9VSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0
LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgxZikpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSByZXN1bHQ7CiAgICAgICAg
IH0KQEAgLTIwMzYsMTYgKzIwMzgsMTYgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAg
ICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEg
PSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAg
ICAgIEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVl
KGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMp
LT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMy
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAg
ICAgICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIGludDMyX3QgcmlnaHQ7CiAgICAgICAgIGlmIChK
U0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCi0gICAgICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjphbmRJbW1lZGlhdGVOdW1iZXJzKHNy
YzEsIHNyYzIpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKEpTSW1t
ZWRpYXRlOjphbmRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKICAgICAgICAgZWxzZSBp
ZiAoZmFzdFRvSW50MzIoc3JjMSwgbGVmdCkgJiYgZmFzdFRvSW50MzIoc3JjMiwgcmlnaHQpKQot
ICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGxlZnQgJiBy
aWdodCk7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoanNOdW1iZXIo
Y2FsbEZyYW1lLCBsZWZ0ICYgcmlnaHQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZy
YW1lKSAmIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpICYg
c3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogICAgICAgICB9CkBA
IC0yMDYxLDE2ICsyMDYzLDE2IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGUKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwogICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBK
U1ZhbHVlKiBzcmMyID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxs
RnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5v
cGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNh
bGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAg
aW50MzJfdCBsZWZ0OwogICAgICAgICBpbnQzMl90IHJpZ2h0OwogICAgICAgICBpZiAoSlNJbW1l
ZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQotICAgICAgICAgICAg
Y2FsbEZyYW1lW2RzdF0gPSBKU0ltbWVkaWF0ZTo6eG9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBz
cmMyKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihKU0ltbWVkaWF0
ZTo6eG9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7CiAgICAgICAgIGVsc2UgaWYgKGZh
c3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IF4gcmlnaHQp
OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxG
cmFtZSwgbGVmdCBeIHJpZ2h0KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkg
XiBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1lKSBeIHNyYzIt
PnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjA4
NiwxNiArMjA4OCwxNiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCiAgICAgICAg
IGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzEgPSBj
YWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAg
IEpTVmFsdWUqIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51
Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMyID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAg
ICBpbnQzMl90IGxlZnQ7CiAgICAgICAgIGludDMyX3QgcmlnaHQ7CiAgICAgICAgIGlmIChKU0lt
bWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCi0gICAgICAgICAg
ICBjYWxsRnJhbWVbZHN0XSA9IEpTSW1tZWRpYXRlOjpvckltbWVkaWF0ZU51bWJlcnMoc3JjMSwg
c3JjMik7CisgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoSlNJbW1lZGlh
dGU6Om9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSk7CiAgICAgICAgIGVsc2UgaWYgKGZh
c3RUb0ludDMyKHNyYzEsIGxlZnQpICYmIGZhc3RUb0ludDMyKHNyYzIsIHJpZ2h0KSkKLSAgICAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0ganNOdW1iZXIoY2FsbEZyYW1lLCBsZWZ0IHwgcmlnaHQp
OworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxG
cmFtZSwgbGVmdCB8IHJpZ2h0KSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoY2FsbEZyYW1lLCBzcmMxLT50b0ludDMyKGNhbGxGcmFtZSkg
fCBzcmMyLT50b0ludDMyKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc051bWJlcihjYWxsRnJhbWUsIHNyYzEtPnRvSW50MzIoY2FsbEZyYW1lKSB8IHNyYzIt
PnRvSW50MzIoY2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
CiAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjEx
MCwxMiArMjExMiwxMiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhl
CiAgICAgICAgICAgIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAg
ICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiBzcmMgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpbnQzMl90IHZhbHVlOwogICAgICAgICBp
ZiAoZmFzdFRvSW50MzIoc3JjLCB2YWx1ZSkpCi0gICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IGpzTnVtYmVyKGNhbGxGcmFtZSwgfnZhbHVlKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZVtkc3Rd
ID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIH52YWx1ZSkpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGNhbGxGcmFtZSwgfnNy
Yy0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
anNOdW1iZXIoY2FsbEZyYW1lLCB+c3JjLT50b0ludDMyKGNhbGxGcmFtZSkpOwogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBy
ZXN1bHQ7CiAgICAgICAgIH0KQEAgLTIxMzAsNyArMjEzMiw3IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWVbc3JjXS5qc1Zh
bHVlKGNhbGxGcmFtZSktPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKS0+
dG9Cb29sZWFuKGNhbGxGcmFtZSkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAg
ICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmVzdWx0OwogCkBAIC0yMTU1LDcgKzIxNTcsNyBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBiYXNl
ID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IGJhc2VQcm90byA9IHZQQ1s0XS51Lm9w
ZXJhbmQ7CiAKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbCA9IGNhbGxGcmFtZVtiYXNlXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbCA9IGNhbGxGcmFtZVti
YXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgaWYgKGlzTm90T2JqZWN0KGNhbGxG
cmFtZSwgdHJ1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgdlBDLCBiYXNlVmFsLCBleGNlcHRp
b25WYWx1ZSkpCiAgICAgICAgICAgICBnb3RvIHZtX3Rocm93OwpAQCAtMjE3NCw3ICsyMTc2LDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwog
ICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzVHlwZVN0cmlu
Z0ZvclZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpKTsK
KyAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGpzVHlwZVN0cmluZ0ZvclZhbHVl
KGNhbGxGcmFtZSwgY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJhbWUpKSk7CiAKICAgICAg
ICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTIxODgsNyArMjE5MCw3
IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8K
ICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtzcmNd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW3Ny
Y10uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IGpzQm9vbGVh
bihKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDogdi0+YXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSk7
CiAKICAgICAgICAgKyt2UEM7CkBAIC0yMjc3LDEzICsyMjc5LDEzIEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHByb3BlcnR5ID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgYmFzZSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAot
ICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZy
YW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFs
dWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKGlzTm90T2JqZWN0KGNhbGxGcmFtZSwgZmFsc2Us
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHZQQywgYmFzZVZhbCwgZXhjZXB0aW9uVmFsdWUpKQog
ICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9
IGFzT2JqZWN0KGJhc2VWYWwpOwogCi0gICAgICAgIEpTVmFsdWUqIHByb3BOYW1lID0gY2FsbEZy
YW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgcHJv
cE5hbWUgPSBjYWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAg
ICB1aW50MzJfdCBpOwogICAgICAgICBpZiAocHJvcE5hbWUtPmdldFVJbnQzMihpKSkKQEAgLTIz
NjMsNyArMjM2NSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgaW50IGluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdmFs
dWUgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBzY29wZS0+cmVnaXN0
ZXJBdChpbmRleCkgPSBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpID0gSlNWYWx1ZVB0cihjYWxsRnJhbWVbdmFsdWVd
LmpzVmFsdWUoY2FsbEZyYW1lKSk7CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7CiAgICAgfSAgICAgICAgICAgIApAQCAtMjQxMSw3ICsyNDEzLDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogCiAgICAgICAgIEFTU0VSVCgoKml0
ZXIpLT5pc1ZhcmlhYmxlT2JqZWN0KCkpOwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBzY29w
ZSA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPigqaXRlcik7Ci0gICAgICAgIHNjb3Bl
LT5yZWdpc3RlckF0KGluZGV4KSA9IGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUp
OworICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBKU1ZhbHVlUHRyKGNhbGxGcmFt
ZVt2YWx1ZV0uanNWYWx1ZShjYWxsRnJhbWUpKTsKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CkBAIC0yNDc5LDkgKzI0ODEsOSBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUqIGJh
c2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpT
VmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSog
cmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CisgICAgICAg
IEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xv
dCk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAogICAgICAgICB0cnlDYWNoZUdl
dEJ5SUQoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7
CkBAIC0yNDk4LDcgKzI1MDAsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlCiAgICAgICAgICAgIG9wX2dldF9ieV9pZC4KICAgICAgICAgKi8KICAgICAgICAgaW50
IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBj
YWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIGJh
c2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAg
aWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VWYWx1ZSkpKSB7CiAgICAg
ICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXNDZWxsKGJhc2VWYWx1ZSk7CkBAIC0yNTExLDcg
KzI1MTMsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmFzZU9iamVjdC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aWRlbnRpZmllcih2UENbM10udS5vcGVyYW5kKSkgPT0gYmFzZU9iamVjdC0+Z2V0RGly
ZWN0T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gYmFz
ZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgY2FsbEZy
YW1lW2RzdF0gPSBKU1ZhbHVlUHRyKGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQp
KTsKIAogICAgICAgICAgICAgICAgIHZQQyArPSA4OwogICAgICAgICAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKQEAgLTI1MjksNyArMjUzMSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgcmV2ZXJ0cyB0byBvcF9nZXRfYnlfaWQuCiAg
ICAgICAgICovCiAgICAgICAgIGludCBiYXNlID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsK
KyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShj
YWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0
ZShiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFzQ2VsbChi
YXNlVmFsdWUpOwpAQCAtMjU0NSw3ICsyNTQ3LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzZd
LnUub3BlcmFuZDsKIAogICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG9PYmplY3QtPmdl
dChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIodlBDWzNdLnUu
b3BlcmFuZCkpID09IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFs
dWVQdHIocHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKIAogICAgICAgICAg
ICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElP
TigpOwpAQCAtMjU3OCw3ICsyNTgwLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZQogICAgICAgICAgICByZXZlcnRzIHRvIG9wX2dldF9ieV9pZC4KICAgICAgICAg
Ki8KICAgICAgICAgaW50IGJhc2UgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFt
ZSk7CiAKICAgICAgICAgaWYgKExJS0VMWSghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGJhc2VW
YWx1ZSkpKSB7CiAgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYXNDZWxsKGJhc2VWYWx1
ZSk7CkBAIC0yNjAwLDcgKzI2MDIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdlBDWzddLnUu
b3BlcmFuZDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VPYmplY3QtPmdl
dChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIodlBDWzNdLnUu
b3BlcmFuZCkpID09IGJhc2VPYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gYmFzZU9iamVjdC0+Z2V0RGlyZWN0
T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVbZHN0XSA9
IEpTVmFsdWVQdHIoYmFzZU9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKQEAgLTI2MjMsOSArMjYyNSw5IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHByb3BlcnR5ID0gdlBDWzNdLnUu
b3BlcmFuZDsKIAogICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlkZW50aWZpZXIocHJvcGVydHkpOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUg
PSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOworICAgICAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBy
ZXN1bHQ7CkBAIC0yNjQxLDEwICsyNjQzLDEwIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGUKICAgICAgICAgKi8KIAogICAgICAgICBpbnQgYmFzZSA9IHZQQ1syXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5q
c1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gY2FsbEZy
YW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKExJS0VMWShpc0pTQXJy
YXkoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJhbWUsIGFzQXJy
YXkoYmFzZVZhbHVlKS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBK
U1ZhbHVlUHRyKGpzTnVtYmVyKGNhbGxGcmFtZSwgYXNBcnJheShiYXNlVmFsdWUpLT5sZW5ndGgo
KSkpOwogICAgICAgICAgICAgdlBDICs9IDg7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CiAgICAgICAgIH0KQEAgLTI2NjEsMTAgKzI2NjMsMTAgQEAgSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogCiAgICAgICAgIGludCBiYXNlID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gY2FsbEZyYW1l
W2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUg
PSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBpZiAoTElLRUxZ
KGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIGludCBkc3QgPSB2UENbMV0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBqc051bWJlcihjYWxsRnJh
bWUsIGFzU3RyaW5nKGJhc2VWYWx1ZSktPnZhbHVlKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGNh
bGxGcmFtZVtkc3RdID0gSlNWYWx1ZVB0cihqc051bWJlcihjYWxsRnJhbWUsIGFzU3RyaW5nKGJh
c2VWYWx1ZSktPnZhbHVlKCkuc2l6ZSgpKSk7CiAgICAgICAgICAgICB2UEMgKz0gODsKICAgICAg
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpAQCAtMjY4Nyw3ICsyNjg5LDcg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQg
dmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwogCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAgICAgSlNWYWx1ZSogYmFzZVZhbHVlID0g
Y2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBi
YXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSk7CiAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICBiYXNlVmFsdWUtPnB1dChjYWxsRnJh
bWUsIGlkZW50LCBjYWxsRnJhbWVbdmFsdWVdLmpzVmFsdWUoY2FsbEZyYW1lKSwgc2xvdCk7CkBA
IC0yNzEwLDcgKzI3MTIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgIHRoZSByZWdpc3RlciBmaWxlLgogICAgICAgICAgKi8KICAgICAgICAg
aW50IGJhc2UgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUg
PSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRy
IGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoTElLRUxZKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVl
KSkpIHsKICAgICAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBhc0NlbGwoYmFzZVZhbHVlKTsK
QEAgLTI3MjMsNyArMjcyNSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0
ZShFeGUKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBpdCA9IHZQQ1s2XS51
LnN0cnVjdHVyZUNoYWluLT5oZWFkKCk7CiAKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBwcm90
byA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1l
KTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIHByb3RvID0gYmFzZU9iamVjdC0+c3RydWN0
dXJlKCktPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIHdo
aWxlICghcHJvdG8tPmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShhc09iamVjdChwcm90byktPnN0cnVjdHVyZSgpICE9ICgqaXQpLmdldCgpKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgdW5jYWNoZVB1dEJ5SUQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwg
dlBDKTsKQEAgLTI3NjAsNyArMjc2Miw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGUKICAgICAgICAgICAgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgICovCiAg
ICAgICAgIGludCBiYXNlID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogYmFz
ZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwog
CiAgICAgICAgIGlmIChMSUtFTFkoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShiYXNlVmFsdWUp
KSkgewogICAgICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGFzQ2VsbChiYXNlVmFsdWUpOwpA
QCAtMjc5Niw3ICsyNzk4LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZQogICAgICAgICBpbnQgcHJvcGVydHkgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICBp
bnQgdmFsdWUgPSB2UENbM10udS5vcGVyYW5kOwogCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1
ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQ
dHIgYmFzZVZhbHVlID0gY2FsbEZyYW1lW2Jhc2VdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAg
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KHByb3BlcnR5KTsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGJhc2VW
YWx1ZS0+cHV0KGNhbGxGcmFtZSwgaWRlbnQsIGNhbGxGcmFtZVt2YWx1ZV0uanNWYWx1ZShjYWxs
RnJhbWUpLCBzbG90KTsKQEAgLTI4MTksNyArMjgyMSw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICBKU09iamVjdCogYmFzZU9iaiA9IGNhbGxG
cmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvT2JqZWN0KGNhbGxGcmFtZSk7CiAgICAg
ICAgIElkZW50aWZpZXImIGlkZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aWRlbnRpZmll
cihwcm9wZXJ0eSk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihiYXNlT2Jq
LT5kZWxldGVQcm9wZXJ0eShjYWxsRnJhbWUsIGlkZW50KSk7CisgICAgICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0ZVByb3BlcnR5KGNhbGxGcmFtZSwgaWRl
bnQpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IHJlc3VsdDsKICAgICAgICAgKyt2UEM7CkBAIC0yODM3LDEwICsyODM5LDEwIEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGJhc2Ug
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm9wZXJ0eSA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IGNhbGxGcmFt
ZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9
IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVl
UHRyIGJhc2VWYWx1ZSA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3BlcnR5XS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAgICBKU1ZhbHVlUHRy
IHJlc3VsdDsKICAgICAgICAgdW5zaWduZWQgaTsKIAogICAgICAgICBib29sIGlzVUludDMyID0g
SlNJbW1lZGlhdGU6OmdldFVJbnQzMihzdWJzY3JpcHQsIGkpOwpAQCAtMjg4MCw4ICsyODgyLDgg
QEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICBpbnQg
cHJvcGVydHkgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB2YWx1ZSA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBjYWxsRnJhbWVb
YmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzdWJzY3JpcHQgPSBj
YWxsRnJhbWVbcHJvcGVydHldLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBiYXNlVmFsdWUgPSBjYWxsRnJhbWVbYmFzZV0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHN1YnNjcmlwdCA9IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxs
RnJhbWUpOwogCiAgICAgICAgIHVuc2lnbmVkIGk7CiAKQEAgLTI5MjEsOCArMjkyMyw4IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKIAogICAgICAgICBKU09iamVj
dCogYmFzZU9iaiA9IGNhbGxGcmFtZVtiYXNlXS5qc1ZhbHVlKGNhbGxGcmFtZSktPnRvT2JqZWN0
KGNhbGxGcmFtZSk7IC8vIG1heSB0aHJvdwogCi0gICAgICAgIEpTVmFsdWUqIHN1YnNjcmlwdCA9
IGNhbGxGcmFtZVtwcm9wZXJ0eV0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVl
KiByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gY2FsbEZyYW1lW3Byb3Bl
cnR5XS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAg
ICAgICB1aW50MzJfdCBpOwogICAgICAgICBpZiAoc3Vic2NyaXB0LT5nZXRVSW50MzIoaSkpCiAg
ICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2Fs
bEZyYW1lLCBpKSk7CkBAIC0zMDUwLDcgKzMwNTIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUqIHNyY1ZhbHVlID0gY2FsbEZyYW1lW3NyY10uanNWYWx1ZShjYWxsRnJh
bWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyY1ZhbHVlID0gY2FsbEZyYW1lW3NyY10uanNWYWx1
ZShjYWxsRnJhbWUpOwogCiAgICAgICAgIGlmIChzcmNWYWx1ZS0+aXNVbmRlZmluZWRPck51bGwo
KSB8fCAoIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShzcmNWYWx1ZSkgJiYgc3JjVmFsdWUtPmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkp
KSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwpAQCAtMzA2OCw3ICszMDcwLDcgQEAgSlNW
YWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQogICAgICAgICAqLwogICAgICAg
ICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmNWYWx1ZSA9IGNhbGxGcmFtZVtz
cmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmNWYWx1ZSA9IGNh
bGxGcmFtZVtzcmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBpZiAoIXNyY1ZhbHVl
LT5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8ICghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHNyY1Zh
bHVlKSAmJiAhc3JjVmFsdWUtPmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCkpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwpAQCAt
MzA4OSw4ICszMDkxLDggQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4
ZQogICAgICAgICAgICBBZGRpdGlvbmFsbHkgdGhpcyBsb29wIGluc3RydWN0aW9uIG1heSB0ZXJt
aW5hdGUgSlMgZXhlY3V0aW9uIGlzCiAgICAgICAgICAgIHRoZSBKUyB0aW1lb3V0IGlzIHJlYWNo
ZWQuCiAgICAgICAgICAqLwotICAgICAgICBKU1ZhbHVlKiBzcmMxID0gY2FsbEZyYW1lWygrK3ZQ
QyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOwotICAgICAgICBKU1ZhbHVlKiBzcmMy
ID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAg
ICAgICBKU1ZhbHVlUHRyIHNyYzEgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgc3JjMiA9IGNhbGxGcmFtZVsoKyt2
UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaW50IHRhcmdldCA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0ganNM
ZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CkBAIC0zMTE2LDggKzMxMTgsOCBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAgIEFkZGl0aW9uYWxs
eSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRpb24gaXMKICAg
ICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KICAgICAgICAgKi8KLSAgICAgICAg
SlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2Fs
bEZyYW1lKTsKLSAgICAgICAgSlNWYWx1ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9w
ZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2Fs
bEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBK
U1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNh
bGxGcmFtZSk7CiAgICAgICAgIGludCB0YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAg
ICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxKGNhbGxGcmFtZSwgc3JjMSwgc3Jj
Mik7CkBAIC0zMTQwLDggKzMxNDIsOCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4
ZWN1dGUoRXhlCiAgICAgICAgICAgIHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9u
LCBpZiBhbmQgb25seSBpZiB0aGUgCiAgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNv
biBpcyBmYWxzZS4KICAgICAgICAgKi8KLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IGNhbGxGcmFt
ZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKLSAgICAgICAgSlNWYWx1
ZSogc3JjMiA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1l
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBzcmMxID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFu
ZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNyYzIgPSBjYWxsRnJh
bWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGludCB0
YXJnZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBqc0xl
c3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKQEAgLTMxNjYsNyArMzE2OCw3IEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICovCiAgICAgICAgIGlu
dCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9m
ZnNldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0g
Y2FsbEZyYW1lWygrK3ZQQyktPnUub3BlcmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAg
ICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoc2Ny
dXRpbmVlKSkKICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNl
IHsKQEAgLTMxODYsNyArMzE4OCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGUKICAgICAgICAgICovCiAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOwogICAgICAgICBpbnQgZGVmYXVsdE9mZnNldCA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSogc2NydXRpbmVlID0gY2FsbEZyYW1lWygrK3ZQQyktPnUub3Bl
cmFuZF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9
IGNhbGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAg
ICAgaWYgKCFzY3J1dGluZWUtPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB2UEMgKz0gZGVmYXVs
dE9mZnNldDsKICAgICAgICAgZWxzZSB7CkBAIC0zMjA5LDcgKzMyMTEsNyBAQCBKU1ZhbHVlKiBJ
bnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICAqLwogICAgICAgICBpbnQg
dGFibGVJbmRleCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IGRlZmF1bHRPZmZz
ZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IGNh
bGxGcmFtZVsoKyt2UEMpLT51Lm9wZXJhbmRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciBzY3J1dGluZWUgPSBjYWxsRnJhbWVbKCsrdlBDKS0+dS5vcGVyYW5kXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmICghc2NydXRpbmVlLT5pc1N0cmluZygpKQogICAg
ICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgIGVsc2UgCkBAIC0zMjY1LDE1
ICszMjY3LDE1IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAg
ICAgICAgaW50IGFyZ0NvdW50ID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gdlBDWzRdLnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiBmdW5jVmFs
ID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciBmdW5jVmFsID0gY2FsbEZyYW1lW2Z1bmNdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAg
ICBSZWdpc3RlciogbmV3Q2FsbEZyYW1lID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lz
dGVyT2Zmc2V0OwogICAgICAgICBSZWdpc3RlciogYXJndiA9IG5ld0NhbGxGcmFtZSAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwotICAgICAgICBKU1ZhbHVl
KiB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9i
YWxPYmplY3QoKTsKIAogICAgICAgICBpZiAodGhpc1ZhbHVlID09IGdsb2JhbE9iamVjdCAmJiBm
dW5jVmFsID09IGdsb2JhbE9iamVjdC0+ZXZhbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGNhbGxFdmFsKGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxlLCBhcmd2LCBh
cmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0gY2FsbEV2YWwoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3Ys
IGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICAgICAg
aWYgKGV4Y2VwdGlvblZhbHVlKQogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAg
ICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJlc3VsdDsKQEAgLTMzMDIsNyArMzMwNCw3IEBAIEpT
VmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IGFyZ0Nv
dW50ID0gdlBDWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gdlBD
WzRdLnUub3BlcmFuZDsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW2Z1bmNdLmpz
VmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gY2FsbEZyYW1lW2Z1bmNd
LmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMzQw
LDE4ICszMzQyLDE4IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUK
ICAgICAgICAgICAgIEFyZ0xpc3QgYXJncyh0aGlzUmVnaXN0ZXIgKyAxLCBhcmdDb3VudCAtIDEp
OwogCiAgICAgICAgICAgICAvLyBGSVhNRTogQWxsIGhvc3QgbWV0aG9kcyBzaG91bGQgYmUgY2Fs
bGluZyB0b1RoaXNPYmplY3QsIGJ1dCB0aGlzIGlzIG5vdCBwcmVzZW50bHkgdGhlIGNhc2UuCi0g
ICAgICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSB0aGlzUmVnaXN0ZXItPmpzVmFsdWUoY2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgdGhpc1ZhbHVlID0gdGhpc1JlZ2lzdGVy
LT5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAodGhpc1ZhbHVlID09IGpzTnVs
bCgpKQogICAgICAgICAgICAgICAgIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsVGhpc1Zh
bHVlKCk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlOworICAgICAgICAgICAg
SlNWYWx1ZVB0ciByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBT
YW1wbGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxs
RnJhbWUsIGFzT2JqZWN0KHYpLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCi0gICAgICAgICAgICBjYWxsRnJhbWVb
ZHN0XSA9IHJldHVyblZhbHVlOworICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVl
UHRyKHJldHVyblZhbHVlKTsKIAogICAgICAgICAgICAgdlBDICs9IDU7CiAgICAgICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zNDE4LDcgKzM0MjAsNyBAQCBKU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpCiAgICAgICAgICAgICBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKS0+ZGVyZWYoKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IGNhbGxG
cmFtZVtyZXN1bHRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR1
cm5WYWx1ZSA9IGNhbGxGcmFtZVtyZXN1bHRdLmpzVmFsdWUoY2FsbEZyYW1lKTsKIAogICAgICAg
ICB2UEMgPSBjYWxsRnJhbWUtPnJldHVyblBDKCk7CiAgICAgICAgIGludCBkc3QgPSBjYWxsRnJh
bWUtPnJldHVyblZhbHVlUmVnaXN0ZXIoKTsKQEAgLTM0MjcsNyArMzQyOSw3IEBAIEpTVmFsdWUq
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+
aGFzSG9zdENhbGxGcmFtZUZsYWcoKSkKICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IAotICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IHJldHVyblZhbHVlOworICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IEpTVmFsdWVQdHIocmV0dXJuVmFsdWUpOwogCiAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKICAgICB9CkBAIC0zNDk3LDkgKzM0OTksOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgICovCiAKICAgICAgICAgaW50IHRoaXNSZWdp
c3RlciA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbCA9IGNh
bGxGcmFtZVt0aGlzUmVnaXN0ZXJdLmdldEpTVmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB0
aGlzVmFsID0gY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0uZ2V0SlNWYWx1ZSgpOwogICAgICAgICBp
ZiAodGhpc1ZhbC0+bmVlZHNUaGlzQ29udmVyc2lvbigpKQotICAgICAgICAgICAgY2FsbEZyYW1l
W3RoaXNSZWdpc3Rlcl0gPSB0aGlzVmFsLT50b1RoaXNPYmplY3QoY2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZVt0aGlzUmVnaXN0ZXJdID0gSlNWYWx1ZVB0cih0aGlzVmFsLT50b1Ro
aXNPYmplY3QoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfSU5T
VFJVQ1RJT04oKTsKQEAgLTM1NDQsNyArMzU0Niw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgaW50IHByb3RvID0gdlBDWzVdLnUub3BlcmFuZDsK
ICAgICAgICAgaW50IHRoaXNSZWdpc3RlciA9IHZQQ1s2XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
SlNWYWx1ZSogdiA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CisgICAgICAg
IEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtmdW5jXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAKICAg
ICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBDb25zdHJ1Y3RUeXBl
IGNvbnN0cnVjdFR5cGUgPSB2LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwpAQCAt
MzU1NSwxNCArMzU1NywxNCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUo
RXhlCiAgICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZmdW5jdGlvbkJvZHlO
b2RlLT5ieXRlY29kZShjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCiAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKLSAgICAgICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IGNhbGxGcmFt
ZVtwcm90b10uanNWYWx1ZShjYWxsRnJhbWUpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBwcm90
b3R5cGUgPSBjYWxsRnJhbWVbcHJvdG9dLmpzVmFsdWUoY2FsbEZyYW1lKTsKICAgICAgICAgICAg
IGlmIChwcm90b3R5cGUtPmlzT2JqZWN0KCkpCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0g
YXNPYmplY3QocHJvdG90eXBlKS0+aW5oZXJpdG9ySUQoKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjYWxsRGF0YVNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOwogICAgICAgICAgICAgSlNPYmplY3QqIG5ld09i
amVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAotICAgICAgICAg
ICAgY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0gPSBuZXdPYmplY3Q7IC8vICJ0aGlzIiB2YWx1ZQor
ICAgICAgICAgICAgY2FsbEZyYW1lW3RoaXNSZWdpc3Rlcl0gPSBKU1ZhbHVlUHRyKG5ld09iamVj
dCk7IC8vICJ0aGlzIiB2YWx1ZQogCiAgICAgICAgICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2Fs
bEZyYW1lID0gY2FsbEZyYW1lOwogCkBAIC0zNTkwLDEzICszNTkyLDEzIEBAIEpTVmFsdWUqIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAgICAgICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJl
Z2lzdGVyT2Zmc2V0KTsKICAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyA3
LCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIDApOwogCi0gICAgICAgICAg
ICBKU1ZhbHVlKiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmV0dXJuVmFs
dWU7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2Fs
bFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUsIGFzT2JqZWN0
KHYpLCBhcmdzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZVtkc3RdID0gcmV0dXJuVmFsdWU7CisgICAgICAg
ICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIocmV0dXJuVmFsdWUpOwogCiAgICAgICAg
ICAgICB2UEMgKz0gNzsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM2MzQs
MTEgKzM2MzYsMTEgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZQog
ICAgICAgICAgICBhcmUgcmVwbGFjZWQgYnkgdGhlIHJlc3VsdCBvZiB0b09iamVjdCBjb252ZXJz
aW9uIG9mIHRoZSBzY29wZS4KICAgICAgICAgKi8KICAgICAgICAgaW50IHNjb3BlID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2ID0gY2FsbEZyYW1lW3Njb3BlXS5qc1Zh
bHVlKGNhbGxGcmFtZSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IGNhbGxGcmFtZVtzY29wZV0u
anNWYWx1ZShjYWxsRnJhbWUpOwogICAgICAgICBKU09iamVjdCogbyA9IHYtPnRvT2JqZWN0KGNh
bGxGcmFtZSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAotICAgICAgICBjYWxs
RnJhbWVbc2NvcGVdID0gbzsKKyAgICAgICAgY2FsbEZyYW1lW3Njb3BlXSA9IEpTVmFsdWVQdHIo
byk7CiAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+cHVzaChvKSk7CiAKICAgICAgICAgKyt2UEM7CkBAIC0zNjgzLDkgKzM2ODUsOSBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCB0YXJn
ZXQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAKICAgICAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciogaXQgPSBjYWxsRnJhbWVbaXRlcl0ucHJvcGVydHlOYW1lSXRlcmF0b3IoKTsKLSAgICAgICAg
aWYgKEpTVmFsdWUqIHRlbXAgPSBpdC0+bmV4dChjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlUHRyIHRlbXAgPSBpdC0+bmV4dChjYWxsRnJhbWUpKSB7CiAgICAgICAgICAgICBDSEVD
S19GT1JfVElNRU9VVCgpOwotICAgICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSB0ZW1wOworICAg
ICAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBKU1ZhbHVlUHRyKHRlbXApOwogICAgICAgICAgICAg
dlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAg
fQpAQCAtMzc3Nyw3ICszNzc5LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZQogICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwogICAgICAgICBpbnQgc3JjID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBjYWxsRnJh
bWVbZHN0XSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVuZXhwZWN0ZWRDb25zdGFudChzcmMp
OworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+dW5leHBlY3RlZENvbnN0YW50KHNyYykpOwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zNzk1LDcgKzM3OTcsNyBAQCBKU1ZhbHVlKiBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlCiAgICAgICAgIGludCBtZXNzYWdlID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwogCiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICAgICAgY2FsbEZyYW1lW2RzdF0gPSBFcnJvcjo6Y3JlYXRlKGNh
bGxGcmFtZSwgKEVycm9yVHlwZSl0eXBlLCBjb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudCht
ZXNzYWdlKS0+dG9TdHJpbmcoY2FsbEZyYW1lKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0
ZWNvZGVPZmZzZXQodlBDIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSwgY29k
ZUJsb2NrLT5vd25lck5vZGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lck5vZGUoKS0+
c291cmNlVVJMKCkpOworICAgICAgICBjYWxsRnJhbWVbZHN0XSA9IEpTVmFsdWVQdHIoRXJyb3I6
OmNyZWF0ZShjYWxsRnJhbWUsIChFcnJvclR5cGUpdHlwZSwgY29kZUJsb2NrLT51bmV4cGVjdGVk
Q29uc3RhbnQobWVzc2FnZSktPnRvU3RyaW5nKGNhbGxGcmFtZSksIGNvZGVCbG9jay0+bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHZQQyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSksIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3du
ZXJOb2RlKCktPnNvdXJjZVVSTCgpKSk7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKQEAgLTM5NTYsNyArMzk1OCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZShFeGUKICAgICAjdW5kZWYgQ0hFQ0tfRk9SX1RJTUVPVVQKIH0KIAot
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6
OnJldHJpZXZlQXJndW1lbnRzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbikgY29uc3QKIHsKICAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1
bmN0aW9uQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwogICAgIGlmICghZnVuY3Rpb25D
YWxsRnJhbWUpCkBAIC0zOTgwLDcgKzM5ODIsNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6cmV0
cmlldmVBcmd1bWVudHMoCiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KIAotSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OnJldHJpZXZlQ2FsbGVyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKK0pTVmFsdWVQdHIgSW50ZXJwcmV0ZXI6OnJldHJpZXZl
Q2FsbGVyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbikg
Y29uc3QKIHsKICAgICBDYWxsRnJhbWUqIGZ1bmN0aW9uQ2FsbEZyYW1lID0gZmluZEZ1bmN0aW9u
Q2FsbEZyYW1lKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwogICAgIGlmICghZnVuY3Rpb25DYWxsRnJh
bWUpCkBAIC0zOTkwLDE0ICszOTkyLDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpyZXRyaWV2
ZUNhbGxlcihDYWwKICAgICBpZiAoY2FsbGVyRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTVmFsdWUqIGNhbGxlciA9IGNhbGxl
ckZyYW1lLT5jYWxsZWUoKTsKKyAgICBKU1ZhbHVlUHRyIGNhbGxlciA9IGNhbGxlckZyYW1lLT5j
YWxsZWUoKTsKICAgICBpZiAoIWNhbGxlcikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAg
ICAgcmV0dXJuIGNhbGxlcjsKIH0KIAotdm9pZCBJbnRlcnByZXRlcjo6cmV0cmlldmVMYXN0Q2Fs
bGVyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQmIGxpbmVOdW1iZXIsIGludHB0cl90JiBzb3Vy
Y2VJRCwgVVN0cmluZyYgc291cmNlVVJMLCBKU1ZhbHVlKiYgZnVuY3Rpb24pIGNvbnN0Cit2b2lk
IEludGVycHJldGVyOjpyZXRyaWV2ZUxhc3RDYWxsZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGlu
dCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlELCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpT
VmFsdWVQdHImIGZ1bmN0aW9uKSBjb25zdAogewogICAgIGZ1bmN0aW9uID0gbm9WYWx1ZSgpOwog
ICAgIGxpbmVOdW1iZXIgPSAtMTsKQEAgLTQwMzEsNyArNDAzMyw3IEBAIENhbGxGcmFtZSogSW50
ZXJwcmV0ZXI6OmZpbmRGdW5jdGlvbkNhbGwKIAogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJP
UEVSVFlfQUNDRVNTKQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q1RJQ2Fj
aGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9p
ZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCitORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVQdXRC
eUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcmV0
dXJuQWRkcmVzcywgSlNWYWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICAvLyBUaGUgaW50ZXJwcmV0ZXIgY2hlY2tzIGZvciByZWN1cnNpb24gaGVy
ZTsgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGNhbiBvY2N1ciBpbiBDVEkuCiAKQEAgLTQwODgsNyAr
NDA5MCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjp0cnlDVElDYWMKICNlbmRp
ZgogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6dHJ5Q1RJQ2FjaGVHZXRCeUlE
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdm9pZCogcmV0dXJu
QWRkcmVzcywgSlNWYWx1ZSogYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK05FVkVSX0lOTElORSB2b2lkIEludGVycHJl
dGVyOjp0cnlDVElDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB2b2lkKiByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgLy8gRklYTUU6IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNr
IGZvciByZWN1cnNpb24gaGVyZSBqdXN0CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9l
cywgdGhlbiBhZGQgYSBjaGVjayBmb3IgcmVjdXJzaW9uLgpAQCAtNDI4Myw3ICs0Mjg1LDcgQEAg
SlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3BfY29udmVydF90aAogewogICAgIEJFR0lOX1NU
VUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHYxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1
ZVB0ciB2MSA9IEFSR19zcmMxOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxG
cmFtZTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSB2MS0+dG9UaGlzT2JqZWN0KGNhbGxGcmFt
ZSk7CkBAIC00MzAwLDE5ICs0MzAyLDE5IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9lbmQo
U1RVQl9BUkdTKQogICAgIHNjb3BlQ2hhaW4tPmRlcmVmKCk7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfYWRkKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX2FkZChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCi0gICAgSlNWYWx1ZSogdjEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiB2MiA9
IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgdjEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHYyID0gQVJHX3NyYzI7CiAKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQgPSAw
LjA7CiAKICAgICBib29sIHJpZ2h0SXNOdW1iZXIgPSBmYXN0SXNOdW1iZXIodjIsIHJpZ2h0KTsK
ICAgICBpZiAocmlnaHRJc051bWJlciAmJiBmYXN0SXNOdW1iZXIodjEsIGxlZnQpKQotICAgICAg
ICByZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKyByaWdodCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQg
KyByaWdodCkpOwogICAgIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKIApAQCAtNDMyNCw3ICs0MzI2LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9h
ZGQoU1RVQl9BUgogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4ganNTdHJpbmcoQVJHX2dsb2JhbERhdGEsIHZhbHVlLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNTdHJpbmcoQVJHX2dsb2Jh
bERhdGEsIHZhbHVlLnJlbGVhc2UoKSkpOwogICAgIH0KIAogICAgIGlmIChyaWdodElzTnVtYmVy
ICYgbGVmdElzU3RyaW5nKSB7CkBAIC00MzM2LDI1ICs0MzM4LDI1IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfYWRkKFNUVUJfQVIKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKEFSR19nbG9iYWxEYXRhLCB2YWx1ZS5yZWxl
YXNlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzU3RyaW5nKEFSR19n
bG9iYWxEYXRhLCB2YWx1ZS5yZWxlYXNlKCkpKTsKICAgICB9CiAKICAgICAvLyBBbGwgb3RoZXIg
Y2FzZXMgYXJlIHByZXR0eSB1bmNvbW1vbgotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkU2xv
d0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNBZGRT
bG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfaW5jKFNUVUJf
QVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9p
bmMoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFs
dWUqIHYgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBBUkdfc3JjMTsKIAogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9OdW1iZXIoY2FsbEZyYW1lKSArIDEpOwor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHYtPnRvTnVt
YmVyKGNhbGxGcmFtZSkgKyAxKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQp
OwogfQogCiBpbnQgSW50ZXJwcmV0ZXI6OmN0aV90aW1lb3V0X2NoZWNrKFNUVUJfQVJHUykKQEAg
LTQzODgsOCArNDM5MCw4IEBAIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzcyhT
VFUKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0g
QVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIg
c3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAogICAgIGJvb2wgcmVzdWx0ID0g
anNMZXNzKGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CkBAIC00NDAxLDggKzQ0MDMsOCBAQCBpbnQg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcShTCiB7CiAgICAgQkVHSU5fU1RVQl9G
VU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUq
IHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBK
U1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7CiAKICAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxKGNhbGxGcmFtZSwgc3Jj
MSwgc3JjMik7CkBAIC00NDI2LDE5ICs0NDI4LDE5IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXIKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9nZW5lcmljKFNUVUJfQVJH
UykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZF9nZW5lcmljKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYg
aWRlbnQgPSAqQVJHX2lkMjsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOwor
ICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxs
RnJhbWUsIGlkZW50LCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+
Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNT
KQpAQCAtNDQ4MSw1MCArNDQ4Myw1MCBAQCB2b2lkIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5
X2lkX2ZhaWwoCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAotSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkKFNUVUJfQVJHUykKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7CiAgICAgSWRlbnRpZmllciYgaWRlbnQgPSAqQVJHX2lkMjsKIAotICAg
IEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVl
ID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1Zh
bHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKKyAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNs
b3QpOwogCiAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJF
U1MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGN0aV9vcF9nZXRfYnlfaWRfc2Vjb25kKSk7CiAK
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRl
cnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWNvbmQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7
CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJh
c2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xv
dCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlk
ZW50LCBzbG90KTsKIAogICAgIEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+dHJ5Q1RJQ2Fj
aGVHZXRCeUlEKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5f
QUREUkVTUywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6
OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1MpCiB7CiAgICAgQkVH
SU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogICAgIElkZW50aWZpZXImIGlkZW50ID0gKkFSR19pZDI7CiAKLSAgICBKU1ZhbHVl
KiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9IEFSR19z
cmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1ZSogcmVz
dWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsIGlkZW50LCBzbG90KTsKIAog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIApAQCAtNDU1OCw3ICs0NTYwLDcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKICAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKIHN0YXRpYyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBpbnQm
IGxpc3RJbmRleCkKQEAgLTQ1OTAsMjEgKzQ1OTIsMjEgQEAgc3RhdGljIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHJldHVybiBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0Owog
fQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KFNU
VUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9wcm90b19saXN0KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9O
KCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBK
U1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSA9
IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7Cisg
ICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChjYWxsRnJhbWUsICpBUkdfaWQy
LCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAogICAgIGlmIChKU0ltbWVk
aWF0ZTo6aXNJbW1lZGlhdGUoYmFzZVZhbHVlKSB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpIHx8IGFz
Q2VsbChiYXNlVmFsdWUpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhc0NlbGwoYmFzZVZhbHVlKS0+
c3RydWN0dXJlKCk7CkBAIC00NjQ4LDY3ICs0NjUwLDY3IEBAIEpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkX3AKICAgICB9IGVsc2UKICAgICAgICAgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3RfZnVsbChTVFVCX0FSR1MpCitKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
bGlzdF9mdWxsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAg
ICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWx1
ZSA9IEFSR19zcmMxOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgSlNW
YWx1ZSogcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFtZSwgKkFSR19pZDIsIHNs
b3QpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYmFzZVZhbHVlLT5nZXQoQVJHX2NhbGxGcmFt
ZSwgKkFSR19pZDIsIHNsb3QpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFp
bChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9nZXRfYnlfaWRfcHJvdG9fZmFpbChTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5D
VElPTigpOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1
ZVB0ciBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0KEFSR19jYWxsRnJhbWUs
ICpBUkdfaWQyLCBzbG90KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGJhc2VWYWx1ZS0+Z2V0
KEFSR19jYWxsRnJhbWUsICpBUkdfaWQyLCBzbG90KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTKQogewogICAgIEJF
R0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIGJhc2VWYWx1ZSA9IEFSR19zcmMx
OworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChB
UkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBi
YXNlVmFsdWUtPmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CiAKICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9B
UkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIGJhc2VW
YWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgYmFzZVZhbHVlID0gQVJHX3NyYzE7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBi
YXNlVmFsdWUtPmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xvdCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBiYXNlVmFsdWUtPmdldChBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMiwgc2xv
dCk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiAjZW5kaWYK
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJHUykKK0pT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YoU1RV
Ql9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IEFSR19zcmMx
OwotICAgIEpTVmFsdWUqIGJhc2VWYWwgPSBBUkdfc3JjMjsKLSAgICBKU1ZhbHVlKiBwcm90byA9
IEFSR19zcmMzOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVl
UHRyIGJhc2VWYWwgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHByb3RvID0gQVJHX3NyYzM7
CiAKICAgICAvLyBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgY2hlY2tzIG11c3QgaGF2ZSBmYWlsZWQg
dG8gZ2V0IHRvIHRoZSBzbG93IGNhc2UKICAgICBBU1NFUlQoSlNJbW1lZGlhdGU6OmlzQW55SW1t
ZWRpYXRlKHZhbHVlLCBiYXNlVmFsLCBwcm90bykgCkBAIC00NzI0LDcgKzQ3MjYsNyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YoCiAgICAgfQogCiAgICAgaWYgKCFh
c09iamVjdChiYXNlVmFsKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW1wbGVtZW50c0hhc0lu
c3RhbmNlKCkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCiAgICAgaWYgKCFwcm90
by0+aXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgVHlwZUVycm9y
LCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdpdGggYW4gaW52YWxpZCBwcm90b3R5
cGUgcHJvcGVydHkuIik7CkBAIC00NzMyLDE1ICs0NzM0LDE1IEBAIEpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfaW5zdGFuY2VvZigKICAgICB9CiAgICAgICAgIAogICAgIGlmICghdmFsdWUt
PmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNCb29sZWFuKGFzT2JqZWN0KGJhc2VWYWwpLT5oYXNJbnN0YW5jZShjYWxs
RnJhbWUsIHZhbHVlLCBwcm90bykpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFu
KGFzT2JqZWN0KGJhc2VWYWwpLT5oYXNJbnN0YW5jZShjYWxsRnJhbWUsIHZhbHVlLCBwcm90bykp
OwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJHUykKIHsKICAg
ICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKQEAgLTQ3NDgsMjcgKzQ3NTAsMjcgQEAgSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQoUwogICAgIAogICAgIEpTT2JqZWN0KiBi
YXNlT2JqID0gQVJHX3NyYzEtPnRvT2JqZWN0KGNhbGxGcmFtZSk7CiAKLSAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCAqQVJH
X2lkMikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGJhc2VPYmotPmRlbGV0
ZVByb3BlcnR5KGNhbGxGcmFtZSwgKkFSR19pZDIpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVu
Y29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX211bChTVFVC
X0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwo
U1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUq
IHNyYzEgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNW
YWx1ZVB0ciBzcmMxID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7
CiAKICAgICBkb3VibGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQ7CiAgICAgaWYgKGZhc3RJc051
bWJlcihzcmMxLCBsZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKiByaWdodCk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgKiBy
aWdodCkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJl
cihjYWxsRnJhbWUpICogc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZy
YW1lKSAqIHNyYzItPnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19m
dW5jKFNUVUJfQVJHUykKQEAgLTQ4NzksMTEgKzQ4ODEsMTEgQEAgSlNPYmplY3QqIEludGVycHJl
dGVyOjpjdGlfb3BfcHVzaF9hY3RpdgogICAgIHJldHVybiBhY3RpdmF0aW9uOwogfQogCi1KU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihTVFVCX0FSR1MpCitK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVu
Y3Rpb24oU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpT
VmFsdWUqIGZ1bmNWYWwgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmNWYWwgPSBBUkdf
c3JjMTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
ZnVuY1ZhbC0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwpAQCAtNDkwMiwxMiArNDkwNCwxMiBAQCBK
U1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGCiAgICAgICAgIFJlZ2lzdGVy
KiBhcmd2ID0gQVJHX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUgLSBhcmdDb3VudDsKICAgICAgICAgQXJnTGlzdCBhcmdMaXN0KGFyZ3Yg
KyAxLCBhcmdDb3VudCAtIDEpOwogCi0gICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVlOworICAg
ICAgICBKU1ZhbHVlUHRyIHJldHVyblZhbHVlOwogICAgICAgICB7CiAgICAgICAgICAgICBTYW1w
bGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBMRVIpOwogCiAgICAg
ICAgICAgICAvLyBGSVhNRTogQWxsIGhvc3QgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGluZyB0b1Ro
aXNPYmplY3QsIGJ1dCB0aGlzIGlzIG5vdCBwcmVzZW50bHkgdGhlIGNhc2UuCi0gICAgICAgICAg
ICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSBhcmd2WzBdLmpzVmFsdWUoY2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVQdHIgdGhpc1ZhbHVlID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBpZiAodGhpc1ZhbHVlID09IGpzTnVsbCgpKQogICAgICAgICAgICAgICAg
IHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+Z2xvYmFsVGhpc1ZhbHVlKCk7CiAKQEAgLTQ5MTYsNyAr
NDkxOCw3IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0YKICAgICAg
ICAgQVJHX3NldENhbGxGcmFtZShwcmV2aW91c0NhbGxGcmFtZSk7CiAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKIAotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmV0dXJuVmFsdWUpOwogICAgIH0KIAogICAgIEFTU0VS
VChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOwpAQCAtNDk5Myw3ICs0OTk1LDcgQEAgSlNPYmpl
Y3QqIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2FycmF5KAogICAgIHJldHVybiBjb25zdHJ1Y3RB
cnJheShBUkdfY2FsbEZyYW1lLCBhcmdMaXN0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9yZXNvbHZlKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRl
cnByZXRlcjo6Y3RpX29wX3Jlc29sdmUoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVO
Q1RJT04oKTsKIApAQCAtNTAwOSw5ICs1MDExLDkgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9yZXNvbHZlKFNUVQogICAgICAgICBKU09iamVjdCogbyA9ICppdGVyOwogICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChvKTsKICAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxs
RnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKICAgICAgICAgICAgIENIRUNL
X0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAg
ICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CiAKQEAgLTUwMzgsMTMgKzUwNDAsMTMgQEAgSlNP
YmplY3QqIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0XwogICAgIHJldHVybiBuZXcgKEFS
R19nbG9iYWxEYXRhKSBKU09iamVjdChzdHJ1Y3R1cmUpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1MpCitKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25z
dHJ1Y3QoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAgIEpTVmFsdWUqIGNvbnN0
clZhbCA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgY29uc3RyVmFsID0gQVJHX3NyYzE7CiAg
ICAgaW50IGFyZ0NvdW50ID0gQVJHX2ludDM7CiAgICAgaW50IHRoaXNSZWdpc3RlciA9IEFSR19p
bnQ1OwogCkBAIC01MDU0LDE0ICs1MDU2LDE0IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlf
b3BfY29uc3RydWN0X04KICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9z
dCkgewogICAgICAgICBBcmdMaXN0IGFyZ0xpc3QoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHRo
aXNSZWdpc3RlciArIDEsIGFyZ0NvdW50IC0gMSk7CiAKLSAgICAgICAgSlNWYWx1ZSogcmV0dXJu
VmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgcmV0dXJuVmFsdWU7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExF
Uik7CiAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGNhbGxGcmFtZSwgYXNPYmplY3QoY29uc3RyVmFsKSwgYXJnTGlzdCk7CiAgICAgICAgIH0K
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogCi0gICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXR1cm5WYWx1ZSk7CiAg
ICAgfQogCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpOwpA
QCAtNTA3MiwxNyArNTA3NCwxNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0
cnVjdF9OCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxs
RnJhbWU7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gQVJHX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyOwogCi0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7Ci0gICAgSlNW
YWx1ZSogc3Vic2NyaXB0ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBiYXNlVmFsdWUgPSBB
Ukdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHN1YnNjcmlwdCA9IEFSR19zcmMyOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHVuc2lnbmVkIGk7CiAK
ICAgICBib29sIGlzVUludDMyID0gSlNJbW1lZGlhdGU6OmdldFVJbnQzMihzdWJzY3JpcHQsIGkp
OwpAQCAtNTEwMyw3ICs1MTA1LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfdmFsKAogICAgIH0KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKIFZvaWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5jKFNUVUJfQVJH
UykKQEAgLTUxMzQsMTAgKzUxMzYsMTAgQEAgVm9pZFB0clBhaXIgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9yZXNvbHZlXwogICAgICAgICAgICAgLy8gdGhhdCBpbiBob3N0IG9iamVjdHMgeW91IGFsd2F5
cyBnZXQgYSB2YWxpZCBvYmplY3QgZm9yIHRoaXMuCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGhh
bmRsZSB3cmFwcGVyIHN1YnN0aXR1dGlvbiBmb3IgdGhlIGdsb2JhbCBvYmplY3QgYXQgdGhlIHNh
bWUgdGltZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gYmFzZS0+dG9UaGlzT2Jq
ZWN0KGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBz
bG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnQpOwogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKIAotICAgICAgICAgICAgUkVUVVJOX1BBSVIodGhpc09iaiwgYXNQ
b2ludGVyKHJlc3VsdCkpOworICAgICAgICAgICAgUkVUVVJOX1BBSVIodGhpc09iaiwgSlNWYWx1
ZVB0cjo6ZW5jb2RlKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgICAgICsraXRlcjsKICAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7CkBAIC01MTQ4LDIyICs1MTUwLDIyIEBAIFZvaWRQdHJQYWly
IEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV8KICAgICBWTV9USFJPV19FWENFUFRJT05fMigp
OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N1YihTVFVCX0FSR1MpCitKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIoU1RVQl9BUkdTKQog
ewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdf
c3JjMTsKLSAgICBKU1ZhbHVlKiBzcmMyID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciBzcmMx
ID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzcmMyID0gQVJHX3NyYzI7CiAKICAgICBkb3Vi
bGUgbGVmdDsKICAgICBkb3VibGUgcmlnaHQ7CiAgICAgaWYgKGZhc3RJc051bWJlcihzcmMxLCBs
ZWZ0KSAmJiBmYXN0SXNOdW1iZXIoc3JjMiwgcmlnaHQpKQotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgLSByaWdodCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
UHRyOjplbmNvZGUoanNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgLSByaWdodCkpOwogCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMxLT50b051bWJlcihjYWxsRnJhbWUp
IC0gc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBq
c051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzIt
PnRvTnVtYmVyKGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHUykK
QEAgLTUxNzMsOSArNTE3NSw5IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFs
KFNUVUIKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyOwogCi0g
ICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3Vic2NyaXB0
ID0gQVJHX3NyYzI7Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBBUkdfc3JjMzsKKyAgICBKU1ZhbHVl
UHRyIGJhc2VWYWx1ZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3Vic2NyaXB0ID0gQVJH
X3NyYzI7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IEFSR19zcmMzOwogCiAgICAgdW5zaWduZWQg
aTsKIApAQCAtNTIwNiw5ICs1MjA4LDkgQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV92YWxfYXJyYQogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
Ci0gICAgSlNWYWx1ZSogYmFzZVZhbHVlID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBiYXNl
VmFsdWUgPSBBUkdfc3JjMTsKICAgICBpbnQgaSA9IEFSR19pbnQyOwotICAgIEpTVmFsdWUqIHZh
bHVlID0gQVJHX3NyYzM7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IEFSR19zcmMzOwogCiAgICAg
QVNTRVJUKEFSR19nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+aXNKU0FycmF5KGJhc2VWYWx1ZSkp
OwogCkBAIC01MjI2LDIxICs1MjI4LDIxIEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRf
YnlfdmFsX2FycmEKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCi1KU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2xlc3NlcShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2Rl
ZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sZXNzZXEoU1RVQl9BUkdTKQogewogICAg
IEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJH
X2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEoY2Fs
bEZyYW1lLCBBUkdfc3JjMSwgQVJHX3NyYzIpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
Qm9vbGVhbihqc0xlc3NFcShjYWxsRnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIGludCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2xvb3BfaWZfdHJ1ZShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMSA9
IEFSR19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwog
CkBAIC01MjQ5LDMwICs1MjUxLDMwIEBAIGludCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZf
dHJ1ZShTVFUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6
Y3RpX29wX25lZ2F0ZShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9uZWdhdGUoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJ
T04oKTsKIAotICAgIEpTVmFsdWUqIHNyYyA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3Jj
ID0gQVJHX3NyYzE7CiAKICAgICBkb3VibGUgdjsKICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYywg
dikpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgLXYpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAtdikp
OwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAtc3JjLT50b051bWJlcihjYWxs
RnJhbWUpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCAtc3JjLT50b051bWJlcihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FU
X0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfYmFz
ZShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9yZXNvbHZlX2Jhc2UoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IAotICAgIHJldHVybiBpbmxpbmVSZXNvbHZlQmFzZShBUkdfY2FsbEZyYW1lLCAqQVJHX2lkMSwg
QVJHX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5j
b2RlKGlubGluZVJlc29sdmVCYXNlKEFSR19jYWxsRnJhbWUsICpBUkdfaWQxLCBBUkdfY2FsbEZy
YW1lLT5zY29wZUNoYWluKCkpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9y
ZXNvbHZlX3NraXAoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9za2lwKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZV
TkNUSU9OKCk7CiAKQEAgLTUyOTMsOSArNTI5NSw5IEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpj
dGlfb3BfcmVzb2x2ZV9za2kKICAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3Qobyk7CiAgICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2Fs
bEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNs
b3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJl
c3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKICAgICAgICAgfQog
ICAgIH0gd2hpbGUgKCsraXRlciAhPSBlbmQpOwogCkBAIC01MzA1LDcgKzUzMDcsNyBAQCBKU1Zh
bHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpCiAgICAgVk1fVEhST1dfRVhDRVBU
SU9OKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwo
U1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bf
cmVzb2x2ZV9nbG9iYWwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IApAQCAtNTMxNyw3ICs1MzE5LDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNv
bHZlX2dsbwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAo
Z2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aWRlbnQpOwogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZSgpICYmICFnbG9iYWxPYmplY3Qt
PnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICAgICAgR2xvYmFsUmVzb2x2
ZUluZm8mIGdsb2JhbFJlc29sdmVJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2xvYmFs
UmVzb2x2ZUluZm8oZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCk7CiAgICAgICAgICAgICBpZiAoZ2xv
YmFsUmVzb2x2ZUluZm8uc3RydWN0dXJlKQpAQCAtNTMyNSwxMSArNTMyNywxMSBAQCBKU1ZhbHVl
KiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZ2xvCiAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5yZWYoKTsKICAgICAgICAgICAgIGdsb2JhbFJlc29sdmVJbmZvLnN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICBnbG9iYWxS
ZXNvbHZlSW5mby5vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0
KTsKICAgICAgICAgfQogCiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCB2UENJbmRleCA9IEFSR19jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5nZXRCeXRlY29kZUluZGV4KFNUVUJfUkVUVVJOX0FERFJFU1MpOwpAQCAt
NTMzNyw0MiArNTMzOSw0MiBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVf
Z2xvCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfZGl2KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2RpdihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBB
Ukdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIGRvdWJsZSBsZWZ0OwogICAgIGRvdWJsZSByaWdodDsK
ICAgICBpZiAoZmFzdElzTnVtYmVyKHNyYzEsIGxlZnQpICYmIGZhc3RJc051bWJlcihzcmMyLCBy
aWdodCkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAvIHJp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgbGVmdCAvIHJpZ2h0KSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFS
R19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsIHNyYzEtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLT50b051bWJlcihjYWxsRnJhbWUp
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBzcmMx
LT50b051bWJlcihjYWxsRnJhbWUpIC8gc3JjMi0+dG9OdW1iZXIoY2FsbEZyYW1lKSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9wcmVfZGVjKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX3ByZV9kZWMoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJf
RlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHYgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHYgPSBBUkdfc3JjMTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFt
ZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgdi0+dG9O
dW1iZXIoY2FsbEZyYW1lKSAtIDEpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIo
QVJHX2dsb2JhbERhdGEsIHYtPnRvTnVtYmVyKGNhbGxGcmFtZSkgLSAxKTsKICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCiBpbnQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9q
bGVzcyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNW
YWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAg
ICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdf
c3JjMjsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBi
b29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIpOwpAQCAtNTM4MCwyNCAr
NTM4MiwyNCBAQCBpbnQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbGVzcyhTVFVCX0FSR1MpCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9ub3QoU1RV
Ql9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bfbm90
KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVl
KiBzcmMgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYyA9IEFSR19zcmMxOwogCiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0gICAgSlNWYWx1ZSogcmVz
dWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVl
UHRyIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLT50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogaW50IEludGVycHJldGVyOjpj
dGlfb3BfanRydWUoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAot
ICAgIEpTVmFsdWUqIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdf
c3JjMTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIApAQCAt
NTQxMCwxMDMgKzU0MTIsMTAzIEBAIFZvaWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlfb3BfcG9z
dF9pbmMKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiB2ID0g
QVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciB2ID0gQVJHX3NyYzE7CiAKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVlKiBudW1iZXIgPSB2LT50
b0pTTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgSlNWYWx1ZVB0ciBudW1iZXIgPSB2LT50b0pTTnVt
YmVyKGNhbGxGcmFtZSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAg
IFJFVFVSTl9QQUlSKGFzUG9pbnRlcihudW1iZXIpLCBhc1BvaW50ZXIoanNOdW1iZXIoQVJHX2ds
b2JhbERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKSkpOworICAgIFJFVFVS
Tl9QQUlSKEpTVmFsdWVQdHI6OmVuY29kZShudW1iZXIpLCBKU1ZhbHVlUHRyOjplbmNvZGUoanNO
dW1iZXIoQVJHX2dsb2JhbERhdGEsIG51bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgKyAxKSkp
OwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2VxKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2VxKFNUVUJfQVJHUykKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3Ny
YzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9
IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCiAgICAgQVNTRVJUKCFKU0ltbWVkaWF0
ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpOwotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGpzQm9vbGVhbihlcXVhbFNsb3dDYXNlSW5saW5lKGNhbGxGcmFtZSwgc3JjMSwgc3Jj
MikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGVxdWFsU2xvd0Nhc2VJbmxp
bmUoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hpZnQoU1RVQl9B
UkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0
KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVl
KiB2YWwgPSBBUkdfc3JjMTsKLSAgICBKU1ZhbHVlKiBzaGlmdCA9IEFSR19zcmMyOworICAgIEpT
VmFsdWVQdHIgdmFsID0gQVJHX3NyYzE7CisgICAgSlNWYWx1ZVB0ciBzaGlmdCA9IEFSR19zcmMy
OwogCiAgICAgaW50MzJfdCBsZWZ0OwogICAgIHVpbnQzMl90IHJpZ2h0OwogICAgIGlmIChKU0lt
bWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCi0gICAgICAgIHJl
dHVybiBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZElu
dDMyKHZhbCkgPDwgKEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoc2hpZnQpICYgMHgx
ZikpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9i
YWxEYXRhLCBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodmFsKSA8PCAoSlNJbW1lZGlh
dGU6OmdldFRydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSkpOwogICAgIGlmIChmYXN0VG9J
bnQzMih2YWwsIGxlZnQpICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgPDwgKHJpZ2h0ICYgMHgxZikpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCBsZWZ0IDw8IChyaWdodCAmIDB4MWYpKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2Jh
bERhdGEsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPDwgKHNoaWZ0LT50b1VJbnQzMihjYWxs
RnJhbWUpICYgMHgxZikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2ds
b2JhbERhdGEsICh2YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPDwgKHNoaWZ0LT50b1VJbnQzMihj
YWxsRnJhbWUpICYgMHgxZikpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKFNUVUJfQVJHUykKK0pT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZChTVFVCX0FS
R1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9
IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRy
IHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAg
IGludDMyX3QgbGVmdDsKICAgICBpbnQzMl90IHJpZ2h0OwogICAgIGlmIChmYXN0VG9JbnQzMihz
cmMxLCBsZWZ0KSAmJiBmYXN0VG9JbnQzMihzcmMyLCByaWdodCkpCi0gICAgICAgIHJldHVybiBq
c051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAmIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVQdHI6OmVuY29kZShqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgbGVmdCAmIHJpZ2h0KSk7
CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50MzIoY2FsbEZy
YW1lKSAmIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJhbWUpICYgc3Jj
Mi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShyZXN1
bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3JzaGlmdChTVFVCX0FSR1Mp
CitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9yc2hpZnQoU1RV
Ql9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHZh
bCA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1
ZVB0ciB2YWwgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0gQVJHX3NyYzI7CiAK
ICAgICBpbnQzMl90IGxlZnQ7CiAgICAgdWludDMyX3QgcmlnaHQ7CiAgICAgaWYgKEpTSW1tZWRp
YXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSkKLSAgICAgICAgcmV0dXJu
IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdElt
bWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpOwogICAgIGlmIChmYXN0VG9JbnQzMih2YWwsIGxl
ZnQpICYmIGZhc3RUb1VJbnQzMihzaGlmdCwgcmlnaHQpKQotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoQVJHX2dsb2JhbERhdGEsIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZikpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBsZWZ0ID4+IChy
aWdodCAmIDB4MWYpKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2YWwt
PnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYgMHgx
ZikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsICh2
YWwtPnRvSW50MzIoY2FsbEZyYW1lKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihjYWxsRnJhbWUpICYg
MHgxZikpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFs
dWUqIEludGVycHJldGVyOjpjdGlfb3BfYml0bm90KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG5vdChTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjID0gQVJHX3NyYzE7Cisg
ICAgSlNWYWx1ZVB0ciBzcmMgPSBBUkdfc3JjMTsKIAogICAgIGludCB2YWx1ZTsKICAgICBpZiAo
ZmFzdFRvSW50MzIoc3JjLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBqc051bWJlcihBUkdfZ2xv
YmFsRGF0YSwgfnZhbHVlKTsKLSAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZVB0
cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+dmFsdWUpKTsKKwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c051bWJlcihBUkdfZ2xvYmFsRGF0YSwgfnNyYy0+dG9JbnQzMihjYWxsRnJhbWUpKTsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCB+c3JjLT50b0ludDMy
KGNhbGxGcmFtZSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
IFZvaWRQdHJQYWlyIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UoU1RVQl9B
UkdTKQpAQCAtNTUyOSwxMCArNTUzMSwxMCBAQCBWb2lkUHRyUGFpciBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Jlc29sdmVfCiAgICAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZSk7CiAgICAgICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CiAgICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwogCi0gICAgICAgICAgICBSRVRVUk5fUEFJUihiYXNlLCBhc1Bv
aW50ZXIocmVzdWx0KSk7CisgICAgICAgICAgICBSRVRVUk5fUEFJUihiYXNlLCBKU1ZhbHVlUHRy
OjplbmNvZGUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyOwogICAgIH0gd2hp
bGUgKGl0ZXIgIT0gZW5kKTsKQEAgLTU1NTAsODkgKzU1NTIsODkgQEAgSlNPYmplY3QqIEludGVy
cHJldGVyOjpjdGlfb3BfbmV3X2Z1bmNfZQogICAgIHJldHVybiBBUkdfZnVuY2V4cDEtPm1ha2VG
dW5jdGlvbihBUkdfY2FsbEZyYW1lLCBBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogfQog
Ci1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX21vZChTVFVCX0FSR1MpCitKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9tb2QoU1RVQl9BUkdTKQogewogICAg
IEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIGRpdmlkZW5kVmFsdWUgPSBB
Ukdfc3JjMTsKLSAgICBKU1ZhbHVlKiBkaXZpc29yVmFsdWUgPSBBUkdfc3JjMjsKKyAgICBKU1Zh
bHVlUHRyIGRpdmlkZW5kVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGRpdmlzb3JW
YWx1ZSA9IEFSR19zcmMyOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwogICAgIGRvdWJsZSBkID0gZGl2aWRlbmRWYWx1ZS0+dG9OdW1iZXIoY2FsbEZyYW1lKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgZm1vZChkLCBk
aXZpc29yVmFsdWUtPnRvTnVtYmVyKGNhbGxGcmFtZSkpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3Vs
dCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBmbW9kKGQsIGRpdmlzb3JWYWx1ZS0+dG9OdW1i
ZXIoY2FsbEZyYW1lKSkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3BfbGVzcyhTVFVCX0FSR1MpCitKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9sZXNzKFNUVUJfQVJHUykKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEFSR19jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGpzTGVzcyhj
YWxsRnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0g
anNCb29sZWFuKGpzTGVzcyhjYWxsRnJhbWUsIEFSR19zcmMxLCBBUkdfc3JjMikpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfbmVxKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnBy
ZXRlcjo6Y3RpX29wX25lcShTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwotICAgIEpTVmFsdWUqIHNyYzIgPSBB
Ukdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
QVJHX2NhbGxGcmFtZTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xv
d0Nhc2VJbmxpbmUoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc0Jvb2xlYW4oIWVxdWFsU2xvd0Nhc2VJbmxpbmUoY2FsbEZyYW1lLCBzcmMxLCBzcmMy
KSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogVm9pZFB0clBh
aXIgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0X2RlYyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5f
U1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogdiA9IEFSR19zcmMxOworICAgIEpTVmFs
dWVQdHIgdiA9IEFSR19zcmMxOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogCi0gICAgSlNWYWx1ZSogbnVtYmVyID0gdi0+dG9KU051bWJlcihjYWxsRnJhbWUp
OworICAgIEpTVmFsdWVQdHIgbnVtYmVyID0gdi0+dG9KU051bWJlcihjYWxsRnJhbWUpOwogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICBSRVRVUk5fUEFJUihhc1BvaW50
ZXIobnVtYmVyKSwgYXNQb2ludGVyKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCBudW1iZXItPnVu
Y2hlY2tlZEdldE51bWJlcigpIC0gMSkpKTsKKyAgICBSRVRVUk5fUEFJUihKU1ZhbHVlUHRyOjpl
bmNvZGUobnVtYmVyKSwgSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVtYmVyKEFSR19nbG9iYWxEYXRh
LCBudW1iZXItPnVuY2hlY2tlZEdldE51bWJlcigpIC0gMSkpKTsKIH0KIAotSlNWYWx1ZSogSW50
ZXJwcmV0ZXI6OmN0aV9vcF91cnNoaWZ0KFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX3Vyc2hpZnQoU1RVQl9BUkdTKQogewogICAgIEJFR0lO
X1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIEpTVmFsdWUqIHZhbCA9IEFSR19zcmMxOwotICAgIEpT
VmFsdWUqIHNoaWZ0ID0gQVJHX3NyYzI7CisgICAgSlNWYWx1ZVB0ciB2YWwgPSBBUkdfc3JjMTsK
KyAgICBKU1ZhbHVlUHRyIHNoaWZ0ID0gQVJHX3NyYzI7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IEFSR19jYWxsRnJhbWU7CiAKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1l
ZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpICYmICFKU0ltbWVkaWF0ZTo6aXNOZWdhdGl2ZSh2YWwp
KQotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJz
KHZhbCwgc2hpZnQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRp
YXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKEFSR19nbG9iYWxEYXRhLCAodmFs
LT50b1VJbnQzMihjYWxsRnJhbWUpKSA+PiAoc2hpZnQtPnRvVUludDMyKGNhbGxGcmFtZSkgJiAw
eDFmKSk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERh
dGEsICh2YWwtPnRvVUludDMyKGNhbGxGcmFtZSkpID4+IChzaGlmdC0+dG9VSW50MzIoY2FsbEZy
YW1lKSAmIDB4MWYpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShy
ZXN1bHQpOwogICAgIH0KIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3Io
U1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3Bf
Yml0eG9yKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBK
U1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFSR19zcmMyOwor
ICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIgc3JjMiA9IEFS
R19zcmMyOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwogCi0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNyYzEtPnRvSW50
MzIoY2FsbEZyYW1lKSBeIHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQzMihjYWxsRnJh
bWUpIF4gc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVu
Y29kZShyZXN1bHQpOwogfQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfcmVn
ZXhwKFNUVUJfQVJHUykKQEAgLTU2NDIsMjEgKzU2NDQsMjEgQEAgSlNPYmplY3QqIEludGVycHJl
dGVyOjpjdGlfb3BfbmV3X3JlZ2V4cAogICAgIHJldHVybiBuZXcgKEFSR19nbG9iYWxEYXRhKSBS
ZWdFeHBPYmplY3QoQVJHX2NhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgQVJHX3JlZ2V4cDEpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2JpdG9yKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRl
cjo6Y3RpX29wX2JpdG9yKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3JjMiA9IEFS
R19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQdHIg
c3JjMiA9IEFSR19zcmMyOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZy
YW1lOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoQVJHX2dsb2JhbERhdGEsIHNy
YzEtPnRvSW50MzIoY2FsbEZyYW1lKSB8IHNyYzItPnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAg
SlNWYWx1ZVB0ciByZXN1bHQgPSBqc051bWJlcihBUkdfZ2xvYmFsRGF0YSwgc3JjMS0+dG9JbnQz
MihjYWxsRnJhbWUpIHwgc3JjMi0+dG9JbnQzMihjYWxsRnJhbWUpKTsKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEpTVmFs
dWVQdHI6OmVuY29kZShyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29w
X2NhbGxfZXZhbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF9jYWxsX2V2YWwoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJ
T04oKTsKIApAQCAtNTY2NSwyOSArNTY2NywyOSBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX2NhbGxfZXZhbChTCiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBBUkdfZ2xv
YmFsRGF0YS0+aW50ZXJwcmV0ZXI7CiAgICAgCi0gICAgSlNWYWx1ZSogZnVuY1ZhbCA9IEFSR19z
cmMxOworICAgIEpTVmFsdWVQdHIgZnVuY1ZhbCA9IEFSR19zcmMxOwogICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IEFSR19pbnQyOwogICAgIGludCBhcmdDb3VudCA9IEFSR19pbnQzOwogCiAgICAg
UmVnaXN0ZXIqIG5ld0NhbGxGcmFtZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rl
ck9mZnNldDsKICAgICBSZWdpc3RlciogYXJndiA9IG5ld0NhbGxGcmFtZSAtIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50OwotICAgIEpTVmFsdWUqIHRoaXNWYWx1
ZSA9IGFyZ3ZbMF0uanNWYWx1ZShjYWxsRnJhbWUpOworICAgIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
ID0gYXJndlswXS5qc1ZhbHVlKGNhbGxGcmFtZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKTsKIAogICAg
IGlmICh0aGlzVmFsdWUgPT0gZ2xvYmFsT2JqZWN0ICYmIGZ1bmNWYWwgPT0gZ2xvYmFsT2JqZWN0
LT5ldmFsRnVuY3Rpb24oKSkgewotICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25WYWx1ZSA9IG5v
VmFsdWUoKTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gaW50ZXJwcmV0ZXItPmNhbGxFdmFs
KGNhbGxGcmFtZSwgcmVnaXN0ZXJGaWxlLCBhcmd2LCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQs
IGV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBleGNlcHRpb25WYWx1ZSA9IG5v
VmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnRlcnByZXRlci0+Y2FsbEV2
YWwoY2FsbEZyYW1lLCByZWdpc3RlckZpbGUsIGFyZ3YsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNl
dCwgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoZXhjZXB0aW9uVmFsdWUg
IT0gbm9WYWx1ZSgpKSkgewogICAgICAgICAgICAgQVJHX2dsb2JhbERhdGEtPmV4Y2VwdGlvbiA9
IGV4Y2VwdGlvblZhbHVlOwogICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlUHRyOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNJbW1lZGlhdGU6
OmltcG9zc2libGVWYWx1ZSgpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1l
ZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0
aV9vcF90aHJvdyhTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0
ZXI6OmN0aV9vcF90aHJvdyhTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigp
OwogCkBAIC01Njk2LDIxICs1Njk4LDIxIEBAIEpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfb3Bf
dGhyb3coU1RVQl8KIAogICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5nZXRCeXRl
Y29kZUluZGV4KFNUVUJfUkVUVVJOX0FERFJFU1MpOwogCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9u
VmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvblZhbHVlID0gQVJHX3Ny
YzE7CiAgICAgQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsKIAogICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyID0gQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT50aHJvd0V4Y2VwdGlvbihjYWxsRnJh
bWUsIGV4Y2VwdGlvblZhbHVlLCB2UENJbmRleCwgdHJ1ZSk7CiAKICAgICBpZiAoIWhhbmRsZXIp
IHsKICAgICAgICAgKkFSR19leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKLSAgICAgICAgcmV0
dXJuIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
UHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKSk7CiAgICAgfQogCiAgICAg
QVJHX3NldENhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgIHZvaWQqIGNhdGNoUm91dGluZSA9IGhh
bmRsZXItPm5hdGl2ZUNvZGU7CiAgICAgQVNTRVJUKGNhdGNoUm91dGluZSk7CiAgICAgU1RVQl9T
RVRfUkVUVVJOX0FERFJFU1MoY2F0Y2hSb3V0aW5lKTsKLSAgICByZXR1cm4gZXhjZXB0aW9uVmFs
dWU7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShleGNlcHRpb25WYWx1ZSk7CiB9CiAK
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X3BuYW1lcyhT
VFVCX0FSR1MpCkBAIC01NzIwLDE1ICs1NzIyLDE1IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IEludGVycHJldGVyOjpjdGkKICAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3Jl
YXRlKEFSR19jYWxsRnJhbWUsIEFSR19zcmMxKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6
OmN0aV9vcF9uZXh0X3BuYW1lKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJ
bnRlcnByZXRlcjo6Y3RpX29wX25leHRfcG5hbWUoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NU
VUJfRlVOQ1RJT04oKTsKIAogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGl0ID0gQVJHX3Bu
aTE7Ci0gICAgSlNWYWx1ZSogdGVtcCA9IGl0LT5uZXh0KEFSR19jYWxsRnJhbWUpOworICAgIEpT
VmFsdWVQdHIgdGVtcCA9IGl0LT5uZXh0KEFSR19jYWxsRnJhbWUpOwogICAgIGlmICghdGVtcCkK
ICAgICAgICAgaXQtPmludmFsaWRhdGUoKTsKLSAgICByZXR1cm4gdGVtcDsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKHRlbXApOwogfQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9wdXNoX3Njb3BlKFNUVUJfQVJHUykKQEAgLTU3NDgsMTAyICs1NzUwLDEwMiBAQCB2b2lk
IEludGVycHJldGVyOjpjdGlfb3BfcG9wX3Njb3BlKFNUVUJfCiAgICAgQVJHX2NhbGxGcmFtZS0+
c2V0U2NvcGVDaGFpbihBUkdfY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnBvcCgpKTsKIH0KIAot
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF90eXBlb2YoU1RVQl9BUkdTKQorSlNWYWx1ZUVu
Y29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfdHlwZW9mKFNUVUJfQVJHUykKIHsK
ICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICByZXR1cm4ganNUeXBlU3RyaW5nRm9y
VmFsdWUoQVJHX2NhbGxGcmFtZSwgQVJHX3NyYzEpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUoanNUeXBlU3RyaW5nRm9yVmFsdWUoQVJHX2NhbGxGcmFtZSwgQVJHX3NyYzEpKTsKIH0K
IAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc191bmRlZmluZWQoU1RVQl9BUkdTKQor
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaXNfdW5kZWZpbmVk
KFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1ZhbHVl
KiB2ID0gQVJHX3NyYzE7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihKU0ltbWVkaWF0ZTo6aXNJbW1l
ZGlhdGUodikgPyB2LT5pc1VuZGVmaW5lZCgpIDogdi0+YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSk7CisgICAgSlNWYWx1ZVB0ciB2ID0g
QVJHX3NyYzE7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHYpID8gdi0+aXNVbmRlZmluZWQoKSA6IHYtPmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkpKTsKIH0KIAot
SlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19ib29sZWFuKFNUVUJfQVJHUykKK0pTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX2Jvb2xlYW4oU1RVQl9B
UkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc0Jvb2xl
YW4oQVJHX3NyYzEtPmlzQm9vbGVhbigpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzQm9vbGVhbihBUkdfc3JjMS0+aXNCb29sZWFuKCkpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJw
cmV0ZXI6OmN0aV9vcF9pc19udW1iZXIoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqIEludGVycHJldGVyOjpjdGlfb3BfaXNfbnVtYmVyKFNUVUJfQVJHUykKIHsKICAgICBCRUdJ
Tl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICByZXR1cm4ganNCb29sZWFuKEFSR19zcmMxLT5pc051
bWJlcigpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihBUkdfc3Jj
MS0+aXNOdW1iZXIoKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX3N0
cmluZyhTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9pc19zdHJpbmcoU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsK
IAotICAgIHJldHVybiBqc0Jvb2xlYW4oQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5pc0pT
U3RyaW5nKEFSR19zcmMxKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xl
YW4oQVJHX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5pc0pTU3RyaW5nKEFSR19zcmMxKSkpOwog
fQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2lzX29iamVjdChTVFVCX0FSR1MpCitK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19vYmplY3QoU1RV
Ql9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIAotICAgIHJldHVybiBqc0Jv
b2xlYW4oanNJc09iamVjdFR5cGUoQVJHX3NyYzEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZW5jb2RlKGpzQm9vbGVhbihqc0lzT2JqZWN0VHlwZShBUkdfc3JjMSkpKTsKIH0KIAotSlNWYWx1
ZSogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19mdW5jdGlvbihTVFVCX0FSR1MpCitKU1ZhbHVlRW5j
b2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9pc19mdW5jdGlvbihTVFVCX0FSR1Mp
CiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihq
c0lzRnVuY3Rpb25UeXBlKEFSR19zcmMxKSk7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29k
ZShqc0Jvb2xlYW4oanNJc0Z1bmN0aW9uVHlwZShBUkdfc3JjMSkpKTsKIH0KIAotSlNWYWx1ZSog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9zdHJpY3RlcShTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdHJpY3RlcShTVFVCX0FSR1MpCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc3JjMSA9IEFSR19zcmMxOwot
ICAgIEpTVmFsdWUqIHNyYzIgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIHNyYzEgPSBBUkdf
c3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYzIgPSBBUkdfc3JjMjsKIAogICAgIC8vIGhhbmRsZWQg
aW5saW5lIGFzIGZhc3QgY2FzZXMKICAgICBBU1NFUlQoIUpTSW1tZWRpYXRlOjphcmVCb3RoSW1t
ZWRpYXRlKHNyYzEsIHNyYzIpKTsKICAgICBBU1NFUlQoIShKU0ltbWVkaWF0ZTo6aXNFaXRoZXJJ
bW1lZGlhdGUoc3JjMSwgc3JjMikgJiAoc3JjMSAhPSBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0
ZSgpKSAmIChzcmMyICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7CiAKLSAgICBy
ZXR1cm4ganNCb29sZWFuKHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoc3JjMSwgc3JjMikpOwor
ICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHN0cmljdEVxdWFsU2xvd0Nh
c2VJbmxpbmUoc3JjMSwgc3JjMikpKTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9uc3RyaWN0ZXEoU1RVQl9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJl
dGVyOjpjdGlfb3BfbnN0cmljdGVxKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNU
SU9OKCk7CiAKLSAgICBKU1ZhbHVlKiBzcmMxID0gQVJHX3NyYzE7Ci0gICAgSlNWYWx1ZSogc3Jj
MiA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgc3JjMSA9IEFSR19zcmMxOworICAgIEpTVmFs
dWVQdHIgc3JjMiA9IEFSR19zcmMyOwogCiAgICAgLy8gaGFuZGxlZCBpbmxpbmUgYXMgZmFzdCBj
YXNlcwogICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUoc3JjMSwgc3Jj
MikpOwogICAgIEFTU0VSVCghKEpTSW1tZWRpYXRlOjppc0VpdGhlckltbWVkaWF0ZShzcmMxLCBz
cmMyKSAmIChzcmMxICE9IEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpICYgKHNyYzIgIT0g
SlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSkpKTsKICAgICAKLSAgICByZXR1cm4ganNCb29s
ZWFuKCFzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKHNyYzEsIHNyYzIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbighc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShz
cmMxLCBzcmMyKSkpOwogfQogCi1KU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX3RvX2pzbnVt
YmVyKFNUVUJfQVJHUykKK0pTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBJbnRlcnByZXRlcjo6Y3Rp
X29wX3RvX2pzbnVtYmVyKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7
CiAKLSAgICBKU1ZhbHVlKiBzcmMgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNyYyA9IEFS
R19zcmMxOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKIAotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IHNyYy0+dG9KU051bWJlcihjYWxsRnJhbWUpOworICAgIEpTVmFs
dWVQdHIgcmVzdWx0ID0gc3JjLT50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBKU1Zh
bHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAotSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV9v
cF9pbihTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSW50ZXJwcmV0ZXI6OmN0
aV9vcF9pbihTVFVCX0FSR1MpCiB7CiAgICAgQkVHSU5fU1RVQl9GVU5DVElPTigpOwogCiAgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2FsbEZyYW1lOwotICAgIEpTVmFsdWUqIGJhc2VW
YWwgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIGJhc2VWYWwgPSBBUkdfc3JjMjsKIAogICAg
IGlmICghYmFzZVZhbC0+aXNPYmplY3QoKSkgewogICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IEFSR19jYWxsRnJhbWU7CkBAIC01ODUzLDE2ICs1ODU1LDE2IEBAIEpTVmFsdWUqIEludGVy
cHJldGVyOjpjdGlfb3BfaW4oU1RVQl9BUkcKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7
CiAgICAgfQogCi0gICAgSlNWYWx1ZSogcHJvcE5hbWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVl
UHRyIHByb3BOYW1lID0gQVJHX3NyYzE7CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVj
dChiYXNlVmFsKTsKIAogICAgIHVpbnQzMl90IGk7CiAgICAgaWYgKHByb3BOYW1lLT5nZXRVSW50
MzIoaSkpCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9iai0+aGFzUHJvcGVydHkoY2Fs
bEZyYW1lLCBpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFu
KGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaSkpKTsKIAogICAgIElkZW50aWZpZXIg
cHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wTmFtZS0+dG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgIHJldHVybiBqc0Jvb2xlYW4oYmFzZU9iai0+aGFz
UHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eSkpOworICAgIHJldHVybiBKU1ZhbHVlUHRyOjpl
bmNvZGUoanNCb29sZWFuKGJhc2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVydHkp
KSk7CiB9CiAKIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfbmV3X3Njb3BlKFNU
VUJfQVJHUykKQEAgLTU5MDMsNyArNTkwNSw3IEBAIHZvaWQqIEludGVycHJldGVyOjpjdGlfb3Bf
c3dpdGNoX2ltbShTVFUKIHsKICAgICBCRUdJTl9TVFVCX0ZVTkNUSU9OKCk7CiAKLSAgICBKU1Zh
bHVlKiBzY3J1dGluZWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRyIHNjcnV0aW5lZSA9IEFS
R19zcmMxOwogICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBBUkdfaW50MjsKICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtNTkyMCw3ICs1OTIyLDcgQEAgdm9pZCogSW50
ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcihTVAogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJ
T04oKTsKIAotICAgIEpTVmFsdWUqIHNjcnV0aW5lZSA9IEFSR19zcmMxOworICAgIEpTVmFsdWVQ
dHIgc2NydXRpbmVlID0gQVJHX3NyYzE7CiAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IEFSR19p
bnQyOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC01OTQwLDcgKzU5
NDIsNyBAQCB2b2lkKiBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9zdHJpbmcoCiB7CiAgICAg
QkVHSU5fU1RVQl9GVU5DVElPTigpOwogCi0gICAgSlNWYWx1ZSogc2NydXRpbmVlID0gQVJHX3Ny
YzE7CisgICAgSlNWYWx1ZVB0ciBzY3J1dGluZWUgPSBBUkdfc3JjMTsKICAgICB1bnNpZ25lZCB0
YWJsZUluZGV4ID0gQVJHX2ludDI7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBBUkdfY2Fs
bEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKQEAgLTU5NTUsMTcgKzU5NTcsMTcgQEAgdm9pZCogSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0
Y2hfc3RyaW5nKAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVy
OjpjdGlfb3BfZGVsX2J5X3ZhbChTVFVCX0FSR1MpCitKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciog
SW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfdmFsKFNUVUJfQVJHUykKIHsKICAgICBCRUdJTl9T
VFVCX0ZVTkNUSU9OKCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEFSR19jYWxsRnJh
bWU7CiAKLSAgICBKU1ZhbHVlKiBiYXNlVmFsdWUgPSBBUkdfc3JjMTsKKyAgICBKU1ZhbHVlUHRy
IGJhc2VWYWx1ZSA9IEFSR19zcmMxOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZVZhbHVl
LT50b09iamVjdChjYWxsRnJhbWUpOyAvLyBtYXkgdGhyb3cKIAotICAgIEpTVmFsdWUqIHN1YnNj
cmlwdCA9IEFSR19zcmMyOwotICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHN1
YnNjcmlwdCA9IEFSR19zcmMyOworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHVpbnQzMl90
IGk7CiAgICAgaWYgKHN1YnNjcmlwdC0+Z2V0VUludDMyKGkpKQogICAgICAgICByZXN1bHQgPSBq
c0Jvb2xlYW4oYmFzZU9iai0+ZGVsZXRlUHJvcGVydHkoY2FsbEZyYW1lLCBpKSk7CkBAIC01OTc3
LDcgKzU5NzksNyBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwoCiAg
ICAgfQogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUocmVzdWx0KTsKIH0KIAogdm9pZCBJ
bnRlcnByZXRlcjo6Y3RpX29wX3B1dF9nZXR0ZXIoU1RVQl9BUkdTKQpAQCAtNjAxMSw3ICs2MDEz
LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Vycm9yKAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gQVJHX2NhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgdHlwZSA9IEFSR19pbnQx
OwotICAgIEpTVmFsdWUqIG1lc3NhZ2UgPSBBUkdfc3JjMjsKKyAgICBKU1ZhbHVlUHRyIG1lc3Nh
Z2UgPSBBUkdfc3JjMjsKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gQVJHX2ludDM7CiAKICAg
ICByZXR1cm4gRXJyb3I6OmNyZWF0ZShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEVycm9yVHlwZT4o
dHlwZSksIG1lc3NhZ2UtPnRvU3RyaW5nKGNhbGxGcmFtZSksIGxpbmVOdW1iZXIsIGNvZGVCbG9j
ay0+b3duZXJOb2RlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJOb2RlKCktPnNvdXJj
ZVVSTCgpKTsKQEAgLTYwMzAsNyArNjAzMiw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmN0aV9vcF9k
ZWJ1ZyhTVFVCX0FSR1MKICAgICBBUkdfZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmRlYnVnKGNh
bGxGcmFtZSwgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5l
LCBsYXN0TGluZSk7CiB9CiAKLUpTVmFsdWUqIEludGVycHJldGVyOjpjdGlfdm1fdGhyb3coU1RV
Ql9BUkdTKQorSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEludGVycHJldGVyOjpjdGlfdm1fdGhy
b3coU1RVQl9BUkdTKQogewogICAgIEJFR0lOX1NUVUJfRlVOQ1RJT04oKTsKIApAQCAtNjA0MCw3
ICs2MDQyLDcgQEAgSlNWYWx1ZSogSW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdyhTVFVCXwogCiAg
ICAgdW5zaWduZWQgdlBDSW5kZXggPSBjb2RlQmxvY2stPmdldEJ5dGVjb2RlSW5kZXgoZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pOwogCi0gICAgSlNWYWx1ZSogZXhjZXB0aW9uVmFsdWUg
PSBnbG9iYWxEYXRhLT5leGNlcHRpb247CisgICAgSlNWYWx1ZVB0ciBleGNlcHRpb25WYWx1ZSA9
IGdsb2JhbERhdGEtPmV4Y2VwdGlvbjsKICAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwogICAg
IGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKIApAQCAtNjA0OCwxNCArNjA1MCwx
NCBAQCBKU1ZhbHVlKiBJbnRlcnByZXRlcjo6Y3RpX3ZtX3Rocm93KFNUVUJfCiAKICAgICBpZiAo
IWhhbmRsZXIpIHsKICAgICAgICAgKkFSR19leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKLSAg
ICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Om51bGxJbW1lZGlhdGUoKSk7CiAgICAg
fQogCiAgICAgQVJHX3NldENhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgIHZvaWQqIGNhdGNoUm91
dGluZSA9IGhhbmRsZXItPm5hdGl2ZUNvZGU7CiAgICAgQVNTRVJUKGNhdGNoUm91dGluZSk7CiAg
ICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoY2F0Y2hSb3V0aW5lKTsKLSAgICByZXR1cm4gZXhj
ZXB0aW9uVmFsdWU7CisgICAgcmV0dXJuIEpTVmFsdWVQdHI6OmVuY29kZShleGNlcHRpb25WYWx1
ZSk7CiB9CiAKICN1bmRlZiBTVFVCX1JFVFVSTl9BRERSRVNTCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDEz
ICsxNDAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc09wY29kZShPcGNv
ZGUpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShQcm9ncmFtTm9kZSosIENh
bGxGcmFtZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNPYmplY3QqIHRoaXNPYmosIEpTVmFsdWUqKiBl
eGNlcHRpb24pOwotICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqLCBD
YWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7Ci0gICAgICAgIEpT
VmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBDYWxsRnJhbWUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2Vw
dGlvbik7Ci0KLSAgICAgICAgSlNWYWx1ZSogcmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiwg
SlNGdW5jdGlvbiopIGNvbnN0OwotICAgICAgICBKU1ZhbHVlKiByZXRyaWV2ZUNhbGxlcihDYWxs
RnJhbWUqLCBJbnRlcm5hbEZ1bmN0aW9uKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmV0cmlldmVM
YXN0Q2FsbGVyKENhbGxGcmFtZSosIGludCYgbGluZU51bWJlciwgaW50cHRyX3QmIHNvdXJjZUlE
LCBVU3RyaW5nJiBzb3VyY2VVUkwsIEpTVmFsdWUqJiBmdW5jdGlvbikgY29uc3Q7CisgICAgICAg
IEpTVmFsdWVQdHIgZXhlY3V0ZShQcm9ncmFtTm9kZSosIENhbGxGcmFtZSosIFNjb3BlQ2hhaW5O
b2RlKiwgSlNPYmplY3QqIHRoaXNPYmosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbik7CisgICAgICAg
IEpTVmFsdWVQdHIgZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiwgQ2FsbEZyYW1lKiwgSlNGdW5j
dGlvbiosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWlu
Tm9kZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWVQdHIgZXhlY3V0
ZShFdmFsTm9kZSogZXZhbE5vZGUsIENhbGxGcmFtZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24pOworCisg
ICAgICAgIEpTVmFsdWVQdHIgcmV0cmlldmVBcmd1bWVudHMoQ2FsbEZyYW1lKiwgSlNGdW5jdGlv
biopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIHJldHJpZXZlQ2FsbGVyKENhbGxGcmFtZSos
IEludGVybmFsRnVuY3Rpb24qKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RDYWxs
ZXIoQ2FsbEZyYW1lKiwgaW50JiBsaW5lTnVtYmVyLCBpbnRwdHJfdCYgc291cmNlSUQsIFVTdHJp
bmcmIHNvdXJjZVVSTCwgSlNWYWx1ZVB0ciYgZnVuY3Rpb24pIGNvbnN0OwogICAgICAgICAKICAg
ICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qJiwgcHRy
ZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7
CiAgICAgICAgIHZvaWQgc2V0VGltZW91dFRpbWUodW5zaWduZWQgdGltZW91dFRpbWUpIHsgbV90
aW1lb3V0VGltZSA9IHRpbWVvdXRUaW1lOyB9CkBAIC0xODMsOCArMTgzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfY29udmVy
dF90aGlzKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9l
bmQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9h
ZGQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9w
cmVfaW5jKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSklUX1NUVUIgY3RpX29wX2FkZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9wcmVfaW5jKFNUVUJfQVJHUyk7CiAg
ICAgICAgIHN0YXRpYyBpbnQgSklUX1NUVUIgY3RpX29wX2xvb3BfaWZfbGVzcyhTVFVCX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgaW50IEpJVF9TVFVCIGN0aV9vcF9sb29wX2lmX2xlc3NlcShTVFVC
X0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfb2Jq
ZWN0KFNUVUJfQVJHUyk7CkBAIC0xOTIsMjIgKzE5MiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9zZWNvbmQoU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRf
YnlfaWRfZmFpbChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIg
Y3RpX29wX2dldF9ieV9pZChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklU
X1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWNvbmQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGlj
IEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYyhTVFVCX0FSR1MpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2Zh
aWwoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fbGlzdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSog
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RVQl9BUkdTKTsKLSAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFp
bChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dl
dF9ieV9pZF9hcnJheV9mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHUyk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X2lkKFNUVUJfQVJHUyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FS
R1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX211bChTVFVCX0FS
R1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0
aV9vcF9nZXRfYnlfaWQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZChTVFVCX0FSR1MpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfaWRfZ2VuZXJpYyhTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX2dldF9ieV9pZF9wcm90b19saXN0KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0
X2Z1bGwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVy
KiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwoU1RVQl9BUkdTKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVk
QXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX2RlbF9ieV9pZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRB
c1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJHUyk7CisgICAgICAg
IHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX211bChTVFVC
X0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfZnVu
YyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxf
SlNGdW5jdGlvbihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgVm9pZFB0clBhaXIgSklUX1NU
VUIgY3RpX29wX2NhbGxfYXJpdHlDaGVjayhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogSklUX1NUVUIgY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbihTVFVCX0FSR1MpOworICAg
ICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9jYWxs
X05vdEpTRnVuY3Rpb24oU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQg
SklUX1NUVUIgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKFNUVUJfQVJHUyk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNU
VUJfQVJHUyk7CkBAIC0yMTYsNzEgKzIxNiw3MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwoU1RVQl9BUkdTKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX3JldF9zY29wZUNoYWluKFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25ld19hcnJh
eShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3Jl
c29sdmUoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9v
cF9yZXNvbHZlX2dsb2JhbChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlKFNUVUJfQVJHUyk7CisgICAgICAg
IHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVf
Z2xvYmFsKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU09iamVjdCogSklUX1NUVUIgY3Rp
X29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdChTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSogSklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1Mp
OwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWwoU1RV
Ql9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RV
QiBjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0KFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWwo
U1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9y
ZXNvbHZlX2Z1bmMoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVC
IGN0aV9vcF9zdWIoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBKSVRfU1RVQiBjdGlfb3Bfc3ViKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRp
YyB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KFNUVUJfQVJHUyk7Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbGVzc2VxKFNUVUJfQVJHUyk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2xl
c3NlcShTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgaW50IEpJVF9TVFVCIGN0aV9vcF9sb29w
X2lmX3RydWUoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0
aV9vcF9yZXNvbHZlX2Jhc2UoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9uZWdhdGUoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3NraXAoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGlj
IEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9kaXYoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGlj
IEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9wcmVfZGVjKFNUVUJfQVJHUyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfYmFz
ZShTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJ
VF9TVFVCIGN0aV9vcF9uZWdhdGUoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV9za2lwKFNUVUJfQVJHUyk7
CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29w
X2RpdihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIq
IEpJVF9TVFVCIGN0aV9vcF9wcmVfZGVjKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBpbnQg
SklUX1NUVUIgY3RpX29wX2psZXNzKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBKSVRfU1RVQiBjdGlfb3Bfbm90KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
RW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX25vdChTVFVCX0FSR1MpOwogICAgICAg
ICBzdGF0aWMgaW50IEpJVF9TVFVCIGN0aV9vcF9qdHJ1ZShTVFVCX0FSR1MpOwogICAgICAgICBz
dGF0aWMgVm9pZFB0clBhaXIgSklUX1NUVUIgY3RpX29wX3Bvc3RfaW5jKFNUVUJfQVJHUyk7Ci0g
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfZXEoU1RVQl9BUkdTKTsKLSAg
ICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9sc2hpZnQoU1RVQl9BUkdTKTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9iaXRhbmQoU1RVQl9BUkdT
KTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9yc2hpZnQoU1RVQl9B
UkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9iaXRub3QoU1RV
Ql9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RV
QiBjdGlfb3BfZXEoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbHNoaWZ0KFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRp
YyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2JpdGFuZChTVFVCX0FS
R1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0
aV9vcF9yc2hpZnQoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQ
b2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfYml0bm90KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRp
YyBWb2lkUHRyUGFpciBKSVRfU1RVQiBjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UoU1RVQl9BUkdT
KTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X2Z1bmNfZXhw
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbW9k
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfbGVz
cyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX25l
cShTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJ
VF9TVFVCIGN0aV9vcF9tb2QoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbGVzcyhTVFVCX0FSR1MpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9uZXEoU1RVQl9B
UkdTKTsKICAgICAgICAgc3RhdGljIFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9wb3N0X2Rl
YyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX3Vy
c2hpZnQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9v
cF9iaXR4b3IoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfdXJzaGlmdChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9iaXR4b3IoU1RVQl9BUkdT
KTsKICAgICAgICAgc3RhdGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfbmV3X3JlZ2V4cChT
VFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX2JpdG9y
KFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfY2Fs
bF9ldmFsKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlf
b3BfdGhyb3coU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2lu
dGVyKiBKSVRfU1RVQiBjdGlfb3BfYml0b3IoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9ldmFsKFNUVUJfQVJH
Uyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3Rp
X29wX3Rocm93KFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBKSVRfU1RVQiBjdGlfb3BfZ2V0X3BuYW1lcyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogSklUX1NUVUIgY3RpX29wX25leHRfcG5hbWUoU1RVQl9BUkdTKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfbmV4dF9w
bmFtZShTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9v
cF9wdXNoX3Njb3BlKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wb3Bfc2NvcGUoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9T
VFVCIGN0aV9vcF90eXBlb2YoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJ
VF9TVFVCIGN0aV9vcF9pc191bmRlZmluZWQoU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9pc19ib29sZWFuKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfbnVtYmVyKFNUVUJfQVJHUyk7Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfc3RyaW5nKFNUVUJfQVJHUyk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfb2JqZWN0KFNUVUJf
QVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBKSVRfU1RVQiBjdGlfb3BfaXNfZnVuY3Rp
b24oU1RVQl9BUkdTKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV9vcF9z
dHJpY3RlcShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIgY3Rp
X29wX25zdHJpY3RlcShTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NU
VUIgY3RpX29wX3RvX2pzbnVtYmVyKFNUVUJfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBKSVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVF
bmNvZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfdHlwZW9mKFNUVUJfQVJHUyk7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX3Vu
ZGVmaW5lZChTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50
ZXIqIEpJVF9TVFVCIGN0aV9vcF9pc19ib29sZWFuKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRp
YyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX251bWJlcihTVFVC
X0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVC
IGN0aV9vcF9pc19zdHJpbmcoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfaXNfb2JqZWN0KFNUVUJfQVJHUyk7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX2lzX2Z1
bmN0aW9uKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRl
ciogSklUX1NUVUIgY3RpX29wX3N0cmljdGVxKFNUVUJfQVJHUyk7CisgICAgICAgIHN0YXRpYyBK
U1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogSklUX1NUVUIgY3RpX29wX25zdHJpY3RlcShTVFVCX0FS
R1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0
aV9vcF90b19qc251bWJlcihTVFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1MpOwogICAgICAgICBzdGF0
aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9wdXNoX25ld19zY29wZShTVFVCX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3Bfam1wX3Njb3BlcyhTVFVCX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJf
QVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bfc3dpdGNoX2ltbShT
VFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9j
aGFyKFNUVUJfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bfc3dp
dGNoX3N0cmluZyhTVFVCX0FSR1MpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogSklUX1NUVUIg
Y3RpX29wX2RlbF9ieV92YWwoU1RVQl9BUkdTKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKiBKSVRfU1RVQiBjdGlfb3BfZGVsX2J5X3ZhbChTVFVCX0FSR1MpOwogICAg
ICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dldHRlcihTVFVCX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X3NldHRlcihTVFVCX0FSR1Mp
OwogICAgICAgICBzdGF0aWMgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfZXJyb3IoU1RV
Ql9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJf
QVJHUyk7CiAKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIEpJVF9TVFVCIGN0aV92bV90aHJvdyhT
VFVCX0FSR1MpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIEpJVF9T
VFVCIGN0aV92bV90aHJvdyhTVFVCX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCogSklUX1NU
VUIgY3RpX3ZtX2RvbnRMYXp5TGlua0NhbGwoU1RVQl9BUkdTKTsKICAgICAgICAgc3RhdGljIHZv
aWQqIEpJVF9TVFVCIGN0aV92bV9sYXp5TGlua0NhbGwoU1RVQl9BUkdTKTsKICAgICAgICAgc3Rh
dGljIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKFNUVUJfQVJHUyk7
CkBAIC0yOTAsNDMgKzI5MCw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRGVmYXVs
dCBudW1iZXIgb2YgdGlja3MgYmVmb3JlIGEgdGltZW91dCBjaGVjayBzaG91bGQgYmUgZG9uZS4K
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50VGhyZXNob2xkID0gMTAy
NDsKIAotICAgICAgICBib29sIGlzSlNBcnJheShKU1ZhbHVlKiB2KSB7IHJldHVybiAhSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHYpICYmIHYtPmFzQ2VsbCgpLT52cHRyKCkgPT0gbV9qc0FycmF5
VnB0cjsgfQotICAgICAgICBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSogdikgeyByZXR1cm4gIUpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0cigpID09IG1fanNT
dHJpbmdWcHRyOyB9CisgICAgICAgIGJvb2wgaXNKU0FycmF5KEpTVmFsdWVQdHIgdikgeyByZXR1
cm4gIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0cigpID09
IG1fanNBcnJheVZwdHI7IH0KKyAgICAgICAgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWVQdHIgdikg
eyByZXR1cm4gIUpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSAmJiB2LT5hc0NlbGwoKS0+dnB0
cigpID09IG1fanNTdHJpbmdWcHRyOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBlbnVtIEV4
ZWN1dGlvbkZsYWcgeyBOb3JtYWwsIEluaXRpYWxpemVBbmRSZXR1cm4gfTsKIAotICAgICAgICBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSogY2FsbEV2YWwoQ2FsbEZyYW1lKiwgUmVnaXN0ZXJGaWxlKiwg
UmVnaXN0ZXIqIGFyZ3YsIGludCBhcmdjLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIEpTVmFsdWUqJiBl
eGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBDYWxs
RnJhbWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0LCBT
Y29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBORVZFUl9JTkxJ
TkUgSlNWYWx1ZVB0ciBjYWxsRXZhbChDYWxsRnJhbWUqLCBSZWdpc3RlckZpbGUqLCBSZWdpc3Rl
ciogYXJndiwgaW50IGFyZ2MsIGludCByZWdpc3Rlck9mZnNldCwgSlNWYWx1ZVB0ciYgZXhjZXB0
aW9uVmFsdWUpOworICAgICAgICBKU1ZhbHVlUHRyIGV4ZWN1dGUoRXZhbE5vZGUqLCBDYWxsRnJh
bWUqLCBKU09iamVjdCogdGhpc09iamVjdCwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0LCBTY29w
ZUNoYWluTm9kZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlvbik7CiAKICAgICAgICAgTkVWRVJfSU5M
SU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGlu
dCBsYXN0TGluZSk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZShDYWxsRnJh
bWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIE5F
VkVSX0lOTElORSBib29sIHJlc29sdmVTa2lwKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNW
YWx1ZSomIGV4Y2VwdGlvblZhbHVlKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2
ZUdsb2JhbChDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1
ZSk7CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmUoQ2FsbEZyYW1lKiwgSW5zdHJ1
Y3Rpb24qLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIE5FVkVSX0lOTElO
RSBib29sIHJlc29sdmVTa2lwKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciYg
ZXhjZXB0aW9uVmFsdWUpOworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlR2xvYmFs
KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1ZVB0ciYgZXhjZXB0aW9uVmFsdWUpOwog
ICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCByZXNvbHZlQmFzZShDYWxsRnJhbWUqLCBJbnN0cnVj
dGlvbiogdlBDKTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZUJhc2VBbmRQcm9w
ZXJ0eShDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSk7
CisgICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVCYXNlQW5kUHJvcGVydHkoQ2FsbEZy
YW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CiAgICAgICAg
IE5FVkVSX0lOTElORSBTY29wZUNoYWluTm9kZSogY3JlYXRlRXhjZXB0aW9uU2NvcGUoQ2FsbEZy
YW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAKLSAgICAgICAgTkVWRVJfSU5MSU5FIGJv
b2wgdW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlKiwgdW5zaWduZWQmIGJ5dGVj
b2RlT2Zmc2V0LCBDb2RlQmxvY2sqJik7Ci0gICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogdGhyb3dFeGNlcHRpb24oQ2FsbEZyYW1lKiYsIEpTVmFsdWUqJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIGJvb2wpOwotICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlQmFzZUFu
ZEZ1bmMoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUp
OworICAgICAgICBORVZFUl9JTkxJTkUgYm9vbCB1bndpbmRDYWxsRnJhbWUoQ2FsbEZyYW1lKiYs
IEpTVmFsdWVQdHIsIHVuc2lnbmVkJiBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiYpOworICAg
ICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHRocm93RXhjZXB0aW9uKENhbGxGcmFtZSom
LCBKU1ZhbHVlUHRyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGJvb2wpOworICAgICAgICBO
RVZFUl9JTkxJTkUgYm9vbCByZXNvbHZlQmFzZUFuZEZ1bmMoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rp
b24qLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25WYWx1ZSk7CiAKICAgICAgICAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgQ2FsbEZyYW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sq
LCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmdjKTsKIAogICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVuY3Rpb25DYWxsRnJhbWUo
Q2FsbEZyYW1lKiwgSW50ZXJuYWxGdW5jdGlvbiopOwogCi0gICAgICAgIEpTVmFsdWUqIHByaXZh
dGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFs
dWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlUHRyIHByaXZhdGVFeGVjdXRlKEV4ZWN1
dGlvbkZsYWcsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWVQdHIqIGV4Y2VwdGlv
bik7CiAKICAgICAgICAgdm9pZCBkdW1wQ2FsbEZyYW1lKENhbGxGcmFtZSopOwogICAgICAgICB2
b2lkIGR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKik7CiAKLSAgICAgICAgSlNWYWx1ZSogY2hlY2tU
aW1lb3V0KEpTR2xvYmFsT2JqZWN0Kik7CisgICAgICAgIGJvb2wgY2hlY2tUaW1lb3V0KEpTR2xv
YmFsT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcmVzZXRUaW1lb3V0Q2hlY2soKTsKIAotICAgICAg
ICB2b2lkIHRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlv
biosIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlDYWNoZUdldEJ5SUQoQ2FsbEZy
YW1lKiwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlUHRyIGJhc2VWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgdm9pZCB1bmNhY2hlR2V0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsKLSAg
ICAgICAgdm9pZCB0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgSW5zdHJ1
Y3Rpb24qLCBKU1ZhbHVlKiBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYpOworICAg
ICAgICB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqLCBDb2RlQmxvY2sqLCBJbnN0cnVj
dGlvbiosIEpTVmFsdWVQdHIgYmFzZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdm9pZCB1bmNhY2hlUHV0QnlJRChDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiogdlBDKTsK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNDYWxsQnl0ZWNvZGUoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IGdldE9wY29kZShvcF9jYWxsKSB8fCBvcGNvZGUgPT0gZ2V0T3Bjb2Rl
KG9wX2NvbnN0cnVjdCkgfHwgb3Bjb2RlID09IGdldE9wY29kZShvcF9jYWxsX2V2YWwpOyB9CkBA
IC0zMzQsOCArMzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgc3RhdGljIHZvaWQgdGhyb3dTdGFja092ZXJmbG93UHJldmlvdXNGcmFtZShDYWxsRnJhbWUq
KiwgSlNHbG9iYWxEYXRhKiwgdm9pZComIHJldHVybkFkZHJlc3MpOwogCi0gICAgICAgIHZvaWQg
dHJ5Q1RJQ2FjaGVHZXRCeUlEKENhbGxGcmFtZSosIENvZGVCbG9jayosIHZvaWQqIHJldHVybkFk
ZHJlc3MsIEpTVmFsdWUqIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCB0cnlDVElDYWNoZVB1dEJ5SUQo
Q2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSogYmFz
ZVZhbHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdm9pZCB0cnlDVElDYWNo
ZUdldEJ5SUQoQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdm9pZCogcmV0dXJuQWRkcmVzcywgSlNW
YWx1ZVB0ciBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgdHJ5Q1RJQ2FjaGVQdXRCeUlEKENhbGxGcmFt
ZSosIENvZGVCbG9jayosIHZvaWQqIHJldHVybkFkZHJlc3MsIEpTVmFsdWVQdHIgYmFzZVZhbHVl
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmKTsKICNlbmRpZgogCiAgICAgICAgIFNhbXBsaW5nVG9v
bCogbV9zYW1wbGVyOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShy
ZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBSZWdpc3RlciB7CiAgICAgcHVibGljOgogICAgICAgICBSZWdpc3RlcigpOwotICAgICAg
ICBSZWdpc3RlcihKU1ZhbHVlKik7CisgICAgICAgIFJlZ2lzdGVyKEpTVmFsdWVQdHIpOwogCi0g
ICAgICAgIEpTVmFsdWUqIGpzVmFsdWUoQ2FsbEZyYW1lKikgY29uc3Q7Ci0gICAgICAgIEpTVmFs
dWUqIGdldEpTVmFsdWUoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBqc1ZhbHVlKENhbGxG
cmFtZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldEpTVmFsdWUoKSBjb25zdDsKIAog
ICAgICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTg5
LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAg
IGludHB0cl90IGk7CiAgICAgICAgICAgICB2b2lkKiB2OwotICAgICAgICAgICAgSlNWYWx1ZSog
dmFsdWU7CisgICAgICAgICAgICBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogdmFsdWU7CiAKICAg
ICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbjsKICAgICAgICAgICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzOwpAQCAtMTM1LDI5ICsxMzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgU0VUX1RZUEUoRW1wdHlUeXBlKTsKLSAgICAgICAg
KnRoaXMgPSBub1ZhbHVlKCk7CisgICAgICAgIHUudmFsdWUgPSBKU1ZhbHVlUHRyOjplbmNvZGUo
bm9WYWx1ZSgpKTsKICNlbmRpZgogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXI6
OlJlZ2lzdGVyKEpTVmFsdWUqIHYpCisgICAgQUxXQVlTX0lOTElORSBSZWdpc3Rlcjo6UmVnaXN0
ZXIoSlNWYWx1ZVB0ciB2KQogICAgIHsKICAgICAgICAgU0VUX1RZUEUoVmFsdWVUeXBlKTsKLSAg
ICAgICAgdS52YWx1ZSA9IHY7CisgICAgICAgIHUudmFsdWUgPSBKU1ZhbHVlUHRyOjplbmNvZGUo
dik7CiAgICAgfQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBzY2FmZm9sZGluZyBmb3IgbGVn
YWN5IGNsaWVudHMuIEl0IHdpbGwgZXZlbnR1YWxseSBnbyBhd2F5LgotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogUmVnaXN0ZXI6OmpzVmFsdWUoQ2FsbEZyYW1lKikgY29uc3QKKyAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWVQdHIgUmVnaXN0ZXI6OmpzVmFsdWUoQ2FsbEZyYW1lKikgY29uc3QK
ICAgICB7CiAgICAgICAgIC8vIE9uY2UgcmVnaXN0ZXJzIGhvbGQgZG91YmxlcywgdGhpcyBmdW5j
dGlvbiB3aWxsIGFsbG9jYXRlIGEgSlNWYWx1ZSoKICAgICAgICAgLy8gaWYgdGhlIHJlZ2lzdGVy
IGRvZXNuJ3QgaG9sZCBvbmUgYWxyZWFkeS4gCiAgICAgICAgIEFTU0VSVF9UWVBFKFZhbHVlVHlw
ZSk7Ci0gICAgICAgIHJldHVybiB1LnZhbHVlOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6
ZGVjb2RlKHUudmFsdWUpOwogICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IFJlZ2lzdGVyOjpnZXRKU1ZhbHVlKCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQ
dHIgUmVnaXN0ZXI6OmdldEpTVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1RZ
UEUoSlNWYWx1ZVR5cGUpOwotICAgICAgICByZXR1cm4gdS52YWx1ZTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVQdHI6OmRlY29kZSh1LnZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lO
TElORSBib29sIFJlZ2lzdGVyOjptYXJrZWQoKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5l
KSAiOiIgCiAKIGV4dGVybiAiQyIgewogICAgIAotICAgIF9fZGVjbHNwZWMobmFrZWQpIEpTVmFs
dWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwg
SlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKikKKyAgICBfX2Rl
Y2xzcGVjKG5ha2VkKSBKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlciogY3RpVHJhbXBvbGluZSh2b2lk
KiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24s
IFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopCiAgICAgewogICAgICAgICBfX2FzbSB7CiAgICAg
ICAgICAgICBwdXNoIGVicDsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
U3RyaWN0RXEoSW5zdHJ1Y3Rpb24qCiAgICAgSnVtcCBib3RoV2VyZUltbWVkaWF0ZXNCdXROb3RF
cXVhbCA9IGpuZTMyKFg4Njo6ZWR4LCBYODY6OmVheCk7CiAKICAgICAvLyBUaGV5IGFyZSBlcXVh
bCAtIHNldCB0aGUgcmVzdWx0IHRvIHRydWUuIChPciBmYWxzZSwgaWYgbmVnYXRlZCkuCi0gICAg
bW92ZShJbW1QdHIoanNCb29sZWFuKCFuZWdhdGVkKSksIFg4Njo6ZWF4KTsKKyAgICBtb3ZlKElt
bVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKCFuZWdhdGVkKSkpLCBYODY6OmVheCk7
CiAgICAgSnVtcCBib3RoV2VyZUltbWVkaWF0ZXNBbmRFcXVhbCA9IGp1bXAoKTsKIAogICAgIC8v
IGVheCB3YXMgbm90IGFuIGltbWVkaWF0ZSwgd2UgaGF2ZW4ndCB5ZXQgY2hlY2tlZCBlZHguCkBA
IC0yMzUsMTkgKzIzNSwxOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rp
b24qCiAgICAgLy8gb3RoZXJ3aXNlIHRoZXNlIHZhbHVlcyBhcmUgbm90IGVxdWFsLgogICAgIGZp
cnN0Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmSlNDZWxs
KFg4Njo6ZWR4KTsKLSAgICBhZGRTbG93Q2FzZShqZVB0cihYODY6OmVkeCwgSW1tUHRyKEpTSW1t
ZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7CisgICAgYWRkU2xvd0Nhc2UoamVQdHIoWDg2Ojpl
ZHgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUo
KSkpKSk7CiAgICAgSnVtcCBmaXJzdFdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIAogICAgIC8v
IGVheCB3YXMgYW4gaW1tZWRpYXRlLCBidXQgZWR4IHdhc24ndC4KICAgICAvLyBJZiBlYXggaXMg
MCBqdW1wIHRvIGEgc2xvdyBjYXNlLCBvdGhlcndpc2UgdGhlc2UgdmFsdWVzIGFyZSBub3QgZXF1
YWwuCiAgICAgc2Vjb25kTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
amVQdHIoWDg2OjplYXgsIEltbVB0cihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSkpOwor
ICAgIGFkZFNsb3dDYXNlKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSkpOwogCiAgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgdGhlIHR3byB2YWx1ZXMgYXJlIGRpZmZlcmVudCBpbW1lZGlhdGVzLCBvciBvbmUgaXMgMCBh
bmQgdGhlIG90aGVyIGlzIGEgSlNDZWxsLgogICAgIC8vIFZhZWx1ZXMgYXJlIG5vdCBlcXVhbCwg
c2V0IHRoZSByZXN1bHQgdG8gZmFsc2UuCiAgICAgYm90aFdlcmVJbW1lZGlhdGVzQnV0Tm90RXF1
YWwubGluayh0aGlzKTsKICAgICBmaXJzdFdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAg
IG1vdmUoSW1tUHRyKGpzQm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKKyAgICBtb3ZlKElt
bVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKG5lZ2F0ZWQpKSksIFg4Njo6ZWF4KTsK
ICAgICAKICAgICBib3RoV2VyZUltbWVkaWF0ZXNBbmRFcXVhbC5saW5rKHRoaXMpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpsUHRyKFg4Njo6
ZWF4LCBJbW1QdHIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpKSwgdGFyZ2V0ICsgMyk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChqbFB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVu
Y29kZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpKSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwg
WDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVheCk7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgWDg2OjplYXgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChqbGVQdHIoWDg2Ojpl
YXgsIEltbVB0cihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpLCB0YXJnZXQgKyAzKTsKKyAgICAg
ICAgICAgICAgICBhZGRKdW1wKGpsZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVu
Y29kZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpKSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwg
WDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVheCk7CkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kLCBYODY6OmVkeCk7IC8vIHJlbG9hZCBw
cm90bwogCiAgICAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBsb2FkIHRydWUgcmVzdWx0Ci0g
ICAgICAgICAgICBtb3ZlKEltbVB0cihqc0Jvb2xlYW4odHJ1ZSkpLCBYODY6OmVheCk7CisgICAg
ICAgICAgICBtb3ZlKEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKIApAQCAtNDI5LDkg
KzQyOSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICAg
ICAgSnVtcCBleGl0ID0gamVQdHIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKIAotICAgICAgICAgICAg
am5lUHRyKFg4Njo6ZWN4LCBJbW1QdHIoanNOdWxsKCkpLCBsb29wKTsKKyAgICAgICAgICAgIGpu
ZVB0cihYODY6OmVjeCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc051bGwoKSkpLCBsb29w
KTsKIAotICAgICAgICAgICAgbW92ZShJbW1QdHIoanNCb29sZWFuKGZhbHNlKSksIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKSksIFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgZXhpdC5saW5rKHRoaXMpOwogCkBA
IC02MTgsMTEgKzYxOCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBYODY6OmVheCk7CiAKLSAgICAgICAgICAgIEp1bXAgaXNaZXJvID0g
amVQdHIoWDg2OjplYXgsIEltbVB0cihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSk7Cisg
ICAgICAgICAgICBKdW1wIGlzWmVybyA9IGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0
cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpKSk7CiAgICAgICAgICAgICBh
ZGRKdW1wKGpuejMyKFg4Njo6ZWF4LCBJbW0zMihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIpKSwgdGFyZ2V0ICsgMik7CiAKLSAgICAgICAgICAgIGFkZEp1bXAoamVQdHIoWDg2OjplYXgs
IEltbVB0cihqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFyZ2V0ICsgMik7Ci0gICAgICAgICAgICBhZGRT
bG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihqc0Jvb2xlYW4oZmFsc2UpKSkpOworICAg
ICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdldCArIDIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2Uoam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSkpOwogCiAgICAgICAgICAgICBpc1plcm8ubGluayh0aGlzKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2xvb3BfaWZfdHJ1ZSk7CkBAIC02OTEsNyArNjkxLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgWDg2OjplYXgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbU51bShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChqZ2VQdHIo
WDg2OjplYXgsIEltbVB0cihnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpLCB0YXJnZXQgKyAzKTsK
KyAgICAgICAgICAgICAgICBhZGRKdW1wKGpnZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQ
dHI6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpKSwgdGFyZ2V0ICsgMyk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7CkBAIC03MTIsMTEgKzcxMiwxMSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBYODY6OmVh
eCk7CiAKLSAgICAgICAgICAgIGFkZEp1bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihKU0ltbWVk
aWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSksIHRhcmdldCArIDIpOworICAgICAgICAgICAgYWRkSnVt
cChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShKU0ltbWVkaWF0ZTo6
emVyb0ltbWVkaWF0ZSgpKSkpLCB0YXJnZXQgKyAyKTsKICAgICAgICAgICAgIEp1bXAgaXNOb25a
ZXJvID0gam56MzIoWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdl
cikpOwogCi0gICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoanNCb29s
ZWFuKGZhbHNlKSkpLCB0YXJnZXQgKyAyKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZVB0
cihYODY6OmVheCwgSW1tUHRyKGpzQm9vbGVhbih0cnVlKSkpKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2
OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpKTsKIAog
ICAgICAgICAgICAgaXNOb25aZXJvLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9qZmFsc2UpOwpAQCAtNzM2LDcgKzczNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKICAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CiAgICAgICAgICAgICBhbmQzMihJbW0zMih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5k
ZWZpbmVkKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwg
SW1tUHRyKGpzTnVsbCgpKSksIHRhcmdldCArIDIpOyAgICAgICAgICAgIAorICAgICAgICAgICAg
YWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc051bGwo
KSkpKSwgdGFyZ2V0ICsgMik7ICAgICAgICAgICAgCiAKICAgICAgICAgICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfamVxX251bGwpOwpA
QCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKICAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBh
bmQzMihJbW0zMih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkKSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgYWRkSnVtcChqbmVQdHIoWDg2OjplYXgsIEltbVB0cihqc051bGwo
KSkpLCB0YXJnZXQgKyAyKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZEp1bXAoam5lUHRy
KFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQg
KyAyKTsgICAgICAgICAgICAKIAogICAgICAgICAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbmVxX251bGwpOwpAQCAtNzY2LDggKzc2
Niw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3Bvc3RfaW5jKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3VuZXhw
ZWN0ZWRfbG9hZDogewotICAgICAgICAgICAgSlNWYWx1ZSogdiA9IG1fY29kZUJsb2NrLT51bmV4
cGVjdGVkQ29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBtb3ZlKEltbVB0cih2KSwgWDg2OjplYXgpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB2
ID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIG1vdmUoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZSh2
KSksIFg4Njo6ZWF4KTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF91
bmV4cGVjdGVkX2xvYWQpOwogICAgICAgICB9CkBAIC04MzMsMTEgKzgzMywxMSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBYODY6OmVheCk7
CiAKLSAgICAgICAgICAgIEp1bXAgaXNaZXJvID0gamVQdHIoWDg2OjplYXgsIEltbVB0cihKU0lt
bWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSk7CisgICAgICAgICAgICBKdW1wIGlzWmVybyA9IGpl
UHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjp6ZXJv
SW1tZWRpYXRlKCkpKSk7CiAgICAgICAgICAgICBhZGRKdW1wKGpuejMyKFg4Njo6ZWF4LCBJbW0z
MihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIpKSwgdGFyZ2V0ICsgMik7CiAKLSAgICAg
ICAgICAgIGFkZEp1bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihqc0Jvb2xlYW4odHJ1ZSkpKSwg
dGFyZ2V0ICsgMik7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIElt
bVB0cihqc0Jvb2xlYW4oZmFsc2UpKSkpOworICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6
OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdl
dCArIDIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIo
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSkpOwogCiAgICAgICAgICAgICBp
c1plcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2p0cnVlKTsKQEAg
LTEwNTYsOSArMTA1Niw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9zZXR0ZXIpOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfbmV3X2Vycm9yOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gbV9j
b2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgbWVzc2FnZSA9IG1fY29kZUJsb2NrLT51bmV4
cGVjdGVkQ29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBlbWl0UHV0SklUU3R1YkFyZ0NvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQsIDEpOwotICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdDb25zdGFudChtZXNzYWdl
LCAyKTsKKyAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoSlNWYWx1ZVB0cjo6
ZW5jb2RlKG1lc3NhZ2UpLCAyKTsKICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3Rh
bnQobV9jb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChtX2J5dGVjb2RlSW5k
ZXgpLCAzKTsKICAgICAgICAgICAgIGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlfb3BfbmV3
X2Vycm9yKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CkBAIC0xMjg4LDEyICsxMjg4LDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sc2hp
ZnQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAg
ICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ZiAoc3JjMmltbSkgeworICAgICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRl
SW50KG9wMikpIHsKICAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAg
ICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYXgsIDEpOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCAyLCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dEpJVFN0
dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKG9wMiwgMiwgWDg2OjplY3gpOwogICAgICAgICAgICAg
ICAgIGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKICAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqbnozMihYODY6OmVheCksIHRhcmdldCArIDMp
OwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEzMTUsOSArMTMxNSw5IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRf
YnlfaWQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6IHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRp
YXRlTnVtZXJpY0FyZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1l
ZGlhdGVJbnQob3AyKSkgewogICAgICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAg
ICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7CiAgICAgICAgICAg
ICAgICAgZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQsIDIsIFg4Njo6ZWN4KTsKQEAgLTEzNzUsOSArMTM3NSw5IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wcmVfZGVjKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2pubGVzczogeworICAg
ICAgICAgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlh
dGVOdW1lcmljQXJnKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgaWYgKHNyYzJpbW0pIHsKKyAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludChvcDIpKSB7CiAgICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAg
ICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAg
ICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgMiwgWDg2OjplY3gpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
Mzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDE3ICs0OSwxNyBAQAogCiAjZGVmaW5lIEFSR19jYWxsRnJhbWUgc3RhdGljX2Nhc3Q8Q2FsbEZy
YW1lKj4oQVJHU1tTVFVCX0FSR1NfY2FsbEZyYW1lXSkKICNkZWZpbmUgQVJHX3JlZ2lzdGVyRmls
ZSBzdGF0aWNfY2FzdDxSZWdpc3RlckZpbGUqPihBUkdTW1NUVUJfQVJHU19yZWdpc3RlckZpbGVd
KQotI2RlZmluZSBBUkdfZXhjZXB0aW9uIHN0YXRpY19jYXN0PEpTVmFsdWUqKj4oQVJHU1tTVFVC
X0FSR1NfZXhjZXB0aW9uXSkKKyNkZWZpbmUgQVJHX2V4Y2VwdGlvbiBzdGF0aWNfY2FzdDxKU1Zh
bHVlUHRyKj4oQVJHU1tTVFVCX0FSR1NfZXhjZXB0aW9uXSkKICNkZWZpbmUgQVJHX3Byb2ZpbGVy
UmVmZXJlbmNlIHN0YXRpY19jYXN0PFByb2ZpbGVyKio+KEFSR1NbU1RVQl9BUkdTX3Byb2ZpbGVy
UmVmZXJlbmNlXSkKICNkZWZpbmUgQVJHX2dsb2JhbERhdGEgc3RhdGljX2Nhc3Q8SlNHbG9iYWxE
YXRhKj4oQVJHU1tTVFVCX0FSR1NfZ2xvYmFsRGF0YV0pCiAKICNkZWZpbmUgQVJHX3NldENhbGxG
cmFtZShuZXdDYWxsRnJhbWUpIChBUkdTW1NUVUJfQVJHU19jYWxsRnJhbWVdID0gKG5ld0NhbGxG
cmFtZSkpCiAKLSNkZWZpbmUgQVJHX3NyYzEgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbMV0p
Ci0jZGVmaW5lIEFSR19zcmMyIHN0YXRpY19jYXN0PEpTVmFsdWUqPihBUkdTWzJdKQotI2RlZmlu
ZSBBUkdfc3JjMyBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oQVJHU1szXSkKLSNkZWZpbmUgQVJHX3Ny
YzQgc3RhdGljX2Nhc3Q8SlNWYWx1ZSo+KEFSR1NbNF0pCi0jZGVmaW5lIEFSR19zcmM1IHN0YXRp
Y19jYXN0PEpTVmFsdWUqPihBUkdTWzVdKQorI2RlZmluZSBBUkdfc3JjMSBKU1ZhbHVlUHRyOjpk
ZWNvZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqPihBUkdTWzFdKSkKKyNk
ZWZpbmUgQVJHX3NyYzIgSlNWYWx1ZVB0cjo6ZGVjb2RlKHN0YXRpY19jYXN0PEpTVmFsdWVFbmNv
ZGVkQXNQb2ludGVyKj4oQVJHU1syXSkpCisjZGVmaW5lIEFSR19zcmMzIEpTVmFsdWVQdHI6OmRl
Y29kZShzdGF0aWNfY2FzdDxKU1ZhbHVlRW5jb2RlZEFzUG9pbnRlcio+KEFSR1NbM10pKQorI2Rl
ZmluZSBBUkdfc3JjNCBKU1ZhbHVlUHRyOjpkZWNvZGUoc3RhdGljX2Nhc3Q8SlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqPihBUkdTWzRdKSkKKyNkZWZpbmUgQVJHX3NyYzUgSlNWYWx1ZVB0cjo6ZGVj
b2RlKHN0YXRpY19jYXN0PEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKj4oQVJHU1s1XSkpCiAjZGVm
aW5lIEFSR19pZDEgc3RhdGljX2Nhc3Q8SWRlbnRpZmllcio+KEFSR1NbMV0pCiAjZGVmaW5lIEFS
R19pZDIgc3RhdGljX2Nhc3Q8SWRlbnRpZmllcio+KEFSR1NbMl0pCiAjZGVmaW5lIEFSR19pZDMg
c3RhdGljX2Nhc3Q8SWRlbnRpZmllcio+KEFSR1NbM10pCkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q7CiAg
ICAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlKiAoSklU
X1NUVUIgKkNUSUhlbHBlcl9qKShTVFVCX0FSR1MpOworICAgIHR5cGVkZWYgSlNWYWx1ZUVuY29k
ZWRBc1BvaW50ZXIqIChKSVRfU1RVQiAqQ1RJSGVscGVyX2opKFNUVUJfQVJHUyk7CiAgICAgdHlw
ZWRlZiBKU09iamVjdCogKEpJVF9TVFVCICpDVElIZWxwZXJfbykoU1RVQl9BUkdTKTsKICAgICB0
eXBlZGVmIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIChKSVRfU1RVQiAqQ1RJSGVscGVyX3ApKFNU
VUJfQVJHUyk7CiAgICAgdHlwZWRlZiB2b2lkIChKSVRfU1RVQiAqQ1RJSGVscGVyX3YpKFNUVUJf
QVJHUyk7CkBAIC0xOTMsMTMgKzE5MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAg
ICAgZXh0ZXJuICJDIiB7Ci0gICAgICAgIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUoCisgICAgICAg
IEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBjdGlUcmFtcG9saW5lKAogI2lmIFBMQVRGT1JNKFg4
Nl82NCkKICAgICAgICAgICAgIC8vIEZJWE1FOiAoYnVnICMyMjkxMCkgdGhpcyB3aWxsIGZvcmNl
IGFsbCBhcmd1bWVudHMgb250byB0aGUgc3RhY2sgKHJlZ3Bhcm0oMCkgZG9lcyBub3QgYXBwZWFy
IHRvIGhhdmUgYW55IGVmZmVjdCkuCiAgICAgICAgICAgICAvLyBXZSBjYW4gYWxsb3cgcmVnaXN0
ZXIgcGFzc2luZyBoZXJlLCBhbmQgbW92ZSB0aGUgd3JpdGVzIG9mIHRoZXNlIHZhbHVlcyBpbnRv
IHRoZSB0cmFtcG9saW5lLgogICAgICAgICAgICAgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCos
IHZvaWQqLCB2b2lkKiwKICNlbmRpZgotICAgICAgICAgICAgdm9pZCogY29kZSwgUmVnaXN0ZXJG
aWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9i
YWxEYXRhKik7CisgICAgICAgICAgICB2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJh
bWUqLCBKU1ZhbHVlUHRyKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOwog
ICAgICAgICB2b2lkIGN0aVZNVGhyb3dUcmFtcG9saW5lKCk7CiAgICAgfTsKIApAQCAtMzQxLDEz
ICszNDEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxs
KEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIHZvaWQqIGN0
aUNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2FsbGVyQXJnQ291bnQpOwog
ICAgICAgICBzdGF0aWMgdm9pZCB1bmxpbmtDYWxsKENhbGxMaW5rSW5mbyopOwogCi0gICAgICAg
IGlubGluZSBzdGF0aWMgSlNWYWx1ZSogZXhlY3V0ZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUq
IHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKKyAgICAgICAgaW5saW5lIHN0YXRpYyBKU1ZhbHVl
UHRyIGV4ZWN1dGUodm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWVQdHIqIGV4
Y2VwdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGN0aVRyYW1wb2xpbmUoCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cjo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUoCiAjaWYg
UExBVEZPUk0oWDg2XzY0KQogICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsCiAjZW5k
aWYKLSAgICAgICAgICAgICAgICBjb2RlLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgZXhjZXB0
aW9uLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpOwor
ICAgICAgICAgICAgICAgIGNvZGUsIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCBleGNlcHRpb24s
IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSkpOwogICAg
ICAgICB9CiAKICAgICBwcml2YXRlOgpAQCAtNDMyLDggKzQzMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2
YWx1ZSwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSk7CiAgICAgICAg
IHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0byk7CiAKLSAgICAgICAgSlNWYWx1ZSogZ2V0
Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHVuc2lnbmVkIHNyYyk7Ci0gICAgICAgIEpTVmFs
dWUqIGdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpOworICAgICAgICBKU1ZhbHVlUHRy
IGdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpOwogICAgICAgICBpbnQzMl90IGdldENv
bnN0YW50T3BlcmFuZEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpOwogICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYyk7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnQzMUJpdEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDEx
ICs5MywxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aFNsb3dfb3BfbHNoaWZ0CiAKIHZv
aWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29wX3JzaGlmdCh1bnNpZ25lZCByZXN1bHQsIHVuc2ln
bmVkIG9wMSwgdW5zaWduZWQgb3AyKQogewotICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhvcDIpKSB7CisgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIFg4Njo6ZWF4KTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWF4KTsKICAgICAgICAgLy8gTWFzayB3aXRoIDB4MWYgYXMgcGVyIGVjbWEtMjYyIDExLjcuMiBz
dGVwIDcuCi0gICAgICAgIHJzaGlmdFB0cihJbW0zMihKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVk
VUludDMyKHZhbHVlKSAmIDB4MWYpLCBYODY6OmVheCk7CisgICAgICAgIHJzaGlmdFB0cihJbW0z
MihKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKGdldENvbnN0YW50T3BlcmFuZChvcDIp
KSAmIDB4MWYpLCBYODY6OmVheCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMob3AxLCBYODY6OmVheCwgb3AyLCBYODY6OmVjeCk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCk7CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcnNoaWZ0KHVucwogdm9pZCBKSVQ6OmNvbXBpbGVG
YXN0QXJpdGhTbG93X29wX3JzaGlmdCh1bnNpZ25lZCByZXN1bHQsIHVuc2lnbmVkLCB1bnNpZ25l
ZCBvcDIsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
b3AyKSkKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkKICAgICAg
ICAgZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKG9wMiwgMiwgWDg2OjplY3gp
OwogICAgIGVsc2UgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEpJVDo6dW5saW5r
Q2FsbChDYWxsTGlua0luZm8qIGNhbGxMCiAgICAgLy8gV2hlbiB0aGUgSlNGdW5jdGlvbiBpcyBk
ZWxldGVkIHRoZSBwb2ludGVyIGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gd2ls
bCBubyBsb25nZXIgYmUgdmFsaWQKICAgICAvLyAoYW5kLCBpZiBhIG5ldyBKU0Z1bmN0aW9uIGhh
cHBlbmVkIHRvIGJlIGNvbnN0cnVjdGVkIGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB3ZSBjb3VsZCBn
ZXQgYSBmYWxzZSBwb3NpdGl2ZQogICAgIC8vIG1hdGNoKS4gIFJlc2V0IHRoZSBjaGVjayBzbyBp
dCBubyBsb25nZXIgbWF0Y2hlcy4KLSAgICBEYXRhTGFiZWxQdHI6OnBhdGNoKGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luLCBKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOworICAgIERh
dGFMYWJlbFB0cjo6cGF0Y2goY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIEpTVmFsdWVQdHI6
OmVuY29kZShKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpKTsKIH0KIAogdm9pZCBKSVQ6
OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
IHZvaWQqIGN0aUNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2FsbGVyQXJn
Q291bnQpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6
ZUNhbGxGcmEKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbiwgbV9ub2Rl
KSksIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgogCi0gICAgc3RvcmVQdHIoSW1tUHRyKG5v
VmFsdWUoKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6T3B0aW9u
YWxDYWxsZWVBcmd1bWVudHMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7
CisgICAgc3RvcmVQdHIoSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShub1ZhbHVlKCkpKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3Vt
ZW50cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0
cihYODY6OmVjeCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgc3RvcmVQdHIo
WDg2OjplZHgsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIH0KQEAgLTIxMSwx
NCArMjExLDE0IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAg
ICAgICAgY29tcGlsZU9wQ2FsbEV2YWxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOwogCiAgICAgICAg
IGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKTsKLSAgICAgICAgd2Fz
RXZhbCA9IGpuZVB0cihYODY6OmVheCwgSW1tUHRyKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFs
dWUoKSkpOworICAgICAgICB3YXNFdmFsID0gam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1
ZVB0cjo6ZW5jb2RlKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSkpKTsKICAgICB9CiAK
ICAgICAvLyBUaGlzIHBsYW50cyBhIGNoZWNrIGZvciBhIGNhY2hlZCBKU0Z1bmN0aW9uIHZhbHVl
LCBzbyB3ZSBjYW4gcGxhbnQgYSBmYXN0IGxpbmsgdG8gdGhlIGNhbGxlZS4KICAgICAvLyBUaGlz
IGRlbGliZXJhdGVseSBsZWF2ZXMgdGhlIGNhbGxlZSBpbiBlY3gsIHVzZWQgd2hlbiBzZXR0aW5n
IHVwIHRoZSBzdGFjayBmcmFtZSBiZWxvdwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBYODY6OmVjeCk7CiAgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2s7Ci0gICAgSnVtcCBqdW1wVG9TbG93ID0gam5lUHRyV2l0aFBhdGNoKFg4Njo6ZWN4LCBh
ZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBJbW1QdHIoSlNJbW1lZGlhdGU6OmltcG9zc2li
bGVWYWx1ZSgpKSk7CisgICAgSnVtcCBqdW1wVG9TbG93ID0gam5lUHRyV2l0aFBhdGNoKFg4Njo6
ZWN4LCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSkpKTsKICAgICBhZGRTbG93Q2FzZShq
dW1wVG9TbG93KTsKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4oYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjaywganVtcFRvU2xvdykgPT0gcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9K
dW1wKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwpAQCAt
MjM5LDcgKzIzOSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkK
IAogICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0aWFsaXphdGlvbiwgZGly
ZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9taXRzIHRvIHNl
dCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0IGluIHRoZSBjYWxsZWUK
LSAgICBzdG9yZVB0cihJbW1QdHIobm9WYWx1ZSgpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50
cykgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgc3RvcmVQdHIo
SW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShub1ZhbHVlKCkpKSwgQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFy
Z3VtZW50cykgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgc3Rv
cmVQdHIoWDg2OjplY3gsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIChyZWdpc3Rlck9mZnNl
dCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChKU0Z1
bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsgRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW4sIG1fbm9kZSkp
LCBYODY6OmVkeCk7IC8vIG5ld1Njb3BlQ2hhaW4KICAgICBzdG9yZTMyKEltbTMyKGFyZ0NvdW50
KSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMzk2
MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw4ICs1Myw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmUKIAogICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFs
cmVhZHkgaW4gcmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEK
ICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAg
ICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAg
ICAgICAgbW92ZShJbW1QdHIodmFsdWUpLCBkc3QpOworICAgICAgICBKU1ZhbHVlUHRyIHZhbHVl
ID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIG1vdmUoSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTIsMTYgKzExMiw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXIKICAgICBwZWVrKGRzdCwgYXJn
dW1lbnROdW1iZXIpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpJVDo6Z2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHVuc2lnbmVkIHNyYykKLXsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjppc051bWJlcih2YWx1ZSkgPyB2YWx1ZSA6IG5vVmFsdWUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG5vVmFsdWUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSklU
OjpnZXRDb25zdGFudE9wZXJhbmQodW5zaWduZWQgc3JjKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSk7CiAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwpAQCAtMTQyLDcgKzEzMyw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4KICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50T3BlcmFuZChzcmMpOworICAgIEpTVmFsdWVQdHIgdmFs
dWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKIAogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1F
RElBVEUpCiAgICAgaWYgKCFKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpKQpAQCAtMTU5LDgg
KzE1MCw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW4KIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcih1
bnNpZ25lZCBzcmMsIHVuc2lnbmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7
Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
Ci0gICAgICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQodmFsdWUsIGFyZ3VtZW50TnVtYmVy
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOworICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0NvbnN0YW50KEpTVmFsdWVQdHI6OmVuY29k
ZSh2YWx1ZSksIGFyZ3VtZW50TnVtYmVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCBzY3Jh
dGNoKTsKICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmcoc2NyYXRjaCwgYXJndW1lbnROdW1iZXIp
OwpAQCAtMjEwLDcgKzIwMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0
dWFsUmUKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25l
ZCBkc3QpCiB7Ci0gICAgc3RvcmVQdHIoSW1tUHRyKGpzVW5kZWZpbmVkKCkpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgc3RvcmVQdHIo
SW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAvLyBGSVhNRTogI2lm
bmRlZiBOREVCVUcsIFdyaXRlIHRoZSBjb3JyZWN0IG1fdHlwZSB0byB0aGUgcmVnaXN0ZXIuCiB9
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIsMTAgKzE4MiwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1dEJ5
SWRTbG93Q2FzZShpbnQgYmFzCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiByZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJh
c2VPYmplY3QsIGludDMyX3Qgb2xkU2l6ZSwgaW50MzJfdCBuZXdTaXplKQorc3RhdGljIEpTVmFs
dWVFbmNvZGVkQXNQb2ludGVyKiByZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VP
YmplY3QsIGludDMyX3Qgb2xkU2l6ZSwgaW50MzJfdCBuZXdTaXplKQogewogICAgIGJhc2VPYmpl
Y3QtPmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9sZFNpemUsIG5ld1NpemUpOwotICAgIHJldHVy
biBiYXNlT2JqZWN0OworICAgIHJldHVybiBKU1ZhbHVlUHRyOjplbmNvZGUoYmFzZU9iamVjdCk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxv
YyhTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC0y
MTEsNyArMjExLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwog
ICAgIC8vIGVjeCA9IGJhc2VPYmplY3QtPm1fc3RydWN0dXJlCiAgICAgZm9yIChSZWZQdHI8U3Ry
dWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKICAgICAgICAgLy8gbnVs
bCBjaGVjayB0aGUgcHJvdG90eXBlCi0gICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoamVQdHIo
WDg2OjplY3gsIEltbVB0cihqc051bGwoKSkpKTsKKyAgICAgICAgc3VjY2Vzc0Nhc2VzLmFwcGVu
ZChqZVB0cihYODY6OmVjeCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc051bGwoKSkpKSk7
CiAKICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBpZAogICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKGpuZVB0cihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBt
X3N0cnVjdHVyZSkpLCBJbW1QdHIoaXQtPmdldCgpKSkpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KIAogICAgIC8vIHdyaXRlIHRo
ZSB2YWx1ZQogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTT2Jq
ZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSkpLCBYODY6OmVheCk7Ci0gICAgc3RvcmVQdHIoWDg2Ojpl
ZHgsIEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpKTsK
KyAgICBzdG9yZVB0cihYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWVQdHIpKSk7CiAKICAgICByZXQoKTsKICAgICAKQEAgLTI4OSw3ICsyODks
NyBAQCB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihTdHJ1Y3R1cmVTdHViCiAgICAgdm9pZCog
c3RydWN0dXJlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcGF0Y2hPZmZzZXRHZXRCeUlk
U3RydWN0dXJlKTsKICAgICB2b2lkKiBkaXNwbGFjZW1lbnRBZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbikgKyBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7CiAgICAgRGF0YUxh
YmVsUHRyOjpwYXRjaChzdHJ1Y3R1cmVBZGRyZXNzLCBzdHJ1Y3R1cmUpOwotICAgIERhdGFMYWJl
bDMyOjpwYXRjaChkaXNwbGFjZW1lbnRBZGRyZXNzLCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNW
YWx1ZSopKTsKKyAgICBEYXRhTGFiZWwzMjo6cGF0Y2goZGlzcGxhY2VtZW50QWRkcmVzcywgY2Fj
aGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoUHV0
QnlJZFJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKQEAgLTMwMiw3
ICszMDIsNyBAQCB2b2lkIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShTdHJ1Y3R1cmVTCiAgICAg
dm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4pICsgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlOwogICAgIHZvaWQq
IGRpc3BsYWNlbWVudEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5mby0+
aG90UGF0aEJlZ2luKSArIHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwogICAg
IERhdGFMYWJlbFB0cjo6cGF0Y2goc3RydWN0dXJlQWRkcmVzcywgc3RydWN0dXJlKTsKLSAgICBE
YXRhTGFiZWwzMjo6cGF0Y2goZGlzcGxhY2VtZW50QWRkcmVzcywgY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSk7CisgICAgRGF0YUxhYmVsMzI6OnBhdGNoKGRpc3BsYWNlbWVudEFkZHJl
c3MsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVzcykKQEAg
LTM1NCw3ICszNTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1
CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0CiAgICAgbG9hZFB0
cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9y
YWdlKSksIFg4Njo6ZWF4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIGNhY2hlZE9m
ZnNldCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KFg4Njo6ZWF4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7
CiAgICAgcmV0KCk7CiAKICAgICB2b2lkKiBjb2RlID0gbV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNv
cHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwpAQCAtMzkzLDcgKzM5Myw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICNlbmRpZgogCiAgICAgLy8g
Q2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVl
UHRyKSksIFg4Njo6ZWF4KTsKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIApAQCAtNDMx
LDcgKzQzMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAg
ICBKdW1wIGZhaWx1cmVDYXNlczMgPSBqbmVQdHIoQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0
cnVjdHVyZUFkZHJlc3MpLCBJbW1QdHIocHJvdG90eXBlU3RydWN0dXJlKSk7CiAKICAgICAvLyBD
aGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4
Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2OjplYXgpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQ
dHIpKSwgWDg2OjplYXgpOwogCiAgICAgcmV0KCk7CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiB7CiAgICAgSnVtcCBmYWlsdXJl
Q2FzZSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFn
ZSkpLCBYODY6OmVheCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRPZmZz
ZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwgWDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAogICAgIHZvaWQqIGNvZGUgPSBtX2Fzc2VtYmxl
ci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CkBAIC01MDAs
NyArNTAwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogI2Vu
ZGlmCiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKSwg
WDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwogCiAgICAgSnVtcCBzdWNjZXNzID0ganVt
cCgpOwogCkBAIC01NTUsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluTGlzdAogCiAgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9
ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgbG9hZFB0cihwcm90b1Byb3Bl
cnR5U3RvcmFnZSwgWDg2OjplZHgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwgY2Fj
aGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSksIFg4Njo6ZWF4KTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlUHRyKSksIFg4Njo6
ZWF4KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKICAgICB2b2lkKiBjb2RlID0gbV9h
c3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkobV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwpA
QCAtNjE0LDcgKzYxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihT
dHIKIAogICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9P
YmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwogICAgIGxvYWRQdHIocHJvdG9Qcm9wZXJ0eVN0b3Jh
Z2UsIFg4Njo6ZWR4KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNl
dCAqIHNpemVvZihKU1ZhbHVlKikpLCBYODY6OmVheCk7CisgICAgbG9hZFB0cihBZGRyZXNzKFg4
Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpLCBYODY6OmVheCk7CiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCiAgICAgdm9pZCogY29kZSA9IG1fYXNzZW1ibGVy
LmV4ZWN1dGFibGVDb3B5KG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKQEAgLTY2NCw3
ICs2NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAKICAg
ICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5t
X3Byb3BlcnR5U3RvcmFnZTsKICAgICBsb2FkUHRyKHByb3RvUHJvcGVydHlTdG9yYWdlLCBYODY6
OmVkeCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSopKSwgWDg2OjplYXgpOworICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVkeCwg
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWVQdHIpKSwgWDg2OjplYXgpOwogICAgIHJldCgp
OwogCiAgICAgdm9pZCogY29kZSA9IG1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTCiAKICAgICAvLyBjaGVja3Mgb3V0IG9rYXkhIC0g
cHV0RGlyZWN0T2Zmc2V0CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZT
RVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSksIFg4Njo6ZWF4KTsKLSAgICBzdG9yZVB0
cihYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFs
dWUqKSkpOworICAgIHN0b3JlUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBjYWNoZWRP
ZmZzZXQgKiBzaXplb2YoSlNWYWx1ZVB0cikpKTsKICAgICByZXQoKTsKIAogICAgIHZvaWQqIGNv
ZGUgPSBtX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weShtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBv
b2woKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIFByb2Zp
bGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvCiAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAg
aW50cHRyX3Qgc291cmNlSUQ7CiAgICAgVVN0cmluZyBzb3VyY2VVUkw7Ci0gICAgSlNWYWx1ZSog
ZnVuY3Rpb247CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbjsKIAogICAgIGV4ZWMtPmludGVycHJl
dGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgc291
cmNlVVJMLCBmdW5jdGlvbik7CiAgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVh
dGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGZ1
bmN0aW9uID8gZnVuY3Rpb24tPnRvVGhpc09iamVjdChleGVjKSA6IDAsIHNvdXJjZVVSTCwgbGlu
ZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAg
c3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub1BybwogICAgIH0KIH0KIAotdm9p
ZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBmdW5jdGlv
bikKK3ZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0
ciBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7
CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3Rh
dGUqIGV4CiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMs
ICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY2FsbElkZW50aWZpZXIsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCi12b2lkIFByb2ZpbGVy
OjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogZnVuY3Rpb24pCit2b2lkIFBy
b2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jdGlvbikK
IHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKQEAgLTEzMSw3
ICsxMzEsNyBAQCB2b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2Vu
ZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBub1ZhbHVlKCksIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLUNhbGxJZGVudGlmaWVy
IFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEpTVmFsdWUqIGZ1bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQg
ZGVmYXVsdExpbmVOdW1iZXIpCitDYWxsSWRlbnRpZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElk
ZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlUHRyIGZ1bmN0aW9uLCBj
b25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCiB7
CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKEdsb2Jh
bENvZGVFeGVjdXRpb24sIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVyKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBK
U0dsb2JhbERhdGE7CiAgICAgY2xhc3MgSlNPYmplY3Q7CisgICAgY2xhc3MgSlNWYWx1ZVB0cjsK
ICAgICBjbGFzcyBQcm9maWxlR2VuZXJhdG9yOwogICAgIGNsYXNzIFVTdHJpbmc7CiAKQEAgLTUx
LDE0ICs1MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBQcm9maWxlciogcHJvZmlsZXIoKTsgCi0gICAgICAgIHN0YXRpYyBDYWxsSWRlbnRpZmllciBj
cmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBKU1ZhbHVlKiwgY29uc3QgVVN0cmlu
ZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRpYyBDYWxsSWRlbnRp
ZmllciBjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBKU1ZhbHVlUHRyLCBjb25z
dCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKIAogICAgICAgICB2b2lkIHN0
YXJ0UHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKICAgICAgICAg
UGFzc1JlZlB0cjxQcm9maWxlPiBzdG9wUHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJp
bmcmIHRpdGxlKTsKIAotICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUqIGZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlUHRyIGZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBj
b25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgICAg
ICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSogZnVuY3Rpb24pOworICAgICAg
ICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBmdW5jdGlvbik7CiAgICAg
ICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkws
IGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCiAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
UHJvZmlsZUdlbmVyYXRvcj4gPiYgY3VycmVudFByb2ZpbGVzKCkgeyByZXR1cm4gbV9jdXJyZW50
UHJvZmlsZXM7IH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcmdMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEFyZ0xpc3Q6Om1hcmtMaXN0cyhMaXN0U2V0JiBt
YXJrU2V0CiAgICAgfQogfQogCi12b2lkIEFyZ0xpc3Q6OnNsb3dBcHBlbmQoSlNWYWx1ZSogdikK
K3ZvaWQgQXJnTGlzdDo6c2xvd0FwcGVuZChKU1ZhbHVlUHRyIHYpCiB7CiAgICAgLy8gQXMgbG9u
ZyBhcyBvdXIgc2l6ZSBzdGF5cyB3aXRoaW4gb3VyIFZlY3RvcidzIGlubGluZSAKICAgICAvLyBj
YXBhY2l0eSwgYWxsIG91ciB2YWx1ZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGFuZCAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXpl
OyB9CiAKLSAgICAgICAgSlNWYWx1ZSogYXQoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaSkgY29u
c3QKKyAgICAgICAgSlNWYWx1ZVB0ciBhdChFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaSA8IG1fc2l6ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idWZmZXJbaV0uanNWYWx1ZShleGVjKTsKQEAgLTk5LDcgKzk5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3NpemUgPSAwOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSogdikKKyAgICAgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZVB0
ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIW1faXNSZWFkT25seSk7CiAgICAg
ICAgICAgICAKQEAgLTEyNSw3ICsxMjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgbWFya0xpc3RzKExpc3RTZXQmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgc2xvd0FwcGVuZChKU1ZhbHVlKik7CisgICAgICAgIHZvaWQgc2xvd0FwcGVuZChKU1ZhbHVl
UHRyKTsKICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVyKiBtX2J1ZmZlcjsKICAgICAgICAgc2l6
ZV90IG1fc2l6ZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlz
aW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsMjggKzE0NSwyOCBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBBcmd1bWVudHM6OnB1dChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit2b2lkIEFyZ3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChpIDwg
ZC0+bnVtQXJndW1lbnRzICYmICghZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkpIHsKICAgICAgICAgaWYgKGkgPCBkLT5udW1QYXJhbWV0ZXJzKQotICAgICAg
ICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IHZhbHVlOwor
ICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IEpT
VmFsdWVQdHIodmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkLT5leHRyYUFyZ3Vt
ZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKKyAgICAgICAgICAgIGQtPmV4dHJh
QXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IEpTVmFsdWVQdHIodmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgSlNPYmplY3Q6OnB1dChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsIFVTdHJpbmc6OmZyb20oaSkpLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgQXJndW1l
bnRzOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEFyZ3VtZW50czo6
cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYm9vbCBpc0FycmF5
SW5kZXg7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJmlzQXJy
YXlJbmRleCk7CiAgICAgaWYgKGlzQXJyYXlJbmRleCAmJiBpIDwgZC0+bnVtQXJndW1lbnRzICYm
ICghZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsKICAg
ICAgICAgaWYgKGkgPCBkLT5udW1QYXJhbWV0ZXJzKQotICAgICAgICAgICAgZC0+cmVnaXN0ZXJz
W2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IHZhbHVlOworICAgICAgICAgICAgZC0+cmVn
aXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSA9IEpTVmFsdWVQdHIodmFsdWUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFy
YW1ldGVyc10gPSB2YWx1ZTsKKyAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5u
dW1QYXJhbWV0ZXJzXSA9IEpTVmFsdWVQdHIodmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDM5NjAzKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGQtPnJlZ2lzdGVycyA9
ICZhY3RpdmF0aW9uLT5yZWdpc3RlckF0KDApOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBl
KSAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUo
SlNWYWx1ZVB0ciBwcm90b3R5cGUpIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOyAKICAgICAg
ICAgfQpAQCAtODIsOCArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBnZXRB
cmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBh
cmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJv
cGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
dmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCkBAIC05NCw5ICs5NCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBPd25QdHI8QXJndW1lbnRzRGF0YT4gZDsKICAgICB9OwogCi0g
ICAgQXJndW1lbnRzKiBhc0FyZ3VtZW50cyhKU1ZhbHVlKik7CisgICAgQXJndW1lbnRzKiBhc0Fy
Z3VtZW50cyhKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBBcmd1bWVudHMqIGFzQXJndW1lbnRz
KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBBcmd1bWVudHMqIGFzQXJndW1lbnRzKEpTVmFs
dWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhl
cml0cygmQXJndW1lbnRzOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcmd1
bWVudHMqPihhc09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4
LDcgQEAgQ29uc3RydWN0VHlwZSBBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdAogICAgIHJldHVy
biBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNhbGxBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgYXJncyk7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
Mzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMjUgKzM2LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEFycmF5UHJvdG90eXBlKTsKIAotc3RhdGljIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y0pvaW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVu
Y1B1c2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90
b0Z1bmNTaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJyYXlQ
cm90b0Z1bmNTb3J0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVl
KiBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29tZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZpbHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTGFz
dEluZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y0NvbmNhdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFy
cmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNT
aGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJh
eVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NwbGljZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5j
RXZlcnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0ZvckVhY2goRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBh
cnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jTWFwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQogCkBAIC0xMDQs
NyArMTA0LDcgQEAgYm9vbCBBcnJheVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEhlbHBlciBmdW5jdGlvbgotc3RhdGljIEpTVmFsdWUq
IGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaiwgdW5zaWduZWQgaW5k
ZXgpCitzdGF0aWMgSlNWYWx1ZVB0ciBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmosIHVuc2lnbmVkIGluZGV4KQogewogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iaik7
CiAgICAgaWYgKCFvYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCkpCkBAIC0x
MTIsMTMgKzExMiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSogZ2V0UHJvcGVydHkoRXhlY1N0YXRlKiBl
CiAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCi1zdGF0aWMgdm9p
ZCBwdXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCitzdGF0aWMgdm9pZCBwdXRQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKICAgICBvYmotPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAot
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYXJyYXlQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVj
dCgmSlNBcnJheTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CkBAIC0xNDMsNyArMTQzLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1Zh
bHVlKiBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRy
IGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmIChlbGVtZW50LT5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTE2Miw3ICsx
NjIsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0CiAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVmZmVyLmRh
dGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkpTQXJy
YXk6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpA
QCAtMTg3LDEyICsxODcsMTIgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiBl
bGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRyIGVsZW1l
bnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIGlmIChlbGVtZW50LT5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgSlNPYmplY3Qq
IG8gPSBlbGVtZW50LT50b09iamVjdChleGVjKTsKLSAgICAgICAgSlNWYWx1ZSogY29udmVyc2lv
bkZ1bmN0aW9uID0gby0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0
cmluZyk7CisgICAgICAgIEpTVmFsdWVQdHIgY29udmVyc2lvbkZ1bmN0aW9uID0gby0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZyk7CiAgICAgICAgIFVTdHJp
bmcgc3RyOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBjb252ZXJzaW9uRnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKQEAgLTIx
NCw3ICsyMTQsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoc3RyQnVmZmVyLmRhdGEoKSwgc3RyQnVm
ZmVyLmRhdGEoKSA/IHN0ckJ1ZmZlci5zaXplKCkgOiAwKSk7CiB9CiAKLUpTVmFsdWUqIGFycmF5
UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0pvaW4o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1Ro
aXNPYmplY3QoZXhlYyk7CiAKQEAgLTI0MSw3ICsyNDEsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY0pvaW4oRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTVmFsdWUqIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CisgICAgICAg
IEpTVmFsdWVQdHIgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgaWYg
KGVsZW1lbnQtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjYwLDExICsyNjAsMTEgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0
ZSogZQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0ckJ1ZmZlci5kYXRhKCks
IHN0ckJ1ZmZlci5kYXRhKCkgPyBzdHJCdWZmZXIuc2l6ZSgpIDogMCkpOwogfQogCi1KU1ZhbHVl
KiBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJheVByb3Rv
RnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNBcnJheSogYXJyID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjKTsKICAgICBpbnQgbiA9IDA7Ci0gICAgSlNWYWx1ZSogY3VyQXJnID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CisgICAgSlNWYWx1ZVB0ciBjdXJBcmcgPSB0
aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFyZ3MuYmVnaW4oKTsKICAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBh
cmdzLmVuZCgpOwogICAgIHdoaWxlICgxKSB7CkBAIC0yNzIsNyArMjcyLDcgQEAgSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKgogICAgICAgICAgICAgSlNBcnJheSogY3Vy
QXJyYXkgPSBhc0FycmF5KGN1ckFyZyk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBj
dXJBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
bGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSogdiA9IGdldFByb3Bl
cnR5KGV4ZWMsIGN1ckFycmF5LCBrKSkKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZVB0ciB2
ID0gZ2V0UHJvcGVydHkoZXhlYywgY3VyQXJyYXksIGspKQogICAgICAgICAgICAgICAgICAgICBh
cnItPnB1dChleGVjLCBuLCB2KTsKICAgICAgICAgICAgICAgICBuKys7CiAgICAgICAgICAgICB9
CkBAIC0yODksMTMgKzI4OSwxMyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0NvbmNhdChFeGVj
U3RhdGUqCiAgICAgcmV0dXJuIGFycjsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNQb3Ao
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYg
KGV4ZWMtPmludGVycHJldGVyKCktPmlzSlNBcnJheSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0OworICAg
IEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAg
aWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCkpOwpAQCAt
MzA4LDcgKzMwOCw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUG9wKEV4ZWNTdGF0ZSogZXgK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1B1c2goRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+aXNKU0FycmF5KHRoaXNWYWx1ZSkgJiYgYXJn
cy5zaXplKCkgPT0gMSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc1Zh
bHVlKTsKQEAgLTMyNSw3ICszMjUsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1B1c2goRXhl
Y1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCk7CiB9CiAKLUpTVmFs
dWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1
bmNSZXZlcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUt
PnRvVGhpc09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwpAQCAt
MzMzLDggKzMzMyw4IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShFeGVjU3RhdGUK
IAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBtaWRkbGU7IGsrKykgewogICAgICAgICB1
bnNpZ25lZCBsazEgPSBsZW5ndGggLSBrIC0gMTsKLSAgICAgICAgSlNWYWx1ZSogb2JqMiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGxrMSk7Ci0gICAgICAgIEpTVmFsdWUqIG9iaiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspOworICAgICAgICBKU1ZhbHVlUHRyIG9iajIgPSBn
ZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBsazEpOworICAgICAgICBKU1ZhbHVlUHRyIG9iaiA9
IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspOwogCiAgICAgICAgIGlmIChvYmoyKQogICAg
ICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGssIG9iajIpOwpAQCAtMzQ5LDEwICszNDksMTAg
QEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEV4ZWNTdGF0ZQogICAgIHJldHVybiB0
aGlzT2JqOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQ7
CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMp
OwogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMzYxLDcgKzM2MSw3IEBAIEpTVmFsdWUqIGFy
cmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiAKICAgICB9IGVsc2UgewogICAgICAgICByZXN1
bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDE7
IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIG9iaiA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGspKQorICAgICAgICAgICAgaWYgKEpTVmFsdWVQdHIgb2Jq
ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaykpCiAgICAgICAgICAgICAgICAgdGhpc09i
ai0+cHV0KGV4ZWMsIGsgLSAxLCBvYmopOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsgLSAxKTsKQEAgLTM3Miw3ICszNzIs
NyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBo
dHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVm
L2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogCkBAIC0zODAsNyArMzgwLDcgQEAgSlNW
YWx1ZSogYXJyYXlQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIAogCiAgICAgLy8gV2UgcmV0dXJu
IGEgbmV3IGFycmF5CiAgICAgSlNBcnJheSogcmVzT2JqID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSByZXNPYmo7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSByZXNPYmo7CiAgICAgZG91YmxlIGJlZ2luID0gYXJncy5hdChleGVjLCAwKS0+dG9JbnRl
Z2VyKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGJlZ2lu
ID49IDApIHsKQEAgLTQxMCwxOCArNDEwLDE4IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU2xp
Y2UoRXhlY1N0YXRlKiAKICAgICBpbnQgYiA9IHN0YXRpY19jYXN0PGludD4oYmVnaW4pOwogICAg
IGludCBlID0gc3RhdGljX2Nhc3Q8aW50PihlbmQpOwogICAgIGZvciAoaW50IGsgPSBiOyBrIDwg
ZTsgaysrLCBuKyspIHsKLSAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQcm9wZXJ0eShleGVj
LCB0aGlzT2JqLCBrKSkKKyAgICAgICAgaWYgKEpTVmFsdWVQdHIgdiA9IGdldFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGspKQogICAgICAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgbiwgdik7CiAg
ICAgfQogICAgIHJlc09iai0+c2V0TGVuZ3RoKG4pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBhcnJh
eVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9
IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBm
dW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogCkBAIC00NDEsMTEgKzQ0MSwxMSBAQCBK
U1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvcnQoRXhlY1N0YXRlKiBlCiAgICAgLy8gIk1pbiIgc29y
dC4gTm90IHRoZSBmYXN0ZXN0LCBidXQgZGVmaW5pdGVseSBsZXNzIGNvZGUgdGhhbiBoZWFwc29y
dAogICAgIC8vIG9yIHF1aWNrc29ydCwgYW5kIG11Y2ggbGVzcyBzd2FwcGluZyB0aGFuIGJ1YmJs
ZXNvcnQvaW5zZXJ0aW9uc29ydC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
IC0gMTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUqIGlPYmogPSB0aGlzT2JqLT5nZXQoZXhlYywg
aSk7CisgICAgICAgIEpTVmFsdWVQdHIgaU9iaiA9IHRoaXNPYmotPmdldChleGVjLCBpKTsKICAg
ICAgICAgdW5zaWduZWQgdGhlbWluID0gaTsKLSAgICAgICAgSlNWYWx1ZSogbWluT2JqID0gaU9i
ajsKKyAgICAgICAgSlNWYWx1ZVB0ciBtaW5PYmogPSBpT2JqOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBpICsgMTsgaiA8IGxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBq
T2JqID0gdGhpc09iai0+Z2V0KGV4ZWMsIGopOworICAgICAgICAgICAgSlNWYWx1ZVB0ciBqT2Jq
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGopOwogICAgICAgICAgICAgZG91YmxlIGNvbXBhcmVSZXN1
bHQ7CiAgICAgICAgICAgICBpZiAoak9iai0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICBjb21wYXJlUmVzdWx0ID0gMTsgLy8gZG9uJ3QgY2hlY2sgbWluT2JqIGJlY2F1c2UgdGhlcmUn
cyBubyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgPT0gKDApIGZyb20gPiAoMSkKQEAgLTQ3MywxMyAr
NDczLDEzIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGUKICAgICBy
ZXR1cm4gdGhpc09iajsKIH0KIAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAK
ICAgICAvLyAxNS40LjQuMTIKICAgICBKU0FycmF5KiByZXNPYmogPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHJlc09iajsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IHJlc09iajsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMpOwogICAgIGlm
ICghYXJncy5zaXplKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDk2LDcg
KzQ5Niw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICAg
ICAgZGVsZXRlQ291bnQgPSBsZW5ndGggLSBiZWdpbjsKIAogICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKSkKKyAgICAgICAgaWYgKEpTVmFsdWVQ
dHIgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbikpCiAgICAgICAgICAg
ICByZXNPYmotPnB1dChleGVjLCBrLCB2KTsKICAgICB9CiAgICAgcmVzT2JqLT5zZXRMZW5ndGgo
ZGVsZXRlQ291bnQpOwpAQCAtNTA1LDcgKzUwNSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5j
U3BsaWNlKEV4ZWNTdGF0ZSoKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgIT0gZGVsZXRlQ291bnQp
IHsKICAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmdzIDwgZGVsZXRlQ291bnQpIHsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgayA9IGJlZ2luOyBrIDwgbGVuZ3RoIC0gZGVsZXRlQ291bnQ7ICsr
aykgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gZ2V0UHJvcGVydHkoZXhlYywg
dGhpc09iaiwgayArIGRlbGV0ZUNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZVB0
ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGRlbGV0ZUNvdW50KSkKICAgICAg
ICAgICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJncywgdik7
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxl
dGVQcm9wZXJ0eShleGVjLCBrICsgYWRkaXRpb25hbEFyZ3MpOwpAQCAtNTE0LDcgKzUxNCw3IEBA
IEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jU3BsaWNlKEV4ZWNTdGF0ZSoKICAgICAgICAgICAgICAg
ICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrIC0gMSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5ndGggLSBkZWxldGVDb3VudDsgKGlu
dClrID4gYmVnaW47IC0taykgewotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlKiBvYmogPSBn
ZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgZGVsZXRlQ291bnQgLSAxKSkKKyAgICAgICAg
ICAgICAgICBpZiAoSlNWYWx1ZVB0ciBvYmogPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
ICsgZGVsZXRlQ291bnQgLSAxKSkKICAgICAgICAgICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4
ZWMsIGsgKyBhZGRpdGlvbmFsQXJncyAtIDEsIG9iaik7CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrICsgYWRk
aXRpb25hbEFyZ3MgLSAxKTsKQEAgLTUyOCw3ICs1MjgsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY1NwbGljZShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIApAQCAtNTM3LDcgKzUzNyw3IEBAIEpTVmFsdWUq
IGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUKICAgICB1bnNpZ25lZCBuckFyZ3MgPSBh
cmdzLnNpemUoKTsKICAgICBpZiAobnJBcmdzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgayA9
IGxlbmd0aDsgayA+IDA7IC0taykgewotICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHYgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBrIC0gMSkpCisgICAgICAgICAgICBpZiAoSlNWYWx1ZVB0
ciB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayAtIDEpKQogICAgICAgICAgICAgICAg
IHRoaXNPYmotPnB1dChleGVjLCBrICsgbnJBcmdzIC0gMSwgdik7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgayArIG5yQXJn
cyAtIDEpOwpAQCAtNTQ1LDE2ICs1NDUsMTYgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNVblNo
aWZ0KEV4ZWNTdGF0ZQogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdz
OyArK2spCiAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrLCBhcmdzLmF0KGV4ZWMsIGspKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBsZW5ndGggKyBuckFyZ3MpOwor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgbGVuZ3RoICsgbnJBcmdzKTsK
ICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGFycmF5UHJv
dG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRmlsdGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9U
aGlzT2JqZWN0KGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMs
IDApOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENh
bGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAt
NTcxLDcgKzU3MSw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRmlsdGVyKEV4ZWNTdGF0ZSoK
ICAgICAgICAgaWYgKCF0aGlzT2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaywgc2xvdCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBrKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBr
KTsKIAogICAgICAgICBBcmdMaXN0IGVhY2hBcmd1bWVudHM7CiAKQEAgLTU3OSw3ICs1NzksNyBA
QCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY0ZpbHRlcihFeGVjU3RhdGUqCiAgICAgICAgIGVhY2hB
cmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGspKTsKICAgICAgICAgZWFjaEFyZ3VtZW50
cy5hcHBlbmQodGhpc09iaik7CiAKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMp
OworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKIAogICAgICAgICBpZiAo
cmVzdWx0LT50b0Jvb2xlYW4oZXhlYykpCiAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0KGV4
ZWMsIGZpbHRlckluZGV4KyssIHYpOwpAQCAtNTg3LDExICs1ODcsMTEgQEAgSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKgogICAgIHJldHVybiByZXN1bHRBcnJheTsKIH0K
IAotSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgYXJy
YXlQcm90b0Z1bmNNYXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
dGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9
IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBm
dW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCkBAIC02MDgsNyArNjA4LDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNNYXAo
RXhlY1N0YXRlKiBleAogICAgICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVj
LCBrLCBzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEpTVmFsdWUqIHYg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGspOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGspOwogCiAgICAgICAgIEFyZ0xpc3QgZWFjaEFyZ3VtZW50czsKIApAQCAt
NjE2LDcgKzYxNiw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSogZXgK
ICAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAg
ICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBKU1ZhbHVlKiByZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywg
ZWFjaEFyZ3VtZW50cyk7CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwog
ICAgICAgICByZXN1bHRBcnJheS0+cHV0KGV4ZWMsIGssIHJlc3VsdCk7CiAgICAgfQogCkBAIC02
MjgsMTEgKzYyOCwxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4
CiAvLyBodHRwOi8vZGV2ZWxvcGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFT
Y3JpcHRfMS41X1JlZmVyZW5jZTpPYmplY3RzOkFycmF5OmZvckVhY2gKIC8vIGh0dHA6Ly9kZXZl
bG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJl
bmNlOk9iamVjdHM6QXJyYXk6c29tZQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0V2ZXJ5KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyk7
CiAKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1
ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEp
OwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC02NDAsNyArNjQwLDcgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNFdmVyeShFeGVjU3RhdGUqIAogCiAgICAgSlNPYmplY3Qq
IGFwcGx5VGhpcyA9IGFyZ3MuYXQoZXhlYywgMSktPmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBleGVj
LT5nbG9iYWxUaGlzVmFsdWUoKSA6IGFyZ3MuYXQoZXhlYywgMSktPnRvT2JqZWN0KGV4ZWMpOwog
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKHRydWUpOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0ID0ganNCb29sZWFuKHRydWUpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09i
ai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVj
KTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNl
cHRpb24oKTsgKytrKSB7CkBAIC02NjYsMTEgKzY2NiwxMSBAQCBKU1ZhbHVlKiBhcnJheVByb3Rv
RnVuY0V2ZXJ5KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSog
YXJyYXlQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9G
dW5jRm9yRWFjaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlz
VmFsdWUtPnRvVGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJn
cy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAw
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkKQEAgLTY5NCwxMSArNjk0LDExIEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRm9yRWFj
aChFeGVjU3RhdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogYXJy
YXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29t
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUtPnRv
VGhpc09iamVjdChleGVjKTsKIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gYXJncy5hdChleGVj
LCAwKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRD
YWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAg
LTcwNiw3ICs3MDYsNyBAQCBKU1ZhbHVlKiBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBl
CiAKICAgICBKU09iamVjdCogYXBwbHlUaGlzID0gYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmlu
ZWRPck51bGwoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogYXJncy5hdChleGVjLCAxKS0+
dG9PYmplY3QoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZmFsc2Up
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKIAogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewpAQCAtNzI5LDcgKzcyOSw3IEBAIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jU29tZShFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBKYXZh
U2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQogICAgIC8vIERvY3VtZW50YXRpb246IGh0
dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1Jl
ZmVyZW5jZTpHbG9iYWxfT2JqZWN0czpBcnJheTppbmRleE9mCkBAIC03NDgsOSArNzQ4LDkgQEAg
SlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZQogICAgICAgICAgICAgaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZCk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSogc2Vh
cmNoRWxlbWVudCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBzZWFyY2hFbGVt
ZW50ID0gYXJncy5hdChleGVjLCAwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5k
ZXgpIHsKLSAgICAgICAgSlNWYWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwg
aW5kZXgpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKHN0cmljdEVxdWFsKHNlYXJjaEVsZW1lbnQsIGUpKQpAQCAtNzYwLDcgKzc2MCw3IEBAIEpT
VmFsdWUqIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgLTEpOwogfQogCi1KU1ZhbHVlKiBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIC8vIEphdmFTY3JpcHQgMS42IEV4dGVuc2lvbiBieSBNb3ppbGxhCiAgICAg
Ly8gRG9jdW1lbnRhdGlvbjogaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0Nv
cmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5Omxhc3RJbmRl
eE9mCkBAIC03NzksOSArNzc5LDkgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhP
ZihFeGVjUwogICAgIGlmIChkIDwgbGVuZ3RoKQogICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0
PGludD4oZCk7CiAKLSAgICBKU1ZhbHVlKiBzZWFyY2hFbGVtZW50ID0gYXJncy5hdChleGVjLCAw
KTsKKyAgICBKU1ZhbHVlUHRyIHNlYXJjaEVsZW1lbnQgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAg
IGZvciAoOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7Ci0gICAgICAgIEpTVmFsdWUqIGUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVQdHIgZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYgKCFlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHJpY3RFcXVhbChzZWFyY2hFbGVtZW50LCBl
KSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIENvbnN0cnVjdFR5
cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIH0KIAogLy8gRUNNQSAxNS42LjEKLXN0YXRp
YyBKU1ZhbHVlKiBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNh
bGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzLmF0
KGV4ZWMsIDApLT50b0Jvb2xlYW4oZXhlYykpOwogfQpAQCAtNjgsNyArNjgsNyBAQCBDYWxsVHlw
ZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAgICAgcmV0dXJuIENhbGxUeXBlSG9z
dDsKIH0KIAotSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKK0pTT2JqZWN0
KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlUHRyIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKICAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShp
bW1lZGlhdGVCb29sZWFuVmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEo
Q2FsbERhdGEmKTsKICAgICB9OwogCi0gICAgSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9t
SW1tZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqLCBKU1ZhbHVlKik7CisgICAgSlNPYmplY3QqIGNv
bnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRy
KTsKICAgICBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqLCBjb25zdCBBcmdM
aXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuT2JqZWN0LmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICB9Owog
Ci0gICAgQm9vbGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUqKTsKKyAgICBCb29s
ZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgQm9v
bGVhbk9iamVjdCogYXNCb29sZWFuT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBC
b29sZWFuT2JqZWN0KiBhc0Jvb2xlYW5PYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZCb29sZWFuT2JqZWN0Ojpp
bmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCb29sZWFuT2JqZWN0Kj4oYXNPYmpl
Y3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xl
YW5Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChCb29sZWFuUHJvdG90eXBlKTsKIAog
Ly8gRnVuY3Rpb25zCi1zdGF0aWMgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBib29sZWFuUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogLy8gRUNNQSAx
NS42LjQKIApAQCAtNTAsNyArNTAsNyBAQCBCb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90
eXBlKEV4ZWNTCiAKIC8vIEVDTUEgMTUuNi40LjIgKyAxNS42LjQuMwogCi1KU1ZhbHVlKiBib29s
ZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGJvb2xlYW5Qcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICh0aGlzVmFsdWUgPT0ganNCb29sZWFuKGZhbHNl
KSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZmFsc2UiKTsKQEAg
LTY4LDcgKzY4LDcgQEAgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdAog
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgInRydWUiKTsKIH0KIAotSlNWYWx1
ZSogYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGJvb2xlYW5Qcm90
b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4o
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FsbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1KU1ZhbHVlKiBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSog
ZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERh
dGEsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBl
IGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhv
c3QpCiAgICAgICAgIHJldHVybiBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgYXNPYmpl
Y3QoZnVuY3Rpb25PYmplY3QpLCB0aGlzVmFsdWUsIGFyZ3MpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FsbERhdGEuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhbGxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMyBAQAogI2lmbmRlZiBD
YWxsRGF0YV9oCiAjZGVmaW5lIENhbGxEYXRhX2gKIAotI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgi
Ci0KIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJnTGlzdDsKICAgICBjbGFzcyBFeGVj
U3RhdGU7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAgICBjbGFzcyBKU09iamVjdDsK
KyAgICBjbGFzcyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOwogCiAgICAg
ZW51bSBDYWxsVHlwZSB7CkBAIC00NSw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBDYWxsVHlwZUpTCiAgICAgfTsKIAotICAgIHR5cGVkZWYgSlNWYWx1ZSogKCpOYXRpdmVGdW5j
dGlvbikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQdHIgKCpOYXRpdmVGdW5jdGlvbikoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwog
CiAgICAgdW5pb24gQ2FsbERhdGEgewogICAgICAgICBzdHJ1Y3QgewpAQCAtNTcsNyArNTYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfSBqczsKICAgICB9OwogCi0gICAgSlNWYWx1ZSog
Y2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNW
YWx1ZVB0ciBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgZnVuY3Rpb25PYmplY3QsIENhbGxU
eXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xs
ZWN0b3IuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29s
bGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgSGVhcDo6
c2V0R0NQcm90ZWN0TmVlZHNMb2NraW5nKCkKICAgICAgICAgbV9wcm90ZWN0ZWRWYWx1ZXNNdXRl
eC5zZXQobmV3IE11dGV4KTsKIH0KIAotdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUqIGspCit2
b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZVB0ciBrKQogewogICAgIEFTU0VSVChrKTsKICAgICBB
U1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERh
dGEtPmlzU2hhcmVkSW5zdGFuY2UpOwpAQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgSGVhcDo6cHJv
dGVjdChKU1ZhbHVlKiBrKQogICAgICAgICBtX3Byb3RlY3RlZFZhbHVlc011dGV4LT51bmxvY2so
KTsKIH0KIAotdm9pZCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSogaykKK3ZvaWQgSGVhcDo6dW5w
cm90ZWN0KEpTVmFsdWVQdHIgaykKIHsKICAgICBBU1NFUlQoayk7CiAgICAgQVNTRVJUKEpTTG9j
azo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJl
ZEluc3RhbmNlKTsKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEhlYXA6OnVucHJvdGVjdChKU1Zh
bHVlKiBrKQogICAgICAgICBtX3Byb3RlY3RlZFZhbHVlc011dGV4LT51bmxvY2soKTsKIH0KIAot
SGVhcCogSGVhcDo6aGVhcChKU1ZhbHVlKiB2KQorSGVhcCogSGVhcDo6aGVhcChKU1ZhbHVlUHRy
IHYpCiB7CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2KSkKICAgICAgICAgcmV0
dXJuIDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgJKHJldmlzaW9uIDM5NjAz
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBDb2xsZWN0b3JfaAogI2RlZmluZSBDb2xsZWN0b3Jf
aAogCi0jaW5jbHVkZSAiSlNJbW1lZGlhdGUuaCIKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTQ0LDYg
KzQzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29sbGVjdG9yQmxvY2s7CiAgICAg
Y2xhc3MgSlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBKU1ZhbHVl
UHRyOwogCiAgICAgZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRpb24sIEFsbG9j
YXRpb24sIENvbGxlY3Rpb24gfTsKICAgICBlbnVtIEhlYXBUeXBlIHsgUHJpbWFyeUhlYXAsIE51
bWJlckhlYXAgfTsKQEAgLTk2LDEwICs5NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U3RhdGlzdGljcyBzdGF0aXN0aWNzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXRHQ1Byb3Rl
Y3ROZWVkc0xvY2tpbmcoKTsKLSAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUqKTsKLSAgICAg
ICAgdm9pZCB1bnByb3RlY3QoSlNWYWx1ZSopOworICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1
ZVB0cik7CisgICAgICAgIHZvaWQgdW5wcm90ZWN0KEpTVmFsdWVQdHIpOwogCi0gICAgICAgIHN0
YXRpYyBIZWFwKiBoZWFwKEpTVmFsdWUqKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcworICAg
ICAgICBzdGF0aWMgSGVhcCogaGVhcChKU1ZhbHVlUHRyKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZh
bHVlcwogCiAgICAgICAgIHNpemVfdCBnbG9iYWxPYmplY3RDb3VudCgpOwogICAgICAgICBzaXpl
X3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIENvbXBsZXRpb24g
Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4gQ29tcGxldGlvbihOb3Jt
YWwpOwogfQogCi1Db21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
biYgc2NvcGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlKiB0aGlzVmFs
dWUpCitDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbiYgc2Nv
cGVDaGFpbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSkK
IHsKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICAKQEAgLTYzLDggKzYzLDggQEAgQ29tcGxl
dGlvbiBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjbwogCiAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSAoIXRoaXNWYWx1ZSB8fCB0aGlzVmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkpID8gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpIDogdGhpc1ZhbHVlLT50b09iamVjdChleGVjKTsKIAot
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IG5vVmFsdWUoKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBz
Y29wZUNoYWluLm5vZGUoKSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVB0ciBl
eGNlcHRpb24gPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBleGVjLT5pbnRl
cnByZXRlcigpLT5leGVjdXRlKHByb2dyYW1Ob2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLm5v
ZGUoKSwgdGhpc09iaiwgJmV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAg
ICAgIGlmIChleGNlcHRpb24tPmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhjZXB0aW9uKS0+aXNX
YXRjaGRvZ0V4Y2VwdGlvbigpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJ
KHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
Ki8KICAgICBjbGFzcyBDb21wbGV0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBsZXRp
b24oQ29tcGxUeXBlIHR5cGUgPSBOb3JtYWwsIEpTVmFsdWUqIHZhbHVlID0gbm9WYWx1ZSgpKQor
ICAgICAgICBDb21wbGV0aW9uKENvbXBsVHlwZSB0eXBlID0gTm9ybWFsLCBKU1ZhbHVlUHRyIHZh
bHVlID0gbm9WYWx1ZSgpKQogICAgICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICAgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgQ29tcGxU
eXBlIGNvbXBsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBKU1ZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRWYWx1
ZShKU1ZhbHVlKiB2KSB7IG1fdmFsdWUgPSB2OyB9Ci0gICAgICAgIGJvb2wgaXNWYWx1ZUNvbXBs
ZXRpb24oKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAgICAgSlNWYWx1ZVB0ciB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRWYWx1ZShK
U1ZhbHVlUHRyIHYpIHsgbV92YWx1ZSA9IHY7IH0KKyAgICAgICAgYm9vbCBpc1ZhbHVlQ29tcGxl
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IENvbXBsVHlwZSBtX3R5cGU7Ci0gICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7CisgICAgICAgIEpT
VmFsdWVQdHIgbV92YWx1ZTsKICAgICB9OwogCiAgICAgQ29tcGxldGlvbiBjaGVja1N5bnRheChF
eGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7Ci0gICAgQ29tcGxldGlvbiBldmFsdWF0ZShF
eGVjU3RhdGUqLCBTY29wZUNoYWluJiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUqIHRoaXNW
YWx1ZSA9IG5vVmFsdWUoKSk7CisgICAgQ29tcGxldGlvbiBldmFsdWF0ZShFeGVjU3RhdGUqLCBT
Y29wZUNoYWluJiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWVQdHIgdGhpc1ZhbHVlID0gbm9W
YWx1ZSgpKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogb2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0
IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU09i
amVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBvYmplY3QsIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25z
dHJ1Y3RUeXBlSG9zdCkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGV4ZWMsIGFzT2JqZWN0KG9iamVjdCksIGFyZ3MpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zdHJ1Y3REYXRhLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdHJ1Y3REYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxMyBA
QAogI2lmbmRlZiBDb25zdHJ1Y3REYXRhX2gKICNkZWZpbmUgQ29uc3RydWN0RGF0YV9oCiAKLSNp
bmNsdWRlICJKU0ltbWVkaWF0ZS5oIiAvLyB0ZW1wb3JhcnkgdW50aWwgSlNWYWx1ZSogYmVjb21l
cyBhIGNsYXNzIHdlIGNhbiBmb3J3YXJkLWRlY2xhcmUKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBBcmdMaXN0OwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBGdW5jdGlv
bkJvZHlOb2RlOwogICAgIGNsYXNzIEpTT2JqZWN0OworICAgIGNsYXNzIEpTVmFsdWVQdHI7CiAg
ICAgY2xhc3MgU2NvcGVDaGFpbk5vZGU7CiAKICAgICBlbnVtIENvbnN0cnVjdFR5cGUgewpAQCAt
NTcsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfSBqczsKICAgICB9OwogCi0g
ICAgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKiBjb25zdHJ1Y3Rvciwg
Q29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAg
ICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgY29uc3RydWN0b3Is
IENvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0Jik7CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRlQ29uc3RydWN0
b3IpOwogCi1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlTm93KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1Zh
bHVlKiBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVOb3co
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBkYXRlVVRDKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOwogCiBEYXRlQ29uc3RydWN0b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSog
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUp
CiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwg
SWRlbnRpZmllcihleGVjLCBkYXRlUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkK
QEAgLTc2LDcgKzc2LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVj
LAogICAgICAgICBpZiAoYXJncy5hdChleGVjLCAwKS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6
aW5mbykpCiAgICAgICAgICAgICB2YWx1ZSA9IGFzRGF0ZUluc3RhbmNlKGFyZ3MuYXQoZXhlYywg
MCkpLT5pbnRlcm5hbE51bWJlcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHByaW1pdGl2ZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvUHJpbWl0aXZlKGV4ZWMpOworICAg
ICAgICAgICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1ByaW1p
dGl2ZShleGVjKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmUtPmlzU3RyaW5nKCkpCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBwYXJzZURhdGUocHJpbWl0aXZlLT5nZXRTdHJpbmcoKSk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC0xMjMsNyArMTIzLDcgQEAgQ29uc3RydWN0VHlwZSBEYXRlQ29u
c3RydWN0b3I6OmdldENvbnN0cgogfQogCiAvLyBFQ01BIDE1LjkuMgotc3RhdGljIEpTVmFsdWUq
IGNhbGxEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgdGltZV90IGxvY2FsVGlt
ZSA9IHRpbWUoMCk7CiAgICAgdG0gbG9jYWxUTTsKQEAgLTEzOCwxNyArMTM4LDE3IEBAIENhbGxU
eXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoQ2EKICAgICByZXR1cm4gQ2FsbFR5cGVI
b3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VEYXRlKGFy
Z3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlTm93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpCitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhl
YywgZ2V0Q3VycmVudFVUQ1RpbWUoKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlVVRDKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVVVEMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaW50IG4gPSBhcmdzLnNpemUo
KTsKICAgICBpZiAoaXNuYW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDM5NjAzKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsOSArNTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbXV0YWJsZSBDYWNoZSogbV9j
YWNoZTsKICAgICB9OwogCi0gICAgRGF0ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVl
Kik7CisgICAgRGF0ZUluc3RhbmNlKiBhc0RhdGVJbnN0YW5jZShKU1ZhbHVlUHRyKTsKIAotICAg
IGlubGluZSBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWUqIHZhbHVlKQorICAg
IGlubGluZSBEYXRlSW5zdGFuY2UqIGFzRGF0ZUluc3RhbmNlKEpTVmFsdWVQdHIgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihh
c09iamVjdCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDUwICs1OCw1MCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChEYXRlUHJvdG90eXBlKTsKIAotc3Rh
dGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNH
ZXRNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0VVRDRGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
KTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01p
bGxpc2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ1Nl
Y29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldEZ1bGxZZWFyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29u
ZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRNaW51dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0TW9udGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0RhdGUoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1NldFVUQ01vbnRoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kcyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1
ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3Rh
dGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3Rv
RnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3Ry
aW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0
YXRpYyBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBk
YXRlUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmco
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGlj
IEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldERhdGUoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBk
YXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldEZ1bGxZZWFy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldEhvdXJzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY0dldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRNaW51
dGVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY0dldFNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VGltZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVU
Q0RheShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNH
ZXRVVENNaWxsaXNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRl
cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFll
YXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0RGF0ZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRIb3VycyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBk
YXRlUHJvdG9GdW5jU2V0TWludXRlcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNb250
aChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY1NldFRpbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENN
aWxsaXNlY29uZHMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTWludXRlcyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90
b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFllYXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0
ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVRpbWVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3Rh
dGljIEpTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CiAKIH0KIApAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgRGF0ZVByb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KEUKIAogLy8gRnVuY3Rpb25zCiAKLUpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6
OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAt
Mzc2LDcgKzM3Niw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUK
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUodCkgKyAiICIg
KyBmb3JtYXRUaW1lKHQsIHV0YykpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9VVENT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTM5Myw3ICsz
OTMsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcoRXhlY1N0CiAgICAgcmV0
dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRDVmFyaWFudCh0KSArICIg
IiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0Rh
dGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5m
bykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC00MTAs
NyArNDEwLDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhFeGVjUwogICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSh0KSk7CiB9CiAKLUpT
VmFsdWUqIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNP
YmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CkBAIC00MjcsNyArNDI3LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVu
Y1RvVGltZVN0cmluZyhFeGVjUwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Zm9ybWF0VGltZSh0LCB1dGMpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5z
dGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwpAQCAtNDUxLDcgKzQ1MSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGUKICNlbmRpZgogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0xvY2FsZURhdGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRl
U3RyaW5nCiAjZW5kaWYKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVUaW1lU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CkBAIC00OTksNyArNDk5LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGlt
ZVN0cmluZwogI2VuZGlmCiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTUxMiw3ICs1MTIsNyBAQCBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIG1pbGxpKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFRpbWUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlz
VmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNTI1LDcgKzUyNSw3IEBAIEpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRUaW1lKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
bWlsbGkpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTU0Miw3ICs1NDIsNyBAQCBKU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoRXhlY1N0CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVs
bFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZv
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTU1OSw3
ICs1NTksNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlCiAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDE5MDAgKyB0LnllYXIpOwogfQogCi1KU1ZhbHVlKiBkYXRl
UHJvdG9GdW5jVG9HTVRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNUb0dN
VFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTU3Niw3ICs1NzYsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jVG9HTVRTdHJpbmco
RXhlY1N0CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRD
VmFyaWFudCh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgdXRjKSk7CiB9CiAKLUpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldE1v
bnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFu
Y2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpA
QCAtNTkzLDcgKzU5Myw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNb250aChFeGVjU3Rh
dGUKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dl
dFVUQ01vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRl
SW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwpAQCAtNjEwLDcgKzYxMCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENNb250
aChFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CiB9CiAKLUpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNHZXREYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5j
R2V0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUlu
c3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKQEAgLTYyNyw3ICs2MjcsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF0ZShFeGVj
U3RhdGUqCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOwogfQogCi1KU1Zh
bHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVByb3Rv
RnVuY0dldFVUQ0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3Qo
JkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CkBAIC02NDQsNyArNjQ0LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVU
Q0RhdGUoRXhlY1N0YQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoRGF5KTsKIH0K
IAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0ZVBy
b3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgm
RGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKQEAgLTY2MSw3ICs2NjEsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0RGF5
KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQud2Vla0RheSk7CiB9CiAK
LUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQ
cm90b0Z1bmNHZXRVVENEYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CkBAIC02NzgsNyArNjc4LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dl
dFVUQ0RheShFeGVjU3RhdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LndlZWtEYXkpOwog
fQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRh
dGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09i
amVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5j
R2V0SG91cnMoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuaG91cik7CiB9
CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIg
ZGF0ZVByb3RvRnVuY0dldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUt
PmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzEyLDcgKzcxMiw3IEBAIEpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNHZXRVVENIb3VycyhFeGVjU3QKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5ob3Vy
KTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFs
dWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzI5LDcgKzcyOSw3IEBAIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNTdGEKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5t
aW51dGUpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VVRDTWludXRlcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBp
ZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkBAIC03NDYsNyArNzQ2LDcgQEAgSlNW
YWx1ZSogZGF0ZVByb3RvRnVuY0dldFVUQ01pbnV0ZXMoRXhlYwogICAgIHJldHVybiBqc051bWJl
cihleGVjLCB0Lm1pbnV0ZSk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRz
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTc2Myw3ICs3NjMsNyBA
QCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhCiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIHQuc2Vjb25kKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY0dldFVU
Q1NlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6Omlu
Zm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtNzgw
LDcgKzc4MCw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4ZWMKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5zZWNvbmQpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJv
dG9GdW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jR2V0
TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZE
YXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIEpTVmFsdWUqIGRhdGVQcm90b0Z1bmNHZXRNaWxs
aVNlY29uZHMoRXgKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMpOwogfQogCi1KU1ZhbHVl
KiBkYXRlUHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jR2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0aGlzVmFs
dWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtODEwLDcgKzgxMCw3IEBAIEpTVmFsdWUqIGRhdGVQ
cm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgbXMp
OwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAg
IGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTgyNyw3ICs4MjcsNyBAQCBK
U1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0VGltZXpvbmVPZmZzZXQoCiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIC1nbXRvZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CiB9CiAKLUpTVmFsdWUq
IGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1
bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3Qo
JkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CkBAIC04MzUsMTIgKzgzNSwxMiBAQCBKU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0
VGltZShFeGVjU3RhdGUqCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUlu
c3RhbmNlKHRoaXNWYWx1ZSk7IAogCiAgICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoYXJncy5h
dChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIG1pbGxpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMs
IG1pbGxpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1l
QXJncyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWVQ
dHIgc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1
dElzVVRDKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjpp
bmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKQEAgLTg0
OSw3ICs4NDksNyBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAg
ICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgCiAg
ICAgaWYgKGFyZ3MuaXNFbXB0eSgpIHx8IGlzbmFuKG1pbGxpKSkgewotICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc05h
TihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC04NjEsMjQgKzg2MSwyNCBAQCBzdGF0
aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgdGhpc0RhdGVPYmotPm1z
VG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7CiAKICAgICBpZiAoIWZp
bGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywg
JnQpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOworICAgICAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0
SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0gCiAg
ICAgCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRp
bWVUb01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc051
bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0SXNVVEMpKTsKICAg
ICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IG51
bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQorc3RhdGljIEpTVmFsdWVQdHIgc2V0TmV3VmFs
dWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncywgaW50IG51bUFyZ3NUb1VzZSwgYm9vbCBpbnB1dElzVVRDKQogewog
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIERhdGVJbnN0YW5j
ZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOwogICAgIGlmIChhcmdz
LmlzRW1wdHkoKSkgewotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAg
ICAgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVP
YmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9ICAgICAgCkBAIC04OTgsMTAxICs4OTgsMTAxIEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdW
YWx1ZUZyb21EYXRlQXJncygKICAgICB9CiAgICAgCiAgICAgaWYgKCFmaWxsU3RydWN0dXJlc1Vz
aW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KSkgewotICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTihleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUo
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9IAogICAgICAgICAgICAKLSAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVMo
dCwgbXMsIGlucHV0SXNVVEMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVG
cm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKIH0KIAot
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDTWlsbGlzZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1
ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDEsIGlucHV0SXNVVEMpOwogfQog
Ci1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9v
bCBpbnB1dElzVVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdz
KGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRh
dGVQcm90b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90
b0Z1bmNTZXRVVENTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0
SXNVVEMgPSB0cnVlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0
aGlzVmFsdWUsIGFyZ3MsIDIsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9G
dW5jU2V0TWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0TWlu
dXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7
CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJn
cywgMywgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51
dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwogICAgIHJl
dHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MsIDMsIGlu
cHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0SG91cnMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldEhvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVG
cm9tVGltZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKIH0KIAot
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IGRhdGVQcm90b0Z1bmNTZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29uc3QgYm9v
bCBpbnB1dElzVVRDID0gdHJ1ZTsKICAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3Mo
ZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCA0LCBpbnB1dElzVVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1Nl
dERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNl
OwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFy
Z3MsIDEsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKICAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc1ZhbHVlLCBhcmdzLCAxLCBpbnB1dElz
VVRDKTsKIH0KIAotSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldE1vbnRoKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIGRhdGVQcm90b0Z1bmNTZXRNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgY29u
c3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURh
dGVBcmdzKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFs
dWUqIGRhdGVQcm90b0Z1bmNTZXRVVENNb250aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRl
UHJvdG9GdW5jU2V0VVRDTW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5w
dXRJc1VUQyA9IHRydWU7CiAgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMs
IHRoaXNWYWx1ZSwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAKLUpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNTZXRGdWxsWWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0
RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZh
bHNlOwogICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUs
IGFyZ3MsIDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0VVRD
RnVsbFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZ
ZWFyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOwog
ICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhleGVjLCB0aGlzVmFsdWUsIGFyZ3Ms
IDMsIGlucHV0SXNVVEMpOwogfQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBkYXRlUHJvdG9GdW5jU2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0KCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwpAQCAtMTAwMSw3ICsxMDAx
LDcgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogCiAgICAgRGF0
ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7ICAgICAK
ICAgICBpZiAoYXJncy5pc0VtcHR5KCkpIHsgCi0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TmFOKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpzTmFOKGV4ZWMpOwogICAg
ICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KQEAgLTEwMjMsMTggKzEwMjMsMTggQEAgSlNWYWx1ZSogZGF0ZVBy
b3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGludDMy
X3QgeWVhciA9IGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhlYywgb2spOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oZXhlYyk7CisgICAgICAgIEpT
VmFsdWVQdHIgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJ
bnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
ICAgICAgICAgCiAgICAgdC55ZWFyID0gKHllYXIgPiA5OSB8fCB5ZWFyIDwgMCkgPyB5ZWFyIC0g
MTkwMCA6IHllYXI7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29y
aWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
TnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7CiAgICAgdGhp
c0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU1ZhbHVlKiBkYXRlUHJvdG9GdW5jR2V0WWVhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgZGF0
ZVByb3RvRnVuY0dldFllYXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmpl
Y3QoJkRhdGVJbnN0YW5jZTo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAko
cmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90
b3R5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAg
ICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIENvbnN0cnVjdFR5cGUg
RXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3QKIH0KIAogLy8gRUNNQSAxNS45LjIKLXN0YXRpYyBK
U1ZhbHVlKiBjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsRXJy
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyAiRXJyb3IoKSIgZ2l2ZXMgdGhlIHNhbWVzIHJl
c3VsdCBhcyAibmV3IEVycm9yKCkiCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVycm9yKGV4ZWMsIGFy
Z3MpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFT
U0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRXJyb3JQcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1
ZSogZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBlcnJvclByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwog
CiAvLyBFQ01BIDE1LjkuNAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSkKQEAgLTQ0LDEzICs0NCwxMyBAQCBFcnJvclByb3RvdHlw
ZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcs
IGVycm9yUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CiB9CiAKLUpTVmFsdWUqIGVycm9y
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIGVycm9yUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS0+dG9UaGlz
T2JqZWN0KGV4ZWMpOwogCiAgICAgVVN0cmluZyBzID0gIkVycm9yIjsKIAotICAgIEpTVmFsdWUq
IHYgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOworICAg
IEpTVmFsdWVQdHIgdiA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bmFtZSk7CiAgICAgaWYgKCF2LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzID0gdi0+dG9TdHJp
bmcoZXhlYyk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzNiArNTgsMzYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc1dhdGNoZG9nRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogfTsKIAotSlNWYWx1ZSogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorSlNWYWx1ZVB0ciBjcmVhdGVJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgcmV0
dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRh
KTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFcnJvclR5cGUg
ZSwgY29uc3QgY2hhciogbXNnKQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cpCiB7CiAgICAgcmV0dXJuIEVycm9yOjpj
cmVhdGUoZXhlYywgZSwgbXNnLCAtMSwgLTEsIDApOwogfQogCi1KU1ZhbHVlKiBjcmVhdGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElk
ZW50aWZpZXImIGxhYmVsKQorSlNWYWx1ZVB0ciBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2csIGNvbnN0IElkZW50aWZpZXImIGxhYmVsKQog
ewogICAgIFVTdHJpbmcgbWVzc2FnZSA9IG1zZzsKICAgICBzdWJzdGl0dXRlKG1lc3NhZ2UsIGxh
YmVsLnVzdHJpbmcoKSk7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbWVzc2Fn
ZSwgLTEsIC0xLCAwKTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciogbXNnLCBKU1ZhbHVlKiB2KQorSlNWYWx1ZVB0ciBj
cmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyKiBtc2cs
IEpTVmFsdWVQdHIgdikKIHsKICAgICBVU3RyaW5nIG1lc3NhZ2UgPSBtc2c7CiAgICAgc3Vic3Rp
dHV0ZShtZXNzYWdlLCB2LT50b1N0cmluZyhleGVjKSk7CiAgICAgcmV0dXJuIEVycm9yOjpjcmVh
dGUoZXhlYywgZSwgbWVzc2FnZSwgLTEsIC0xLCAwKTsKIH0KIAotSlNWYWx1ZSogY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWVQdHIgY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gY3JlYXRlRXJyb3Io
ZXhlYywgUmFuZ2VFcnJvciwgIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIpOwog
fQogCi1KU1ZhbHVlKiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK0pTVmFsdWVQdHIgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0
ID0gMDsKICAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKQEAgLTEwNCw3ICsxMDQsNyBAQCBKU1ZhbHVl
KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4CiAgICAgCiBib29sIGlzU3RyV2hpdGVT
cGFjZShVQ2hhciBjKTsKIAotc3RhdGljIFVTdHJpbmcgY3JlYXRlRXJyb3JNZXNzYWdlKEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgaW50IGV4cHJlc3Npb25TdGFy
dCwgaW50IGV4cHJlc3Npb25TdG9wLCBKU1ZhbHVlKiB2YWx1ZSwgVVN0cmluZyBlcnJvcikKK3N0
YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBpbnQsIGludCBleHByZXNzaW9uU3RhcnQsIGludCBleHByZXNzaW9uU3Rv
cCwgSlNWYWx1ZVB0ciB2YWx1ZSwgVVN0cmluZyBlcnJvcikKIHsKICAgICBpZiAoIWV4cHJlc3Np
b25TdG9wIHx8IGV4cHJlc3Npb25TdGFydCA+IGNvZGVCbG9jay0+c291cmNlKCktPmxlbmd0aCgp
KSB7CiAgICAgICAgIFVTdHJpbmcgZXJyb3JUZXh0ID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwpA
QCAtMTQ4LDcgKzE0OCw3IEBAIHN0YXRpYyBVU3RyaW5nIGNyZWF0ZUVycm9yTWVzc2FnZShFeGVj
U3QKICAgICByZXR1cm4gZXJyb3JUZXh0OwogfQogCi1KU09iamVjdCogY3JlYXRlSW52YWxpZFBh
cmFtRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSogdmFsdWUs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0pTT2JqZWN0
KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IGNoYXIqIG9w
LCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgVVN0cmluZyBtZXNzYWdlID0gIm5vdCBhIHZhbGlkIGFyZ3VtZW50
IGZvciAnIjsKICAgICBtZXNzYWdlLmFwcGVuZChvcCk7CkBAIC0xNjYsNyArMTY2LDcgQEAgSlNP
YmplY3QqIGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKEV4ZWNTdAogICAgIHJldHVybiBleGNlcHRp
b247CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCitKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpbnQg
ZW5kT2Zmc2V0ID0gMDsKQEAgLTE4Nyw3ICsxODcsNyBAQCBKU09iamVjdCogY3JlYXRlTm90QUNv
bnN0cnVjdG9yRXJyb3IoRXhlCiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNWYWx1ZSog
Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayogY29kZUJsb2NrKQorSlNWYWx1ZVB0
ciBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFs
dWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBpbnQgc3RhcnRPZmZzZXQgPSAwOwogICAgIGludCBlbmRPZmZzZXQgPSAwOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDM5NjAzKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDE1ICs0MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2Jh
bERhdGE7CiAgICAgY2xhc3MgSlNOb3RBbk9iamVjdEVycm9yU3R1YjsKICAgICBjbGFzcyBKU09i
amVjdDsKKyAgICBjbGFzcyBKU1ZhbHVlUHRyOwogICAgIGNsYXNzIE5vZGU7CiAKLSAgICBKU1Zh
bHVlKiBjcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqKTsK
LSAgICBKU1ZhbHVlKiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7Ci0gICAg
SlNWYWx1ZSogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOworICAgIEpT
VmFsdWVQdHIgY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRh
Kik7CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7
CisgICAgSlNWYWx1ZVB0ciBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7
CiAgICAgSlNOb3RBbk9iamVjdEVycm9yU3R1YiogY3JlYXRlTm90QW5PYmplY3RFcnJvclN0dWIo
RXhlY1N0YXRlKiwgYm9vbCBpc051bGwpOwotICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFy
YW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBvcCwgSlNWYWx1ZSosIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKLSAgICBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LCBDb2RlQmxvY2sqKTsKLSAgICBKU1ZhbHVlKiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVj
U3RhdGUqLCBKU1ZhbHVlKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayopOwor
ICAgIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihFeGVjU3RhdGUqLCBjb25zdCBj
aGFyKiBvcCwgSlNWYWx1ZVB0ciwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayop
OworICAgIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqLCBK
U1ZhbHVlUHRyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CisgICAgSlNW
YWx1ZVB0ciBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgQ29kZUJsb2NrKik7CiAgICAgSlNPYmplY3QqIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNOb3RBbk9iamVjdEVycm9yU3R1YiosIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDb25zdHJ1Y3RU
eXBlIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmdldENvCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVI
b3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3Rh
dGljIEpTVmFsdWVQdHIgY2FsbEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IGNvbnN0cnVjdEZ1bmN0aW9uKGV4ZWMsIGFyZ3MpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoRnVuY3Rpb25Qcm90b3R5cGUpOwogCi1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90
b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
ZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7Citz
dGF0aWMgSlNWYWx1ZVB0ciBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgZnVu
Y3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOwogCiBGdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSW50
ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5udWxsSWRlbnRpZmllcikKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBGdW5jdGlv
blByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZQogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91
dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1
bmN0aW9uUHJvdG9GdW5jQ2FsbCksIERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGNh
bGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JikKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtNjMsNyArNjMsNyBAQCBDYWxsVHlwZSBGdW5jdGlv
blByb3RvdHlwZTo6Z2V0Q2FsbERhdGEoCiAKIC8vIEZ1bmN0aW9ucwogCi1KU1ZhbHVlKiBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBmdW5jdGlvblByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS0+aXNPYmplY3QoJkpTRnVu
Y3Rpb246OmluZm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlv
bih0aGlzVmFsdWUpOwpAQCAtNzgsMTcgKzc4LDE3IEBAIEpTVmFsdWUqIGZ1bmN0aW9uUHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1MKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogfQogCi1KU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLT5nZXRDYWxs
RGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpTVmFsdWUqIHRo
aXNBcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGFyZ0FycmF5ID0gYXJncy5h
dChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIHRoaXNBcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwor
ICAgIEpTVmFsdWVQdHIgYXJnQXJyYXkgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCi0gICAgSlNWYWx1
ZSogYXBwbHlUaGlzOworICAgIEpTVmFsdWVQdHIgYXBwbHlUaGlzOwogICAgIGlmICh0aGlzQXJn
LT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBhcHBseVRoaXMgPSBleGVjLT5nbG9iYWxU
aGlzVmFsdWUoKTsKICAgICBlbHNlCkBAIC0xMTMsMTQgKzExMywxNCBAQCBKU1ZhbHVlKiBmdW5j
dGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGNhbGwoZXhlYywgdGhpc1Zh
bHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgYXBwbHlBcmdzKTsKIH0KIAotSlNW
YWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGZ1bmN0
aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFsdWUtPmdldENhbGxEYXRhKGNhbGxEYXRh
KTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogdGhpc0FyZyA9IGFyZ3Mu
YXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB0aGlzQXJnID0gYXJncy5hdChleGVjLCAwKTsK
IAogICAgIEpTT2JqZWN0KiBjYWxsVGhpczsKICAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRP
ck51bGwoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBl
LmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4pOwogICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKIAotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZVB0ciBwcm90bykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBIYXNTdGFuZGFyZEdldE93blByb3BlcnR5
U2xvdCkpOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0
ZXIuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIHZvaWQgR2V0dGVy
U2V0dGVyOjptYXJrKCkKICAgICAgICAgbV9zZXR0ZXItPm1hcmsoKTsKIH0KIAotSlNWYWx1ZSog
R2V0dGVyU2V0dGVyOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdAorSlNWYWx1ZVB0ciBHZXR0ZXJTZXR0ZXI6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1ib29sIEdldHRlclNldHRlcjo6Z2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFs
dWUpCitib29sIEdldHRlclNldHRlcjo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICBudW1iZXIgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0
ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNl
dHRlci5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVy
U2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzR2V0dGVyU2V0dGVyKCkgY29u
c3Q7CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVl
KTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJp
bWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJiB2YWx1
ZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC02MSw5ICs2
MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogbV9zZXR0ZXI7ICAKICAg
ICB9OwogCi0gICAgR2V0dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVlKik7CisgICAg
R2V0dGVyU2V0dGVyKiBhc0dldHRlclNldHRlcihKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBH
ZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBH
ZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNHZXR0ZXJTZXR0ZXIoKSk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXIqPihhc0NlbGwodmFsdWUpKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNp
b24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiSlNJbW1lZGlh
dGUuaCIKICNpbmNsdWRlICJDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJEYXRlTWF0aC5oIgogI2lu
Y2x1ZGUgImR0b2EuaCIKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoSlNHbG9iYWxEYXRhKik7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZSogcHJvdG8pIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0
cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgSGFzU3RhbmRhcmRHZXRPd25Qcm9wZXJ0eVNsb3QpKTsgCiAgICAgICAg
IH0KQEAgLTUxLDkgKzUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKSA9IDA7CiAgICAgfTsKIAotICAgIEludGVybmFs
RnVuY3Rpb24qIGFzSW50ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKik7CisgICAgSW50ZXJuYWxGdW5j
dGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEludGVy
bmFsRnVuY3Rpb24qIGFzSW50ZXJuYWxGdW5jdGlvbihKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxp
bmUgSW50ZXJuYWxGdW5jdGlvbiogYXNJbnRlcm5hbEZ1bmN0aW9uKEpTVmFsdWVQdHIgdmFsdWUp
CiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmSW50ZXJu
YWxGdW5jdGlvbjo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50ZXJuYWxG
dW5jdGlvbio+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBib29s
IEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgaWYgKHN5bWJvbFRhYmxl
R2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYg
KEpTVmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsK
KyAgICBpZiAoSlNWYWx1ZVB0ciogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9wZXJ0
eU5hbWUpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KGxvY2F0aW9uKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSlNBY3RpdmF0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNB
Y3RpdmF0aW9uOjpwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBKU0FjdGl2YXRp
b246OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIUhlYXA6
OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwog
CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBKU0FjdGl2YXRpb246OnB1dChFeGVjU3RhdGUqLCBj
b25zdAogfQogCiAvLyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGhvbm9yIFJlYWRPbmx5IChj
b25zdCkgYW5kIERvbnRFbnVtCi12b2lkIEpTQWN0aXZhdGlvbjo6cHV0V2l0aEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNBY3RpdmF0aW9uOjpwdXRXaXRoQXR0cmli
dXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKIApAQCAt
MTUxLDcgKzE1MSw3IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjppc0R5bmFtaWNTY29wZSgpIGNvbnMK
ICAgICByZXR1cm4gZCgpLT5mdW5jdGlvbkJvZHktPnVzZXNFdmFsKCk7CiB9CiAKLUpTVmFsdWUq
IEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNBY3RpdmF0
aW9uOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IGFzQWN0aXZhdGlvbihzbG90LnNsb3RCYXNlKCkpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVl
KiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgSlNWYWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IEpTVmFsdWVQdHIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KTsKIAogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikg
Y29uc3Q7CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlz
Q29udmVyc2lvbikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3Jl
YXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpT
VmFyaWFibGVPYmplY3REYXRhIHsKQEAgLTc3LDE1ICs3NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHk7CiAgICAg
ICAgIH07CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVQdHIgYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgTkVWRVJfSU5MSU5F
IFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwogCiAgICAg
ICAgIEpTQWN0aXZhdGlvbkRhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0Fj
dGl2YXRpb25EYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0KICAgICB9OwogCi0gICAgSlNB
Y3RpdmF0aW9uKiBhc0FjdGl2YXRpb24oSlNWYWx1ZSopOworICAgIEpTQWN0aXZhdGlvbiogYXNB
Y3RpdmF0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpTQWN0aXZhdGlvbiogYXNBY3Rp
dmF0aW9uKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU0FjdGl2YXRpb24qIGFzQWN0aXZh
dGlvbihKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZh
bHVlKS0+aW5oZXJpdHMoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5IEBAIEFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiAKIC8vIFRoZSBkZWZpbml0aW9uIG9mIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0
b3JhZ2VTaXplCiAvLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1
bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihK
U1ZhbHVlKikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoSlNWYWx1ZSopKSBtdXN0IGJl
IDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZG
RkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKikpKSAvIHNp
emVvZihKU1ZhbHVlKikpCisvLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChz
aXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkgKworLy8gKHZlY3Rvckxl
bmd0aCAqIHNpemVvZihKU1ZhbHVlUHRyKSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2gg
aXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5
U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpKSAvIHNpemVvZihKU1ZhbHVlUHRyKSkKIAog
Ly8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5k
IG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKIC8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmlu
YXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCkBAIC05MCwxMCArOTAsMTAgQEAg
c3RhdGljIGlubGluZSBzaXplX3Qgc3RvcmFnZVNpemUodW5zaWduZQogCiAgICAgLy8gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9y
TGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgLy8gLSBhcyBhc3NlcnRl
ZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAg
IHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKEpTVmFsdWUqKSkg
KyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgc2l6ZV90IHNpemUgPSAo
c2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZVB0cikpICsgKHZlY3Rvckxlbmd0
aCAqIHNpemVvZihKU1ZhbHVlUHRyKSk7CiAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRl
Z2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3Np
YmxlLCBwcm92aWRlZCB0aGF0CiAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBj
b3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihKU1ZhbHVlKikpKSAvIHNpemVvZihKU1ZhbHVlKikgPT0gdmVjdG9yTGVu
Z3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoSlNWYWx1ZSop
KSkpOworICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
SlNWYWx1ZVB0cikpKSAvIHNpemVvZihKU1ZhbHVlUHRyKSA9PSB2ZWN0b3JMZW5ndGgpICYmIChz
aXplID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlUHRyKSkpKTsKIAog
ICAgIHJldHVybiBzaXplOwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBAIEpTQXJyYXk6OkpTQXJyYXko
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHMKICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoID0g
aW5pdGlhbENhcGFjaXR5OwogICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3Ro
OwogCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGluaXRpYWxD
YXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKikpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChpbml0aWFsQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZVB0cikpOwog
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgSlNB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGEKICAgICB9CiAKICAgICBpZiAoaSA8IHN0
b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KCZ2YWx1ZVNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMzQsNyArMjM0LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YQogfQogCiAvLyBFQ01BIDE1LjQuNS4xCi12b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYm9vbCBpc0FycmF5SW5kZXg7CiAgICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJmlzQXJyYXlJbmRleCk7CkBAIC0yNTYsNyAr
MjU2LDcgQEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdAogICAgIEpT
T2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQg
SlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC0yNjcsNyArMjY3LDcg
QEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAgIH0KIAogICAg
IGlmIChpIDwgbV9zdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlKiYg
dmFsdWVTbG90ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYg
dmFsdWVTbG90ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlU2xv
dCkgewogICAgICAgICAgICAgdmFsdWVTbG90ID0gdmFsdWU7CiAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZwogICAgIHB1dFNsb3dDYXNlKGV4ZWMsIGksIHZhbHVlKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlKiB2YWx1ZSkKK05FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1
dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZVB0ciB2YWx1ZSkK
IHsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogCiAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgaWYgKGkgPCBzdG9yYWdlLT5t
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlKiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICBpZiAoIXZhbHVlU2xvdCkgewogICAgICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg1LDcgKzQ4NSw3
IEBAIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmcKIAogICAgICAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+bV92ZWN0b3JM
ZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9IHZhbHVlU2xv
dDsKICAgICAgICAgICAgIHZhbHVlU2xvdCA9IG5vVmFsdWUoKTsKICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gaGFkVmFsdWU7CkBAIC01MTAsNyArNTEwLDcgQEAg
dm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZwogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKIH0KIAotSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKK0pTVmFsdWVQdHIgSlNBcnJh
eTo6cG9wKCkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTUyMCwxNyArNTIwLDE3
IEBAIEpTVmFsdWUqIEpTQXJyYXk6OnBvcCgpCiAKICAgICAtLWxlbmd0aDsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdDsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKIAogICAgIGlmIChtX2Zhc3RBY2Nl
c3NDdXRvZmYgPiBsZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSomIHZhbHVlU2xvdCA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbbGVuZ3RoXTsKKyAgICAgICAgSlNWYWx1ZVB0ciYgdmFsdWVTbG90ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdOwogICAgICAgICByZXN1bHQgPSB2YWx1ZVNsb3Q7
CiAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICB2YWx1ZVNsb3QgPSBub1ZhbHVlKCk7
CiAgICAgICAgIC0tbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICBtX2Zh
c3RBY2Nlc3NDdXRvZmYgPSBsZW5ndGg7CiAgICAgfSBlbHNlIGlmIChsZW5ndGggPCBtX3N0b3Jh
Z2UtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF07CisgICAgICAgIEpTVmFsdWVQdHImIHZhbHVlU2xvdCA9
IG1fc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXTsKICAgICAgICAgcmVzdWx0ID0gdmFsdWVTbG90
OwogICAgICAgICB2YWx1ZVNsb3QgPSBub1ZhbHVlKCk7CiAgICAgICAgIGlmIChyZXN1bHQpCkBA
IC01NTksNyArNTU5LDcgQEAgSlNWYWx1ZSogSlNBcnJheTo6cG9wKCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2
YWx1ZSkKK3ZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFs
dWUpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC01OTksNyArNTk5LDcgQEAgdm9p
ZCBKU0FycmF5OjptYXJrKCkKIAogICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bV9sZW5ndGgsIHN0b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFs
dWUqIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHIgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+
bWFya2VkKCkpCiAgICAgICAgICAgICB2YWx1ZS0+bWFyaygpOwogICAgIH0KQEAgLTYwNywxNCAr
NjA3LDE0IEBAIHZvaWQgSlNBcnJheTo6bWFyaygpCiAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBKU1ZhbHVlUHRyIHZhbHVlID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgIGlmICghdmFs
dWUtPm1hcmtlZCgpKQogICAgICAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLXR5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWUqLCBVU3RyaW5nPiBBcnJheVFT
b3J0UGFpcjsKK3R5cGVkZWYgc3RkOjpwYWlyPEpTVmFsdWVQdHIsIFVTdHJpbmc+IEFycmF5UVNv
cnRQYWlyOwogCiBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjb25zdCB2
b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVl
KiB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWVQdHIgdmFs
dWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBBU1NFUlQoIXZhbHVlLT5pc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAgICAgfQpAQCAt
Njg0LDcgKzY4NCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB9CiAK
IHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7Ci0gICAgSlNWYWx1ZSogdmFsdWU7
CisgICAgSlNWYWx1ZVB0ciB2YWx1ZTsKIAogICAgIC8vIENoaWxkIHBvaW50ZXJzLiAgVGhlIGhp
Z2ggYml0IG9mIGd0IGlzIHJvYmJlZCBhbmQgdXNlZCBhcyB0aGUKICAgICAvLyBiYWxhbmNlIGZh
Y3RvciBzaWduLiAgVGhlIGhpZ2ggYml0IG9mIGx0IGlzIHJvYmJlZCBhbmQgdXNlZCBhcwpAQCAt
Njk1LDE1ICs2OTUsMTUgQEAgc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKIAog
c3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIHsKICAgICB0eXBlZGVmIGlu
dDMyX3QgaGFuZGxlOyAvLyBIYW5kbGUgaXMgYW4gaW5kZXggaW50byBtX25vZGVzIHZlY3Rvci4K
LSAgICB0eXBlZGVmIEpTVmFsdWUqIGtleTsKKyAgICB0eXBlZGVmIEpTVmFsdWVQdHIga2V5Owog
ICAgIHR5cGVkZWYgaW50MzJfdCBzaXplOwogCiAgICAgVmVjdG9yPEFWTFRyZWVOb2RlRm9yQXJy
YXlDb21wYXJlPiBtX25vZGVzOwogICAgIEV4ZWNTdGF0ZSogbV9leGVjOwotICAgIEpTVmFsdWUq
IG1fY29tcGFyZUZ1bmN0aW9uOworICAgIEpTVmFsdWVQdHIgbV9jb21wYXJlRnVuY3Rpb247CiAg
ICAgQ2FsbFR5cGUgbV9jb21wYXJlQ2FsbFR5cGU7CiAgICAgY29uc3QgQ2FsbERhdGEqIG1fY29t
cGFyZUNhbGxEYXRhOwotICAgIEpTVmFsdWUqIG1fZ2xvYmFsVGhpc1ZhbHVlOworICAgIEpTVmFs
dWVQdHIgbV9nbG9iYWxUaGlzVmFsdWU7CiAKICAgICBoYW5kbGUgZ2V0X2xlc3MoaGFuZGxlIGgp
IHsgcmV0dXJuIG1fbm9kZXNbaF0ubHQgJiAweDdGRkZGRkZGOyB9CiAgICAgdm9pZCBzZXRfbGVz
cyhoYW5kbGUgaCwgaGFuZGxlIGxoKSB7IG1fbm9kZXNbaF0ubHQgJj0gMHg4MDAwMDAwMDsgbV9u
b2Rlc1toXS5sdCB8PSBsaDsgfQpAQCAtNzUyLDcgKzc1Miw3IEBAIHN0cnVjdCBBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVy
biAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYgY2FsbERhdGEpCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUHRyIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
JiBjYWxsRGF0YSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTc5MCwxNCArNzkw
LDE1IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogICAgIC8v
IEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGlu
ZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0
cmVlLgogICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZp
bmVkKSB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWRdOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVl
ID0gdjsKICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgfQogICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKEpTVmFsdWUqIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CisgICAgICAg
IEpTVmFsdWVQdHIgdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIGlmICh2KSB7
CiAgICAgICAgICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICArK251
bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UgewpAQCAtODgwLDEyICs4ODEsMTMgQEAgdW5z
aWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoKQogICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7CiAKICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
bnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlKiB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZF07CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0pIHsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07CisgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkK
ICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UKQEAgLTk0
OSw3ICs5NTEsNyBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuCiAK
ICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAo
SlNWYWx1ZSogdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlUHRyIHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXSkgewogICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQogICAgICAgICAgICAgICAgIHZhbHVlLT50eXBl
KCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KQEAg
LTk4OCw3ICs5OTAsNyBAQCBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSog
CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogfQogCi1KU0FycmF5KiBjb25z
dHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHNpbmdsZUl0ZW1WYWx1ZSkKK0pT
QXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBzaW5nbGVJ
dGVtVmFsdWUpCiB7CiAgICAgQXJnTGlzdCB2YWx1ZXM7CiAgICAgdmFsdWVzLmFwcGVuZChzaW5n
bGVJdGVtVmFsdWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDM5
NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICB0eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIEpTVmFsdWUqPiBTcGFyc2VBcnJheVZhbHVlTWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDx1bnNpZ25lZCwgSlNWYWx1ZVB0cj4gU3BhcnNlQXJyYXlWYWx1ZU1hcDsKIAogICAg
IHN0cnVjdCBBcnJheVN0b3JhZ2UgewogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVz
SW5WZWN0b3I7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVNYXA7
CiAgICAgICAgIHZvaWQqIGxhenlDcmVhdGlvbkRhdGE7IC8vIEEgSlNBcnJheSBzdWJjbGFzcyBj
YW4gdXNlIHRoaXMgdG8gZmlsbCB0aGUgdmVjdG9yIGxhemlseS4KLSAgICAgICAgSlNWYWx1ZSog
bV92ZWN0b3JbMV07CisgICAgICAgIEpTVmFsdWVQdHIgbV92ZWN0b3JbMV07CiAgICAgfTsKIAog
ICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtNDcsNyArNDcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsgLy8g
RklYTUU6IE1ha2UgcHJvdGVjdGVkIGFuZCBhZGQgc2V0SXRlbS4KKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIpOyAv
LyBGSVhNRTogTWFrZSBwcm90ZWN0ZWQgYW5kIGFkZCBzZXRJdGVtLgogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIApAQCAtNTUsMjAgKzU1LDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8vIE9LIHRvIHVzZSBvbiBu
ZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KIAog
ICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZvaWQgc29ydChFeGVjU3Rh
dGUqLCBKU1ZhbHVlKiBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYp
OworICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciBjb21wYXJlRnVuY3Rp
b24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOwogCi0gICAgICAgIHZvaWQgcHVzaChFeGVj
U3RhdGUqLCBKU1ZhbHVlKik7Ci0gICAgICAgIEpTVmFsdWUqIHBvcCgpOworICAgICAgICB2b2lk
IHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CisgICAgICAgIEpTVmFsdWVQdHIgcG9wKCk7
CiAKICAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV9m
YXN0QWNjZXNzQ3V0b2ZmOyB9Ci0gICAgICAgIEpTVmFsdWUqIGdldEluZGV4KHVuc2lnbmVkIGkp
CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0SW5kZXgodW5zaWduZWQgaSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKICAgICAgICAgICAgIHJldHVybiBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBjYW5TZXRJbmRl
eCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV9mYXN0QWNjZXNzQ3V0b2ZmOyB9Ci0gICAgICAg
IEpTVmFsdWUqIHNldEluZGV4KHVuc2lnbmVkIGksIEpTVmFsdWUqIHYpCisgICAgICAgIEpTVmFs
dWVQdHIgc2V0SW5kZXgodW5zaWduZWQgaSwgSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgcmV0dXJuIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0gPSB2OwpAQCAtNzYsMTMgKzc2LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgQXJnTGlzdCYpOwogCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUp
KTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1
dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
KTsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCiAgICAg
ICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRTbG93Q2FzZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKKyAgICAgICAgdm9p
ZCBwdXRTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIpOwogCiAgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgodW5zaWduZWQgbmV3TGVu
Z3RoKTsKICAgICAgICAgCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBtX3N0b3JhZ2U7CiAgICAgfTsKIAotICAgIEpTQXJyYXkqIGFz
QXJyYXkoSlNWYWx1ZSopOworICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZVB0cik7CiAKICAg
ICBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSopOwogICAgIEpTQXJyYXkq
IGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7
Ci0gICAgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiwgSlNWYWx1ZSogc2luZ2xl
SXRlbVZhbHVlKTsKKyAgICBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqLCBKU1Zh
bHVlUHRyIHNpbmdsZUl0ZW1WYWx1ZSk7CiAgICAgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhl
Y1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKTsKIAotICAgIGlubGluZSBKU0FycmF5KiBh
c0FycmF5KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTVmFs
dWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhl
cml0cygmSlNBcnJheTo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNBcnJh
eSo+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShy
ZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMTIgQEAgYm9vbCBKU0NlbGw6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQ2VsbDo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNWYWx1ZSog
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgdG9PYmplY3QoZXhlYyktPnB1dChleGVjLCBp
ZGVudGlmaWVyLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNDZWxsOjpwdXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNDZWxs
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZh
bHVlKQogewogICAgIHRvT2JqZWN0KGV4ZWMpLT5wdXQoZXhlYywgaWRlbnRpZmllciwgdmFsdWUp
OwogfQpAQCAtMjEwLDcgKzIxMCw3IEBAIGNvbnN0IENsYXNzSW5mbyogSlNDZWxsOjpjbGFzc0lu
Zm8oKSBjb24KICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSogSlNDZWxsOjpnZXRKU051bWJl
cigpCitKU1ZhbHVlUHRyIEpTQ2VsbDo6Z2V0SlNOdW1iZXIoKQogewogICAgIHJldHVybiBub1Zh
bHVlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDM5NjAzKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNzEsOCArNzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dmlydHVhbCBib29sIGdldFRydW5jYXRlZFVJbnQzMih1aW50MzJfdCYpIGNvbnN0OwogCiAgICAg
ICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgotICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0ID0gMDsKLSAg
ICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUm
IG51bWJlciwgSlNWYWx1ZSomKSA9IDA7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1By
aW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91Ymxl
JiBudW1iZXIsIEpTVmFsdWVQdHImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xl
YW4oRXhlY1N0YXRlKikgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJl
cihFeGVjU3RhdGUqKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmlu
ZyhFeGVjU3RhdGUqKSBjb25zdCA9IDA7CkBAIC04NywxNSArODgsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9w
ZXJhdGlvbiBpbmNsdWRlZC4KICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OwogCiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBVU3RyaW5nIHRvVGhpc1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRl
Kik7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsKKyAgICAgICAgdmly
dHVhbCBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7CiAgICAgICAgIHZvaWQqIHZwdHIoKSB7IHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHRoaXMpOyB9CiAKICAgICBwcml2YXRlOgpA
QCAtMTA3LDEyICsxMDgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSog
bV9zdHJ1Y3R1cmU7CiAgICAgfTsKIAotICAgIEpTQ2VsbCogYXNDZWxsKEpTVmFsdWUqKTsKKyAg
ICBKU0NlbGwqIGFzQ2VsbChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0NlbGwqIGFzQ2Vs
bChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgSlNDZWxsKiBhc0NlbGwoSlNWYWx1ZVB0ciB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZh
bHVlKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiB2YWx1ZS0+YXNDZWxsKCk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQ2VsbDo6
SlNDZWxsKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTU3LDcgKzE1OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUoYXNWYWx1
ZSgpKSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGNvbnN0X2Nh
c3Q8SlNWYWx1ZSo+KHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0NlbGwqPih0aGlzKSk7CiAgICAgfQogCiAgICAgaW5s
aW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCkBAIC0yNDYsMTIgKzI0NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpIHx8IGFzQ2VsbCgp
LT5tYXJrZWQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5
cGUpIGNvbnN0CisgICAgaW5saW5lIEpTVmFsdWVQdHIgSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUo
KSkgPyBhc1ZhbHVlKCkgOiBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgcHJlZmVycmVkVHlw
ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSkKKyAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpIHsKICAgICAgICAgICAgIG51bWJlciA9
IEpTSW1tZWRpYXRlOjp0b0RvdWJsZShhc1ZhbHVlKCkpOwpAQCAtMzAwLDkgKzMwMSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFz
VmFsdWUoKSkgPyBKU0ltbWVkaWF0ZTo6dG9TdHJpbmcoYXNWYWx1ZSgpKSA6IGFzQ2VsbCgpLT50
b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIEpTVmFsdWU6
OmdldEpTTnVtYmVyKCkKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpnZXRKU051bWJl
cigpCiAgICAgewotCiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYXNWYWx1
ZSgpKSA/IGFzVmFsdWUoKSA6IEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpID8g
bm9WYWx1ZSgpIDogYXNDZWxsKCktPmdldEpTTnVtYmVyKCk7CiAgICAgfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMjQg
Kzc3LDI0IEBAIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKENhbGxEYXQKICAgICBy
ZXR1cm4gQ2FsbFR5cGVKUzsKIH0KIAotSlNWYWx1ZSogSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBleGVjLT5pbnRlcnByZXRl
cigpLT5leGVjdXRlKG1fYm9keS5nZXQoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVlLT50b1RoaXNP
YmplY3QoZXhlYyksIGFyZ3MsIG1fc2NvcGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNs
b3QoKSk7CiB9CiAKLUpTVmFsdWUqIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5j
dGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4g
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHMoZXhlYywgdGhpc09iaik7CiB9
CiAKLUpTVmFsdWUqIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpT
RnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9
IGFzRnVuY3Rpb24oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVDYWxsZXIoZXhlYywgdGhpc09iaik7CiB9CiAKLUpTVmFsdWUqIEpTRnVu
Y3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRnVuY3Rpb246Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdC5z
bG90QmFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+bV9ib2R5LT5w
YXJhbWV0ZXJDb3VudCgpKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlKiBKU0Z1bmN0aW9u
OjpsZW5ndGhHZXR0ZXIoRXhlY1N0CiBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSkgewotICAgICAgICBKU1ZhbHVlKiogbG9jYXRpb24gPSBnZXREaXJl
Y3RMb2NhdGlvbihwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9
IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKCFsb2NhdGlv
bikgewogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IG5ldyAoZXhlYykgSlNPYmpl
Y3QobV9zY29wZUNoYWluLmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsK
QEAgLTEzMyw3ICsxMzMsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChF
eGVjCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3ZvaWQgSlNGdW5jdGlvbjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKQogICAgICAgICByZXR1cm47CkBAIC0xNTgsMTQgKzE1OCwxNCBAQCBDb25zdHJ1Y3RUeXBl
IEpTRnVuY3Rpb246OmdldENvbnN0cnVjdERhCiBKU09iamVjdCogSlNGdW5jdGlvbjo6Y29uc3Ry
dWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBnZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSBn
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CiAgICAgaWYgKHByb3Rv
dHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG90eXBl
KS0+aW5oZXJpdG9ySUQoKTsKICAgICBlbHNlCiAgICAgICAgIHN0cnVjdHVyZSA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICBKU09iamVj
dCogdGhpc09iaiA9IG5ldyAoZXhlYykgSlNPYmplY3Qoc3RydWN0dXJlKTsKIAotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGV4ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUobV9ib2R5LmdldCgpLCBl
eGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdzLCBtX3Njb3BlQ2hhaW4ubm9kZSgpLCBleGVjLT5leGNl
cHRpb25TbG90KCkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIo
KS0+ZXhlY3V0ZShtX2JvZHkuZ2V0KCksIGV4ZWMsIHRoaXMsIHRoaXNPYmosIGFyZ3MsIG1fc2Nv
cGVDaGFpbi5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpIHx8ICFyZXN1bHQtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aGlz
T2JqOwogICAgIHJldHVybiBhc09iamVjdChyZXN1bHQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKIAogICAgICAgICBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFy
Z0xpc3QmKTsKLSAgICAgICAgSlNWYWx1ZSogY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBjYWxsKEV4ZWNTdGF0
ZSosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICAgICAgdm9p
ZCBzZXRTY29wZShjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluKSB7IG1fc2NvcGVDaGFpbiA9
IHNjb3BlQ2hhaW47IH0KICAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBtX3Nj
b3BlQ2hhaW47IH0KQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkgCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIg
cHJvdG90eXBlKSAKICAgICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5j
ZSkpOyAKICAgICAgICAgfQpAQCAtODIsMTcgKzgyLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRh
Jik7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUqIGNhbGxlckdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBz
dGF0aWMgSlNWYWx1ZVB0ciBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBj
YWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIFJl
ZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBtX2JvZHk7CiAgICAgICAgIFNjb3BlQ2hhaW4gbV9zY29w
ZUNoYWluOwogICAgIH07CiAKLSAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWUqKTsK
KyAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWVQdHIpOwogCi0gICAgaW5saW5lIEpT
RnVuY3Rpb24qIGFzRnVuY3Rpb24oSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTRnVuY3Rp
b24qIGFzRnVuY3Rpb24oSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChh
c09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTVmFsdWUu
aCIKIAogc3RydWN0IE9wYXF1ZUpTQ2xhc3M7CiBzdHJ1Y3QgT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhOwpAQCAtNzEsNyArNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXI7CiAKLSAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOworICAgICAg
ICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkKiBl
eGNlcHRpb25Mb2NhdGlvbjsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
c3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50VGhyZXNobwogLy8gUHJlZmVycmVkIG51
bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWVvdXQgY2hlY2sKIHN0YXRpYyBj
b25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAxMDAwOwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKEpTVmFsdWUqIHYpCitzdGF0aWMgaW5saW5lIHZv
aWQgbWFya0lmTmVlZGVkKEpTVmFsdWVQdHIgdikKIHsKICAgICBpZiAodiAmJiAhdi0+bWFya2Vk
KCkpCiAgICAgICAgIHYtPm1hcmsoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAgICAgcmVzZXQocHJvdG90eXBlKCkpOwogfQog
Ci12b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpcykpOwogCkBAIC0xNTYsMTggKzE1NiwxOSBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAgSlNWYXJpYWJsZU9iamVjdDo6cHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lk
IEpTR2xvYmFsT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCiAgICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTVmFsdWUqIHZhbHVlQmVmb3JlID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFt
ZSk7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZUJlZm9yZSA9IGdldERpcmVjdChwcm9wZXJ0eU5hbWUp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnB1dChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICBpZiAoIXZhbHVlQmVmb3JlKSB7
Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZUFmdGVyID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFt
ZSkpCisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWVBZnRlciA9IGdldERpcmVjdChwcm9wZXJ0eU5h
bWUpOworICAgICAgICBpZiAodmFsdWVBZnRlcikKICAgICAgICAgICAgIHB1dERpcmVjdChwcm9w
ZXJ0eU5hbWUsIHZhbHVlQWZ0ZXIsIGF0dHJpYnV0ZXMpOwogICAgIH0KIH0KQEAgLTE5NCw3ICsx
OTUsNyBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDCiAgICAgcmV0
dXJuIG87CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3RvdHlw
ZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWVQdHIgcHJvdG90eXBlKQogewog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKQEAg
LTI0NywxMyArMjQ4LDEzIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHBy
b3QKIAogICAgIC8vIENvbnN0cnVjdG9ycwogCi0gICAgSlNWYWx1ZSogb2JqZWN0Q29uc3RydWN0
b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIE9iamVjdENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+b2JqZWN0UHJv
dG90eXBlKTsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBG
dW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0g
ICAgSlNWYWx1ZSogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3Rv
cihleGVjLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIEpTVmFsdWUqIHN0cmluZ0NvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBTdHJpbmdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAg
SlNWYWx1ZSogYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0
b3IoZXhlYywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlv
blByb3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogbnVtYmVy
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIE51bWJlckNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+
bnVtYmVyUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIERhdGVDb25zdHJ1Y3RvcihleGVjLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZS5nZXQoKSwgZCgpLT5kYXRlUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlUHRyIG9iamVjdENvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCBPYmplY3RDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPm9iamVj
dFByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlw
ZSk7CisgICAgSlNWYWx1ZVB0ciBhcnJheUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBBcnJheUNv
bnN0cnVjdG9yKGV4ZWMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1
bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5hcnJheVByb3RvdHlwZSk7CisgICAgSlNWYWx1ZVB0ciBz
dHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5nQ29uc3RydWN0b3IoZXhlYywgU3Ry
aW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwg
ZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5zdHJpbmdQcm90b3R5
cGUpOworICAgIEpTVmFsdWVQdHIgYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29s
ZWFuQ29uc3RydWN0b3IoZXhlYywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7CisgICAgSlNW
YWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29uc3RydWN0b3Io
ZXhlYywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKSwgZCgpLT5udW1iZXJQcm90b3R5cGUpOworICAgIEpTVmFsdWVQdHIgZGF0ZUNvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgRGF0ZUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGQoKS0+ZGF0ZVByb3RvdHlwZSk7CiAKICAgICBkKCkt
PnJlZ0V4cENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCBS
ZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
LCBkKCktPnJlZ0V4cFByb3RvdHlwZSk7CiAKQEAgLTMzNyw3ICszMzgsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiB9CiAKIC8vIFNldCBwcm90b3R5cGUsIGFu
ZCBhbHNvIGluc2VydCB0aGUgb2JqZWN0IHByb3RvdHlwZSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFp
bi4KLXZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWUqIHByb3RvdHlw
ZSkKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0UHJvdG90eXBlKEpTVmFsdWVQdHIgcHJvdG90
eXBlKQogewogICAgIHNldFByb3RvdHlwZShwcm90b3R5cGUpOwogICAgIGxhc3RJblByb3RvdHlw
ZUNoYWluKHRoaXMpLT5zZXRQcm90b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzk2MDMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MSw4ICsxNjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3Jp
dGVhYmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0
ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVm
aW5lR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIGdldHRlckZ1bmMpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lU2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRl
ckZ1bmMpOwpAQCAtMjQ0LDE5ICsyNDQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgY29weUdsb2JhbHNGcm9tKFJlZ2lzdGVyRmlsZSYpOwogICAgICAgICB2b2lkIGNvcHlHbG9i
YWxzVG8oUmVnaXN0ZXJGaWxlJik7CiAgICAgICAgIAotICAgICAgICB2b2lkIHJlc2V0UHJvdG90
eXBlKEpTVmFsdWUqIHByb3RvdHlwZSk7CisgICAgICAgIHZvaWQgcmVzZXRQcm90b3R5cGUoSlNW
YWx1ZVB0ciBwcm90b3R5cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgp
IHsgcmV0dXJuIGQoKS0+Z2xvYmFsRGF0YS5nZXQoKTsgfQogICAgICAgICBKU0dsb2JhbE9iamVj
dERhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdERhdGEq
PihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90
b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKLSAgICAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1ZhbHVlKiB2LCB1bnNpZ25l
ZCBhKQorICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGks
IEpTVmFsdWVQdHIgdiwgdW5zaWduZWQgYSkKICAgICAgICAgICAgICAgICA6IGlkZW50aWZpZXIo
aSkKICAgICAgICAgICAgICAgICAsIHZhbHVlKHYpCiAgICAgICAgICAgICAgICAgLCBhdHRyaWJ1
dGVzKGEpCkBAIC0yNjQsNyArMjY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgaWRlbnRpZmllcjsKLSAgICAgICAgICAg
IEpTVmFsdWUqIHZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgYWRkU3Rh
dGljR2xvYmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qLCBpbnQgY291bnQpOwpAQCAtMjcyLDE2ICsy
NzIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6
IEZvbGQgcmVzZXQgaW50byBpbml0LgogICAgICAgICB2b2lkIGluaXQoSlNPYmplY3QqIHRoaXNW
YWx1ZSk7Ci0gICAgICAgIHZvaWQgcmVzZXQoSlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAg
dm9pZCByZXNldChKU1ZhbHVlUHRyIHByb3RvdHlwZSk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdp
c3RlcnMoUmVnaXN0ZXIqIHJlZ2lzdGVycywgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXksIHNpemVf
dCBjb3VudCk7CiAKICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7IC8vIGNhbiBv
bmx5IGJlIGFsbG9jYXRlZCB3aXRoIEpTR2xvYmFsRGF0YQogICAgIH07CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSopOworICAgIEpTR2xvYmFsT2JqZWN0KiBh
c0dsb2JhbE9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBKU0dsb2JhbE9iamVjdCog
YXNHbG9iYWxPYmplY3QoSlNWYWx1ZSogdmFsdWUpCisgICAgaW5saW5lIEpTR2xvYmFsT2JqZWN0
KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGFzT2JqZWN0KHZhbHVlKS0+aXNHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CkBAIC0zMzMsNyArMzMz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBhc0dsb2JhbE9iamVjdChuLT5v
YmplY3QpOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBTdHJ1Y3R1cmU6OnByb3RvdHlw
ZUZvckxvb2t1cChFeGVjU3RhdGUqIGV4ZWMpCisgICAgaW5saW5lIEpTVmFsdWVQdHIgU3RydWN0
dXJlOjpwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAgICAgICAg
aWYgKHR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpCiAgICAgICAgICAgICByZXR1cm4g
bV9wcm90b3R5cGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBjb25zdCBjaGFyKiBkb05vdEVzY2FwZSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGVuY29k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90
RXNjYXBlKQogewogICAgIFVTdHJpbmcgc3RyID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmco
ZXhlYyk7CiAgICAgQ1N0cmluZyBjc3RyID0gc3RyLlVURjhTdHJpbmcodHJ1ZSk7CkBAIC02OSw3
ICs2OSw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCAKICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGRlY29k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvTm90
VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQorc3RhdGljIEpTVmFsdWVQdHIgZGVjb2RlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9Ob3RVbmVzY2FwZSwg
Ym9vbCBzdHJpY3QpCiB7CiAgICAgVVN0cmluZyByZXN1bHQgPSAiIjsKICAgICBVU3RyaW5nIHN0
ciA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtMjY4LDE0ICsyNjgsMTQg
QEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAgIHJldHVybiBz
LnRvRG91YmxlKHRydWUgLyp0b2xlcmFudCovLCBmYWxzZSAvKiBOYU4gZm9yIGVtcHR5IHN0cmlu
ZyAqLyk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1
bmN0aW9uLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMpOwog
ICAgIEpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QgPSB0aGlzT2JqZWN0LT51bndyYXBwZWRPYmpl
Y3QoKTsKICAgICBpZiAoIXVud3JhcHBlZE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSB8fCBzdGF0
aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmV2YWxGdW5jdGlvbigp
ICE9IGZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3Is
ICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9i
amVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2luYXRlZCIpOwogCi0gICAgSlNWYWx1ZSogeCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB4ID0gYXJncy5hdChleGVjLCAwKTsKICAg
ICBpZiAoIXgtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiB4OwogCkBAIC0yOTMsOSArMjkz
LDkgQEAgSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVy
biBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCB0aGlz
T2JqZWN0LCBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHVud3JhcHBlZE9iamVjdCktPmds
b2JhbFNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiB9CiAKLUpT
VmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNQYXJzZUlu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNW
YWx1ZVB0ciB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaW50MzJfdCByYWRpeCA9IGFy
Z3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYyk7CiAKICAgICBpZiAodmFsdWUtPmlzTnVtYmVy
KCkgJiYgKHJhZGl4ID09IDAgfHwgcmFkaXggPT0gMTApKSB7CkBAIC0zMTAsMjMgKzMxMCwyMyBA
QCBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIHBhcnNlSW50KHZhbHVlLT50b1N0cmluZyhleGVjKSwgcmFkaXgpKTsKIH0K
IAotSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5j
UGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcGFyc2VGbG9hdChh
cmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxG
dW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IGpzQm9vbGVhbihpc25hbihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQog
Ci1KU1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNG
aW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgZG91YmxlIG4gPSBhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihl
eGVjKTsKICAgICByZXR1cm4ganNCb29sZWFuKCFpc25hbihuKSAmJiAhaXNpbmYobikpOwogfQog
Ci1KU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0Rl
Y29kZVVSSShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfdW5lc2NhcGVfd2hl
bl9kZWNvZGluZ19VUklbXSA9CiAgICAgICAgICIjJCYrLC86Oz0/QCI7CkBAIC0zMzQsMTIgKzMz
NCwxMiBAQCBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSogCiAgICAgcmV0
dXJuIGRlY29kZShleGVjLCBhcmdzLCBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUkks
IHRydWUpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
ZGVjb2RlKGV4ZWMsIGFyZ3MsICIiLCB0cnVlKTsKIH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0Vu
Y29kZVVSSShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSVtdID0KICAgICAg
ICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpAQCAtMzUwLDcgKzM1MCw3IEBAIEpTVmFs
dWUqIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gZW5jb2RlKGV4
ZWMsIGFyZ3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUkkpOwogfQogCi1KU1ZhbHVl
KiBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVuY0Vu
Y29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNj
YXBlX3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVudFtdID0KICAgICAgICAgIkFCQ0RFRkdISUpL
TE1OT1BRUlNUVVZXWFlaIgpAQCAtMzYxLDcgKzM2MSw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNF
bmNvZGVVUklDb21wb25lbnQoRXgKICAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25v
dF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50KTsKIH0KIAotSlNWYWx1ZSogZ2xv
YmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFc2NhcGUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
c3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZVtdID0KICAgICAgICAgIkFCQ0RFRkdISUpL
TE1OT1BRUlNUVVZXWFlaIgpAQCAtMzkyLDcgKzM5Miw3IEBAIEpTVmFsdWUqIGdsb2JhbEZ1bmNF
c2NhcGUoRXhlY1N0YXRlKiBleGUKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsK
IH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgZ2xvYmFsRnVu
Y1VuZXNjYXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcmVzdWx0ID0gIiI7CiAgICAgVVN0cmluZyBz
dHIgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKQEAgLTQyMCw3ICs0MjAsNyBA
QCBKU1ZhbHVlKiBnbG9iYWxGdW5jVW5lc2NhcGUoRXhlY1N0YXRlKiBlCiB9CiAKICNpZm5kZWYg
TkRFQlVHCi1KU1ZhbHVlKiBnbG9iYWxGdW5jSlNDUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBnbG9iYWxG
dW5jSlNDUHJpbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ1N0cmluZ0J1ZmZlciBzdHJpbmc7CiAgICAgYXJncy5h
dChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykuZ2V0Q1N0cmluZyhzdHJpbmcpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2
aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE5ICszNSwxOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkgYmUgaW4gSlNH
bG9iYWxPYmplY3QuY3BwLCBidXQgcHV0dGluZyB0aGVtIHRoZXJlCiAgICAgLy8gaXMgYSAwLjUl
IHJlZHVjdGlvbi4KIAotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxG
dW5jUGFyc2VJbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOwotICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLSAgICBKU1ZhbHVlKiBnbG9iYWxGdW5j
SXNOYU4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
ICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNJc0Zpbml0ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVS
SShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAg
SlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0Vu
Y29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFs
RnVuY0VzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7Ci0gICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNF
dmFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
ICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVuY1Bh
cnNlRmxvYXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jSXNOYU4oRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5j
SXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0
Jik7CisgICAgSlNWYWx1ZVB0ciBnbG9iYWxGdW5jRGVjb2RlVVJJKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFs
RnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNFbmNvZGVVUkkoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CisgICAgSlNW
YWx1ZVB0ciBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworICAgIEpTVmFsdWVQdHIgZ2xvYmFsRnVu
Y0VzY2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgSlNW
YWx1ZSogZ2xvYmFsRnVuY0pTQ1ByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKKyAgICBKU1ZhbHVlUHRyIGdsb2JhbEZ1bmNKU0NQcmludChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKICNlbmRpZgog
CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkw
MDcxOTkyNTQ3NDA5OTIuMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUu
Y3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUpTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2JqZWN0KEpTVmFsdWUqIHYsIEV4
ZWNTdGF0ZSogZXhlYykKK0pTT2JqZWN0KiBKU0ltbWVkaWF0ZTo6dG9UaGlzT2JqZWN0KEpTVmFs
dWVQdHIgdiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7
CiAgICAgaWYgKGlzTnVtYmVyKHYpKQogICAgICAgICByZXR1cm4gY29uc3RydWN0TnVtYmVyRnJv
bUltbWVkaWF0ZU51bWJlcihleGVjLCB2KTsKICAgICBpZiAoaXNCb29sZWFuKHYpKQogICAgICAg
ICByZXR1cm4gY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGV4ZWMsIHYpOwot
ICAgIGlmICh2ID09IGpzTnVsbCgpKQorICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpOwogICAgIAogICAgIEpTTm90QW5PYmplY3RFcnJv
clN0dWIqIGV4Y2VwdGlvbiA9IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3JTdHViKGV4ZWMsIHYtPmlz
TnVsbCgpKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b1RoaXNP
YmplY3QoSlNWYQogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYywgZXhj
ZXB0aW9uKTsKIH0KIAotSlNPYmplY3QqIEpTSW1tZWRpYXRlOjp0b09iamVjdChKU1ZhbHVlKiB2
LCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNJbW1lZGlhdGU6OnRvT2JqZWN0KEpTVmFs
dWVQdHIgdiwgRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7
CiAgICAgaWYgKGlzTnVtYmVyKHYpKQpAQCAtNjAsNyArNjAsNyBAQCBKU09iamVjdCogSlNJbW1l
ZGlhdGU6OnRvT2JqZWN0KEpTVmFsdWUqCiAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9i
amVjdChleGVjLCBleGNlcHRpb24pOwogfQogCi1KU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3Rv
dHlwZShKU1ZhbHVlKiB2LCBFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogSlNJbW1lZGlhdGU6
OnByb3RvdHlwZShKU1ZhbHVlUHRyIHYsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQo
aXNJbW1lZGlhdGUodikpOwogICAgIGlmIChpc051bWJlcih2KSkKQEAgLTczLDE4ICs3MywxOCBA
QCBKU09iamVjdCogSlNJbW1lZGlhdGU6OnByb3RvdHlwZShKU1ZhbHVlCiAgICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjLCBleGNlcHRpb24pOwogfQogCi1VU3RyaW5nIEpT
SW1tZWRpYXRlOjp0b1N0cmluZyhKU1ZhbHVlKiB2KQorVVN0cmluZyBKU0ltbWVkaWF0ZTo6dG9T
dHJpbmcoSlNWYWx1ZVB0ciB2KQogewogICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAg
aWYgKGlzTnVtYmVyKHYpKQogICAgICAgICByZXR1cm4gVVN0cmluZzo6ZnJvbShnZXRUcnVuY2F0
ZWRJbnQzMih2KSk7Ci0gICAgaWYgKHYgPT0ganNCb29sZWFuKGZhbHNlKSkKKyAgICBpZiAoanNC
b29sZWFuKGZhbHNlKSA9PSB2KQogICAgICAgICByZXR1cm4gImZhbHNlIjsKLSAgICBpZiAodiA9
PSBqc0Jvb2xlYW4odHJ1ZSkpCisgICAgaWYgKGpzQm9vbGVhbih0cnVlKSA9PSB2KQogICAgICAg
ICByZXR1cm4gInRydWUiOwogICAgIGlmICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuICJu
dWxsIjsKLSAgICBBU1NFUlQodiA9PSBqc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NFUlQodi0+aXNV
bmRlZmluZWQoKSk7CiAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwogfQogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGlu
ZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiSlNWYWx1ZS5oIgog
I2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRhcmcu
aD4KQEAgLTM5LDkgKzQwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNWYWx1ZTsK
ICAgICBjbGFzcyBVU3RyaW5nOwogCi0gICAgaW5saW5lIEpTVmFsdWUqIG5vVmFsdWUoKSB7IHJl
dHVybiAwOyB9Ci0gICAgaW5saW5lIHZvaWQqIGFzUG9pbnRlcihKU1ZhbHVlKiB2YWx1ZSkgeyBy
ZXR1cm4gdmFsdWU7IH0KLQogICAgIC8qCiAgICAgICogQSBKU1ZhbHVlKiBpcyBlaXRoZXIgYSBw
b2ludGVyIHRvIGEgY2VsbCAoYSBoZWFwLWFsbG9jYXRlZCBvYmplY3QpIG9yIGFuIGltbWVkaWF0
ZSAoYSB0eXBlLXRhZ2dlZCAKICAgICAgKiB2YWx1ZSBtYXNxdWVyYWRpbmcgYXMgYSBwb2ludGVy
KS4gVGhlIGxvdyB0d28gYml0cyBpbiBhIEpTVmFsdWUqIGFyZSBhdmFpbGFibGUgZm9yIHR5cGUg
dGFnZ2luZwpAQCAtMTEzLDE1MiArMTExLDE1MiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
IAogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0ltbWVk
aWF0ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzSW1t
ZWRpYXRlKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJhd1Zh
bHVlKHYpICYgVGFnTWFzazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgYm9vbCBpc051bWJlcihKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgVGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzUG9zaXRpdmVOdW1iZXIoSlNW
YWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc1Bvc2l0aXZlTnVt
YmVyKEpTVmFsdWVQdHIgdikKICAgICAgICAgewogICAgICAgICAgICAgLy8gQSBzaW5nbGUgbWFz
ayB0byBjaGVjayBmb3IgdGhlIHNpZ24gYml0IGFuZCB0aGUgbnVtYmVyIHRhZyBhbGwgYXQgb25j
ZS4KICAgICAgICAgICAgIHJldHVybiAocmF3VmFsdWUodikgJiAoc2lnbkJpdCB8IFRhZ0JpdFR5
cGVJbnRlZ2VyKSkgPT0gVGFnQml0VHlwZUludGVnZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFsdWUqIHYpCisg
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNCb29sZWFuKEpTVmFsdWVQdHIgdikK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2KSAmIEZ1bGxUYWdUeXBl
TWFzaykgPT0gRnVsbFRhZ1R5cGVCb29sOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzVW5kZWZpbmVkT3JOdWxsKEpTVmFsdWUqIHYpCisg
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNVbmRlZmluZWRPck51bGwoSlNWYWx1
ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYW5kIG51bGwgc2hh
cmUgdGhlIHNhbWUgdmFsdWUsIGJhciB0aGUgJ3VuZGVmaW5lZCcgYml0IGluIHRoZSBleHRlbmRl
ZCB0YWcuCiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYpICYgfkV4dGVuZGVkVGFnQml0
VW5kZWZpbmVkKSA9PSBGdWxsVGFnVHlwZU51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgYm9vbCBpc05lZ2F0aXZlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBib29sIGlzTmVn
YXRpdmUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaXNOdW1i
ZXIodikpOwogICAgICAgICAgICAgcmV0dXJuIHJhd1ZhbHVlKHYpICYgc2lnbkJpdDsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGNoYXIpOwotICAgICAgICBzdGF0
aWMgSlNWYWx1ZSogZnJvbShzaWduZWQgY2hhcik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBm
cm9tKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShzaG9ydCk7
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIGZyb20oaW50KTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZyb20o
dW5zaWduZWQpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShsb25nKTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWduZWQgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1Zh
bHVlKiBmcm9tKGxvbmcgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHVuc2ln
bmVkIGxvbmcgbG9uZyk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGRvdWJsZSk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oY2hhcik7CisgICAgICAgIHN0YXRpYyBKU1Zh
bHVlUHRyIGZyb20oc2lnbmVkIGNoYXIpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9t
KHVuc2lnbmVkIGNoYXIpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmcm9tKHNob3J0KTsK
KyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgZnJvbSh1bnNpZ25lZCBzaG9ydCk7CisgICAgICAg
IHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20oaW50KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIg
ZnJvbSh1bnNpZ25lZCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20obG9uZyk7Cisg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZyb20odW5zaWduZWQgbG9uZyk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlUHRyIGZyb20obG9uZyBsb25nKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQ
dHIgZnJvbSh1bnNpZ25lZCBsb25nIGxvbmcpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBm
cm9tKGRvdWJsZSk7CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VpdGhl
ckltbWVkaWF0ZShKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNFaXRoZXJJbW1lZGlhdGUoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0
ciB2MikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSh2MSkgfCByYXdW
YWx1ZSh2MikpICYgVGFnTWFzazsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNBbnlJbW1lZGlhdGUoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyLCBKU1Zh
bHVlKiB2MykKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FueUltbWVkaWF0
ZShKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyLCBKU1ZhbHVlUHRyIHYzKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gKHJhd1ZhbHVlKHYxKSB8IHJhd1ZhbHVlKHYyKSB8IHJhd1Zh
bHVlKHYzKSkgJiBUYWdNYXNrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRlKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBhcmVCb3RoSW1tZWRpYXRlKEpTVmFsdWVQ
dHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpc0lt
bWVkaWF0ZSh2MSkgJiBpc0ltbWVkaWF0ZSh2Mik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBib29sIGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYx
LCBKU1ZhbHVlKiB2MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBhcmVCb3Ro
SW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVlUHRyIHYxLCBKU1ZhbHVlUHRyIHYyKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gcmF3VmFsdWUodjEpICYgcmF3VmFsdWUodjIpICYgVGFnQml0
VHlwZUludGVnZXI7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBhbmRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikKKyAg
ICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBhbmRJbW1lZGlhdGVOdW1iZXJz
KEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKICAgICAgICAgICAgIHJldHVy
biBtYWtlVmFsdWUocmF3VmFsdWUodjEpICYgcmF3VmFsdWUodjIpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHhvckltbWVkaWF0ZU51bWJlcnMo
SlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlUHRyIHhvckltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2
MikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJz
KHYxLCB2MikpOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgocmF3VmFsdWUodjEpIF4g
cmF3VmFsdWUodjIpKSB8IFRhZ0JpdFR5cGVJbnRlZ2VyKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIG9ySW1tZWRpYXRlTnVtYmVycyhKU1ZhbHVl
KiB2MSwgSlNWYWx1ZSogdjIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQ
dHIgb3JJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIp
KTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpIHwgcmF3VmFsdWUo
djIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUq
IHJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHZhbCwgSlNWYWx1ZSogc2hpZnQp
CisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgcmlnaHRTaGlmdEltbWVk
aWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2YWwsIEpTVmFsdWVQdHIgc2hpZnQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSk7
CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKChyYXdWYWx1ZSh2YWwpID4+ICgocmF3VmFs
dWUoc2hpZnQpID4+IEludGVnZXJQYXlsb2FkU2hpZnQpICYgMHgxZikpIHwgVGFnQml0VHlwZUlu
dGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoSlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoSlNWYWx1ZVB0ciB2
KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOdW1iZXIgaXMgbm9uLW5lZ2F0aXZlIGFuZCBh
biBvcGVyYXRpb24gaW52b2x2aW5nIHR3byBvZiB0aGVzZSBjYW4ndCBvdmVyZmxvdy4KICAgICAg
ICAgICAgIC8vIENoZWNraW5nIGZvciBhbGxvd2VkIG5lZ2F0aXZlIG51bWJlcnMgdGFrZXMgbW9y
ZSB0aW1lIHRoYW4gaXQncyB3b3J0aCBvbiBTdW5TcGlkZXIuCiAgICAgICAgICAgICByZXR1cm4g
KHJhd1ZhbHVlKHYpICYgKFRhZ0JpdFR5cGVJbnRlZ2VyICsgKHNpZ25CaXQgfCAoc2lnbkJpdCA+
PiAxKSkpKSA9PSBUYWdCaXRUeXBlSW50ZWdlcjsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGFkZEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZSogdjEs
IEpTVmFsdWUqIHYyKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGFk
ZEltbWVkaWF0ZU51bWJlcnMoSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MSkpOwog
ICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpOwogICAg
ICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZShyYXdWYWx1ZSh2MSkgKyByYXdWYWx1ZSh2MikgLSBU
YWdCaXRUeXBlSW50ZWdlcik7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBzdWJJbW1lZGlhdGVOdW1iZXJzKEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2
MikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBzdWJJbW1lZGlhdGVO
dW1iZXJzKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpKTsKICAgICAgICAgICAg
IEFTU0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjIpKTsKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVmFsdWUocmF3VmFsdWUodjEpIC0gcmF3VmFsdWUodjIpICsgVGFnQml0VHlwZUlu
dGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogaW5jSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWVQdHIgaW5jSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWVQdHIgdikKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSk7
CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYpICsgKDEgPDwgSW50ZWdl
clBheWxvYWRTaGlmdCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogZGVjSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgZGVjSW1tZWRpYXRlTnVtYmVyKEpTVmFsdWVQdHIg
dikKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0
aW9ucyh2KSk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVZhbHVlKHJhd1ZhbHVlKHYpIC0gKDEg
PDwgSW50ZWdlclBheWxvYWRTaGlmdCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGRv
dWJsZSB0b0RvdWJsZShKU1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyBib29sIHRvQm9vbGVhbihK
U1ZhbHVlKik7Ci0gICAgICAgIHN0YXRpYyBKU09iamVjdCogdG9PYmplY3QoSlNWYWx1ZSosIEV4
ZWNTdGF0ZSopOwotICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU1ZhbHVl
KiwgRXhlY1N0YXRlKik7Ci0gICAgICAgIHN0YXRpYyBVU3RyaW5nIHRvU3RyaW5nKEpTVmFsdWUq
KTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBnZXRVSW50MzIoSlNWYWx1ZSosIHVpbnQzMl90Jik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZEludDMyKEpTVmFsdWUqLCBpbnQzMl90
Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlKiwgdWlu
dDMyX3QmKTsKLQotICAgICAgICBzdGF0aWMgaW50MzJfdCBnZXRUcnVuY2F0ZWRJbnQzMihKU1Zh
bHVlKik7Ci0gICAgICAgIHN0YXRpYyB1aW50MzJfdCBnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1
ZSopOwotCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiB0cnVlSW1tZWRpYXRlKCk7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBmYWxzZUltbWVkaWF0ZSgpOwotICAgICAgICBzdGF0aWMgSlNWYWx1
ZSogdW5kZWZpbmVkSW1tZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBudWxsSW1t
ZWRpYXRlKCk7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiB6ZXJvSW1tZWRpYXRlKCk7Ci0gICAg
ICAgIHN0YXRpYyBKU1ZhbHVlKiBvbmVJbW1lZGlhdGUoKTsKKyAgICAgICAgc3RhdGljIGRvdWJs
ZSB0b0RvdWJsZShKU1ZhbHVlUHRyKTsKKyAgICAgICAgc3RhdGljIGJvb2wgdG9Cb29sZWFuKEpT
VmFsdWVQdHIpOworICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvT2JqZWN0KEpTVmFsdWVQdHIs
IEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgSlNPYmplY3QqIHRvVGhpc09iamVjdChKU1Zh
bHVlUHRyLCBFeGVjU3RhdGUqKTsKKyAgICAgICAgc3RhdGljIFVTdHJpbmcgdG9TdHJpbmcoSlNW
YWx1ZVB0cik7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VUludDMyKEpTVmFsdWVQdHIsIHVp
bnQzMl90Jik7CisgICAgICAgIHN0YXRpYyBib29sIGdldFRydW5jYXRlZEludDMyKEpTVmFsdWVQ
dHIsIGludDMyX3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0VHJ1bmNhdGVkVUludDMyKEpT
VmFsdWVQdHIsIHVpbnQzMl90Jik7CisKKyAgICAgICAgc3RhdGljIGludDMyX3QgZ2V0VHJ1bmNh
dGVkSW50MzIoSlNWYWx1ZVB0cik7CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBnZXRUcnVuY2F0
ZWRVSW50MzIoSlNWYWx1ZVB0cik7CisKKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgdHJ1ZUlt
bWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciBmYWxzZUltbWVkaWF0ZSgpOwor
ICAgICAgICBzdGF0aWMgSlNWYWx1ZVB0ciB1bmRlZmluZWRJbW1lZGlhdGUoKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWVQdHIgbnVsbEltbWVkaWF0ZSgpOworICAgICAgICBzdGF0aWMgSlNWYWx1
ZVB0ciB6ZXJvSW1tZWRpYXRlKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlUHRyIG9uZUltbWVk
aWF0ZSgpOwogCi0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbXBvc3NpYmxlVmFsdWUoKTsKKyAg
ICAgICAgc3RhdGljIEpTVmFsdWVQdHIgaW1wb3NzaWJsZVZhbHVlKCk7CiAgICAgICAgIAotICAg
ICAgICBzdGF0aWMgSlNPYmplY3QqIHByb3RvdHlwZShKU1ZhbHVlKiwgRXhlY1N0YXRlKik7Cisg
ICAgICAgIHN0YXRpYyBKU09iamVjdCogcHJvdG90eXBlKEpTVmFsdWVQdHIsIEV4ZWNTdGF0ZSop
OwogCiAgICAgcHJpdmF0ZToKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQpAQCAtMjcw
LDY1ICsyNjgsNjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heEltbWVkaWF0ZVVJbnQgPSBtYXhJbW1lZGlhdGVJbnQ7CiAKLSAgICAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZVZhbHVlKGludHB0cl90IGludGVn
ZXIpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgbWFrZVZhbHVlKGlu
dHB0cl90IGludGVnZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEpTVmFsdWUqPihpbnRlZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRy
OjptYWtlSW1tZWRpYXRlKGludGVnZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZUludChpbnQzMl90IHZhbHVlKQorICAgICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VJbnQoaW50MzJfdCB2YWx1ZSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZSgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KHZhbHVlKSA8PCBJbnRlZ2VyUGF5bG9hZFNoaWZ0KSB8IFRhZ0JpdFR5cGVJbnRlZ2VyKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
bWFrZUJvb2woYm9vbCBiKQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRy
IG1ha2VCb29sKGJvb2wgYikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1
ZSgoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGIpIDw8IEV4dGVuZGVkUGF5bG9hZFNoaWZ0KSB8IEZ1
bGxUYWdUeXBlQm9vbCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIG1ha2VVbmRlZmluZWQoKQorICAgICAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlUHRyIG1ha2VVbmRlZmluZWQoKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gbWFrZVZhbHVlKEZ1bGxUYWdUeXBlVW5kZWZpbmVkKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogbWFrZU51bGwoKQor
ICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIG1ha2VOdWxsKCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VWYWx1ZShGdWxsVGFnVHlwZU51bGwpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQzMl90IGlu
dFZhbHVlKEpTVmFsdWUqIHYpCisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
aW50VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ocmF3VmFsdWUodikgPj4gSW50ZWdlclBheWxvYWRTaGlmdCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90
IHVpbnRWYWx1ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50
MzJfdCB1aW50VmFsdWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJhd1ZhbHVlKHYpID4+IEludGVnZXJQYXlsb2FkU2hp
ZnQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGJvb2xWYWx1ZShKU1ZhbHVlKiB2KQorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGJvb2xWYWx1ZShKU1ZhbHVlUHRyIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biByYXdWYWx1ZSh2KSAmIEV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRyX3QgcmF3VmFsdWUo
SlNWYWx1ZSogdikKKyAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50cHRyX3QgcmF3VmFs
dWUoSlNWYWx1ZVB0ciB2KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odik7CisgICAgICAgICAgICByZXR1cm4gdi5pbW1lZGlhdGVWYWx1
ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGRvdWJsZSBub25JbmxpbmVOYU4oKTsK
ICAgICB9OwogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKU0ltbWVkaWF0ZTo6dHJ1ZUlt
bWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKHRydWUpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlQm9vbChm
YWxzZSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjp1bmRlZmlu
ZWRJbW1lZGlhdGUoKSB7IHJldHVybiBtYWtlVW5kZWZpbmVkKCk7IH0KLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZU51
bGwoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6Onplcm9JbW1l
ZGlhdGUoKSB7IHJldHVybiBtYWtlSW50KDApOyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZUludCgxKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpIHsg
cmV0dXJuIG1ha2VCb29sKHRydWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpT
SW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VCb29sKGZhbHNlKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6dW5kZWZpbmVkSW1tZWRp
YXRlKCkgeyByZXR1cm4gbWFrZVVuZGVmaW5lZCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIEpTSW1tZWRpYXRlOjpudWxsSW1tZWRpYXRlKCkgeyByZXR1cm4gbWFrZU51bGwoKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0
ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIg
SlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpIHsgcmV0dXJuIG1ha2VJbnQoMSk7IH0KIAogICAg
IC8vIFRoaXMgdmFsdWUgaXMgaW1wb3NzaWJsZSBiZWNhdXNlIDB4NCBpcyBub3QgYSB2YWxpZCBw
b2ludGVyIGJ1dCBhIHRhZyBvZiAwIHdvdWxkIGluZGljYXRlIG5vbi1pbW1lZGlhdGUKLSAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSB7IHJl
dHVybiBtYWtlVmFsdWUoMHg0KTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0lt
bWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkgeyByZXR1cm4gbWFrZVZhbHVlKDB4NCk7IH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6dG9Cb29sZWFuKEpTVmFsdWUqIHYp
CisgICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjp0b0Jvb2xlYW4oSlNWYWx1ZVB0
ciB2KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW1tZWRpYXRlKHYpKTsKICAgICAgICAgaW50
cHRyX3QgYml0cyA9IHJhd1ZhbHVlKHYpOwpAQCAtMzM3LDgwICszMzUsODAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICA6IGJpdHMgPT0gKEZ1bGxUYWdUeXBlQm9vbCB8IEV4dGVuZGVk
UGF5bG9hZEJpdEJvb2xWYWx1ZSk7IC8vIGJvb2wgdHJ1ZQogICAgIH0KIAotICAgIEFMV0FZU19J
TkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJbnQzMihKU1ZhbHVlKiB2
KQorICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZFVJ
bnQzMihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikpOwog
ICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlKiBKU0ltbWVkaWF0ZTo6ZnJvbShjaGFyIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBt
YWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlh
dGU6OmZyb20oc2lnbmVkIGNoYXIgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJ
bW1lZGlhdGU6OmZyb20oc2lnbmVkIGNoYXIgaSkKICAgICB7CiAgICAgICAgIHJldHVybiBtYWtl
SW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6
OmZyb20odW5zaWduZWQgY2hhciBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0lt
bWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBjaGFyIGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFr
ZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRl
Ojpmcm9tKHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRl
Ojpmcm9tKHNob3J0IGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVk
IHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9t
KHVuc2lnbmVkIHNob3J0IGkpCiAgICAgewogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGludCBp
KQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShpbnQgaSkK
ICAgICB7CiAgICAgICAgIGlmICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+IG1heEltbWVk
aWF0ZUludCkpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4g
bWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRp
YXRlOjpmcm9tKHVuc2lnbmVkIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1t
ZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBpZiAoaSA+IG1heEltbWVk
aWF0ZVVJbnQpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4g
bWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRp
YXRlOjpmcm9tKGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIgSlNJbW1lZGlh
dGU6OmZyb20obG9uZyBpKQogICAgIHsKICAgICAgICAgaWYgKChpIDwgbWluSW1tZWRpYXRlSW50
KSB8IChpID4gbWF4SW1tZWRpYXRlSW50KSkKICAgICAgICAgICAgIHJldHVybiBub1ZhbHVlKCk7
CiAgICAgICAgIHJldHVybiBtYWtlSW50KGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBpKQorICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbSh1bnNpZ25lZCBsb25nIGkpCiAgICAg
ewogICAgICAgICBpZiAoaSA+IG1heEltbWVkaWF0ZVVJbnQpCiAgICAgICAgICAgICByZXR1cm4g
bm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFrZUludChpKTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIEpTSW1tZWRpYXRlOjpmcm9tKGxvbmcgbG9uZyBpKQorICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBKU0ltbWVkaWF0ZTo6ZnJvbShsb25nIGxvbmcgaSkKICAg
ICB7CiAgICAgICAgIGlmICgoaSA8IG1pbkltbWVkaWF0ZUludCkgfCAoaSA+IG1heEltbWVkaWF0
ZUludCkpCiAgICAgICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwogICAgICAgICByZXR1cm4gbWFr
ZUludChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oaSkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSogSlNJbW1lZGlhdGU6OmZyb20odW5zaWduZWQgbG9uZyBsb25nIGkpCisgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIEpTSW1tZWRpYXRlOjpmcm9tKHVuc2lnbmVkIGxvbmcg
bG9uZyBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPiBtYXhJbW1lZGlhdGVVSW50KQogICAgICAg
ICAgICAgcmV0dXJuIG5vVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQoc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KGkpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpT
SW1tZWRpYXRlOjpmcm9tKGRvdWJsZSBkKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBK
U0ltbWVkaWF0ZTo6ZnJvbShkb3VibGUgZCkKICAgICB7CiAgICAgICAgIGNvbnN0IGludCBpbnRW
YWwgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwogCkBAIC00MjQsMTMgKzQyMiwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1ha2VJbnQoaW50VmFsKTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIGludDMyX3QgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKEpTVmFs
dWUqIHYpCisgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0
ZWRJbnQzMihKU1ZhbHVlUHRyIHYpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNOdW1iZXIodikp
OwogICAgICAgICByZXR1cm4gaW50VmFsdWUodik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBkb3VibGUgSlNJbW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWUqIHYpCisgICAgQUxXQVlTX0lO
TElORSBkb3VibGUgSlNJbW1lZGlhdGU6OnRvRG91YmxlKEpTVmFsdWVQdHIgdikKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc0ltbWVkaWF0ZSh2KSk7CiAgICAgICAgIGludCBpOwpAQCAtNDQzLDM2
ICs0NDEsMTMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJbnQzMihKU1ZhbHVlKiB2
LCB1aW50MzJfdCYgaSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OmdldFVJ
bnQzMihKU1ZhbHVlUHRyIHYsIHVpbnQzMl90JiBpKQogICAgIHsKICAgICAgICAgaSA9IHVpbnRW
YWx1ZSh2KTsKICAgICAgICAgcmV0dXJuIGlzUG9zaXRpdmVOdW1iZXIodik7CiAgICAgfQogCi0g
ICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMihKU1Zh
bHVlKiB2LCBpbnQzMl90JiBpKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU0ltbWVkaWF0ZTo6
Z2V0VHJ1bmNhdGVkSW50MzIoSlNWYWx1ZVB0ciB2LCBpbnQzMl90JiBpKQogICAgIHsKICAgICAg
ICAgaSA9IGludFZhbHVlKHYpOwogICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRpYXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIo
SlNWYWx1ZSogdiwgdWludDMyX3QmIGkpCisgICAgQUxXQVlTX0lOTElORSBib29sIEpTSW1tZWRp
YXRlOjpnZXRUcnVuY2F0ZWRVSW50MzIoSlNWYWx1ZVB0ciB2LCB1aW50MzJfdCYgaSkKICAgICB7
CiAgICAgICAgIHJldHVybiBnZXRVSW50MzIodiwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlKiBqc1VuZGVmaW5lZCgpCisgICAgaW5saW5lIEpTVmFsdWVQdHIganNOdWxs
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOwor
ICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlUHRyIGpzQm9vbGVhbihib29sIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gYiA/IEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkgOiBKU0ltbWVk
aWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBq
c1VuZGVmaW5lZCgpCiAgICAgewogICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OnVuZGVmaW5l
ZEltbWVkaWF0ZSgpOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlKiBqc051bGwoKQorICAg
IC8vIFRoZXNlIGFyZSBpZGVudGljYWwgbG9naWMgdG8gdGhlIEpTVmFsdWUgZnVuY3Rpb25zIGFi
b3ZlLCBhbmQgZmFzdGVyIHRoYW4ganNOdW1iZXIobnVtYmVyKS0+dG9JbnQzMigpLgorICAgIGlu
dDMyX3QgdG9JbnQzMihkb3VibGUpOworICAgIHVpbnQzMl90IHRvVUludDMyKGRvdWJsZSk7Cisg
ICAgaW50MzJfdCB0b0ludDMyU2xvd0Nhc2UoZG91YmxlLCBib29sJiBvayk7CisgICAgdWludDMy
X3QgdG9VSW50MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKKworICAgIGlubGluZSBib29s
IEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0lt
bWVkaWF0ZTo6bnVsbEltbWVkaWF0ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUqIGpzQm9vbGVhbihib29s
IGIpCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBiID8gSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSA6IEpTSW1tZWRpYXRl
OjpmYWxzZUltbWVkaWF0ZSgpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzTnVsbCgp
OworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNVbmRlZmluZWRPck51
bGwoYXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Jvb2xl
YW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4o
YXNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRCb29sZWFu
KGJvb2wmIHYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzQm9vbGVh
bihhc1ZhbHVlKCkpKSB7CisgICAgICAgICAgICB2ID0gSlNJbW1lZGlhdGU6OnRvQm9vbGVhbihh
c1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
OjpnZXRCb29sZWFuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0g
anNCb29sZWFuKHRydWUpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKU1Zh
bHVlOjp0b0ludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIGludDMy
X3QgaTsKKyAgICAgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKQorICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nhc2Uo
ZXhlYywgb2spOworICAgIH0KKworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICB1aW50MzJfdCBpOworICAg
ICAgICBpZiAoZ2V0VHJ1bmNhdGVkVUludDMyKGkpKQorICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9r
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50MzJfdCB0b0ludDMyKGRvdWJsZSB2YWwpCisgICAg
eworICAgICAgICBpZiAoISh2YWwgPj0gLTIxNDc0ODM2NDguMCAmJiB2YWwgPCAyMTQ3NDgzNjQ4
LjApKSB7CisgICAgICAgICAgICBib29sIGlnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gdG9J
bnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludDMyX3Q+KHZhbCk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IHRv
VUludDMyKGRvdWJsZSB2YWwpCisgICAgeworICAgICAgICBpZiAoISh2YWwgPj0gMC4wICYmIHZh
bCA8IDQyOTQ5NjcyOTYuMCkpIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlZDsKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKHZhbCwgaWdub3JlZCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWwpOworICAgIH0KKworICAgIGlu
bGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykg
Y29uc3QKKyAgICB7CisgICAgICAgIGludDMyX3QgaTsKKyAgICAgICAgaWYgKGdldFRydW5jYXRl
ZEludDMyKGkpKSB7CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoRXhlY1N0YXRl
KiBleGVjLCBib29sJiBvaykgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGk7CisgICAg
ICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpIHsKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQz
MlNsb3dDYXNlKGV4ZWMsIG9rKTsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuY3BwCShyZXZpc2lvbiAzOTYwMykK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEzICszNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoSlNOb3RBbk9iamVjdCk7CiAKIC8vIEpTVmFsdWUgbWV0aG9kcwotSlNWYWx1ZSog
SlNOb3RBbk9iamVjdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0ciBKU05vdEFuT2JqZWN0Ojp0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgQVNT
RVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24o
KSA9PSBtX2V4Y2VwdGlvbik7CiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uOwogfQogCi1ib29sIEpT
Tm90QW5PYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYs
IEpTVmFsdWUqJikKK2Jvb2wgSlNOb3RBbk9iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgZG91YmxlJiwgSlNWYWx1ZVB0ciYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChl
eGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKSA9PSBtX2V4Y2Vw
dGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTUsMTIgKzk1LDEyIEBAIGJvb2wgSlNOb3RB
bk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgSlNOb3RBbk9iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
LCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90JikKK3ZvaWQgSlNOb3RBbk9iamVjdDo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgLCBKU1ZhbHVlUHRyLCBQdXRQcm9wZXJ0
eVNsb3QmKQogewogICAgIEFTU0VSVF9VTlVTRUQoZXhlYywgZXhlYy0+aGFkRXhjZXB0aW9uKCkg
JiYgZXhlYy0+ZXhjZXB0aW9uKCkgPT0gbV9leGNlcHRpb24pOwogfQogCi12b2lkIEpTTm90QW5P
YmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkLCBKU1ZhbHVlKikKK3ZvaWQgSlNO
b3RBbk9iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQsIEpTVmFsdWVQdHIpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5l
eGNlcHRpb24oKSA9PSBtX2V4Y2VwdGlvbik7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTm90QW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTUgKzYwLDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWVQdHIgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KIAog
ICAgICBwcml2YXRlOgogICAgICAgICAvLyBKU1ZhbHVlIG1ldGhvZHMKLSAgICAgICAgdmlydHVh
bCBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBl
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVl
UHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlUHRyJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xl
YW4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0
YXRlKikgY29uc3Q7CkBAIC04MSw4ICs4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHko
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgdmly
dHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJlckNlbGwuY3BwCShyZXZpc2lv
biAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1Zh
bHVlKiBKU051bWJlckNlbGw6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlUHRyIEpTTnVtYmVyQ2VsbDo6dG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKIHsKICAgICByZXR1cm4gY29u
c3RfY2FzdDxKU051bWJlckNlbGwqPih0aGlzKTsKIH0KIAotYm9vbCBKU051bWJlckNlbGw6Omdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZh
bHVlKQorYm9vbCBKU051bWJlckNlbGw6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBk
b3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpCiB7CiAgICAgbnVtYmVyID0gbV92YWx1
ZTsKICAgICB2YWx1ZSA9IHRoaXM7CkBAIC05NiwyNyArOTYsMjcgQEAgYm9vbCBKU051bWJlckNl
bGw6OmdldFRydW5jYXRlZFVJbnQzMih1aQogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVl
KiBKU051bWJlckNlbGw6OmdldEpTTnVtYmVyKCkKK0pTVmFsdWVQdHIgSlNOdW1iZXJDZWxsOjpn
ZXRKU051bWJlcigpCiB7CiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLU5FVkVSX0lOTElORSBKU1Zh
bHVlKiBqc051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgZCkKK05FVkVSX0lOTElO
RSBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSBkKQogewog
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTnVtYmVyQ2VsbChleGVjLCBkKTsKIH0KIAotTkVWRVJf
SU5MSU5FIEpTVmFsdWUqIGpzTmFOKEV4ZWNTdGF0ZSogZXhlYykKK05FVkVSX0lOTElORSBKU1Zh
bHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBK
U051bWJlckNlbGwoZXhlYywgTmFOKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIGpzTnVt
YmVyQ2VsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQorTkVWRVJfSU5MSU5F
IEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91Ymxl
IGQpCiB7CiAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNOdW1iZXJDZWxsKGdsb2JhbERh
dGEsIGQpOwogfQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSoganNOYU4oSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQorTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIganNOYU4oSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewogICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTTnVtYmVyQ2VsbChn
bG9iYWxEYXRhLCBOYU4pOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU051bWJl
ckNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTnVtYmVyQ2Vs
bC5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOdW1iZXJD
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE1ICs0MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEpTTnVtYmVyQ2VsbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmll
bmQgY2xhc3MgSklUOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOdW1iZXJDZWxsKEpTR2xv
YmFsRGF0YSosIGRvdWJsZSk7Ci0gICAgICAgIGZyaWVuZCBKU1ZhbHVlKiBqc05hTihKU0dsb2Jh
bERhdGEqKTsKLSAgICAgICAgZnJpZW5kIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChFeGVjU3RhdGUq
LCBkb3VibGUpOwotICAgICAgICBmcmllbmQgSlNWYWx1ZSoganNOYU4oRXhlY1N0YXRlKik7Cisg
ICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3Vi
bGUpOworICAgICAgICBmcmllbmQgSlNWYWx1ZVB0ciBqc05hTihKU0dsb2JhbERhdGEqKTsKKyAg
ICAgICAgZnJpZW5kIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEV4ZWNTdGF0ZSosIGRvdWJsZSk7
CisgICAgICAgIGZyaWVuZCBKU1ZhbHVlUHRyIGpzTmFOKEV4ZWNTdGF0ZSopOwogICAgIHB1Ymxp
YzoKICAgICAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCi0g
ICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSk7CisgICAg
ICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQ
cmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNTksNyArNTksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9UaGlzU3RyaW5nKEV4
ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3Qo
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZ2V0SlNOdW1iZXIo
KTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGdldEpTTnVtYmVyKCk7CiAKICAgICAgICAg
aW50MzJfdCB0b0ludDMyKCkgY29uc3Q7CiAgICAgICAgIHVpbnQzMl90IHRvVUludDMyKCkgY29u
c3Q7CkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNlbmRpZgogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhOdW1iZXJUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90bykg
eyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE51bWJlclR5cGUsIE5l
ZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNOdW1iZXJD
ZWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgZG91YmxlIHZhbHVlKQpAQCAtMTA3LDEyNCAr
MTA3LDEyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBleHRlcm4gY29uc3QgZG91YmxlIE5hTjsK
ICAgICBleHRlcm4gY29uc3QgZG91YmxlIEluZjsKIAotICAgIEpTTnVtYmVyQ2VsbCogYXNOdW1i
ZXJDZWxsKEpTVmFsdWUqKTsKKyAgICBKU051bWJlckNlbGwqIGFzTnVtYmVyQ2VsbChKU1ZhbHVl
UHRyKTsKIAotICAgIEpTVmFsdWUqIGpzTnVtYmVyQ2VsbChKU0dsb2JhbERhdGEqLCBkb3VibGUp
OwotICAgIEpTVmFsdWUqIGpzTmFOKEpTR2xvYmFsRGF0YSopOwotICAgIEpTVmFsdWUqIGpzTnVt
YmVyQ2VsbChFeGVjU3RhdGUqLCBkb3VibGUpOwotICAgIEpTVmFsdWUqIGpzTmFOKEV4ZWNTdGF0
ZSopOworICAgIEpTVmFsdWVQdHIganNOdW1iZXJDZWxsKEpTR2xvYmFsRGF0YSosIGRvdWJsZSk7
CisgICAgSlNWYWx1ZVB0ciBqc05hTihKU0dsb2JhbERhdGEqKTsKKyAgICBKU1ZhbHVlUHRyIGpz
TnVtYmVyQ2VsbChFeGVjU3RhdGUqLCBkb3VibGUpOworICAgIEpTVmFsdWVQdHIganNOYU4oRXhl
Y1N0YXRlKik7CiAKLSAgICBpbmxpbmUgSlNOdW1iZXJDZWxsKiBhc051bWJlckNlbGwoSlNWYWx1
ZSogdmFsdWUpCisgICAgaW5saW5lIEpTTnVtYmVyQ2VsbCogYXNOdW1iZXJDZWxsKEpTVmFsdWVQ
dHIgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNOdW1iZXIo
KSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU051bWJlckNlbGwqPihhc0NlbGwodmFs
dWUpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgZG91YmxlIGQpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIGQpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oZCk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGQpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywg
ZCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihFeGVjU3Rh
dGUqIGV4ZWMsIHNob3J0IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYywgc2hvcnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBK
U0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6
OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVjLCBpKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgc2hvcnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzaG9ydCBpKQogICAgIHsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJD
ZWxsKGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIg
anNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUq
IHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1l
ZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChleGVj
LCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWVQdHIganNO
dW1iZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1
ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0lt
bWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4
ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhl
Y1N0YXRlKiBleGVjLCBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgbG9uZyBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9
IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0
ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGV4ZWMsIGkp
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpz
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9uZyBpKQogICAgIHsKLSAgICAgICAg
SlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYg
PSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJD
ZWxsKGV4ZWMsIGkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGxvbmcgaSkKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWVQdHIganNOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBsb25nIGxvbmcgaSkKICAgICB7Ci0gICAg
ICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0
ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVt
YmVyQ2VsbChleGVjLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbG9u
ZyBsb25nIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgbG9uZyBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZXhlYywg
c3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlKiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGRvdWJsZSBkKQorICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGRvdWJsZSBkKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9IEpTSW1tZWRpYXRlOjpmcm9t
KGQpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShkKTsKICAgICAg
ICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2JhbERhdGEsIGQpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSoganNOdW1iZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBzaG9ydCBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHNob3J0IGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2
ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRp
YXRlOjpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFs
RGF0YSwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIHNob3J0IGkpCisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgc2hvcnQgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJv
bShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAg
ICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgaW50IGkpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0g
SlNJbW1lZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRl
Ojpmcm9tKGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0
YSwgaSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBqc051bWJlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGkpCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSkKICAg
ICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8g
diA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBpKQor
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGxvbmcgaSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6
ZnJvbShpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAg
ICAgICAgIHJldHVybiB2ID8gdiA6IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgdW5zaWduZWQgbG9uZyBpKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBq
c051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgaSkKICAgICB7
Ci0gICAgICAgIEpTVmFsdWUqIHYgPSBKU0ltbWVkaWF0ZTo6ZnJvbShpKTsKKyAgICAgICAgSlNW
YWx1ZVB0ciB2ID0gSlNJbW1lZGlhdGU6OmZyb20oaSk7CiAgICAgICAgIHJldHVybiB2ID8gdiA6
IGpzTnVtYmVyQ2VsbChnbG9iYWxEYXRhLCBpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgbG9uZyBsb25nIGkp
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlUHRyIGpzTnVtYmVyKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgbG9uZyBsb25nIGkpCiAgICAgewotICAgICAgICBKU1ZhbHVlKiB2ID0gSlNJbW1l
ZGlhdGU6OmZyb20oaSk7CisgICAgICAgIEpTVmFsdWVQdHIgdiA9IEpTSW1tZWRpYXRlOjpmcm9t
KGkpOwogICAgICAgICByZXR1cm4gdiA/IHYgOiBqc051bWJlckNlbGwoZ2xvYmFsRGF0YSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihpKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
KiBqc051bWJlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBp
KQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBqc051bWJlcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBpKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSog
diA9IEpTSW1tZWRpYXRlOjpmcm9tKGkpOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBKU0ltbWVk
aWF0ZTo6ZnJvbShpKTsKICAgICAgICAgcmV0dXJuIHYgPyB2IDoganNOdW1iZXJDZWxsKGdsb2Jh
bERhdGEsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwogICAgIH0KIApAQCAtMjUyLDcgKzI1Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gSlNDOjp0b1VJbnQzMlNsb3dDYXNl
KG1fdmFsdWUsIHNjcmF0Y2gpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSog
SlNWYWx1ZTo6dG9KU051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlUHRyIEpTVmFsdWU6OnRvSlNOdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc051bWJlcihhc1ZhbHVlKCkp
ID8gYXNWYWx1ZSgpIDoganNOdW1iZXIoZXhlYywgdGhpcy0+dG9OdW1iZXIoZXhlYykpOwogICAg
IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYwMykK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBAIHZvaWQgSlNPYmplY3Q6Om1hcmsoKQogCiAgICAgc2l6ZV90IHN0b3Jh
Z2VTaXplID0gbV9zdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHN0b3JhZ2VTaXplOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSogdiA9
IG1fcHJvcGVydHlTdG9yYWdlW2ldOworICAgICAgICBKU1ZhbHVlUHRyIHYgPSBtX3Byb3BlcnR5
U3RvcmFnZVtpXTsKICAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkKICAgICAgICAgICAgIHYtPm1h
cmsoKTsKICAgICB9CkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIHRocm93U2V0dGVyRXJy
b3IoRXhlY1N0YXRlKiAKIH0KIAogLy8gRUNNQSA4LjYuMi4yCi12b2lkIEpTT2JqZWN0OjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUq
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFT
U0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVh
cCh0aGlzKSk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29ucwogICAgICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpICYmICF2YWx1ZS0+
aXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSlNWYWx1ZSogbmV4dFBy
b3RvdHlwZVZhbHVlID0gdmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgbmV4dFByb3RvdHlwZVZh
bHVlID0gdmFsdWU7CiAgICAgICAgIHdoaWxlIChuZXh0UHJvdG90eXBlVmFsdWUgJiYgbmV4dFBy
b3RvdHlwZVZhbHVlLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogbmV4dFBy
b3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90b3R5cGVWYWx1ZSktPnVud3JhcHBlZE9iamVjdCgp
OwogICAgICAgICAgICAgaWYgKG5leHRQcm90b3R5cGUgPT0gdGhpcykgewpAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnMKICAgICB9CiAK
ICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUg
cHJvdG90eXBlIGNoYWluCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlOworICAgIEpTVmFsdWVQdHIg
cHJvdG90eXBlOwogICAgIGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXM7ICFvYmotPnN0cnVjdHVy
ZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCk7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlw
ZSkpIHsKICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYg
KHByb3RvdHlwZS0+aXNOdWxsKCkpIHsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEpTT2JqZWN0
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAo
SlNPYmplY3QqIG9iaiA9IHRoaXM7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSogZ3MgPSBvYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICAgIGlmIChKU1ZhbHVlUHRyIGdzID0gb2JqLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKSkg
ewogICAgICAgICAgICAgaWYgKGdzLT5pc0dldHRlclNldHRlcigpKSB7CiAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIHNldHRlckZ1bmMgPSBhc0dldHRlclNldHRlcihncyktPnNldHRlcigpOyAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzZXR0ZXJGdW5jKSB7CkBAIC0xNjcsMTggKzE2
NywxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zCiAgICAgcmV0
dXJuOwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHB1dChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU09iamVjdDo6cHV0
V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNPYmplY3Q6OnB1
dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBwdXREaXJl
Y3QocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6
OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNPYmplY3Q6OnB1
dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIHB1dFdpdGhBdHRy
aWJ1dGVzKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUs
IGF0dHJpYnV0ZXMpOwogfQpAQCAtMjI2LDkgKzIyNiw5IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAotc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSogY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBvYmplY3QtPmdldChl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBvYmplY3QtPmdl
dChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIGNhbGxEZWZhdWwKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKIAotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgY29uc3RfY2Fz
dDxKU09iamVjdCo+KG9iamVjdCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgY29uc3Rf
Y2FzdDxKU09iamVjdCo+KG9iamVjdCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgICBBU1NFUlQo
IXJlc3VsdC0+aXNHZXR0ZXJTZXR0ZXIoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCk7CkBAIC0yNDgsNyArMjQ4LDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogY2FsbERlZmF1bAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4
ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgcmVzdWx0KQorYm9vbCBKU09iamVjdDo6Z2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQ
dHImIHJlc3VsdCkKIHsKICAgICByZXN1bHQgPSBkZWZhdWx0VmFsdWUoZXhlYywgUHJlZmVyTnVt
YmVyKTsKICAgICBudW1iZXIgPSByZXN1bHQtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMjU2LDE4ICsy
NTYsMjIgQEAgYm9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdAogfQogCiAv
LyBFQ01BIDguNi4yLjYKLUpTVmFsdWUqIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIEpT
T2JqZWN0OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgLy8gTXVzdCBjYWxsIHRvU3RyaW5nIGZpcnN0IGZvciBE
YXRlIG9iamVjdHMuCiAgICAgaWYgKChoaW50ID09IFByZWZlclN0cmluZykgfHwgKGhpbnQgIT0g
UHJlZmVyTnVtYmVyICYmIHByb3RvdHlwZSgpID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZGF0ZVByb3RvdHlwZSgpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBjYWxs
RGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRv
U3RyaW5nKSkKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5j
dGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpOworICAgICAg
ICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgICAgIHZhbHVlID0gY2FsbERlZmF1bHRWYWx1
ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKTsKKyAg
ICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihl
eGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZikpCisgICAgICAgIEpTVmFs
dWVQdHIgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgdGhpcywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpOworICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGNhbGxEZWZhdWx0
VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcp
KQorICAgICAgICB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCB0aGlzLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpOworICAgICAgICBpZiAodmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCkBAIC0yODksNyArMjkzLDcgQEAgY29uc3Qg
SGFzaEVudHJ5KiBKU09iamVjdDo6ZmluZFByb3BlcnR5SAogCiB2b2lkIEpTT2JqZWN0OjpkZWZp
bmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbikKIHsKLSAgICBKU1ZhbHVlKiBvYmplY3QgPSBnZXRE
aXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyIG9iamVjdCA9IGdldERpcmVjdChw
cm9wZXJ0eU5hbWUpOwogICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0dldHRlclNldHRlcigp
KSB7CiAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cygpKTsKICAgICAgICAgYXNHZXR0ZXJTZXR0ZXIob2JqZWN0KS0+c2V0R2V0dGVyKGdldHRlckZ1
bmN0aW9uKTsKQEAgLTMxNiw3ICszMjAsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIo
RXhlY1N0YXRlKiBlCiAKIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRlckZ1bmN0
aW9uKQogewotICAgIEpTVmFsdWUqIG9iamVjdCA9IGdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwor
ICAgIEpTVmFsdWVQdHIgb2JqZWN0ID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KG9iamVjdCAmJiBvYmplY3QtPmlzR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAgQVNTRVJUKG1f
c3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogICAgICAgICBhc0dldHRl
clNldHRlcihvYmplY3QpLT5zZXRTZXR0ZXIoc2V0dGVyRnVuY3Rpb24pOwpAQCAtMzQxLDEyICsz
NDUsMTEgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZQogICAgIGdl
dHRlclNldHRlci0+c2V0U2V0dGVyKHNldHRlckZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNP
YmplY3Q6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCitKU1ZhbHVlUHRyIEpTT2JqZWN0Ojpsb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gb2JqZWN0
LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
IGlmIChKU1ZhbHVlUHRyIHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3QocHJvcGVydHlOYW1lKSkg
ewogICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNHZXR0ZXJTZXR0ZXIoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlv
bk9iamVjdCA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CkBAIC0zNjEsMTIgKzM2
NCwxMSBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwR2V0dGVyKEV4ZWNTdGF0CiAgICAgfQog
fQogCi1KU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK0pTVmFsdWVQdHIgSlNPYmplY3Q6Omxvb2t1cFNldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgSlNWYWx1
ZSogdmFsdWUgPSBvYmplY3QtPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAo
dmFsdWUpIHsKKyAgICAgICAgaWYgKEpTVmFsdWVQdHIgdmFsdWUgPSBvYmplY3QtPmdldERpcmVj
dChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc0dldHRlclNldHRl
cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAg
SlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0ID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5zZXR0ZXIo
KTsKQEAgLTM4MSw3ICszODMsNyBAQCBKU1ZhbHVlKiBKU09iamVjdDo6bG9va3VwU2V0dGVyKEV4
ZWNTdGF0CiAgICAgfQogfQogCi1ib29sIEpTT2JqZWN0OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90bykKK2Jvb2wgSlNPYmplY3Q6Omhh
c0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNWYWx1ZVB0ciBw
cm90bykKIHsKICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdpdGgg
YW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIik7CkBAIC0zOTMsNyArMzk1LDcgQEAgYm9v
bCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleAogCiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICB3aGlsZSAoKG9iamVjdCA9IG9iamVjdC0+cHJv
dG90eXBlKCktPmdldE9iamVjdCgpKSkgewotICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvKQor
ICAgICAgICBpZiAocHJvdG8gPT0gb2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTQzNCw3ICs0MzYsNyBAQCBib29sIEpTT2JqZWN0
Ojp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uCiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9IHRvUHJp
bWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7CisgICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSB0
b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAogICAgICAgICBy
ZXR1cm4gMC4wOwogICAgIHJldHVybiBwcmltaXRpdmUtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNDQy
LDcgKzQ0NCw3IEBAIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGUKIAog
VVN0cmluZyBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IEpTVmFsdWUqIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Cisg
ICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuICIiOwogICAg
IHJldHVybiBwcmltaXRpdmUtPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNDg5LDcgKzQ5MSw3IEBAIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFQKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCZleGVjLT5nbG9i
YWxEYXRhKCkpKSwgZnVuY3Rpb24sIGF0dHIpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBKU09i
amVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUq
KiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZVB0ciogbG9jYXRpb24pCiB7CiAgICAg
aWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKCpsb2NhdGlvbikt
PmdldHRlcigpKQogICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0aW9uICAgICA9IDEgPDwgNCwgIC8v
IHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMK
ICAgICB9OwogCi0gICAgdHlwZWRlZiBKU1ZhbHVlKiogUHJvcGVydHlTdG9yYWdlOworICAgIHR5
cGVkZWYgSlNWYWx1ZVB0ciogUHJvcGVydHlTdG9yYWdlOwogCiAgICAgY2xhc3MgSlNPYmplY3Qg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEJhdGNoZWRUcmFuc2l0aW9u
T3B0aW1pemVyOwpAQCAtNjksOCArNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBi
b29sIGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKSBjb25zdCB7IHJldHVybiBK
U0NlbGw6OmlzT2JqZWN0KGNsYXNzSW5mbyk7IH0KIAotICAgICAgICBKU1ZhbHVlKiBwcm90b3R5
cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSogcHJvdG90eXBl
KTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBz
ZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBzZXRTdHJ1Y3R1cmUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKICAgICAgICAgU3RydWN0dXJl
KiBpbmhlcml0b3JJRCgpOwpAQCAtNzksOCArNzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgSlNWYWx1
ZSogZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7
Ci0gICAgICAgIEpTVmFsdWUqIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
IGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgZ2V0UHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC04OCwxMSArODgsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1
dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0
ZXMoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRy
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdp
dGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgYm9vbCBwcm9wZXJ0eUlz
RW51bWVyYWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNv
bnN0OwogCkBAIC0xMDMsMTQgKzEwMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmly
dHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSog
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0
YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiwgSlNWYWx1ZSogcHJvdG90eXBlUHJvcGVydHkpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciwg
SlNWYWx1ZVB0ciBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGdl
dFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFs
dWUpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIs
IEpTVmFsdWVQdHImIHZhbHVlKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVj
U3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdDsKQEAgLTEyMiwzMCArMTIyLDMwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0UHJvcGVydHlBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0OwogCiAgICAgICAg
IC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KLSAg
ICAgICAgSlNWYWx1ZSogZ2V0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkg
Y29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXREaXJlY3QoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
bV9zdHJ1Y3R1cmUtPmdldChwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIG9mZnNl
dCAhPSBXVEY6Om5vdEZvdW5kID8gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA6IG5vVmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqKiBnZXREaXJlY3RMb2NhdGlvbihjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisgICAgICAgIEpTVmFsdWVQdHIqIGdldERpcmVj
dExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICAgICAgewogICAg
ICAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0dXJlLT5nZXQocHJvcGVydHlOYW1lKTsK
ICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCA/IGxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSoqIGdldERp
cmVjdExvY2F0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMpCisgICAgICAgIEpTVmFsdWVQdHIqIGdldERpcmVjdExvY2F0aW9uKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVjdHVyZS0+Z2V0KHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IFdURjo6bm90Rm91
bmQgPyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQogCi0gICAgICAg
IHNpemVfdCBvZmZzZXRGb3JMb2NhdGlvbihKU1ZhbHVlKiogbG9jYXRpb24pCisgICAgICAgIHNp
emVfdCBvZmZzZXRGb3JMb2NhdGlvbihKU1ZhbHVlUHRyKiBsb2NhdGlvbikKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uIC0gbV9wcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
IH0KIAotICAgICAgICBKU1ZhbHVlKiogbG9jYXRpb25Gb3JPZmZzZXQoc2l6ZV90IG9mZnNldCkK
KyAgICAgICAgSlNWYWx1ZVB0ciogbG9jYXRpb25Gb3JPZmZzZXQoc2l6ZV90IG9mZnNldCkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnR5U3RvcmFnZVtvZmZzZXRdOwog
ICAgICAgICB9CkBAIC0xNTYsMjIgKzE1NiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBoYXNDdXN0b21Qcm9wZXJ0aWVzKCkgeyByZXR1cm4gIW1fc3RydWN0dXJlLT5pc0VtcHR5
KCk7IH0KICAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQogCi0gICAgICAgIHZv
aWQgcHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIHVuc2lnbmVkIGF0dHIgPSAwKTsKLSAgICAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0ciwgYm9v
bCBjaGVja1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgICAgICB2b2lkIHB1
dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUs
IHVuc2lnbmVkIGF0dHIgPSAwKTsKKyAgICAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCB1bnNpZ25lZCBhdHRyLCBib29s
IGNoZWNrUmVhZE9ubHksIFB1dFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgICAgIHZvaWQgcHV0
RGlyZWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlv
biwgdW5zaWduZWQgYXR0ciA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVu
c2lnbmVkIGF0dHIgPSAwKTsKKyAgICAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2ln
bmVkIGF0dHIgPSAwKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFu
c2l0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIHVuc2ln
bmVkIGF0dHIgPSAwKTsKIAogICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0
eSBvZmZzZXRzLgotICAgICAgICBKU1ZhbHVlKiBnZXREaXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNl
dCkgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XTsgfQotICAgICAgICB2b2lkIHB1
dERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0LCBKU1ZhbHVlKiB2YWx1ZSkgeyBtX3Byb3BlcnR5
U3RvcmFnZVtvZmZzZXRdID0gdmFsdWU7IH0KKyAgICAgICAgSlNWYWx1ZVB0ciBnZXREaXJlY3RP
ZmZzZXQoc2l6ZV90IG9mZnNldCkgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XTsg
fQorICAgICAgICB2b2lkIHB1dERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0LCBKU1ZhbHVlUHRy
IHZhbHVlKSB7IG1fcHJvcGVydHlTdG9yYWdlW29mZnNldF0gPSB2YWx1ZTsgfQogCi0gICAgICAg
IHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlKiogbG9j
YXRpb24pOworICAgICAgICB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiwgSlNWYWx1ZVB0ciogbG9jYXRpb24pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVj
dCogZ2V0dGVyRnVuY3Rpb24pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmaW5lU2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRl
ckZ1bmN0aW9uKTsKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBsb29rdXBHZXR0ZXIoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgdmlydHVhbCBK
U1ZhbHVlKiBsb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGxvb2t1cEdldHRlcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICB2aXJ0dWFsIEpT
VmFsdWVQdHIgbG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzR2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGVPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZVN0b3JhZ2VDYXBhY2l0eSA9
IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgbm9uSW5saW5lQmFzZVN0b3JhZ2VDYXBh
Y2l0eSA9IDE2OwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIEhhc1N0YW5kYXJkR2V0T3duUHJvcGVydHlTbG90KSk7CiAgICAgICAg
IH0KQEAgLTIwMiwxNCArMjAyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8
U3RydWN0dXJlPiBtX2luaGVyaXRvcklEOwogCiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBtX3By
b3BlcnR5U3RvcmFnZTsgICAgICAgIAotICAgICAgICBKU1ZhbHVlKiBtX2lubGluZVN0b3JhZ2Vb
aW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKKyAgICAgICAgSlNWYWx1ZVB0ciBtX2lubGluZVN0b3Jh
Z2VbaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9OwogCi0gICAgSlNPYmplY3QqIGFzT2Jq
ZWN0KEpTVmFsdWUqKTsKKyAgICBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZVB0cik7CiAKICAg
ICBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKik7CiAKLWlubGluZSBK
U09iamVjdCogYXNPYmplY3QoSlNWYWx1ZSogdmFsdWUpCitpbmxpbmUgSlNPYmplY3QqIGFzT2Jq
ZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGFzQ2VsbCh2YWx1ZSktPmlzT2Jq
ZWN0KCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFzQ2VsbCh2YWx1ZSkp
OwpAQCAtMjMzLDEyICsyMzMsMTIgQEAgaW5saW5lIEpTT2JqZWN0Ojp+SlNPYmplY3QoKQogICAg
IG1fc3RydWN0dXJlLT5kZXJlZigpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNPYmplY3Q6OnBy
b3RvdHlwZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6cHJvdG90eXBlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTVmFsdWUqIHByb3RvdHlwZSkK
K2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNWYWx1ZVB0ciBwcm90b3R5cGUp
CiB7CiAgICAgQVNTRVJUKHByb3RvdHlwZSk7CiAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKG1fc3RydWN0dXJl
LCBwcm90b3R5cGUpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6Omlz
T2JqZWN0KGNvbnN0IENsYXMKIAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoSlNWYWx1ZSoqIGxvY2F0
aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgeworICAgIGlmIChKU1ZhbHVl
UHRyKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKICAgICAg
ICAgaWYgKG1fc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRp
b25bMF0tPmlzR2V0dGVyU2V0dGVyKCkpCiAgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlT
bG90KHNsb3QsIGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQpAQCAtMjk1LDcgKzI5NSw3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3cKIEFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90Rm9yV3JpdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYg
c2xvdElzV3JpdGVhYmxlKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKEpT
VmFsdWUqKiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcykpIHsKKyAgICBpZiAoSlNWYWx1ZVB0ciogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlv
bihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSB7CiAgICAgICAgIGlmIChtX3N0cnVjdHVyZS0+
aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uWzBdLT5pc0dldHRlclNldHRl
cigpKSB7CiAgICAgICAgICAgICBzbG90SXNXcml0ZWFibGUgPSBmYWxzZTsKICAgICAgICAgICAg
IGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOwpAQCAtMzM5LDcgKzMzOSw3
IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXgKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICBpZiAob2JqZWN0LT5mYXN0R2V0T3duUHJvcGVydHlTbG90KGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
SlNWYWx1ZSogcHJvdG90eXBlID0gb2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICAgICAgSlNWYWx1
ZVB0ciBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOwogICAgICAgICBpZiAoIXByb3Rv
dHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgb2Jq
ZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKQEAgLTM1MiwxNCArMzUyLDE0IEBAIGlubGluZSBi
b29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXgKICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICBpZiAob2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBKU1ZhbHVlKiBwcm90b3R5
cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9
IG9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBlLT5pc09iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBvYmplY3QgPSBhc09iamVjdChw
cm90b3R5cGUpOwogICAgIH0KIH0KIAotaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0OjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Citpbmxp
bmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMp
OwogICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQpAQCAtMzY4LDcgKzM2OCw3IEBAIGlubGluZSBKU1Zh
bHVlKiBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU09iamVjdDo6Z2V0
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFBy
b3BlcnR5U2xvdCBzbG90KHRoaXMpOwogICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhp
cyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQpAQCAtMzc3LDEz
ICszNzcsMTMgQEAgaW5saW5lIEpTVmFsdWUqIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKgogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2ln
bmVkIGF0dHIpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cikKIHsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBwdXREaXJlY3QocHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0ciwgZmFsc2UsIHNsb3QpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIGJvb2wgY2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgY2hl
Y2tSZWFkT25seSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAK
QEAgLTQ0NCw3ICs0NDQsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KGNvbnN0
IElkCiAgICAgc2V0U3RydWN0dXJlKHN0cnVjdHVyZS5yZWxlYXNlKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IG1fc3RydWN0dXJlLT5wcm9wZXJ0
eVN0b3JhZ2VDYXBhY2l0eSgpOwogICAgIHNpemVfdCBvZmZzZXQgPSBtX3N0cnVjdHVyZS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwpAQCAt
NDYwLDE4ICs0NjAsMTggQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnRyYW5zaXRpb25UbyhTdHJ1
YwogICAgIHNldFN0cnVjdHVyZShuZXdTdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSog
SlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAoraW5saW5lIEpTVmFsdWVQdHIgSlNPYmplY3Q6OnRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBwcmVmZXJy
ZWRUeXBlKSBjb25zdAogewogICAgIHJldHVybiBkZWZhdWx0VmFsdWUoZXhlYywgcHJlZmVycmVk
VHlwZSk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0
ciBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgcmV0dXJu
IGdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNW
YWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6Omlz
SW1tZWRpYXRlKGFzVmFsdWUoKSkpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBK
U0ltbWVkaWF0ZTo6cHJvdG90eXBlKGFzVmFsdWUoKSwgZXhlYyk7CkBAIC00ODQsMjAgKzQ4NCwy
MCBAQCBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgICAgIGlm
IChjZWxsLT5mYXN0R2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBBU1NFUlQoY2VsbC0+aXNPYmplY3QoKSk7Ci0gICAgICAgIEpTVmFsdWUqIHByb3Rv
dHlwZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnByb3RvdHlwZSgpOworICAgICAg
ICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY2VsbCktPnBy
b3RvdHlwZSgpOwogICAgICAgICBpZiAoIXByb3RvdHlwZS0+aXNPYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBjZWxsID0gYXNPYmplY3QocHJvdG90
eXBlKTsKICAgICB9CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBK
U1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0
CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgcmV0dXJuIGdldChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
IGNvbnN0CitpbmxpbmUgSlNWYWx1ZVB0ciBKU1ZhbHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKICAgICBp
ZiAoVU5MSUtFTFkoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKGFzVmFsdWUoKSkpKSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBKU0ltbWVkaWF0ZTo6cHJvdG90eXBlKGFzVmFsdWUo
KSwgZXhlYyk7CkBAIC01MTAsMTQgKzUxMCwxNCBAQCBpbmxpbmUgSlNWYWx1ZSogSlNWYWx1ZTo6
Z2V0KEV4ZWNTdGF0ZSogCiAgICAgICAgIGlmIChjZWxsLT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIEFTU0VSVChjZWxsLT5pc09iamVjdCgpKTsK
LSAgICAgICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjZWxs
KS0+cHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWVQdHIgcHJvdG90eXBlID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihjZWxsKS0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlmICghcHJvdG90eXBl
LT5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IGNlbGwgPSBwcm90b3R5cGUtPmFzQ2VsbCgpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSlNW
YWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoraW5saW5lIHZvaWQgSlNW
YWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKFVO
TElLRUxZKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZShhc1ZhbHVlKCkpKSkgewogICAgICAgICBK
U0ltbWVkaWF0ZTo6dG9PYmplY3QoYXNWYWx1ZSgpLCBleGVjKS0+cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpTVmFs
dWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMKICAgICBhc0NlbGwoKS0+cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1pbmxpbmUgdm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQoraW5saW5l
IHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmIChVTkxJS0VMWShKU0ltbWVkaWF0ZTo6aXNJ
bW1lZGlhdGUoYXNWYWx1ZSgpKSkpIHsKICAgICAgICAgSlNJbW1lZGlhdGU6OnRvT2JqZWN0KGFz
VmFsdWUoKSwgZXhlYyktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKQEAgLTUzOSw4
ICs1MzksOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmFsbG9jYXRlUHJvCiB7CiAg
ICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIAotICAgIEpTVmFsdWUqKiBvbGRQcm9wZXJ0
eVN0b3JhZ2UgPSBtX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBtX3Byb3BlcnR5U3RvcmFnZSA9IG5l
dyBKU1ZhbHVlKltuZXdTaXplXTsKKyAgICBKU1ZhbHVlUHRyKiBvbGRQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBtX3Byb3BlcnR5U3RvcmFnZSA9IG5ldyBKU1ZhbHVl
UHRyW25ld1NpemVdOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFNpemU7ICsr
aSkKICAgICAgICAgbV9wcm9wZXJ0eVN0b3JhZ2VbaV0gPSBvbGRQcm9wZXJ0eVN0b3JhZ2VbaV07
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDEzIEBA
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6On5KU1Byb3BlcnR5TmFtZUkKIHsKIH0KIAotSlNWYWx1
ZSogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKK0pTVmFsdWVQdHIgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QK
IHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbm9WYWx1ZSgpOwogfQog
Ci1ib29sIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmLCBKU1ZhbHVlKiYpCitib29sIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Omdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmLCBKU1ZhbHVlUHRyJikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24g
Mzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciA6IHB1YmxpYyBKU0NlbGwgewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlKik7CisgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CiAKICAgICAgICAgdmlydHVhbCB+SlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcigpOwogCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiwgSlNW
YWx1ZSomKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYsIEpTVmFsdWVQdHImKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTUzLDcgKzUzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAgICAg
ICBKU1ZhbHVlKiBuZXh0KEV4ZWNTdGF0ZSopOworICAgICAgICBKU1ZhbHVlUHRyIG5leHQoRXhl
Y1N0YXRlKik7CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgcHJpdmF0ZToKQEAg
LTgzLDcgKzgzLDcgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJvcGVydAog
ewogfQogCi1pbmxpbmUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdikKK2lubGluZSBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUHRyIHYpCiB7CiAgICAgaWYgKHYtPmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CkBAIC05
NCw3ICs5NCw3IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnQKICAg
ICByZXR1cm4gbmV3IChleGVjKSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKG8sIHByb3BlcnR5TmFt
ZXMucmVsZWFzZURhdGEoKSk7CiB9CiAKLWlubGluZSBKU1ZhbHVlKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpuZXh0KEV4ZWNTdGF0ZSogZXhlYykKK2lubGluZSBKU1ZhbHVlUHRyIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I6Om5leHQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChtX3Bvc2l0
aW9uID09IG1fZW5kKQogICAgICAgICByZXR1cm4gbm9WYWx1ZSgpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYw
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnRvVGhpc09iagogICAgIHJldHVybiBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKIH0KIAot
dm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKK3ZvaWQg
SlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKICAgICBp
ZiAoc3ltYm9sVGFibGVQdXQocHJvcGVydHlOYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsK
QEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoRXhlY1N0YXRl
KgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lkIEpTU3Rh
dGljU2NvcGVPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKIHsKICAgICBpZiAoc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgJKHJldmlzaW9uIDM5NjAzKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgfTsKICAgICAgICAg
CiAgICAgcHVibGljOgotICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQorICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLnN0
YXRpY1Njb3BlU3RydWN0dXJlLCBuZXcgSlNTdGF0aWNTY29wZU9iamVjdERhdGEoKSkKICAgICAg
ICAgewogICAgICAgICAgICAgZCgpLT5yZWdpc3RlclN0b3JlID0gdmFsdWU7CkBAIC01NSwxMCAr
NTUsMTAgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlz
T2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNW
YWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVz
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmli
dXRlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2b2lkIHB1dFdp
dGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsg
fQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlUHRyIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0RGF0YSogZCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PEpTU3RhdGljU2NvcGVPYmplY3REYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiAr
MzAsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUqIEpTU3RyaW5nOjp0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAorSlNWYWx1ZVB0
ciBKU1N0cmluZzo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU1N0cmluZyo+KHRoaXMpOwogfQog
Ci1ib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBu
dW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSkKK2Jvb2wgSlNTdHJpbmc6OmdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZVB0ciYgdmFsdWUpCiB7CiAgICAg
dmFsdWUgPSB0aGlzOwogICAgIG51bWJlciA9IG1fdmFsdWUudG9Eb3VibGUoKTsKQEAgLTkwLDcg
KzkwLDcgQEAgYm9vbCBKU1N0cmluZzo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBzbG90LnNldEJhc2UodGhpcyk7CiAgICAgSlNPYmplY3QqIG9i
amVjdDsKLSAgICBmb3IgKEpTVmFsdWUqIHByb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCk7ICFwcm90b3R5cGUtPmlzTnVsbCgpOyBwcm90b3R5
cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpKSB7CisgICAgZm9yIChKU1ZhbHVlUHRyIHByb3RvdHlw
ZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCk7ICFwcm90
b3R5cGUtPmlzTnVsbCgpOyBwcm90b3R5cGUgPSBvYmplY3QtPnByb3RvdHlwZSgpKSB7CiAgICAg
ICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgICAgIGlmIChvYmplY3QtPmdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAz
OTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5HZXRJ
bmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFs
dWUuc2l6ZSgpKTsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNHbG9iYWxEYXRhKiwg
dW5zaWduZWQpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90
bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIg
cHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhTdHJpbmdU
eXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVu
dW0gVlB0clN0ZWFsaW5nSGFja1R5cGUgeyBWUHRyU3RlYWxpbmdIYWNrIH07CkBAIC05OSw4ICs5
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4
ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpOworICAgICAgICB2aXJ0
dWFsIEpTVmFsdWVQdHIgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhl
Y1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImIHZhbHVlKTsKICAgICAgICAgdmly
dHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgSlNPYmpl
Y3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtMTE3LDkgKzExNyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBVU3RyaW5nIG1fdmFsdWU7CiAgICAgfTsKIAotICAgIEpTU3Ry
aW5nKiBhc1N0cmluZyhKU1ZhbHVlKik7CisgICAgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWVQ
dHIpOwogCi0gICAgaW5saW5lIEpTU3RyaW5nKiBhc1N0cmluZyhKU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBpbmxpbmUgSlNTdHJpbmcqIGFzU3RyaW5nKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoYXNDZWxsKHZhbHVlKS0+aXNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCh2YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIxICsyMCwyNSBAQAogICoKICAqLwogCisj
aW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBzaXplX3QKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwog
I2lmbmRlZiBKU1ZhbHVlX2gKICNkZWZpbmUgSlNWYWx1ZV9oCiAKICNpbmNsdWRlICJDYWxsRGF0
YS5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKLSNpbmNsdWRlICJKU0ltbWVkaWF0ZS5o
IgotI2luY2x1ZGUgIlVTdHJpbmcuaCIKLSNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gZm9yIHNpemVf
dAorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIElkZW50aWZpZXI7CisgICAgY2xhc3MgSlNDZWxsOworICAgIGNsYXNzIEpTT2JqZWN0
OwogICAgIGNsYXNzIEpTU3RyaW5nOwogICAgIGNsYXNzIFByb3BlcnR5U2xvdDsKICAgICBjbGFz
cyBQdXRQcm9wZXJ0eVNsb3Q7CisgICAgY2xhc3MgVVN0cmluZzsKIAogICAgIHN0cnVjdCBDbGFz
c0luZm87CiAgICAgc3RydWN0IEluc3RydWN0aW9uOwpAQCAtNzYsMTUgKzgwLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGdldFRydW5jYXRlZFVJbnQzMih1aW50MzJfdCYpIGNv
bnN0OwogICAgICAgICAKICAgICAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCi0gICAgICAgIEpT
VmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBO
b1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJl
bmNlKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWVQdHImKTsKIAogICAgICAgICBib29sIHRvQm9vbGVhbihF
eGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4
cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAg
ICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCiAgICAgICAgIGRvdWJsZSB0
b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogdG9KU051bWJlcihF
eGVjU3RhdGUqKSBjb25zdDsgLy8gRmFzdCBwYXRoIGZvciB3aGVuIHlvdSBleHBlY3QgdGhhdCB0
aGUgdmFsdWUgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAgSlNWYWx1ZVB0ciB0b0pT
TnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OyAvLyBGYXN0IHBhdGggZm9yIHdoZW4geW91IGV4cGVj
dCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgogCiAgICAgICAgIFVTdHJp
bmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTEwNSwxMiArMTA5LDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCiAgICAgICAgIC8vIE9iamVjdCBvcGVy
YXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCi0gICAgICAgIEpT
VmFsdWUqIGdldChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNv
bnN0OwotICAgICAgICBKU1ZhbHVlKiBnZXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSogZ2V0
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgICAgIEpTVmFs
dWUqIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
IGNvbnN0OwotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBw
dXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKik7CisgICAgICAg
IEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkgY29uc3Q7CisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgICAgIEpTVmFs
dWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAg
ICAgIEpTVmFsdWVQdHIgZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JikgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVB0cik7CiAgICAgICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCkBAIC0xMTksOSArMTIzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgdG9UaGlzU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICBKU1N0cmluZyogdG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKik7CiAKLSAg
ICAgICAgSlNWYWx1ZSogZ2V0SlNOdW1iZXIoKTsgLy8gMCBpZiB0aGlzIGlzIG5vdCBhIEpTTnVt
YmVyIG9yIG51bWJlciBvYmplY3QKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRKU051bWJlcigpOyAv
LyAwIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAogCi0gICAgICAg
IEpTVmFsdWUqIGFzVmFsdWUoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBhc1ZhbHVlKCkg
Y29uc3Q7CiAKICAgICAgICAgSlNDZWxsKiBhc0NlbGwoKSBjb25zdDsKIApAQCAtMTMyLDEwOCAr
MTM2LDg4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MzJfdCB0b1VJbnQzMlNsb3dD
YXNlKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKICAgICB9OwogCi0gICAgLy8gVGhlc2Ug
YXJlIGlkZW50aWNhbCBsb2dpYyB0byB0aGUgSlNWYWx1ZSBmdW5jdGlvbnMgYWJvdmUsIGFuZCBm
YXN0ZXIgdGhhbiBqc051bWJlcihudW1iZXIpLT50b0ludDMyKCkuCi0gICAgaW50MzJfdCB0b0lu
dDMyKGRvdWJsZSk7Ci0gICAgdWludDMyX3QgdG9VSW50MzIoZG91YmxlKTsKLSAgICBpbnQzMl90
IHRvSW50MzJTbG93Q2FzZShkb3VibGUsIGJvb2wmIG9rKTsKLSAgICB1aW50MzJfdCB0b1VJbnQz
MlNsb3dDYXNlKGRvdWJsZSwgYm9vbCYgb2spOworICAgIGNsYXNzIEpTSW1tZWRpYXRlOworICAg
IGNsYXNzIEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyOwogCi0gICAgaW5saW5lIEpTVmFsdWUqIEpT
VmFsdWU6OmFzVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNWYWx1ZSo+KHRoaXMpOwotICAgIH0KKyAgICBjbGFzcyBKU1ZhbHVlUHRyIHsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTSW1tZWRpYXRlOwogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNV
bmRlZmluZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgc3RhdGljIEpTVmFsdWVQdHIgbWFrZUltbWVkaWF0
ZShpbnRwdHJfdCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVQ
dHIocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgfQogCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhc1ZhbHVlKCkgPT0ganNOdWxsKCk7Ci0gICAgfQorICAgICAgICBpbnRwdHJfdCBpbW1lZGlh
dGVWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX3B0cik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHVibGljOgorICAg
ICAgICBKU1ZhbHVlUHRyKCkKKyAgICAgICAgICAgIDogbV9wdHIoMCkKKyAgICAgICAgeworICAg
ICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gSlNJbW1lZGlhdGU6OmlzVW5kZWZpbmVkT3JOdWxs
KGFzVmFsdWUoKSk7Ci0gICAgfQorICAgICAgICBKU1ZhbHVlUHRyKEpTVmFsdWUqIHB0cikKKyAg
ICAgICAgICAgIDogbV9wdHIocHRyKQorICAgICAgICB7CisgICAgICAgIH0KIAotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
SlNJbW1lZGlhdGU6OmlzQm9vbGVhbihhc1ZhbHVlKCkpOwotICAgIH0KKyAgICAgICAgSlNWYWx1
ZVB0cihjb25zdCBKU1ZhbHVlKiBwdHIpCisgICAgICAgICAgICA6IG1fcHRyKGNvbnN0X2Nhc3Q8
SlNWYWx1ZSo+KHB0cikpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6Z2V0Qm9vbGVhbihib29sJiB2KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKEpT
SW1tZWRpYXRlOjppc0Jvb2xlYW4oYXNWYWx1ZSgpKSkgewotICAgICAgICAgICAgdiA9IEpTSW1t
ZWRpYXRlOjp0b0Jvb2xlYW4oYXNWYWx1ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBKU1ZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcHRyOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0Qm9vbGVhbigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzQm9vbGVhbih0cnVlKTsKLSAg
ICB9CisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9wdHI7CisgICAgICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
U1ZhbHVlOjp0b0ludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlu
dDMyX3QgaTsKLSAgICAgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKQotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nh
c2UoZXhlYywgb2spOwotICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFs
dWVQdHIgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3B0ciA9
PSBvdGhlci5tX3B0cjsKKyAgICAgICAgfQogCi0gICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6
OnRvVUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90
IGk7Ci0gICAgICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpCi0gICAgICAgICAgICByZXR1
cm4gaTsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgcmV0dXJuIHRvVUludDMyU2xvd0Nhc2Uo
ZXhlYywgb2spOwotICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWVQ
dHIgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3B0ciAhPSBv
dGhlci5tX3B0cjsKKyAgICAgICAgfQogCi0gICAgaW5saW5lIGludDMyX3QgdG9JbnQzMihkb3Vi
bGUgdmFsKQotICAgIHsKLSAgICAgICAgaWYgKCEodmFsID49IC0yMTQ3NDgzNjQ4LjAgJiYgdmFs
IDwgMjE0NzQ4MzY0OC4wKSkgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MzJTbG93Q2FzZSh2YWwsIGlnbm9yZWQpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZUVuY29kZWRBc1BvaW50ZXIqIGVuY29kZShKU1ZhbHVlUHRyIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlRW5jb2RlZEFz
UG9pbnRlcio+KHZhbHVlLm1fcHRyKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odmFsKTsKLSAgICB9CiAKLSAgICBpbmxpbmUgdWludDMyX3QgdG9VSW50
MzIoZG91YmxlIHZhbCkKLSAgICB7Ci0gICAgICAgIGlmICghKHZhbCA+PSAwLjAgJiYgdmFsIDwg
NDI5NDk2NzI5Ni4wKSkgewotICAgICAgICAgICAgYm9vbCBpZ25vcmVkOwotICAgICAgICAgICAg
cmV0dXJuIHRvVUludDMyU2xvd0Nhc2UodmFsLCBpZ25vcmVkKTsKKyAgICAgICAgc3RhdGljIEpT
VmFsdWVQdHIgZGVjb2RlKEpTVmFsdWVFbmNvZGVkQXNQb2ludGVyKiBwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+
KHB0cikpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dmFsKTsKLSAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4ZWNT
dGF0ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNWYWx1
ZSogbV9wdHI7CisgICAgfTsKKworICAgIGlubGluZSBKU1ZhbHVlUHRyIEpTVmFsdWU6OmFzVmFs
dWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgaW50MzJfdCBpOwotICAgICAgICBpZiAoZ2V0VHJ1
bmNhdGVkSW50MzIoaSkpIHsKLSAgICAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgIHJl
dHVybiBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDMyU2xvd0Nhc2UoZXhlYywg
b2spOworICAgICAgICByZXR1cm4gSlNWYWx1ZVB0cih0aGlzKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIoRXhlY1N0YXRlKiBleGVjLCBib29sJiBvaykg
Y29uc3QKKyAgICBpbmxpbmUgSlNWYWx1ZVB0ciBub1ZhbHVlKCkKICAgICB7Ci0gICAgICAgIHVp
bnQzMl90IGk7Ci0gICAgICAgIGlmIChnZXRUcnVuY2F0ZWRVSW50MzIoaSkpIHsKLSAgICAgICAg
ICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b1VJbnQzMlNsb3dDYXNlKGV4ZWMsIG9rKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWVQdHIoKTsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFs
dWVQdHIgYSwgY29uc3QgSlNWYWx1ZSogYikgeyByZXR1cm4gYSA9PSBKU1ZhbHVlUHRyKGIpOyB9
CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlKiBhLCBjb25zdCBKU1Zh
bHVlUHRyIGIpIHsgcmV0dXJuIEpTVmFsdWVQdHIoYSkgPT0gYjsgfQorCisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIGEsIGNvbnN0IEpTVmFsdWUqIGIpIHsgcmV0
dXJuIGEgIT0gSlNWYWx1ZVB0cihiKTsgfQorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgSlNWYWx1ZSogYSwgY29uc3QgSlNWYWx1ZVB0ciBiKSB7IHJldHVybiBKU1ZhbHVlUHRyKGEp
ICE9IGI7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlX2gKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAz
OTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKmQtPnN5
bWJvbFRhYmxlOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRl
cykgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpID0g
MDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwpAQCAtOTAsOCArOTAsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKLSAgICAgICAg
Ym9vbCBzeW1ib2xUYWJsZVB1dChjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSopOwotICAgICAg
ICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1
dChjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0cik7CisgICAgICAgIGJvb2wgc3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERhdGEqIGQ7CiAgICAg
fTsKQEAgLTExNyw3ICsxMTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRh
YmxlUHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCisg
ICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXQoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpo
ZWFwKHRoaXMpKTsKIApAQCAtMTMwLDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0
OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgaW5saW5lIGJv
b2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6
OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMg
KzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmpl
Y3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgSlNWYWx1
ZSogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxWYWx1ZTsgfQotICAg
ICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSopOworICAgICAgICBKU1ZhbHVlUHRy
IGludGVybmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsVmFsdWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVlKEpTVmFsdWVQdHIpOwogICAgICAgICAKICAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNW
YWx1ZSogbV9pbnRlcm5hbFZhbHVlOworICAgICAgICBKU1ZhbHVlUHRyIG1faW50ZXJuYWxWYWx1
ZTsKICAgICB9OwogICAgIAogICAgIGlubGluZSBKU1dyYXBwZXJPYmplY3Q6OkpTV3JhcHBlck9i
amVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQpAQCAtNDgsNyArNDgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAotICAgIGlubGluZSB2b2lkIEpTV3Jh
cHBlck9iamVjdDo6c2V0SW50ZXJuYWxWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUg
dm9pZCBKU1dyYXBwZXJPYmplY3Q6OnNldEludGVybmFsVmFsdWUoSlNWYWx1ZVB0ciB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFsdWUtPmlz
T2JqZWN0KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gMzk2
MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBIYXNoVGFibGU6OmRlbGV0ZVRhYmxlKCkgY29uc3QKIHZv
aWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBIYXNoRW50
cnkqIGVudHJ5LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKGVudHJ5LT5hdHRyaWJ1dGVz
KCkgJiBGdW5jdGlvbik7Ci0gICAgSlNWYWx1ZSoqIGxvY2F0aW9uID0gdGhpc09iai0+Z2V0RGly
ZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlUHRyKiBsb2NhdGlvbiA9IHRo
aXNPYmotPmdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSk7CiAKICAgICBpZiAoIWxvY2F0
aW9uKSB7CiAgICAgICAgIFByb3RvdHlwZUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoZXhlYykg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5
TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShy
ZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAg
IC8vIEZJWE1FOiBUaGVyZSBpcyBubyByZWFzb24gdGhpcyBnZXQgZnVuY3Rpb24gY2FuJ3QgYmUg
c2ltcGxlci4KLSAgICAvLyBpZS4gdHlwZWRlZiBKU1ZhbHVlKiAoKkdldEZ1bmN0aW9uKShFeGVj
U3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCkKKyAgICAvLyBpZS4gdHlwZWRlZiBKU1ZhbHVl
UHRyICgqR2V0RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0KQogICAg
IHR5cGVkZWYgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgR2V0RnVuY3Rpb247Ci0gICAgdHlw
ZWRlZiB2b2lkICgqUHV0RnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBKU1ZhbHVlKiB2YWx1ZSk7CisgICAgdHlwZWRlZiB2b2lkICgqUHV0RnVuY3Rpb24pKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKTsKIAogICAgIGNs
YXNzIEhhc2hFbnRyeSB7CiAgICAgcHVibGljOgpAQCAtMjQzLDcgKzI0Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAqIGlzIGZvdW5kIGl0IHNldHMgdGhlIHZhbHVlIGFuZCByZXR1cm5zIHRy
dWUsIGVsc2UgaXQgcmV0dXJucyBmYWxzZS4KICAgICAgKi8KICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VGhpc0ltcD4KLSAgICBpbmxpbmUgYm9vbCBsb29rdXBQdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBjb25zdCBIYXNoVGFi
bGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqKQorICAgIGlubGluZSBib29sIGxvb2t1cFB1dChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0
ciB2YWx1ZSwgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgVGhpc0ltcCogdGhpc09iaikKICAgICB7
CiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+ZW50cnkoZXhlYywgcHJv
cGVydHlOYW1lKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAq
IHRoZW4gaXQgY2FsbHMgcHV0KCkgb24gdGhlIFBhcmVudEltcCBjbGFzcy4KICAgICAgKi8KICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICAgIGlubGluZSB2
b2lkIGxvb2t1cFB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRo
aXNPYmosIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICBpbmxpbmUgdm9pZCBsb29rdXBQdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUsIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIFRoaXNJbXAqIHRoaXNPYmosIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CiAgICAgICAgIGlmICghbG9va3VwUHV0PFRoaXNJbXA+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHRhYmxlLCB0aGlzT2JqKSkKICAgICAgICAgICAg
IHRoaXNPYmotPlBhcmVudEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OyAvLyBub3QgZm91bmQ6IGZvcndhcmQgdG8gcGFyZW50CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjQgKzMyLDI0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE1hdGhPYmplY3QpOwog
Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVu
Y0FDb3MoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
QVRhbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0FUYW4yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5j
Q2VpbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0NvcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4
cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTG9n
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWF4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWluKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTaW4oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpT
VmFsdWUqIG1hdGhQcm90b0Z1bmNTcXJ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSos
IGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIG1hdGhQcm90b0Z1bmNBYnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQUNvcyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVu
Y0FUYW4oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7
CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRo
UHJvdG9GdW5jQ2VpbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBtYXRoUHJvdG9GdW5jRXhwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0Zsb29yKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgbWF0aFByb3RvRnVuY0xvZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNNYXgo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0
aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbWF0aFByb3RvRnVu
Y1BvdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRo
UHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jVGFuKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9CiAKQEAg
LTExMyw1NyArMTEzLDU3IEBAIGJvb2wgTWF0aE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQWJzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY0FicyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgZmFicyhhcmdzLmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1Zh
bHVlKiBtYXRoUHJvdG9GdW5jQUNvcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNBQ29zKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBhY29zKGFyZ3MuYXQoZXhlYywgMCktPnRv
TnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNBU2luKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgbWF0aFByb3RvRnVuY0FTaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGFzaW4oYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSog
bWF0aFByb3RvRnVuY0FUYW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQVRhbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXRhbihhcmdzLmF0KGV4ZWMsIDApLT50b051bWJl
cihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBtYXRoUHJvdG9GdW5jQVRhbjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGF0
YW4yKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpLCBhcmdzLmF0KGV4ZWMsIDEpLT50
b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jQ2VpbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIG1hdGhQcm90b0Z1bmNDZWlsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVj
LCBjZWlsKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUq
IG1hdGhQcm90b0Z1bmNDb3MoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jQ29zKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBjb3MoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIo
ZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY0V4cChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1h
dGhQcm90b0Z1bmNFeHAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGV4cChhcmdz
LmF0KGV4ZWMsIDApLT50b051bWJlcihleGVjKSkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jRmxvb3IoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIGZsb29yKGFyZ3MuYXQoZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMp
KSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNMb2coRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJv
dG9GdW5jTG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihleGVjLCBsb2coYXJncy5hdChl
eGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogbWF0aFByb3RvRnVuY01h
eChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNNYXgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgdW5zaWduZWQgYXJn
c0NvdW50ID0gYXJncy5zaXplKCk7CiAgICAgZG91YmxlIHJlc3VsdCA9IC1JbmY7CkBAIC0xNzks
NyArMTc5LDcgQEAgSlNWYWx1ZSogbWF0aFByb3RvRnVuY01heChFeGVjU3RhdGUqIGV4ZQogICAg
IHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9G
dW5jTWluKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICB1bnNpZ25l
ZCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gK0luZjsKQEAg
LTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhl
CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQ
cm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8v
IEVDTUEgMTUuOC4yLjEuMTMKIApAQCAtMjA5LDEyICsyMDksMTIgQEAgSlNWYWx1ZSogbWF0aFBy
b3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCBwb3co
YXJnLCBhcmcyKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIg
bWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIFdURjo6cmFu
ZG9tTnVtYmVyKCkpOwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBtYXRoUHJvdG9GdW5jUm91bmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgZG91YmxlIGFyZyA9IGFyZ3MuYXQo
ZXhlYywgMCktPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChzaWduYml0KGFyZykgJiYgYXJnID49
IC0wLjUpCkBAIC0yMjIsMTcgKzIyMiwxNyBAQCBKU1ZhbHVlKiBtYXRoUHJvdG9GdW5jUm91bmQo
RXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGZsb29yKGFyZyArIDAuNSkp
OwogfQogCi1KU1ZhbHVlKiBtYXRoUHJvdG9GdW5jU2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbWF0aFByb3Rv
RnVuY1NpbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2luKGFyZ3MuYXQoZXhl
YywgMCktPnRvTnVtYmVyKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIG1hdGhQcm90b0Z1bmNTcXJ0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgbWF0aFByb3RvRnVuY1NxcnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIHNxcnQoYXJncy5hdChleGVjLCAwKS0+dG9OdW1iZXIoZXhlYykpKTsKIH0KIAot
SlNWYWx1ZSogbWF0aFByb3RvRnVuY1RhbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG1hdGhQcm90b0Z1bmNUYW4o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHRhbihhcmdzLmF0KGV4ZWMsIDApLT50
b051bWJlcihleGVjKSkpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJ
KHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90
eXBlKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAg
ICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
YXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBDb25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdlCiAgICAgcmV0dXJuIENv
bnN0cnVjdFR5cGVIb3N0OwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2FsbE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUVycm9yQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPmNvbnN0cnVjdChleGVjLCBhcmdz
KTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTnVtYmVyQ29uc3RydWN0b3IpOwog
Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JOYU5WYWx1ZShFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
bnVtYmVyQ29uc3RydWN0b3JOZWdJbmZpbml0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0
b3JQb3NJbmZpbml0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1ZShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMg
SlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JNaW5WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJD
b25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlckNvbnN0cnVjdG9yTmVnSW5m
aW5pdHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0eShFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNW
YWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51bWJlckNv
bnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApAQCAtNjgsMjcgKzY4LDI3IEBA
IGJvb2wgTnVtYmVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVTbG90PE51bWJlckNvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1bmN0aW9uPihleGVj
LCBFeGVjU3RhdGU6Om51bWJlclRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi1KU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3Rvck5hTlZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRyIG51
bWJlckNvbnN0cnVjdG9yTmFOVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiB9CiAK
LUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yTmVnSW5maW5pdHkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbnVtYmVy
Q29uc3RydWN0b3JOZWdJbmZpbml0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJlckNlbGwoZXhlYywg
LUluZik7CiB9CiAKLUpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yUG9zSW5maW5pdHkoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFs
dWVQdHIgbnVtYmVyQ29uc3RydWN0b3JQb3NJbmZpbml0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJl
ckNlbGwoZXhlYywgSW5mKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyQ29uc3RydWN0b3JNYXhWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KQorSlNWYWx1ZVB0ciBudW1iZXJDb25zdHJ1Y3Rvck1heFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCiB7CiAgICAgcmV0dXJuIGpz
TnVtYmVyQ2VsbChleGVjLCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCk7CiB9CiAKLUpTVmFsdWUq
IG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbnVtYmVyQ29uc3RydWN0b3JN
aW5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKQogewogICAgIHJldHVybiBqc051bWJlckNlbGwoZXhlYywgNUUtMzI0KTsKIH0KQEAg
LTEwOSw3ICsxMDksNyBAQCBDb25zdHJ1Y3RUeXBlIE51bWJlckNvbnN0cnVjdG9yOjpnZXRDb25z
CiB9CiAKIC8vIEVDTUEgMTUuNy4yCi1zdGF0aWMgSlNWYWx1ZSogY2FsbE51bWJlckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgYXJncy5pc0VtcHR5KCkgPyAwIDogYXJncy5hdChleGVj
LCAwKS0+dG9OdW1iZXIoZXhlYykpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBOdW1iZXJQcm90b3R5cGUqKTsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvKSAKICAg
ICAgICAgeyAKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAogICAgICAgICB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYw
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdChQYXNzUmVm
UHRyPFN0CiB7CiB9CiAKLUpTVmFsdWUqIE51bWJlck9iamVjdDo6Z2V0SlNOdW1iZXIoKQorSlNW
YWx1ZVB0ciBOdW1iZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKIHsKICAgICByZXR1cm4gaW50ZXJu
YWxWYWx1ZSgpOwogfQpAQCAtNDgsNyArNDgsNyBAQCBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51
bWJlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotTnVtYmVyT2JqZWN0KiBj
b25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsdWUpCitOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlckZyb21JbW1lZGlhdGVOdW1i
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIE51bWJlck9iamVj
dCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqZWN0LT5zZXRJbnRlcm5h
bFZhbHVlKHZhbHVlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAko
cmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKLSAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRKU051
bWJlcigpOworICAgICAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZ2V0SlNOdW1iZXIoKTsKICAgICB9
OwogCiAgICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiwgSlNOdW1i
ZXJDZWxsKik7Ci0gICAgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXJGcm9tSW1tZWRpYXRl
TnVtYmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUqKTsKKyAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVj
dE51bWJlckZyb21JbW1lZGlhdGVOdW1iZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0cik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE51bWJlclByb3RvdHlw
ZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclBy
b3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9u
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRp
YyBKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgbnVtYmVy
UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNWYWx1
ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG51
bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNU
b1ByZWNpc2lvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKIAogLy8gRUNNQSAxNS43LjQKIApAQCAtMTMzLDkgKzEzMyw5IEBAIHN0YXRpYyBkb3Vi
bGUgaW50UG93MTAoaW50IGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0
KTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpT
VmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0g
dGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIApAQCAtMTk3LDMzICsxOTcsMzMgQEAgSlNWYWx1
ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YQogICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBzdGFydE9mUmVzdWx0U3RyaW5nKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAK
LSAgICBKU1ZhbHVlKiB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigpOworICAgIEpTVmFsdWVQ
dHIgdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKICAgICBpZiAoIXYpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgdi0+dG9TdHJpbmcoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNW
YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7Ci0gICAgSlNWYWx1ZSogdiA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBKU1Zh
bHVlUHRyIHYgPSB0aGlzVmFsdWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgcmV0dXJuIHY7CiB9
CiAKLUpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSog
diA9IHRoaXNWYWx1ZS0+Z2V0SlNOdW1iZXIoKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSB0aGlzVmFs
dWUtPmdldEpTTnVtYmVyKCk7CiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgSlNWYWx1ZSogZnJhY3Rpb25EaWdpdHMgPSBhcmdz
LmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZnJhY3Rpb25EaWdpdHMgPSBhcmdzLmF0KGV4
ZWMsIDApOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7
CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3VtZW50IG11c3QgYmUg
YmV0d2VlbiAwIGFuZCAyMCIpOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHN0YXRpYyB2b2lkIGV4cG9u
ZW50aWFsUGFydFRvU3RyaW5nKGNoYXIKICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+
KCcwJyArIGV4cG9uZW50aWFsICUgMTApOwogfQogCi1KU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNU
b0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG51bWJlclByb3RvRnVuY1RvRXhw
b25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdl
dEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigp
OwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIApAQCAtMzEzLDcgKzMxMyw3IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRXhwb25l
bnRpYWwoRXgKICAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCiAgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBVU3RyaW5nOjpmcm9tKHgpKTsKIAotICAgIEpTVmFsdWUqIGZyYWN0aW9u
YWxEaWdpdHNWYWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBmcmFjdGlv
bmFsRGlnaXRzVmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0
aW9uYWxEaWdpdHNWYWx1ZS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICghKGRmID49IDAgJiYg
ZGYgPD0gMjApKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAi
dG9FeHBvbmVudGlhbCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOwpAQCAtMzcy
LDkgKzM3Miw5IEBAIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXgKICAg
ICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAotSlNWYWx1ZSogbnVtYmVyUHJvdG9G
dW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgbnVtYmVyUHJvdG9GdW5jVG9Q
cmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIHYgPSB0aGlzVmFsdWUtPmdl
dEpTTnVtYmVyKCk7CisgICAgSlNWYWx1ZVB0ciB2ID0gdGhpc1ZhbHVlLT5nZXRKU051bWJlcigp
OwogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgT2JqZWN0Q29uc3Ry
dWN0b3I6Ok9iamVjdENvbnN0cnVjdG9yKEV4ZQogLy8gRUNNQSAxNS4yLjIKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3RPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGFyZyA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciBhcmcgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChhcmctPmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTT2JqZWN0KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAg
cmV0dXJuIGFyZy0+dG9PYmplY3QoZXhlYyk7CkBAIC01OCw3ICs1OCw3IEBAIENvbnN0cnVjdFR5
cGUgT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnMKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhv
c3Q7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IEpTVmFsdWVQdHIgY2FsbE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBjb25z
dHJ1Y3RPYmplY3QoZXhlYywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE9iamVj
dFByb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJv
dG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIG9iamVjdFBy
b3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSog
b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKiwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpT
VmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVj
dFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0RlZmlu
ZVNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIG9iamVjdFBy
b3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CiAKIE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0dWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3R1Y3R1cmUpCkBAIC02MCwzNSAr
NjAsMzUgQEAgT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YQogCiAvLyBF
Q01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40LjUsIDE1LjIuNC43CiAKLUpTVmFsdWUqIG9i
amVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY1Zh
bHVlT2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhl
Yyk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNWYWx1ZS0+dG9UaGlzT2JqZWN0KGV4ZWMp
LT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkt
PnRvU3RyaW5nKGV4ZWMpKSkpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNJc1Byb3Rv
dHlwZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBl
T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLT50
b1RoaXNPYmplY3QoZXhlYyk7CiAKICAgICBpZiAoIWFyZ3MuYXQoZXhlYywgMCktPmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogCi0gICAgSlNWYWx1ZSogdiA9
IGFzT2JqZWN0KGFyZ3MuYXQoZXhlYywgMCkpLT5wcm90b3R5cGUoKTsKKyAgICBKU1ZhbHVlUHRy
IHYgPSBhc09iamVjdChhcmdzLmF0KGV4ZWMsIDApKS0+cHJvdG90eXBlKCk7CiAKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1
cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgaWYgKHRoaXNPYmogPT0gdikLCisgICAgICAg
IGlmICh2ID09IHRoaXNPYmopCwogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsK
ICAgICAgICAgdiA9IGFzT2JqZWN0KHYpLT5wcm90b3R5cGUoKTsKICAgICB9CiB9CiAKLUpTVmFs
dWUqIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBv
YmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSkgPT0gQ2FsbFR5cGVOb25lKQpAQCAtOTcsNyArOTcsNyBAQCBKU1ZhbHVlKiBvYmplY3RQcm90
b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5nZXRDYWxsRGF0YShjYWxs
RGF0YSkgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMTA2LDI3ICsxMDYsMjcgQEAgSlNWYWx1ZSogb2Jq
ZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEV4ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICByZXR1cm4gdGhpc1ZhbHVlLT50b1RoaXNPYmplY3QoZXhlYyktPmxvb2t1cEdldHRlcihleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpKSk7CiB9
CiAKLUpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IHJldHVybiB0aGlzVmFsdWUtPnRvVGhpc09iamVjdChleGVjKS0+bG9va3VwU2V0dGVyKGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0K
IAotSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc1ZhbHVlLT50b1RoaXNPYmplY3Qo
ZXhlYyktPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXJncy5h
dChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKSk7CiB9CiAKLUpTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNUb0xv
Y2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIHJldHVybiB0aGlzVmFsdWUtPnRvVGhpc0pTU3Ry
aW5nKGV4ZWMpOwogfQogCi1KU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikK
K0pTVmFsdWVQdHIgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJbb2JqZWN0ICIgKyB0aGlzVmFsdWUtPnRvVGhp
c09iamVjdChleGVjKS0+Y2xhc3NOYW1lKCkgKyAiXSIpOwogfQpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3Rh
dGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25T
dHJ1Y3R1cmUpOwogICAgIH07CiAKLSAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CisgICAg
SlNWYWx1ZVB0ciBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMzk2MDMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gRUNNQSAxMS45LjMKLWJvb2wg
ZXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCitib29sIGVx
dWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAg
ICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCiAgICAg
ICAgIHJldHVybiB2MSA9PSB2MjsKQEAgLTQ0LDEyICs0NCwxMiBAQCBib29sIGVxdWFsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdjEsCiAgICAgcmV0dXJuIGVxdWFsU2xvd0Nhc2VJbmxpbmUo
ZXhlYywgdjEsIHYyKTsKIH0KIAotYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB2MSwgSlNWYWx1ZVB0ciB2MikKIHsKICAgICByZXR1cm4gZXF1YWxT
bG93Q2FzZUlubGluZShleGVjLCB2MSwgdjIpOwogfQogCi1ib29sIHN0cmljdEVxdWFsKEpTVmFs
dWUqIHYxLCBKU1ZhbHVlKiB2MikKK2Jvb2wgc3RyaWN0RXF1YWwoSlNWYWx1ZVB0ciB2MSwgSlNW
YWx1ZVB0ciB2MikKIHsKICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUodjEs
IHYyKSkKICAgICAgICAgcmV0dXJuIHYxID09IHYyOwpAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wg
c3RyaWN0RXF1YWwoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYKICAgICByZXR1cm4gc3RyaWN0RXF1
YWxTbG93Q2FzZUlubGluZSh2MSwgdjIpOwogfQogCi1ib29sIHN0cmljdEVxdWFsU2xvd0Nhc2Uo
SlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlKEpTVmFs
dWVQdHIgdjEsIEpTVmFsdWVQdHIgdjIpCiB7CiAgICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nh
c2VJbmxpbmUodjEsIHYyKTsKIH0KIAotTkVWRVJfSU5MSU5FIEpTVmFsdWUqIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCitORVZFUl9JTkxJTkUgSlNWYWx1ZVB0ciB0aHJv
d091dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBlcnJv
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAiT3V0IG9mIG1lbW9yeSIpOwog
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogICAvLyBFQ01BIDExLjkuMwotICBib29sIGVxdWFsKEV4ZWNTdGF0ZSosIEpTVmFs
dWUqLCBKU1ZhbHVlKik7Ci0gIGJvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqLCBKU1ZhbHVl
KiwgSlNWYWx1ZSopOworICBib29sIGVxdWFsKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIsIEpTVmFs
dWVQdHIpOworICBib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciwgSlNW
YWx1ZVB0cik7CiAKLSAgQUxXQVlTX0lOTElORSBib29sIGVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCisgIEFMV0FZU19JTkxJTkUg
Ym9vbCBlcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2MSwg
SlNWYWx1ZVB0ciB2MikKICAgewogICAgICAgQVNTRVJUKCFKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZU51bWJlcnModjEsIHYyKSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgaWYgKHYxLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICAgIGlmICh2
Mi0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKLSAgICAg
ICAgICAgICAgSlNWYWx1ZSogcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7CisgICAgICAgICAg
ICAgIEpTVmFsdWVQdHIgcDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyk7CiAgICAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgdjEgPSBwMTsKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKHYyLT5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgIEpTVmFsdWUqIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICAg
ICAgICBKU1ZhbHVlUHRyIHAyID0gdjItPnRvUHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgIHYyID0gcDI7CkBAIC0xMDAsMTAgKzEwMCwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgfQogCiAKLSAgYm9vbCBzdHJpY3RFcXVhbChKU1ZhbHVlKiwgSlNWYWx1ZSop
OwotICBib29sIHN0cmljdEVxdWFsU2xvd0Nhc2UoSlNWYWx1ZSosIEpTVmFsdWUqKTsKKyAgYm9v
bCBzdHJpY3RFcXVhbChKU1ZhbHVlUHRyLCBKU1ZhbHVlUHRyKTsKKyAgYm9vbCBzdHJpY3RFcXVh
bFNsb3dDYXNlKEpTVmFsdWVQdHIsIEpTVmFsdWVQdHIpOwogCi0gIGlubGluZSBib29sIHN0cmlj
dEVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNWYWx1ZSogdjEsIEpTVmFsdWUqIHYyKQorICBpbmxpbmUg
Ym9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKEpTVmFsdWVQdHIgdjEsIEpTVmFsdWVQdHIg
djIpCiAgIHsKICAgICAgIEFTU0VSVCghSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGUodjEs
IHYyKSk7CiAgICAgICAKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
IHJldHVybiB2MSA9PSB2MjsKICAgfQogCi0gIEpTVmFsdWUqIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihFeGVjU3RhdGUqKTsKKyAgSlNWYWx1ZVB0ciB0aHJvd091dE9mTWVtb3J5RXJyb3IoRXhlY1N0
YXRlKik7CiB9CiAKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLUpTVmFsdWUqIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZVB0ciBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBQcmV2
ZW50IGdldHRlciBmdW5jdGlvbnMgZnJvbSBvYnNlcnZpbmcgZXhlY3V0aW9uIGlmIGFuIGV4Y2Vw
dGlvbiBpcyBwZW5kaW5nLgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw3IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIkpTSW1tZWRpYXRlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgpAQCAtNDQs
MTYgKzQ1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZXhwbGljaXQgUHJvcGVydHlTbG90KGNvbnN0IEpTVmFsdWUq
IGJhc2UpCi0gICAgICAgICAgICA6IG1fc2xvdEJhc2UoY29uc3RfY2FzdDxKU1ZhbHVlKj4oYmFz
ZSkpCisgICAgICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChjb25zdCBKU1ZhbHVlUHRyIGJhc2Up
CisgICAgICAgICAgICA6IG1fc2xvdEJhc2UoYmFzZSkKICAgICAgICAgICAgICwgbV9vZmZzZXQo
V1RGOjpub3RGb3VuZCkKICAgICAgICAgewogICAgICAgICAgICAgY2xlYXJWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdHlwZWRlZiBKU1ZhbHVlKiAoKkdldFZhbHVlRnVuYykoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICB0
eXBlZGVmIEpTVmFsdWVQdHIgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QK
KyAgICAgICAgSlNWYWx1ZVB0ciBnZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1f
Z2V0VmFsdWUgPT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgICAgIHJldHVy
biAqbV9kYXRhLnZhbHVlU2xvdDsKQEAgLTYyLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUsICp0aGlzKTsK
ICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorICAgICAgICBKU1ZhbHVlUHRyIGdldFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBKU0NfVkFMVUVfU0xPVF9NQVJLRVIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwpAQCAtNzgsMTcgKzc5LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCBwdXRWYWx1ZShKU1ZhbHVlKiB2YWx1ZSkKKyAgICAgICAgdm9p
ZCBwdXRWYWx1ZShKU1ZhbHVlUHRyIHZhbHVlKQogICAgICAgICB7IAogICAgICAgICAgICAgaWYg
KG1fZ2V0VmFsdWUgPT0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSKSB7CiAgICAgICAgICAgICAgICAg
Km1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQobV9nZXRWYWx1ZSA9PSBKU0NfUkVHSVNURVJf
U0xPVF9NQVJLRVIpOwotICAgICAgICAgICAgKm1fZGF0YS5yZWdpc3RlclNsb3QgPSB2YWx1ZTsK
KyAgICAgICAgICAgICptX2RhdGEucmVnaXN0ZXJTbG90ID0gSlNWYWx1ZVB0cih2YWx1ZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1ZhbHVlKiogdmFsdWVTbG90
KSAKKyAgICAgICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNWYWx1ZVB0ciogdmFsdWVTbG90KSAKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHZhbHVlU2xvdCk7CiAgICAgICAgICAgICBtX2dl
dFZhbHVlID0gSlNDX1ZBTFVFX1NMT1RfTUFSS0VSOwpAQCAtOTYsNyArOTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqIHNsb3RC
YXNlLCBKU1ZhbHVlKiogdmFsdWVTbG90KQorICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChKU1Zh
bHVlUHRyIHNsb3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICAgICAgbV9nZXRWYWx1ZSA9IEpTQ19W
QUxVRV9TTE9UX01BUktFUjsKQEAgLTEwNCw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIHZvaWQgc2V0VmFsdWVTbG90KEpTVmFsdWUqIHNsb3RCYXNlLCBKU1ZhbHVl
KiogdmFsdWVTbG90LCBzaXplX3Qgb2Zmc2V0KQorICAgICAgICB2b2lkIHNldFZhbHVlU2xvdChK
U1ZhbHVlUHRyIHNsb3RCYXNlLCBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3QsIHNpemVfdCBvZmZzZXQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZVNsb3QpOwogICAgICAgICAgICAg
bV9nZXRWYWx1ZSA9IEpTQ19WQUxVRV9TTE9UX01BUktFUjsKQEAgLTExMyw3ICsxMTQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFZhbHVlKEpTVmFsdWUqIHZhbHVlKQorICAgICAg
ICB2b2lkIHNldFZhbHVlKEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBtX2dldFZhbHVlID0gSlNDX1ZBTFVFX1NMT1Rf
TUFSS0VSOwpAQCAtMTMwLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
bV9kYXRhLnJlZ2lzdGVyU2xvdCA9IHJlZ2lzdGVyU2xvdDsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWUqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUp
CisgICAgICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFsdWVQdHIgc2xvdEJhc2UsIEdldFZhbHVlRnVu
YyBnZXRWYWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAg
ICAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CkBAIC0xMzgsNyArMTM5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIHNldEN1c3RvbUluZGV4KEpTVmFsdWUqIHNsb3RCYXNlLCB1bnNpZ25lZCBp
bmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgICAgICB2b2lkIHNldEN1c3RvbUluZGV4
KEpTVmFsdWVQdHIgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgICAg
ICBBU1NFUlQoZ2V0VmFsdWUpOwpAQCAtMTYwLDEzICsxNjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBzZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEpTVmFsdWUqIHNsb3RCYXNlKCkgY29uc3QKKyAgICAgICAgSlNWYWx1ZVB0ciBzbG90QmFz
ZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKICAg
ICAgICAgICAgIHJldHVybiBtX3Nsb3RCYXNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBz
ZXRCYXNlKEpTVmFsdWUqIGJhc2UpCisgICAgICAgIHZvaWQgc2V0QmFzZShKU1ZhbHVlUHRyIGJh
c2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKICAgICAgICAg
ICAgIEFTU0VSVChiYXNlKTsKQEAgLTE5MCwxOSArMTkxLDE5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGZ1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAg
ICAgc3RhdGljIEpTVmFsdWVQdHIgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIEdldFZhbHVlRnVuYyBt
X2dldFZhbHVlOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSogbV9zbG90QmFzZTsKKyAgICAg
ICAgSlNWYWx1ZVB0ciBtX3Nsb3RCYXNlOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBK
U09iamVjdCogZ2V0dGVyRnVuYzsKLSAgICAgICAgICAgIEpTVmFsdWUqKiB2YWx1ZVNsb3Q7Cisg
ICAgICAgICAgICBKU1ZhbHVlUHRyKiB2YWx1ZVNsb3Q7CiAgICAgICAgICAgICBSZWdpc3Rlciog
cmVnaXN0ZXJTbG90OwogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXg7CiAgICAgICAgIH0gbV9k
YXRhOwogCi0gICAgICAgIEpTVmFsdWUqIG1fdmFsdWU7CisgICAgICAgIEpTVmFsdWVQdHIgbV92
YWx1ZTsKIAogICAgICAgICBzaXplX3QgbV9vZmZzZXQ7CiAgICAgfTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvdGVjdC5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvdGVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyOCArNDksMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBnY1VucHJvdGVjdCh2YWwpOwogICAgIH0KICAgICAKLSAgICBp
bmxpbmUgdm9pZCBnY1Byb3RlY3QoSlNWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZ2NQcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lk
IGdjVW5wcm90ZWN0KEpTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKEpTSW1tZWRp
YXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGdj
VW5wcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIGdjUHJv
dGVjdE51bGxUb2xlcmFudChKU1ZhbHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBnY1Byb3Rl
Y3QoSlNWYWx1ZVB0ciB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUgfHwgSlNJbW1l
ZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Z2NQcm90ZWN0KGFzQ2VsbCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGdjVW5w
cm90ZWN0TnVsbFRvbGVyYW50KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIGdjVW5w
cm90ZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlIHx8IEpT
SW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC04
MSw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGFuZCB0aGUgaW1wbGljaXQgY29u
dmVyc2lvbiB0byByYXcgcG9pbnRlcgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcm90
ZWN0ZWRQdHIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvdGVjdGVkUHRyKCkgOiBtX3B0cigw
KSB7IH0KKyAgICAgICAgUHJvdGVjdGVkUHRyKCkgOiBtX3B0cigwKSB7fQogICAgICAgICBQcm90
ZWN0ZWRQdHIoVCogcHRyKTsKICAgICAgICAgUHJvdGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0
ciYpOwogICAgICAgICB+UHJvdGVjdGVkUHRyKCk7CkBAIC05MCw4ICs3NiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRy
OyB9CiAgICAgICAgIG9wZXJhdG9yIFQqKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAg
ICAgb3BlcmF0b3IgSlNWYWx1ZVB0cigpIGNvbnN0IHsgcmV0dXJuIEpTVmFsdWVQdHIobV9wdHIp
OyB9CiAgICAgICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogICAg
ICAgICAKKyAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CiAKICAgICAg
ICAgUHJvdGVjdGVkUHRyJiBvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkUHRyJik7CkBAIC0xMDEs
MzAgKzg5LDUzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBUKiBtX3B0cjsKICAgICB9Owog
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKFQq
IHB0cikKKyAgICBjbGFzcyBQcm90ZWN0ZWRKU1ZhbHVlUHRyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFByb3RlY3RlZEpTVmFsdWVQdHIoKSB7fQorICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRy
KEpTVmFsdWVQdHIgdmFsdWUpOworICAgICAgICBQcm90ZWN0ZWRKU1ZhbHVlUHRyKGNvbnN0IFBy
b3RlY3RlZEpTVmFsdWVQdHImKTsKKyAgICAgICAgflByb3RlY3RlZEpTVmFsdWVQdHIoKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gUHJvdGVjdGVkSlNWYWx1ZVB0cihjb25zdCBQcm90
ZWN0ZWRQdHI8VT4mKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVQdHIgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBvcGVyYXRvciBKU1ZhbHVlUHRyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBKU1ZhbHVlUHRyIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisKKyAgICAgICAgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgb3Bl
cmF0b3I9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImKTsKKyAgICAgICAgUHJvdGVjdGVkSlNW
YWx1ZVB0ciYgb3BlcmF0b3I9KEpTVmFsdWVQdHIpOworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU1ZhbHVlUHRyIG1fdmFsdWU7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoVCogcHRyKQogICAgICAg
ICA6IG1fcHRyKHB0cikKICAgICB7CiAgICAgICAgIGdjUHJvdGVjdE51bGxUb2xlcmFudChtX3B0
cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFByb3RlY3RlZFB0cjxUPjo6UHJv
dGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0ciYgbykKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lIFByb3RlY3RlZFB0cjxUPjo6UHJvdGVjdGVkUHRyKGNvbnN0IFByb3RlY3RlZFB0ciYg
bykKICAgICAgICAgOiBtX3B0cihvLmdldCgpKQogICAgIHsKICAgICAgICAgZ2NQcm90ZWN0TnVs
bFRvbGVyYW50KG1fcHRyKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gUHJvdGVj
dGVkUHRyPFQ+Ojp+UHJvdGVjdGVkUHRyKCkKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5l
IFByb3RlY3RlZFB0cjxUPjo6flByb3RlY3RlZFB0cigpCiAgICAgewogICAgICAgICBnY1VucHJv
dGVjdE51bGxUb2xlcmFudChtX3B0cik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHRlbXBsYXRlIDxjbGFzcyBVPiBQcm90ZWN0ZWRQdHI8VD46OlByb3RlY3RlZFB0cihjb25zdCBQ
cm90ZWN0ZWRQdHI8VT4mIG8pCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHRlbXBsYXRlIDxjbGFz
cyBVPiBpbmxpbmUgUHJvdGVjdGVkUHRyPFQ+OjpQcm90ZWN0ZWRQdHIoY29uc3QgUHJvdGVjdGVk
UHRyPFU+JiBvKQogICAgICAgICA6IG1fcHRyKG8uZ2V0KCkpCiAgICAgewogICAgICAgICBnY1By
b3RlY3ROdWxsVG9sZXJhbnQobV9wdHIpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFzcyBU
PiBQcm90ZWN0ZWRQdHI8VD4mIFByb3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFByb3Rl
Y3RlZFB0cjxUPiYgbykgCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQcm90ZWN0ZWRQ
dHI8VD4mIFByb3RlY3RlZFB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYg
bykgCiAgICAgewogICAgICAgICBUKiBvcHRyID0gby5tX3B0cjsKICAgICAgICAgZ2NQcm90ZWN0
TnVsbFRvbGVyYW50KG9wdHIpOwpAQCAtMTQxLDYgKzE1Miw0NiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIGlubGluZSBQcm90ZWN0ZWRKU1Zh
bHVlUHRyOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyKEpTVmFsdWVQdHIgdmFsdWUpCisgICAgICAgIDog
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6UHJvdGVjdGVkSlNWYWx1ZVB0cihj
b25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBvKQorICAgICAgICA6IG1fdmFsdWUoby5nZXQoKSkK
KyAgICB7CisgICAgICAgIGdjUHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
UHJvdGVjdGVkSlNWYWx1ZVB0cjo6flByb3RlY3RlZEpTVmFsdWVQdHIoKQorICAgIHsKKyAgICAg
ICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFU+
IFByb3RlY3RlZEpTVmFsdWVQdHI6OlByb3RlY3RlZEpTVmFsdWVQdHIoY29uc3QgUHJvdGVjdGVk
UHRyPFU+JiBvKQorICAgICAgICA6IG1fdmFsdWUoby5nZXQoKSkKKyAgICB7CisgICAgICAgIGdj
UHJvdGVjdChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgUHJvdGVjdGVkSlNWYWx1ZVB0
ciYgUHJvdGVjdGVkSlNWYWx1ZVB0cjo6b3BlcmF0b3I9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQ
dHImIG8pIAorICAgIHsKKyAgICAgICAgSlNWYWx1ZVB0ciBvdmFsdWUgPSBvLm1fdmFsdWU7Cisg
ICAgICAgIGdjUHJvdGVjdChvdmFsdWUpOworICAgICAgICBnY1VucHJvdGVjdChtX3ZhbHVlKTsK
KyAgICAgICAgbV92YWx1ZSA9IG92YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIGlubGluZSBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBQcm90ZWN0ZWRKU1ZhbHVlUHRyOjpv
cGVyYXRvcj0oSlNWYWx1ZVB0ciBvdmFsdWUpCisgICAgeworICAgICAgICBnY1Byb3RlY3Qob3Zh
bHVlKTsKKyAgICAgICAgZ2NVbnByb3RlY3QobV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSBv
dmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEsIGNv
bnN0IFByb3RlY3RlZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVj
dGVkUHRyPFQ+JiBhLCBjb25zdCBUKiBiKSB7IHJldHVybiBhLmdldCgpID09IGI7IH0KICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUKiBhLCBjb25z
dCBQcm90ZWN0ZWRQdHI8VD4mIGIpIHsgcmV0dXJuIGEgPT0gYi5nZXQoKTsgfQpAQCAtMTQ4LDYg
KzE5OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm90ZWN0ZWRQdHI8VD4mIGEsIGNvbnN0IFByb3RlY3Rl
ZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvdGVjdGVkUHRyPFQ+JiBh
LCBjb25zdCBUKiBiKSB7IHJldHVybiBhLmdldCgpICE9IGI7IH0KICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUKiBhLCBjb25zdCBQcm90ZWN0ZWRQ
dHI8VD4mIGIpIHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorCisgICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBQcm90ZWN0ZWRKU1Zh
bHVlUHRyJiBiKSB7IHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IH0KKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IEpTVmFsdWVQ
dHIgYikgeyByZXR1cm4gYS5nZXQoKSA9PSBiOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3Qg
UHJvdGVjdGVkUHRyPFQ+JiBiKSB7IHJldHVybiBhLmdldCgpID09IEpTVmFsdWVQdHIoYi5nZXQo
KSk7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWVQdHIgYSwgY29u
c3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gYSA9PSBiLmdldCgpOyB9CisgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdGVjdGVk
UHRyPFQ+JiBhLCBjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBiKSB7IHJldHVybiBKU1ZhbHVl
UHRyKGEuZ2V0KCkpID09IGIuZ2V0KCk7IH0KKworICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYSwgY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYg
YikgeyByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyB9CisgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBQcm90ZWN0ZWRKU1ZhbHVlUHRyJiBhLCBjb25zdCBKU1ZhbHVlUHRyIGIpIHsg
cmV0dXJuIGEuZ2V0KCkgIT0gYjsgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3RlZEpTVmFsdWVQdHImIGEsIGNvbnN0IFByb3RlY3Rl
ZFB0cjxUPiYgYikgeyByZXR1cm4gYS5nZXQoKSAhPSBKU1ZhbHVlUHRyKGIuZ2V0KCkpOyB9Cisg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlUHRyIGEsIGNvbnN0IFByb3Rl
Y3RlZEpTVmFsdWVQdHImIGIpIHsgcmV0dXJuIGEgIT0gYi5nZXQoKTsgfQorICAgIHRlbXBsYXRl
IDxjbGFzcyBUPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3RlY3RlZFB0cjxUPiYg
YSwgY29uc3QgUHJvdGVjdGVkSlNWYWx1ZVB0ciYgYikgeyByZXR1cm4gSlNWYWx1ZVB0cihhLmdl
dCgpKSAhPSBiLmdldCgpOyB9CiAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM5NjAz
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDI0ICszMywyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGlj
IEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFyZW4oRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4
cENvbnN0cnVjdG9yTGVmdENvbnRleHQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yUmln
aHRDb250ZXh0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjEoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFs
dWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0
b3JEb2xsYXIzKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFs
dWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0
b3JEb2xsYXI2KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFs
dWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0
b3JEb2xsYXI5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFs
dWVQdHIgcmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29u
c3RydWN0b3JMYXN0TWF0Y2goRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMYXN0UGFy
ZW4oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JMZWZ0Q29udGV4dChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBD
b25zdHJ1Y3RvckRvbGxhcjEoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMyhFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBy
ZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JE
b2xsYXI1KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1
ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjcoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwQ29uc3Ry
dWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyOShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKLXN0YXRp
YyB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKik7Ci1zdGF0aWMgdm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKK3N0YXRpYyB2b2lkIHNldFJlZ0V4cENvbnN0
cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKK3N0YXRpYyB2
b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0cik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkBAIC0xODUsNyArMTg1LDcgQEAg
SlNPYmplY3QqIFJlZ0V4cENvbnN0cnVjdG9yOjphcnJheU9mTWF0YwogICAgIHJldHVybiBuZXcg
KGV4ZWMpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKIH0KIAotSlNWYWx1ZSog
UmVnRXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
KSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVjdG9yICYm
IGkgPD0gZC0+bGFzdE51bVN1YlBhdHRlcm5zKSB7CiAgICAgICAgIGludCBzdGFydCA9IGQtPmxh
c3RPdmVjdG9yWzIgKiBpXTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlKiBSZWdFeHBDb25z
dHJ1Y3Rvcjo6Z2V0QmFja3JlZihFCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9
CiAKLUpTVmFsdWUqIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGFzdFBhcmVuKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpID0gZC0+bGFzdE51bVN1YlBh
dHRlcm5zOwogICAgIGlmIChpID4gMCkgewpAQCAtMjA3LDE0ICsyMDcsMTQgQEAgSlNWYWx1ZSog
UmVnRXhwQ29uc3RydWN0b3I6OmdldExhc3RQYXJlbgogICAgIHJldHVybiBqc0VtcHR5U3RyaW5n
KGV4ZWMpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0TGVmdENvbnRleHQo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0
TGVmdENvbnRleHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmIChkLT5sYXN0T3Zl
Y3RvcikKICAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIGQtPmxhc3RJbnB1dCwgMCwg
ZC0+bGFzdE92ZWN0b3JbMF0pOwogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogfQog
Ci1KU1ZhbHVlKiBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgUmVnRXhwQ29uc3RydWN0b3I6OmdldFJpZ2h0Q29udGV4
dChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGQtPmxhc3RPdmVjdG9yKQogICAg
ICAgICByZXR1cm4ganNTdWJzdHJpbmcoZXhlYywgZC0+bGFzdElucHV0LCBkLT5sYXN0T3ZlY3Rv
clsxXSwgZC0+bGFzdElucHV0LnNpemUoKSAtIGQtPmxhc3RPdmVjdG9yWzFdKTsKQEAgLTIyNiw5
MiArMjI2LDkyIEBAIGJvb2wgUmVnRXhwQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2wKICAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PFJlZ0V4cENvbnN0cnVjdG9yLCBJbnRlcm5hbEZ1
bmN0aW9uPihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUoZXhlYyksIHRo
aXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9y
RG9sbGFyMShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyMShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFj
a3JlZihleGVjLCAxKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXIyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1
cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMs
IDIpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4
cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgMyk7CiB9CiAK
LUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4
cENvbnN0cnVjdG9yRG9sbGFyNChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0
b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3JlZihleGVjLCA0KTsKIH0KIAotSlNWYWx1ZSog
cmVnRXhwQ29uc3RydWN0b3JEb2xsYXI1KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0
b3JEb2xsYXI1KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNs
b3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDUpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25z
dHJ1Y3RvckRvbGxhcjYoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjYo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENvbnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSkt
PmdldEJhY2tyZWYoZXhlYywgNik7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yRG9s
bGFyNyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyNyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0QmFja3Jl
ZihleGVjLCA3KTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JEb2xsYXI4KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4g
YXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRCYWNrcmVmKGV4ZWMsIDgp
OwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcjkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBhc1JlZ0V4cENv
bnN0cnVjdG9yKHNsb3Quc2xvdEJhc2UoKSktPmdldEJhY2tyZWYoZXhlYywgOSk7CiB9CiAKLUpT
VmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25z
dHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYXNSZWdFeHBD
b25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5pbnB1dCgpKTsKIH0KIAotSlNWYWx1ZSogcmVn
RXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVnRXhwQ29uc3RydWN0b3JNdWx0
aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5z
bG90QmFzZSgpKS0+bXVsdGlsaW5lKCkpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rv
ckxhc3RNYXRjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5n
ZXRCYWNrcmVmKGV4ZWMsIDApOwogfQogCi1KU1ZhbHVlKiByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQ
YXJlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRMYXN0
UGFyZW4oZXhlYyk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cENvbnN0cnVjdG9yTGVmdENvbnRleHQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gYXNSZWdFeHBDb25zdHJ1Y3RvcihzbG90LnNsb3RCYXNlKCkpLT5nZXRMZWZ0Q29u
dGV4dChleGVjKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgcmV0dXJuIGFzUmVnRXhwQ29uc3RydWN0b3Ioc2xvdC5zbG90QmFzZSgpKS0+Z2V0UmlnaHRD
b250ZXh0KGV4ZWMpOwogfQogCi12b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBsb29rdXBQdXQ8UmVnRXhwQ29uc3Ry
dWN0b3IsIEludGVybmFsRnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIEV4ZWNT
dGF0ZTo6cmVnRXhwQ29uc3RydWN0b3JUYWJsZShleGVjKSwgdGhpcywgc2xvdCk7CiB9CiAKLXZv
aWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVl
KQogewogICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldElucHV0KHZhbHVl
LT50b1N0cmluZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxp
bmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgYXNSZWdFeHBDb25z
dHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykp
OwogfQpAQCAtMzE5LDggKzMxOSw4IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxp
bmUoRXhlY1MKIC8vIEVDTUEgMTUuMTAuNAogSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogYXJnMCA9
IGFyZ3MuYXQoZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYXJnMSA9IGFyZ3MuYXQoZXhlYywgMSk7
CisgICAgSlNWYWx1ZVB0ciBhcmcwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRy
IGFyZzEgPSBhcmdzLmF0KGV4ZWMsIDEpOwogCiAgICAgaWYgKGFyZzAtPmlzT2JqZWN0KCZSZWdF
eHBPYmplY3Q6OmluZm8pKSB7CiAgICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmluZWQoKSkKQEAg
LTM0OSw3ICszNDksNyBAQCBDb25zdHJ1Y3RUeXBlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRDb25z
CiB9CiAKIC8vIEVDTUEgMTUuMTAuMwotc3RhdGljIEpTVmFsdWUqIGNhbGxSZWdFeHBDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdFJlZ0V4cChleGVjLCBhcmdzKTsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDM5NjAzKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAg
ICBSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFJl
Z0V4cFByb3RvdHlwZSopOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
Y3JlYXRlU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOwogICAgICAgICB9
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwpAQCAtNTMsMTAgKzUzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE11
bHRpbGluZShib29sKTsKICAgICAgICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdDsKIAotICAgICAg
ICBKU1ZhbHVlKiBnZXRCYWNrcmVmKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25zdDsKLSAgICAg
ICAgSlNWYWx1ZSogZ2V0TGFzdFBhcmVuKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgICAgICBKU1Zh
bHVlKiBnZXRMZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSog
Z2V0UmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRyIGdl
dEJhY2tyZWYoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OworICAgICAgICBKU1ZhbHVlUHRy
IGdldExhc3RQYXJlbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRM
ZWZ0Q29udGV4dChFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZVB0ciBnZXRSaWdo
dENvbnRleHQoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkBAIC02
NywxMSArNjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxSZWdFeHBDb25z
dHJ1Y3RvclByaXZhdGU+IGQ7CiAgICAgfTsKIAotICAgIFJlZ0V4cENvbnN0cnVjdG9yKiBhc1Jl
Z0V4cENvbnN0cnVjdG9yKEpTVmFsdWUqKTsKKyAgICBSZWdFeHBDb25zdHJ1Y3RvciogYXNSZWdF
eHBDb25zdHJ1Y3RvcihKU1ZhbHVlUHRyKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdF
eHAoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCi0gICAgaW5saW5lIFJlZ0V4cENvbnN0
cnVjdG9yKiBhc1JlZ0V4cENvbnN0cnVjdG9yKEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBS
ZWdFeHBDb25zdHJ1Y3RvciogYXNSZWdFeHBDb25zdHJ1Y3RvcihKU1ZhbHVlUHRyIHZhbHVlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJlJlZ0V4cENv
bnN0cnVjdG9yOjppbmZvKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBDb25z
dHJ1Y3Rvcio+KGFzT2JqZWN0KHZhbHVlKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQg
KzQ0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6Omdl
dE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdiwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHYsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkKICAgICAgICAgICAgICAg
ICBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsKICAgICAgICAgICAgIEpTQXJyYXk6OnB1dChleGVj
LCBwcm9wZXJ0eU5hbWUsIHYsIHNsb3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dikKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobGF6
eUNyZWF0aW9uRGF0YSgpKQogICAgICAgICAgICAgICAgIGZpbGxBcnJheUluc3RhbmNlKGV4ZWMp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24g
Mzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGlj
IEpTVmFsdWUqIHJlZ0V4cE9iamVjdEdsb2JhbChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0SWdu
b3JlQ2FzZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwT2JqZWN0TXVsdGlsaW5lKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBy
ZWdFeHBPYmplY3RTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMg
dm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RHbG9iYWwoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIEpTVmFsdWVQ
dHIgcmVnRXhwT2JqZWN0SWdub3JlQ2FzZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBPYmplY3RNdWx0
aWxpbmUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHJl
Z0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
QEAgLTcxLDU0ICs3MSw1NCBAQCBib29sIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEV4CiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxSZWdFeHBPYmplY3QsIEpTT2JqZWN0
PihleGVjLCBFeGVjU3RhdGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBPYmplY3RHbG9iYWwoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgcmVn
RXhwT2JqZWN0R2xvYmFsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihhc1JlZ0V4cE9iamVjdChz
bG90LnNsb3RCYXNlKCkpLT5yZWdFeHAoKS0+Z2xvYmFsKCkpOwogfQogCi1KU1ZhbHVlKiByZWdF
eHBPYmplY3RJZ25vcmVDYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdElnbm9yZUNhc2UoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICByZXR1cm4ganNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSktPnJl
Z0V4cCgpLT5pZ25vcmVDYXNlKCkpOwogfQogIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0TXVsdGls
aW5lKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlUHRyIHJlZ0V4cE9iamVjdE11bHRpbGluZShFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogeyAgICAgICAgICAgIAogICAg
IHJldHVybiBqc0Jvb2xlYW4oYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVnRXhw
KCktPm11bHRpbGluZSgpKTsKIH0KIAotSlNWYWx1ZSogcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWVQdHIgcmVnRXhwT2JqZWN0U291cmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgYXNSZWdFeHBPYmplY3Qoc2xvdC5zbG90QmFzZSgpKS0+cmVnRXhwKCktPnBhdHRl
cm4oKSk7CiB9CiAKLUpTVmFsdWUqIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
UHRyIHJlZ0V4cE9iamVjdExhc3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIGFzUmVnRXhwT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSktPmxhc3RJbmRleCgpKTsKIH0KIAot
dm9pZCBSZWdFeHBPYmplY3Q6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3Zv
aWQgUmVnRXhwT2JqZWN0OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBsb29rdXBQdXQ8UmVnRXhwT2JqZWN0LCBKU09iamVjdD4oZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgRXhlY1N0YXRlOjpyZWdFeHBUYWJsZShleGVjKSwgdGhpcywgc2xvdCk7CiB9CiAK
LXZvaWQgc2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRSZWdFeHBPYmplY3RMYXN0SW5k
ZXgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZVB0ciB2YWx1
ZSkKIHsKICAgICBhc1JlZ0V4cE9iamVjdChiYXNlT2JqZWN0KS0+c2V0TGFzdEluZGV4KHZhbHVl
LT50b0ludGVnZXIoZXhlYykpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBPYmplY3Q6OnRlc3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBSZWdFeHBPYmpl
Y3Q6OnRlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJl
dHVybiBqc0Jvb2xlYW4obWF0Y2goZXhlYywgYXJncykpOwogfQogCi1KU1ZhbHVlKiBSZWdFeHBP
YmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIGlmIChtYXRjaChleGVjLCBhcmdzKSkKICAgICAgICAgcmV0dXJuIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKS0+YXJyYXlPZk1hdGNo
ZXMoZXhlYyk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogY2Fs
bFJlZ0V4cE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUmVnRXhwT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChmdW5jdGlvbikt
PmV4ZWMoZXhlYywgYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHNldExhc3RJbmRleChkb3VibGUgbGFzdEluZGV4KSB7IGQtPmxhc3RJ
bmRleCA9IGxhc3RJbmRleDsgfQogICAgICAgICBkb3VibGUgbGFzdEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gZC0+bGFzdEluZGV4OyB9CiAKLSAgICAgICAgSlNWYWx1ZSogdGVzdChFeGVjU3RhdGUq
LCBjb25zdCBBcmdMaXN0Jik7Ci0gICAgICAgIEpTVmFsdWUqIGV4ZWMoRXhlY1N0YXRlKiwgY29u
c3QgQXJnTGlzdCYpOworICAgICAgICBKU1ZhbHVlUHRyIHRlc3QoRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYpOworICAgICAgICBKU1ZhbHVlUHRyIGV4ZWMoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRyIHByb3RvdHlw
ZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC03MCw5ICs3MCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPd25QdHI8UmVnRXhwT2JqZWN0RGF0YT4gZDsKICAg
ICB9OwogCi0gICAgUmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlKik7CisgICAg
UmVnRXhwT2JqZWN0KiBhc1JlZ0V4cE9iamVjdChKU1ZhbHVlUHRyKTsKIAotICAgIGlubGluZSBS
ZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWUqIHZhbHVlKQorICAgIGlubGluZSBS
ZWdFeHBPYmplY3QqIGFzUmVnRXhwT2JqZWN0KEpTVmFsdWVQdHIgdmFsdWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjppbmZv
KSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihhc09iamVjdCh2
YWx1ZSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBQcm90b3R5cGUpOwogCi1zdGF0
aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5j
RXhlYyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1z
dGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogcmVnRXhwUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRy
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNDb21w
aWxlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CiAKIC8vIEVDTUEgMTUuMTAuNQog
CkBAIC01NSwyOCArNTUsMjggQEAgUmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUoRXhl
Y1N0YQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIAotSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVz
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgcmV0dXJu
IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnRlc3QoZXhlYywgYXJncyk7CiB9CiAKLUpTVmFs
dWUqIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgcmVnRXhwUHJv
dG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUtPmlzT2JqZWN0
KCZSZWdFeHBPYmplY3Q6OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUpLT5leGVjKGV4
ZWMsIGFyZ3MpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAogICAgIFJlZlB0cjxSZWdF
eHA+IHJlZ0V4cDsKLSAgICBKU1ZhbHVlKiBhcmcwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBK
U1ZhbHVlKiBhcmcxID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGFyZzAgPSBh
cmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYXJnMSA9IGFyZ3MuYXQoZXhlYywgMSk7
CiAgICAgCiAgICAgaWYgKGFyZzAtPmlzT2JqZWN0KCZSZWdFeHBPYmplY3Q6OmluZm8pKSB7CiAg
ICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmluZWQoKSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1
ZSogcmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFs
dWVQdHIgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBpZiAoIXRoaXNW
YWx1ZS0+aXNPYmplY3QoJlJlZ0V4cE9iamVjdDo6aW5mbykpIHsKICAgICAgICAgaWYgKHRoaXNW
YWx1ZS0+aXNPYmplY3QoJlJlZ0V4cFByb3RvdHlwZTo6aW5mbykpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzk2MDMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIE5FVkVS
X0lOTElORSBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgTkVWRVJfSU5MSU5FIEpTVmFsdWVQdHIg
c3RyaW5nRnJvbUNoYXJDb2RlU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIFVDaGFyKiBidWYgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxs
b2MoYXJncy5zaXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgVUNoYXIqIHAgPSBidWY7CkBA
IC0zNyw3ICszNyw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogc3RyaW5nRnJvbUMK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhidWYsIHAgLSBidWYsIGZhbHNlKSk7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFs
dWVQdHIgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChMSUtFTFkoYXJncy5zaXpl
KCkgPT0gMSkpCiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBh
cmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihleGVjKSk7CkBAIC03NCw3ICs3NCw3IEBAIENvbnN0
cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnMKIH0KIAogLy8gRUNNQSAxNS41LjEK
LXN0YXRpYyBKU1ZhbHVlKiBjYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQ
dHIgY2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OnB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmKTsKIApAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBKU1N0cmluZyogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGFzU3RyaW5nKEpTV3Jh
cHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlUHRy
IHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CkBAIC01OSw5
ICs1OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTU3RyaW5nKiB0b1Ro
aXNKU1N0cmluZyhFeGVjU3RhdGUqKTsKICAgfTsKIAotICAgIFN0cmluZ09iamVjdCogYXNTdHJp
bmdPYmplY3QoSlNWYWx1ZSopOworICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3QoSlNW
YWx1ZVB0cik7CiAKLSAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1Zh
bHVlKiB2YWx1ZSkKKyAgICBpbmxpbmUgU3RyaW5nT2JqZWN0KiBhc1N0cmluZ09iamVjdChKU1Zh
bHVlUHRyIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5o
ZXJpdHMoJlN0cmluZ09iamVjdDo6aW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U3RyaW5nT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8pIAogICAgICAgICB7IAogICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7IAogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzYg
KzM3LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFN0
cmluZ1Byb3RvdHlwZSk7CiAKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNDaGFyQ29kZUF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29u
c3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
UmVwbGFjZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7
Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNTbGljZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdM
aXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBK
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9G
dW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJn
TGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotCi1zdGF0aWMg
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmlnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTbWFs
bChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci1zdGF0
aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0JvbGQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwot
c3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBB
cmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwg
Y29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXpl
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKLXN0YXRp
YyBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwotc3RhdGljIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0xpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNDaGFyQ29k
ZUF0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ29uY2F0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRl
eE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwor
c3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJp
bmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGlj
IEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90
b0Z1bmNTcGxpdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVl
UHRyIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFs
dWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVu
Y1RvTG93ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJn
TGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworCitzdGF0aWMgSlNWYWx1ZVB0ciBz
dHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25z
dCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBK
U1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jQm9sZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3Qm
KTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZpeGVkKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIg
c3RyaW5nUHJvdG9GdW5jSXRhbGljcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIs
IGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N0cmlr
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0
YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1By
b3RvRnVuY1N1cChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKIAogfQogCkBAIC0yMDUsMTQg
KzIwNSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0IFVTCiAgICAg
cmV0dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgOjpVQ2hhcio+KGEuZGF0YSgpKSwgYS5zaXplKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgOjpVQ2hhcio+KGIuZGF0YSgpKSwgYi5zaXplKCkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQ
cm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0aGlzVmFs
dWUtPnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNv
dXJjZVZhbC0+dmFsdWUoKTsKIAotICAgIEpTVmFsdWUqIHBhdHRlcm4gPSBhcmdzLmF0KGV4ZWMs
IDApOworICAgIEpTVmFsdWVQdHIgcGF0dGVybiA9IGFyZ3MuYXQoZXhlYywgMCk7CiAKLSAgICBK
U1ZhbHVlKiByZXBsYWNlbWVudCA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBy
ZXBsYWNlbWVudCA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgVVN0cmluZyByZXBsYWNlbWVudFN0
cmluZzsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHJl
cGxhY2VtZW50LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdAogICAgICAgICArIHNvdXJjZS5z
dWJzdHIobWF0Y2hQb3MgKyBtYXRjaExlbikpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1
bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKIHsKICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVlT2YuCiAKQEAgLTMyMywxMSArMzIz
LDExIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGEKICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90
b0Z1bmNDaGFyQXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jQ2hhckF0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmlu
ZyhleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLnNpemUoKTsKLSAgICBKU1ZhbHVlKiBhMCA9
IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7
CiAgICAgaWYgKEpTSW1tZWRpYXRlOjppc051bWJlcihhMCkpIHsKICAgICAgICAgdWludDMyX3Qg
aTsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpnZXRVSW50MzIoYTAsIGkpICYmIGkgPCBsZW4p
CkBAIC0zNDAsMTEgKzM0MCwxMSBAQCBKU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoRXhl
Y1N0YXRlCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiB9CiAKLUpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJv
dG9GdW5jQ2hhckNvZGVBdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1Zh
bHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuID0gcy5zaXplKCk7Ci0g
ICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTAgPSBh
cmdzLmF0KGV4ZWMsIDApOwogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoYTApKSB7CiAg
ICAgICAgIHVpbnQzMl90IGk7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6Z2V0VUludDMyKGEw
LCBpKSAmJiBpIDwgbGVuKQpAQCAtMzU3LDcgKzM1Nyw3IEBAIEpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY0NoYXJDb2RlQXQoRXhlY1MKICAgICByZXR1cm4ganNOYU4oZXhlYyk7CiB9CiAKLUpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY0NvbmNhdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQ
cm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1
ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogCkBAIC0zNjcsMTMgKzM2NywxMyBAQCBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNDb25jYXQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IHMpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVT
dHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBz
LnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1Zh
bHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAgICAgVVN0
cmluZyB1MiA9IGEwLT50b1N0cmluZyhleGVjKTsKICAgICBkb3VibGUgZHBvcyA9IGExLT50b0lu
dGVnZXIoZXhlYyk7CiAgICAgaWYgKGRwb3MgPCAwKQpAQCAtMzgzLDEzICszODMsMTMgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdAogICAgIHJldHVybiBqc051bWJl
cihleGVjLCBzLmZpbmQodTIsIHN0YXRpY19jYXN0PGludD4oZHBvcykpKTsKIH0KIAotSlNWYWx1
ZSogc3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9
IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsK
IAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9
IGFyZ3MuYXQoZXhlYywgMSk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7
CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CiAKICAgICBVU3RyaW5nIHUy
ID0gYTAtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGRvdWJsZSBkcG9zID0gYTEtPnRvSW50ZWdlclBy
ZXNlcnZlTmFOKGV4ZWMpOwpAQCAtNDAwLDExICs0MDAsMTEgQEAgSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jTGFzdEluZGV4T2YoRXhlYwogICAgIHJldHVybiBqc051bWJlcihleGVjLCBzLnJmaW5k
KHUyLCBzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpKSk7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3Rv
RnVuY01hdGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhl
eGVjKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVl
UHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKIAogICAgIFVTdHJpbmcgdSA9IHM7CiAgICAgUmVm
UHRyPFJlZ0V4cD4gcmVnOwpAQCAtNDUxLDExICs0NTEsMTEgQEAgSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jTWF0Y2goRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBs
aXN0KTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitK
U1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0
cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAKLSAgICBKU1ZhbHVlKiBh
MCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywg
MCk7CiAKICAgICBVU3RyaW5nIHUgPSBzOwogICAgIFJlZlB0cjxSZWdFeHA+IHJlZzsKQEAgLTQ3
NiwxMyArNDc2LDEzIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUK
ICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgcG9zKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJv
dG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU2xpY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3RyaW5n
KGV4ZWMpOwogICAgIGludCBsZW4gPSBzLnNpemUoKTsKIAotICAgIEpTVmFsdWUqIGEwID0gYXJn
cy5hdChleGVjLCAwKTsKLSAgICBKU1ZhbHVlKiBhMSA9IGFyZ3MuYXQoZXhlYywgMSk7CisgICAg
SlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMSA9IGFy
Z3MuYXQoZXhlYywgMSk7CiAKICAgICAvLyBUaGUgYXJnIHByb2Nlc3NpbmcgaXMgdmVyeSBtdWNo
IGxpa2UgQXJyYXlQcm90b0Z1bmM6OlNsaWNlCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAtPnRvSW50
ZWdlcihleGVjKTsKQEAgLTUwMCwxMiArNTAwLDEyIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y1NsaWNlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKIH0KIAot
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3Ry
aW5nUHJvdG9GdW5jU3BsaXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNW
YWx1ZS0+dG9UaGlzU3RyaW5nKGV4ZWMpOwogCi0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4
ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVl
UHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChl
eGVjLCAxKTsKIAogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
Yyk7CiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC01NjIsMTMgKzU2MiwxMyBAQCBKU1ZhbHVlKiBz
dHJpbmdQcm90b0Z1bmNTcGxpdChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVVN0cmluZyBzID0gdGhp
c1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMuc2l6ZSgpOwogCi0g
ICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwotICAgIEpTVmFsdWUqIGExID0gYXJn
cy5hdChleGVjLCAxKTsKKyAgICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAg
ICBKU1ZhbHVlUHRyIGExID0gYXJncy5hdChleGVjLCAxKTsKIAogICAgIGRvdWJsZSBzdGFydCA9
IGEwLT50b0ludGVnZXIoZXhlYyk7CiAgICAgZG91YmxlIGxlbmd0aCA9IGExLT5pc1VuZGVmaW5l
ZCgpID8gbGVuIDogYTEtPnRvSW50ZWdlcihleGVjKTsKQEAgLTU4NCwxMyArNTg0LDEzIEBAIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY1N1YnN0cihFeGVjU3RhdGUKICAgICByZXR1cm4ganNTdWJz
dHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxlbmd0aCkpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWJzdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVj
KTsKICAgICBpbnQgbGVuID0gcy5zaXplKCk7CiAKLSAgICBKU1ZhbHVlKiBhMCA9IGFyZ3MuYXQo
ZXhlYywgMCk7Ci0gICAgSlNWYWx1ZSogYTEgPSBhcmdzLmF0KGV4ZWMsIDEpOworICAgIEpTVmFs
dWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgYTEgPSBhcmdzLmF0
KGV4ZWMsIDEpOwogCiAgICAgZG91YmxlIHN0YXJ0ID0gYTAtPnRvTnVtYmVyKGV4ZWMpOwogICAg
IGRvdWJsZSBlbmQgPSBhMS0+dG9OdW1iZXIoZXhlYyk7CkBAIC02MTYsNyArNjE2LDcgQEAgSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNTdAogICAgIHJldHVybiBqc1N1YnN0
cmluZyhleGVjLCBzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZW5kKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCkpOwogfQogCi1KU1Zh
bHVlKiBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5n
UHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRo
aXNWYWx1ZS0+dG9UaGlzSlNTdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgVVN0cmluZyYgcyA9IHNW
YWwtPnZhbHVlKCk7CkBAIC02NTAsNyArNjUwLDcgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
VG9Mb3dlckNhc2UoRXhlYwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZl
ci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5n
UHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUq
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY1Rv
VXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUtPnRv
VGhpc0pTU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZSgp
OwpAQCAtNjg0LDk1ICs2ODQsOTUgQEAgSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNh
c2UoRXhlYwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlci5yZWxlYXNl
QnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
TG9jYWxlQ29tcGFyZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMb2Nh
bGVDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIDApOwogCiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVl
LT50b1RoaXNTdHJpbmcoZXhlYyk7Ci0gICAgSlNWYWx1ZSogYTAgPSBhcmdzLmF0KGV4ZWMsIDAp
OworICAgIEpTVmFsdWVQdHIgYTAgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIHJldHVybiBqc051
bWJlcihleGVjLCBsb2NhbGVDb21wYXJlKHMsIGEwLT50b1N0cmluZyhleGVjKSkpOwogfQogCi1K
U1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3Rv
RnVuY0JpZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGJpZz4iICsgcyArICI8L2Jp
Zz4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhp
c1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8
c21hbGw+IiArIHMgKyAiPC9zbWFsbD4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5j
QmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsICI8Ymxpbms+IiArIHMgKyAiPC9ibGluaz4iKTsKIH0KIAotSlNW
YWx1ZSogc3RyaW5nUHJvdG9GdW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9G
dW5jQm9sZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3Ry
aW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPGI+IiArIHMgKyAiPC9iPiIp
OwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNGaXhlZChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIg
c3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMgPSB0aGlzVmFs
dWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgIjx0dD4i
ICsgcyArICI8L3R0PiIpOwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAg
VVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsICI8aT4iICsgcyArICI8L2k+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1By
b3RvRnVuY1N0cmlrZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgc3RyaW5nUHJvdG9GdW5jU3RyaWtlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gdGhpc1ZhbHVlLT50b1RoaXNTdHJpbmcoZXhlYyk7
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8c3RyaWtlPiIgKyBzICsgIjwvc3RyaWtlPiIp
OwogfQogCi1KU1ZhbHVlKiBzdHJpbmdQcm90b0Z1bmNTdWIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIHN0
cmluZ1Byb3RvRnVuY1N1YihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+
dG9UaGlzU3RyaW5nKGV4ZWMpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiPHN1Yj4iICsg
cyArICI8L3N1Yj4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jU3VwKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQor
SlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNTdXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBVU3RyaW5nIHMg
PSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhl
YywgIjxzdXA+IiArIHMgKyAiPC9zdXA+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y0ZvbnRjb2xvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNGb250Y29s
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9UaGlzU3Ry
aW5nKGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1Zh
bHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
Ijxmb250IGNvbG9yPVwiIiArIGEwLT50b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2Zv
bnQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBVU3RyaW5nIHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVl
KiBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8Zm9udCBzaXplPVwiIiArIGEwLT50
b1N0cmluZyhleGVjKSArICJcIj4iICsgcyArICI8L2ZvbnQ+Iik7CiB9CiAKLUpTVmFsdWUqIHN0
cmluZ1Byb3RvRnVuY0FuY2hvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSog
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBzdHJpbmdQcm90b0Z1
bmNBbmNob3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS0+dG9U
aGlzU3RyaW5nKGV4ZWMpOwotICAgIEpTVmFsdWUqIGEwID0gYXJncy5hdChleGVjLCAwKTsKKyAg
ICBKU1ZhbHVlUHRyIGEwID0gYXJncy5hdChleGVjLCAwKTsKICAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgIjxhIG5hbWU9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwv
YT4iKTsKIH0KIAotSlNWYWx1ZSogc3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBzdHJpbmdQcm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBVU3RyaW5n
IHMgPSB0aGlzVmFsdWUtPnRvVGhpc1N0cmluZyhleGVjKTsKLSAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBhMCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICI8YSBocmVmPVwiIiArIGEwLT50b1N0cmluZyhleGVj
KSArICJcIj4iICsgcyArICI8L2E+Iik7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKK1N0cnVjdHVy
ZTo6U3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUlu
Zm8pCiAgICAgOiBtX3R5cGVJbmZvKHR5cGVJbmZvKQogICAgICwgbV9wcm90b3R5cGUocHJvdG90
eXBlKQogICAgICwgbV9jYWNoZWRQcm90b3R5cGVDaGFpbigwKQpAQCAtNDQ0LDcgKzQ0NCw3IEBA
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OnJlbW92ZVAKICAgICByZXR1cm4gdHJh
bnNpdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6
OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUq
IHByb3RvdHlwZSkKK1Bhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWVQdHIgcHJvdG90eXBl
KQogewogICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHRyYW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBl
LCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkpOwogCkBAIC01MzksNyArNTM5LDcgQEAgU3RydWN0dXJl
Q2hhaW4qIFN0cnVjdHVyZTo6Y3JlYXRlQ2FjaGVkUAogICAgIEFTU0VSVCh0eXBlSW5mbygpLnR5
cGUoKSA9PSBPYmplY3RUeXBlKTsKICAgICBBU1NFUlQoIW1fY2FjaGVkUHJvdG90eXBlQ2hhaW4p
OwogCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0gc3RvcmVkUHJvdG90eXBlKCk7CisgICAgSlNW
YWx1ZVB0ciBwcm90b3R5cGUgPSBzdG9yZWRQcm90b3R5cGUoKTsKICAgICBpZiAoSlNJbW1lZGlh
dGU6OmlzSW1tZWRpYXRlKHByb3RvdHlwZSkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTdHJ1Y3R1cmUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTdHJ1Y3R1cmU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlKEpTVmFsdWUqIHByb3Rv
dHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IGNyZWF0ZShKU1ZhbHVlUHRyIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8m
IHR5cGVJbmZvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
cnVjdHVyZShwcm90b3R5cGUsIHR5cGVJbmZvKSk7CiAgICAgICAgIH0KQEAgLTY0LDcgKzY0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
YWRkUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgc2l6ZV90JiBvZmZzZXQpOwogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBzaXplX3QmIG9mZnNldCk7CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFN0cnVjdHVyZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgc2l6ZV90JiBvZmZzZXQpOwotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oU3Ry
dWN0dXJlKiwgSlNWYWx1ZSogcHJvdG90eXBlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFN0cnVjdHVyZSosIEpTVmFsdWVQ
dHIgcHJvdG90eXBlKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBnZXR0
ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IHRvRGljdGlvbmFyeVRyYW5zaXRpb24oU3RydWN0dXJlKik7CiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gZnJvbURpY3Rpb25hcnlUcmFuc2l0aW9uKFN0
cnVjdHVyZSopOwpAQCAtODAsMTQgKzgwLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKICAgICAgICAgc2l6ZV90IGFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgc2l6ZV90IHJlbW92ZVByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
dm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihKU1ZhbHVlKiBwcm90b3R5cGUpIHsg
bV9wcm90b3R5cGUgPSBwcm90b3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRo
b3V0VHJhbnNpdGlvbihKU1ZhbHVlUHRyIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZSA9IHByb3Rv
dHlwZTsgfQogCiAgICAgICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9p
c0RpY3Rpb25hcnk7IH0KIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25z
dCB7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAgSlNWYWx1ZSogc3RvcmVkUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KLSAgICAgICAgSlNWYWx1ZSogcHJv
dG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopOyAKKyAgICAgICAgSlNWYWx1ZVB0ciBzdG9yZWRQ
cm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVl
UHRyIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKTsgCiAKICAgICAgICAgU3RydWN0dXJl
KiBwcmV2aW91c0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91cy5nZXQoKTsgfQogCkBAIC0x
MDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/ICFtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50
IDogbV9vZmZzZXQgPT0gbm9PZmZzZXQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cnVj
dHVyZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJik7CisgICAgICAgIFN0cnVj
dHVyZShKU1ZhbHVlUHRyIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKIAogICAgICAgICBz
aXplX3QgcHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcyk7CiAgICAgICAgIHNpemVfdCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBUeXBl
SW5mbyBtX3R5cGVJbmZvOwogCi0gICAgICAgIEpTVmFsdWUqIG1fcHJvdG90eXBlOworICAgICAg
ICBKU1ZhbHVlUHRyIG1fcHJvdG90eXBlOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlQ2hhaW4+
IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CiAKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbV9w
cmV2aW91czsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NjAzKQorKysgSmF2YVNjcmlwdEds
dWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDEtMDUg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBK
U1ZhbHVlKiB3aXRoIG5ldyB3cmFwcGVyIGNsYXNzLCBKU1ZhbHVlUHRyLgorICAgICAgICBTZWUg
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGZvciBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgor
CisgICAgICAgICogSlNPYmplY3QuY3BwOgorICAgICAgICAobmF0aXZlQ2FsbEZ1bmN0aW9uKToK
KyAgICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEtKU1ZhbHVlVG9KU09iamVjdCk6Cisg
ICAgICAgIChKU09iamVjdEtKU1ZhbHVlKToKKyAgICAgICAgKEtKU1ZhbHVlVG9DRlR5cGVJbnRl
cm5hbCk6CisgICAgICAgIChLSlNWYWx1ZVRvQ0ZUeXBlKToKKyAgICAgICAgKiBKU1V0aWxzLmg6
CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6
OkpTVmFsdWVXcmFwcGVyKToKKyAgICAgICAgKEpTVmFsdWVXcmFwcGVyOjpHZXRWYWx1ZSk6Cisg
ICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDb3B5UHJvcGVydHkpOgorICAgICAgICAo
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0U2V0UHJvcGVydHkpOgorICAgICAgICAoSlNWYWx1ZVdy
YXBwZXI6OkpTT2JqZWN0Q2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5o
OgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6
Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoVXNlck9iamVjdEltcDo6dXNlck9iamVjdEdldHRl
cik6CisgICAgICAgIChVc2VyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoVXNlck9iamVjdEltcDo6cHV0KToKKyAgICAgICAgKFVzZXJPYmplY3RJbXA6OnRvUHJpbWl0
aXZlKToKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6CisgICAgICAgIChVc2VyT2JqZWN0SW1w
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDA4LTEyLTE1ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRl
eDogSmF2YVNjcmlwdEdsdWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRH
bHVlL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU1VzZXJPYmpl
Y3Q6OlNldFByb3BlcnR5KENGU3RyaW5nUgogCiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiAgbmF0aXZl
Q2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBK
U1ZhbHVlKiAgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQ
dHIgIG5hdGl2ZUNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlv
bk9iamVjdCwgSlNWYWx1ZVB0ciAgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VyT2JqZWN0SW1wKj4oZnVuY3Rpb25PYmplY3QpLT5j
YWxsQXNGdW5jdGlvbihleGVjLCBhc09iamVjdCh0aGlzVmFsdWUpLCBhcmdzKTsKIH0KSW5kZXg6
IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVl
L0pTVXRpbHMuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBPYmplY3RJbXBMaXN0
IHsKICAgICBDRlR5cGVSZWYgZGF0YTsKIH07CiAKLXN0YXRpYyBDRlR5cGVSZWYgS0pTVmFsdWVU
b0NGVHlwZUludGVybmFsKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wTGlzdCogaW5JbXBzKTsKK3N0YXRpYyBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVy
bmFsKEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBp
bkltcHMpOwogc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFkR2xvYmFsT2JqZWN0
KCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCw3ICsxMDAsNyBAQCBDRlN0cmluZ1Jl
ZiBJZGVudGlmaWVyVG9DRlN0cmluZyhjb25zdCBJCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBL
SlNWYWx1ZVRvSlNPYmplY3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUpTVXNlck9iamVjdCogS0pT
VmFsdWVUb0pTT2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYykKK0pTVXNl
ck9iamVjdCogS0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0YXRl
ICpleGVjKQogewogICAgIEpTVXNlck9iamVjdCogcmVzdWx0ID0gMDsKIApAQCAtMTI2LDExICsx
MjYsMTEgQEAgSlNVc2VyT2JqZWN0KiBLSlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1ZQogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogLy8gSlNPYmplY3RLSlNWYWx1ZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
SlNWYWx1ZSogSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKK0pTVmFsdWVQdHIg
SlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cikKIHsKICAgICBKU0xvY2sgbG9jayh0
cnVlKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChwdHIpCiAgICAgewogICAgICAg
ICBib29sIGhhbmRsZWQgPSBmYWxzZTsKQEAgLTE5Niw3ICsxOTYsNyBAQCBKU1ZhbHVlKiBKU09i
amVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogCiAvLyBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFz
aW5nIHRoZSByZXR1cm5lZCBDRlR5cGVSZWYKLUNGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50
ZXJuYWwoSlNWYWx1ZSogaW5WYWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBp
bkltcHMpCitDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsdWVQdHIgaW5W
YWx1ZSwgRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXBMaXN0KiBpbkltcHMpCiB7CiAgICAgaWYg
KCFpblZhbHVlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM1OCw3ICszNTgsNyBAQCBDRlR5cGVS
ZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAgICAgcmV0dXJuIDA7CiB9CiAKLUNG
VHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhl
YykKK0NGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlKEpTVmFsdWVQdHIgaW5WYWx1ZSwgRXhlY1N0
YXRlICpleGVjKQogewogICAgIHJldHVybiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoaW5WYWx1
ZSwgZXhlYywgMCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1V0aWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5oCShyZXZpc2lvbiAzOTYwMykKKysrIEphdmFT
Y3JpcHRHbHVlL0pTVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2lu
Y2x1ZGUgIkphdmFTY3JpcHRHbHVlLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db2xs
ZWN0b3IuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nv
bXBsZXRpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
R2xvYmFsT2JqZWN0Lmg+CkBAIC01NCw5ICs1NCw5IEBAIFVTdHJpbmcgQ0ZTdHJpbmdUb1VTdHJp
bmcoQ0ZTdHJpbmdSZWYgaW4KIENGU3RyaW5nUmVmIFVTdHJpbmdUb0NGU3RyaW5nKGNvbnN0IFVT
dHJpbmcmIGluVVN0cmluZyk7CiBJZGVudGlmaWVyIENGU3RyaW5nVG9JZGVudGlmaWVyKENGU3Ry
aW5nUmVmIGluQ0ZTdHJpbmcsIEV4ZWNTdGF0ZSopOwogQ0ZTdHJpbmdSZWYgSWRlbnRpZmllclRv
Q0ZTdHJpbmcoY29uc3QgSWRlbnRpZmllciYgaW5JZGVudGlmaWVyKTsKLUpTVXNlck9iamVjdCAq
S0pTVmFsdWVUb0pTT2JqZWN0KEpTVmFsdWUqIGluVmFsdWUsIEV4ZWNTdGF0ZSAqZXhlYyk7Ci1D
RlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlKiBpblZhbHVlLCBFeGVjU3RhdGUgKmV4
ZWMpOwotSlNWYWx1ZSogSlNPYmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHB0cik7CitKU1Vz
ZXJPYmplY3QgKktKU1ZhbHVlVG9KU09iamVjdChKU1ZhbHVlUHRyIGluVmFsdWUsIEV4ZWNTdGF0
ZSAqZXhlYyk7CitDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZShKU1ZhbHVlUHRyIGluVmFsdWUs
IEV4ZWNTdGF0ZSAqZXhlYyk7CitKU1ZhbHVlUHRyIEpTT2JqZWN0S0pTVmFsdWUoSlNVc2VyT2Jq
ZWN0KiBwdHIpOwogQ0ZUeXBlUmVmIEdldENGTnVsbCh2b2lkKTsKIAogaW5saW5lIENGVHlwZVJl
ZiBSZXRhaW5DRlR5cGUoQ0ZUeXBlUmVmIHgpIHsgaWYgKHgpIHggPSBDRlJldGFpbih4KTsgcmV0
dXJuIHg7IH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NjAz
KQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJy
YXkuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKLUpTVmFsdWVXcmFwcGVyOjpKU1ZhbHVlV3Jh
cHBlcihKU1ZhbHVlKiBpblZhbHVlKQorSlNWYWx1ZVdyYXBwZXI6OkpTVmFsdWVXcmFwcGVyKEpT
VmFsdWVQdHIgaW5WYWx1ZSkKICAgICA6IGZWYWx1ZShpblZhbHVlKQogewogfQpAQCAtNDEsNyAr
NDEsNyBAQCBKU1ZhbHVlV3JhcHBlcjo6fkpTVmFsdWVXcmFwcGVyKCkKIHsKIH0KIAotSlNWYWx1
ZSogSlNWYWx1ZVdyYXBwZXI6OkdldFZhbHVlKCkKK0pTVmFsdWVQdHIgSlNWYWx1ZVdyYXBwZXI6
OkdldFZhbHVlKCkKIHsKICAgICByZXR1cm4gZlZhbHVlLmdldCgpOwogfQpAQCAtMTA4LDcgKzEw
OCw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHkKICAgICBpZiAo
cHRyKQogICAgIHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCk7Ci0gICAgICAgIEpTVmFsdWUqIHByb3BWYWx1ZSA9IHB0ci0+R2V0VmFsdWUoKS0+
dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBDRlN0cmluZ1RvSWRlbnRpZmllcihwcm9wZXJ0eU5h
bWUsIGV4ZWMpKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcm9wVmFsdWUgPSBwdHItPkdldFZhbHVl
KCktPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgQ0ZTdHJpbmdUb0lkZW50aWZpZXIocHJvcGVy
dHlOYW1lLCBleGVjKSk7CiAgICAgICAgIEpTVmFsdWVXcmFwcGVyKiB3cmFwcGVyVmFsdWUgPSBu
ZXcgSlNWYWx1ZVdyYXBwZXIocHJvcFZhbHVlKTsKIAogICAgICAgICBKU09iamVjdENhbGxCYWNr
cyBjYWxsQmFja3M7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNP
YmplY3RTZXRQcm9wZXJ0eQogICAgIGlmIChwdHIpCiAgICAgewogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKTsKLSAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBKU09iamVjdEtKU1ZhbHVlKChKU1VzZXJPYmplY3QqKWpzVmFsdWUpOworICAgICAgICBK
U1ZhbHVlUHRyIHZhbHVlID0gSlNPYmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kilqc1ZhbHVl
KTsKICAgICAgICAgSlNPYmplY3QgKm9ialZhbHVlID0gcHRyLT5HZXRWYWx1ZSgpLT50b09iamVj
dChleGVjKTsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIG9ialZhbHVl
LT5wdXQoZXhlYywgQ0ZTdHJpbmdUb0lkZW50aWZpZXIocHJvcGVydHlOYW1lLCBleGVjKSwgdmFs
dWUsIHNsb3QpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVy
OjpKU09iamVjdENhbGwKICAgICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdldFRocmVh
ZEdsb2JhbEV4ZWNTdGF0ZSgpOwogCi0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gSlNPYmplY3RL
SlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kil0aGlzT2JqKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1
ZSA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopdGhpc09iaik7CiAgICAgICAgIEpT
T2JqZWN0ICprc2pUaGlzT2JqID0gdmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICBKU09i
amVjdCAqb2JqVmFsdWUgPSBwdHItPkdldFZhbHVlKCktPnRvT2JqZWN0KGV4ZWMpOwogCkBAIC0x
NTcsNyArMTU3LDcgQEAgSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbAog
ICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBKU09iamVjdFJlZiBqc0FyZyA9IChKU09iamVjdFJlZilDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGFyZ3MsIGkpOwotICAgICAgICAgICAgSlNWYWx1ZSoga2dzQXJnID0gSlNP
YmplY3RLSlNWYWx1ZSgoSlNVc2VyT2JqZWN0Kilqc0FyZyk7CisgICAgICAgICAgICBKU1ZhbHVl
UHRyIGtnc0FyZyA9IEpTT2JqZWN0S0pTVmFsdWUoKEpTVXNlck9iamVjdCopanNBcmcpOwogICAg
ICAgICAgICAgbGlzdEFyZ3MuYXBwZW5kKGtnc0FyZyk7CiAgICAgICAgIH0KIApAQCAtMTY1LDcg
KzE2NSw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENhbGwKICAgICAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmpWYWx1ZS0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwog
ICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIEpTVmFsdWUqICByZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywgb2JqVmFsdWUs
IGNhbGxUeXBlLCBjYWxsRGF0YSwga3NqVGhpc09iaiwgbGlzdEFyZ3MpOworICAgICAgICBKU1Zh
bHVlUHRyICByZXN1bHRWYWx1ZSA9IGNhbGwoZXhlYywgb2JqVmFsdWUsIGNhbGxUeXBlLCBjYWxs
RGF0YSwga3NqVGhpc09iaiwgbGlzdEFyZ3MpOwogICAgICAgICBKU1ZhbHVlV3JhcHBlciogd3Jh
cHBlclZhbHVlID0gbmV3IEpTVmFsdWVXcmFwcGVyKHJlc3VsdFZhbHVlKTsKICAgICAgICAgSlNP
YmplY3RDYWxsQmFja3MgY2FsbEJhY2tzOwogICAgICAgICBHZXRKU09iZWN0Q2FsbEJhY2tzKGNh
bGxCYWNrcyk7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDM5NjAzKQor
KysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTUgKzM1LDE1IEBACiAKIGNsYXNzIEpTVmFsdWVXcmFwcGVyIHsKIHB1YmxpYzoKLSAgICBKU1Zh
bHVlV3JhcHBlcihKU1ZhbHVlKik7CisgICAgSlNWYWx1ZVdyYXBwZXIoSlNWYWx1ZVB0cik7CiAg
ICAgdmlydHVhbCB+SlNWYWx1ZVdyYXBwZXIoKTsKIAogICAgIHN0YXRpYyB2b2lkIEdldEpTT2Jl
Y3RDYWxsQmFja3MoSlNPYmplY3RDYWxsQmFja3MmIGNhbGxCYWNrcyk7CiAKLSAgICBKU1ZhbHVl
KiBHZXRWYWx1ZSgpOworICAgIEpTVmFsdWVQdHIgR2V0VmFsdWUoKTsKIAogcHJpdmF0ZToKLSAg
ICBQcm90ZWN0ZWRQdHI8SlNWYWx1ZT4gZlZhbHVlOworICAgIFByb3RlY3RlZEpTVmFsdWVQdHIg
ZlZhbHVlOwogICAgIAogICAgIHN0YXRpYyB2b2lkIEpTT2JqZWN0RGlzcG9zZSh2b2lkICpkYXRh
KTsKICAgICBzdGF0aWMgQ0ZBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKHZvaWQg
KmRhdGEpOwpJbmRleDogSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHJldmlzaW9uIDM5NjAzKQor
KysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDkgKzU2LDkgQEAgQ2FsbFR5cGUgVXNlck9iamVjdEltcDo6Z2V0Q2FsbERhdGEoQ2FsbAogICAg
IHJldHVybiBmSlNVc2VyT2JqZWN0ID8gZkpTVXNlck9iamVjdC0+Z2V0Q2FsbERhdGEoY2FsbERh
dGEpIDogQ2FsbFR5cGVOb25lOwogfQogCi1KU1ZhbHVlKiBVc2VyT2JqZWN0SW1wOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0
ICZhcmdzKQorSlNWYWx1ZVB0ciBVc2VyT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdMaXN0ICZhcmdzKQogewotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBqc1VuZGVmaW5lZCgpOwogICAgIEpTVXNlck9iamVjdCoganNUaGlzT2JqID0gS0pTVmFsdWVU
b0pTT2JqZWN0KHRoaXNPYmosIGV4ZWMpOwogICAgIGlmIChqc1RoaXNPYmopIHsKICAgICAgICAg
Q0ZJbmRleCBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQg
VXNlck9iamVjdEltcDo6Z2V0UHJvcGVydHlOYW1lcyhFeGUKICAgICBKU09iamVjdDo6Z2V0UHJv
cGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAotSlNWYWx1ZSogIFVzZXJPYmpl
Y3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFVzZXJPYmpl
Y3RJbXA6OnVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVXNlck9iamVjdElt
cCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFVzZXJPYmplY3RJbXAgKj4oYXNPYmplY3Qoc2xvdC5z
bG90QmFzZSgpKSk7CiAgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90IHNob3VsZCBoYXZlIGd1YXJk
ZWQgYWdhaW5zdCBhIG51bGwgZkpTVXNlck9iamVjdC4KQEAgLTEyMSw3ICsxMjEsNyBAQCBKU1Zh
bHVlKiAgVXNlck9iamVjdEltcDo6dXNlck9iamVjdEdldHRlCiAgICAgQ0ZTdHJpbmdSZWYgY2ZQ
cm9wTmFtZSA9IElkZW50aWZpZXJUb0NGU3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgSlNVc2Vy
T2JqZWN0ICpqc1Jlc3VsdCA9IHRoaXNPYmotPmZKU1VzZXJPYmplY3QtPkNvcHlQcm9wZXJ0eShj
ZlByb3BOYW1lKTsKICAgICBSZWxlYXNlQ0ZUeXBlKGNmUHJvcE5hbWUpOwotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IEpTT2JqZWN0S0pTVmFsdWUoanNSZXN1bHQpOworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gSlNPYmplY3RLSlNWYWx1ZShqc1Jlc3VsdCk7CiAgICAganNSZXN1bHQtPlJlbGVhc2Uo
KTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBVc2VyT2Jq
ZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgICAgICBqc1Jlc3VsdC0+UmVsZWFzZSgp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBKU1ZhbHVlKiBr
anNWYWx1ZSA9IHRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICBKU1ZhbHVlUHRyIGtqc1ZhbHVl
ID0gdG9QcmltaXRpdmUoZXhlYyk7CiAgICAgICAgIGlmICgha2pzVmFsdWUtPmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0ICpranNPYmplY3QgPSBranNWYWx1ZS0+
dG9PYmplY3QoZXhlYyk7CiAgICAgICAgICAgICBpZiAoa2pzT2JqZWN0LT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29sIFVz
ZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBV
c2VyT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgVXNlck9iamVjdEltcDo6
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1Zh
bHVlUHRyIHZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBpZiAoIWZKU1VzZXJPYmplY3QpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2OSw5ICsxNjksOSBAQCBKU1VzZXJPYmplY3QqIFVzZXJPYmplY3RJ
bXA6OkdldEpTVXNlck9iCiAgICAgcmV0dXJuIGZKU1VzZXJPYmplY3Q7CiB9CiAKLUpTVmFsdWUq
IFVzZXJPYmplY3RJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgSlNUeXBlKSBjb25z
dAorSlNWYWx1ZVB0ciBVc2VyT2JqZWN0SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMs
IEpTVHlwZSkgY29uc3QKIHsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwor
ICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICBKU1VzZXJPYmplY3Qq
IGpzT2JqUHRyID0gS0pTVmFsdWVUb0pTT2JqZWN0KHRvT2JqZWN0KGV4ZWMpLCBleGVjKTsKICAg
ICBDRlR5cGVSZWYgY2ZWYWx1ZSA9IGpzT2JqUHRyID8ganNPYmpQdHItPkNvcHlDRlZhbHVlKCkg
OiAwOwogICAgIGlmIChjZlZhbHVlKSB7CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0
SW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCShyZXZp
c2lvbiAzOTYwMykKKysrIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsMTEgKzQ2LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKLSAgICB2aXJ0
dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRo
aXNPYmosIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBBcmdM
aXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNW
YWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2
YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKIAotICAgIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIEpTVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAg
ICBKU1ZhbHVlUHRyIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWRUeXBl
ID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0
YXRlICpleGVjKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRl
ICpleGVjKSBjb25zdDsKQEAgLTU5LDEzICs1OSwxMyBAQCBwdWJsaWM6CiAKICAgICBKU1VzZXJP
YmplY3QgKkdldEpTVXNlck9iamVjdCgpIGNvbnN0OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG90eXBlKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG90
eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNW
YWx1ZSogdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIHVz
ZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpTVXNlck9iamVj
dDsKIH07CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDU5NyBAQAorMjAwOS0wMS0wNSAgR2F2aW4gQmFycmFjbG91Z2ggIDxi
YXJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIEpTVmFsdWUqIHdpdGggbmV3IHdyYXBw
ZXIgY2xhc3MsIEpTVmFsdWVQdHIuCisgICAgICAgIFNlZSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cgZm9yIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0F0dHJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjpzZXRWYWx1ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5h
bWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjdXN0
b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1BpeGVsQXJyYXk6Omdl
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNQaXhlbEFycmF5OjppbmRleFNl
dHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0hUTUxDYW52YXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9t
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmZpbGxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzdHJva2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2Fy
ZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6dHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NsaXBib2FyZDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NsaXBib2FyZDo6c2V0RHJhZ0ltYWdlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb25zb2xlOjpwcm9maWxlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tUG9zaXRp
b25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9t
UG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tUG9z
aXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1
c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3Vz
dG9tVm9pZENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tVm9pZENhbGxi
YWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjp0b1ZvaWRDYWxsYmFjayk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQXBwbGljYXRpb25D
YWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1N0cmluZ09yTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc093bmVkU3RyaW5nT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
U3RyaW5nT3JVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdPckZhbHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAg
ICAoV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydEN1
cnJlbnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RE9NT2Jq
ZWN0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRET01Ob2RlV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpTRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9y
Q3JlYXRlSlNFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2Jq
ZWN0OjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01HbG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6c2hvd01vZGFsRGlhbG9nKToKKyAgICAgICAg
KGpzRE9NV2luZG93QmFzZUNyeXB0byk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VFdmVudCk6
CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VJbWFnZSk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jh
c2VNZXNzYWdlQ2hhbm5lbCk6CisgICAgICAgIChqc0RPTVdpbmRvd0Jhc2VPcHRpb24pOgorICAg
ICAgICAoanNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoanNET01XaW5k
b3dCYXNlQXVkaW8pOgorICAgICAgICAoanNET01XaW5kb3dCYXNlV29ya2VyKToKKyAgICAgICAg
KGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dC
YXNlRXZlbnQpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlQXVkaW8pOgorICAgICAgICAo
c2V0SlNET01XaW5kb3dCYXNlSW1hZ2UpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlTWVz
c2FnZUNoYW5uZWwpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlT3B0aW9uKToKKyAgICAg
ICAgKHNldEpTRE9NV2luZG93QmFzZVdvcmtlcik6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jh
c2VYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vz
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y2hpbGRGcmFtZUdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93QmFzZTo6Y2xlYXIpOgorICAgICAgICAod2luZG93UHJvdG9GdW5jT3Blbik6Cisg
ICAgICAgICh3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAod2luZG93
UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpzZXRSZXR1cm5WYWx1ZVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjppbnN0YWxsVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlNET01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpsb29rdXBHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3c6Omxvb2t1cFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRpbWVvdXRPckludGVydmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpjbGVhclRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpj
bGVhckludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphdG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpidG9hKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvRE9NV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rpb25HZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rpb25H
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmg6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y3VzdG9tUHV0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
U2hlbGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpwdXRXaXRo
QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6bG9va3VwU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OnNldExvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpldmVudFBhcmFtZXRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQWxsQ29s
bGVjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxB
cHBsZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFwcGxldEVs
ZW1lbnQ6OmN1c3RvbVB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxBcHBsZXRFbGVtZW50
OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsbEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTENvbGxl
Y3Rpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ29sbGVjdGlvbjo6
aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6OmFsbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6c2V0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTERvY3VtZW50OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50Ojp3
cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEb2N1bWVudDo6d3JpdGVsbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTEVtYmVkRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
Rm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEZy
YW1lRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1l
bnQ6OnNldFNyYyk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExv
Y2F0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lR2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNIVE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxPcHRpb25zQ29s
bGVjdGlvbjo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJl
bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RJbmRleFNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3Rh
dGljQmFja0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0
aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0
YXRpY0dvRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpjdXN0
b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdGVk
T2JqZWN0V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdy
YXBwZXI6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
OjpwcmVwYXJlSW5jb21pbmdWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0
ZWRPYmplY3RXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RlZE9iamVjdFdy
YXBwZXI6OndyYXBPdXRnb2luZ1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3Bl
Y3RvckNhbGxiYWNrV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNh
bGxiYWNrV3JhcHBlcjo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckNhbGxi
YWNrV3JhcHBlcjo6cHJlcGFyZUluY29taW5nVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3Bl
Y3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcE91dGdvaW5nVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0ph
dmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVu
Y3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1
bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25G
dW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpjdXN0b21QdXQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SHJlZik6CisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjpzZXRQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0
aW9uOjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhvc3RuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFBvcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNMb2NhdGlvbjo6c2V0UGF0aG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2Nh
dGlvbjo6c2V0U2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldEhhc2gp
OgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6
YXNzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnRvU3RyaW5nKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
TWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNz
YWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNN
aW1lVHlwZUFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWltZVR5cGVBcnJh
eTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVNYXA6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5l
ZWRzWW91VHViZVF1aXJrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTmF2aWdhdG9yOjphcHBWZXJz
aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNOb2RlOjppbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2Rl
OjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjpyZW1vdmVDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmls
dGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvTm9kZUZpbHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlSXRl
cmF0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlSXRlcmF0b3I6Om5leHRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsbE5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUxpc3Q6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVn
aW46Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1
bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpydW50aW1lT2JqZWN0R2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpydW50aW1lT2JqZWN0Q3VzdG9tUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxQ
bHVnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjphc1dyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZh
bHVlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpoYXNJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1F1YXJhbnRpbmVk
T2JqZWN0V3JhcHBlcjo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUkdCQ29s
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNSR0JDb2xvcik6CisgICAgICAgIChqc1JH
QkNvbG9yUmVkKToKKyAgICAgICAgKGpzUkdCQ29sb3JHcmVlbik6CisgICAgICAgIChqc1JHQkNv
bG9yQmx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSR0JDb2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNSR0JDb2xvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNTUUxSZXN1bHRTZXRSb3dMaXN0OjppdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNl
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0xlbmd0
aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6dmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTVkdMZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRy
aXg6OmludmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnRyYW5zbGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R01hdHJpeDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVG
cm9tVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4OjpmbGlwWCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6ZmxpcFkpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdNYXRyaXg6OnNrZXdYKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpza2V3WSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQ
YXRoU2VnTGlzdDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BhdGhTZWdM
aXN0OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50TGlzdEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluaXNoU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRP
bmx5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUG9pbnRMaXN0OjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bv
aW50TGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6
OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Zmlu
aXNoU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFu
c2Zvcm1MaXN0OjphcHBlbmRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3JhZ2VD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpuYW1lR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTdG9yYWdlOjpjdXN0b21QdXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
VGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVHJl
ZVdhbGtlcjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Omxh
c3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVHJlZVdhbGtlcjo6bmV4dE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0QmFz
ZTo6cHV0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpKU1dv
cmtlckNvbnRleHQ6OnNldFNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0
OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0
dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6Z2V0
UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6b3Zl
cnJpZGVNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjphZGRF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6cmVz
cG9uc2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFk
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6aW1w
b3J0U3R5bGVzaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5z
Zm9ybVRvRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6c2V0
UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1l
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFZhbHVlOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6
OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNVbmRlZmluZWQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRWYWx1ZTo6U2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6
OmpzVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRoQXJndW1l
bnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6
CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZvcktleTpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKCtbV2Vi
U2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0OnJv
b3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2
YXRlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06Cisg
ICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVm
YXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToK
KyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgor
ICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2Uu
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VNZXRob2QpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5z
dGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuaDoKKyAgICAg
ICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0Zp
ZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY19ydW50aW1lLmg6Cisg
ICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuaDoKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKYXZhSW5zdGFu
Y2U6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUpOgor
ICAgICAgICAoSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUpOgorICAgICAgICAoSmF2YUluc3Rh
bmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUp
OgorICAgICAgICAoSmF2YUluc3RhbmNlOjp2YWx1ZU9mKToKKyAgICAgICAgKiBicmlkZ2Uvam5p
L2puaV9pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lmg6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmNhbGwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpldmFsKToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6Z2V0TWVtYmVyKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Z2V0U2xvdCk6Cisg
ICAgICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCk6CisgICAgICAgIChK
YXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qbmlfb2JqYy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbCk6
CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6CisgICAgICAgIChKYXZhQXJy
YXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNo
VmFsdWVGcm9tSW5zdGFuY2UpOgorICAgICAgICAoSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5j
ZSk6CisgICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKEphdmFBcnJh
eTo6c2V0VmFsdWVBdCk6CisgICAgICAgIChKYXZhQXJyYXk6OnZhbHVlQXQpOgorICAgICAgICAq
IGJyaWRnZS9qbmkvam5pX3J1bnRpbWUuaDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV91dGls
aXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRBcnJheUluc3RhbmNlVG9K
YXZhQXJyYXkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUp
OgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3V0aWxpdHkuaDoKKyAgICAgICAgKiBicmlkZ2Uv
b2JqYy9XZWJTY3JpcHRPYmplY3QuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2NsYXNz
Lmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6Ok9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9v
YmpjL29iamNfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNl
Lm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6
c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVl
KToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoT2JqY0lu
c3RhbmNlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1
ZSk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OnZhbHVlT2YpOgorICAgICAgICAqIGJyaWRnZS9v
YmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNr
T2JqZWN0SW1wOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
cnVudGltZS5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6dmFsdWVGcm9t
SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNBcnJheTo6c2V0VmFsdWVBdCk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjQXJyYXk6OnZhbHVlQXQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y2FsbE9iakNGYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY191dGlsaXR5Lmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpnZXRW
YWx1ZU9mRmllbGQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OnNldFZhbHVl
T2ZGaWVsZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkNsYXNzOjpmYWxsYmFja09iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpJ
bnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6SW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpJbnN0YW5jZTo6dmFsdWVPZik6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAg
IChKU0M6OlJ1bnRpbWVBcnJheTo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpSdW50aW1l
QXJyYXk6OnB1dCk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXkuaDoKKyAgICAgICAg
KEpTQzo6UnVudGltZUFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIGJyaWRnZS9y
dW50aW1lX21ldGhvZC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdl
dHRlcik6CisgICAgICAgIChKU0M6OmNhbGxSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcik6CisgICAgICAg
IChKU0M6OlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UnVu
dGltZU9iamVjdEltcDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVj
dEltcDo6cHV0KToKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZhbHVl
KToKKyAgICAgICAgKEpTQzo6Y2FsbFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpjYWxs
UnVudGltZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdEltcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlw
dENhbGxGcmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmg6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJv
ZmlsZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQ
cm9maWxlTm9kZS5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorCiAyMDA5LTAxLTA1
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXZvaWQgSlNBdHRyOjpzZXRWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0F0dHI6OnNldFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBBdHRyKiBpbXAgPSBzdGF0aWNfY2Fz
dDxBdHRyKj4oaW1wbCgpKTsKICAgICBTdHJpbmcgYXR0clZhbHVlID0gdmFsdWVUb1N0cmluZ1dp
dGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NS
dWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgQ1NTUnVsZSogcnVsZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIENTU1J1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDcgKzEyNyw3IEBAIGJvb2wgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpjYW5HZXRJdGVtc0YK
IAogLy8gRklYTUU6IFlvdSBjYW4gZ2V0IHRoZXNlIHByb3BlcnRpZXMsIGFuZCBzZXQgdGhlbSAo
c2VlIGN1c3RvbVB1dCBiZWxvdyksCiAvLyBidXQgeW91IHNob3VsZCBhbHNvIGJlIGFibGUgdG8g
ZW51bWVyYXRlIHRoZW0uCi1KU1ZhbHVlKiBKU0NTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNDU1NTdHlsZURlY2xhcmF0aW9u
KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNDU1NTdHlsZURlY2xhcmF0aW9uKj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSk7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1ZhbHVlKiBKU0NTU1N0
eWxlRGVjbGFyYXRpb246Om5hbWVHZXR0CiB9CiAKIAotYm9vbCBKU0NTU1N0eWxlRGVjbGFyYXRp
b246OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCitib29sIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAg
IGlmICghaXNDU1NQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZp
c2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NT
VmFsdWUqIHZhbHVlKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uaAko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUGl4ZWxBcnJh
eUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZSog
SlNDYW52YXNQaXhlbEFycmF5OjpnZXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4
KQorICAgIGlubGluZSBKU1ZhbHVlUHRyIEpTQ2FudmFzUGl4ZWxBcnJheTo6Z2V0QnlJbmRleChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIg
cmVzdWx0OwogICAgICAgICBpZiAoIWltcGwoKS0+Z2V0KGluZGV4LCByZXN1bHQpKQpAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBKU0ltbWVkaWF0
ZTo6ZnJvbShyZXN1bHQpOwogICAgIH0KICAgICAKLSAgICBpbmxpbmUgdm9pZCBKU0NhbnZhc1Bp
eGVsQXJyYXk6OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpT
VmFsdWUqIHZhbHVlKQorICAgIGlubGluZSB2b2lkIEpTQ2FudmFzUGl4ZWxBcnJheTo6aW5kZXhT
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVB0ciB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGRvdWJsZSBwaXhlbFZhbHVlID0gdmFsdWUtPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBKU1Zh
bHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2FudmFzU3R5bGUqIHN0eWxlKQorc3RhdGljIEpT
VmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAg
ICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIEpTVmFs
dWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYQogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
dHlsZS0+Y29sb3IoKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0hU
TUxDYW52YXNTdHlsZShFeGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRy
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENh
bnZhc1N0eWxlOjpjcmVhdGUoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgpKTsKQEAgLTYzLDI3ICs2
MywyNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1MQ2FuCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VT
dHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzdHJva2VTdHlsZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRvSlMoZXhlYywgaW1wbCgpLT5zdHJva2VTdHlsZSgpKTsgICAgICAgIAogfQogCi12b2lk
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlt
cGwoKS0+c2V0U3Ryb2tlU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUoZXhlYywgdmFsdWUpKTsKIH0K
IAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpm
aWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiB0b0pTKGV4ZWMs
IGltcGwoKS0+ZmlsbFN0eWxlKCkpOwogfQogCi12b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRGaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaW1wbCgpLT5zZXRGaWxsU3R5bGUodG9IVE1MQ2Fu
dmFzU3R5bGUoZXhlYywgdmFsdWUpKTsKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZpbGxDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKIApAQCAtMTIwLDcgKzEyMCw3IEBAIEpT
VmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXQKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0gICAgCiAKLUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKIApAQCAtMTU4LDcgKzE1OCw3IEBAIEpTVmFsdWUq
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXQKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9
IGltcGwoKTsKICAgICAKQEAgLTE3Miw3ICsxNzIsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3RyCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1K
U1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKIApA
QCAtMTgyLDcgKzE4Miw3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmEKICAgICAvLyAgICAgZHJhd0ltYWdlKGltZywgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcs
IGRoKQogICAgIC8vIENvbXBvc2l0ZSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggZ2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uLgogICAgIC8vIFRoZSBpbWcgcGFyYW1ldGVyIGNhbiBiZSBhIDxp
bWc+IG9yIDxjYW52YXM+IGVsZW1lbnQuCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBhcmdzLmF0KGV4
ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlm
ICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7CkBAIC0yMzcsMTEg
KzIzNywxMSBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlRnJvbVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAgICAgCi0gICAg
SlNWYWx1ZSogdmFsdWUgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdmFsdWUg
PSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgSlNPYmplY3QqIG8gPSBh
c09iamVjdCh2YWx1ZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKIH0KIAot
SlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRTaGFkb3coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAK
QEAgLTMwMywxOCArMzAzLDE4IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCiB9CiAKLUpTVmFsdWUqIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNyZWF0ZVBhdHRlcm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAK
ICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKLSAgICBK
U1ZhbHVlKiB2YWx1ZSA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9
IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBKU09iamVjdCogbyA9IGFz
T2JqZWN0KHZhbHVlKTsKIAogICAgIGlmIChvLT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50
OjpzX2luZm8pKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIEpTVmFsdWUq
IHBhdHRlcm4gPSB0b0pTKGV4ZWMsCisgICAgICAgIEpTVmFsdWVQdHIgcGF0dGVybiA9IHRvSlMo
ZXhlYywKICAgICAgICAgICAgIGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soZXhlYywgYXJncy5hdChleGVjLCAxKSksIGVjKS5nZXQoKSk7CiAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC0zMjIsNyArMzIyLDcgQEAgSlNWYWx1ZSogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZQogICAgIH0KICAgICBpZiAoby0+aW5oZXJpdHMoJkpT
SFRNTENhbnZhc0VsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
LSAgICAgICAgSlNWYWx1ZSogcGF0dGVybiA9IHRvSlMoZXhlYywKKyAgICAgICAgSlNWYWx1ZVB0
ciBwYXR0ZXJuID0gdG9KUyhleGVjLAogICAgICAgICAgICAgY29udGV4dC0+Y3JlYXRlUGF0dGVy
bihzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1l
bnQqPihvKS0+aW1wbCgpKSwKICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKSwgZWMpLmdldCgpKTsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTMzMiw3ICszMzIsNyBAQCBKU1ZhbHVlKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
LUpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwogICAgIC8v
IHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCkBAIC0zNTAsNyArMzUwLDcgQEAgSlNWYWx1
ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogeyAKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBp
bXBsKCk7CiAKQEAgLTM2OCw3ICszNjgsNyBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnN0cm9rZVRleHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApAQCAtNjMs
NyArNjMsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6dHlwZXMoRXhlY1N0YXRlKiBlCiAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwogfQogCi1KU1ZhbHVlKiBKU0NsaXBi
b2FyZDo6Y2xlYXJEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKQEAg
LTgxLDcgKzgxLDcgQEAgSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdAog
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiY2xlYXJEYXRhOiBJbnZh
bGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKIH0KIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6Omdl
dERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0NsaXBib2FyZDo6Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBKUyBi
aW5kaW5ncyB0byB0aHJvdyBvbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMuCiAgICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDEpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTVmFsdWUqIEpTQ2xpcGJvYXJk
OjpnZXREYXRhKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgcmVzdWx0KTsK
IH0KIAotSlNWYWx1ZSogSlNDbGlwYm9hcmQ6OnNldERhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NsaXBib2FyZDo6c2V0RGF0YShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9h
cmQgPSBpbXBsKCk7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBKU1ZhbHVlKiBKU0NsaXBib2FyZDo6
c2V0RGF0YShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGpzQm9vbGVhbihjbGlwYm9hcmQtPnNldERh
dGEoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGFyZ3MuYXQoZXhlYywgMSktPnRv
U3RyaW5nKGV4ZWMpKSk7CiB9CiAKLUpTVmFsdWUqIEpTQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0NsaXBi
b2FyZDo6c2V0RHJhZ0ltYWdlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SlND
OjpQcm9maWxlPiA+IFByb2ZpbGVzQXJyYXk7CiAKLUpTVmFsdWUqIEpTQ29uc29sZTo6cHJvZmls
ZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0NvbnNvbGU6OnByb2ZpbGVz
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9m
aWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKICAgICBBcmdMaXN0IGxpc3Q7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkNhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEpTQ3VzdG9tUG9z
aXRpb25DYWxsYmFjazo6aGFuZGxlRXZlCiAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxz
ZSk7CiAgICAgCi0gICAgSlNWYWx1ZSogZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlv
biA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIp
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBv
c2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6aGFu
ZAogICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgIAotICAgIEpTVmFsdWUq
IGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRs
ZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERh
dGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVt
ZW50Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHZvaWQgSlND
dXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCiAgICAgSlNDOjpKU0xvY2sgbG9j
ayhmYWxzZSk7Ci0gICAgICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOworCisgICAgSlNWYWx1
ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJo
YW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkgewpAQCAtNzEsOSArNzEsOSBAQCB2b2lkIEpTQ3VzdG9tU1FMU3Rh
dGVtZW50Q2FsbGJhY2s6OmhhbmRsCiAgICAgICAgIH0KICAgICAgICAgZnVuY3Rpb24gPSBtX2Nh
bGxiYWNrOwogICAgIH0KLSAgICAgICAgCisKICAgICBSZWZQdHI8SlNDdXN0b21TUUxTdGF0ZW1l
bnRDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKLSAgICAgICAgCisKICAgICBBcmdMaXN0IGFyZ3M7
CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCB0cmFuc2FjdGlvbikpOwogICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoZXhlYywgcmVzdWx0U2V0KSk7CkBAIC04MSwxNCArODEsMTQgQEAgdm9pZCBKU0N1
c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbAogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRU
aW1lb3V0Q2hlY2soKTsKICAgICBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIG1fY2FsbGJhY2ssIGFyZ3MpOwogICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRDaGVj
aygpOwotICAgICAgICAKKwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAg
ICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICAKKwogICAgICAgICByYWlz
ZWRFeGNlcHRpb24gPSB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBEb2N1bWVudDo6dXBk
YXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7CiB9Ci0gICAgCisKIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3
IEBAIGJvb2wgSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjoKICAgICAgICAgCiAg
ICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGhhbmRs
ZUV2ZW50RnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
aGFuZGxlRXZlbnQiKSk7CisgICAgSlNWYWx1ZVB0ciBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbV9j
YWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAg
IENhbGxEYXRhIGhhbmRsZUV2ZW50Q2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlRXZlbnRD
YWxsVHlwZSA9IGhhbmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRhKGhhbmRsZUV2ZW50Q2Fs
bERhdGEpOwogICAgIENhbGxEYXRhIGNhbGxiYWNrQ2FsbERhdGE7CkBAIC04MCw3ICs4MCw3IEBA
IGJvb2wgSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjoKICAgICBhcmdzLmFwcGVu
ZCh0b0pTKGV4ZWMsIHRyYW5zYWN0aW9uKSk7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBl
cnJvcikpOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQ7CiAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwogICAgIGlmICho
YW5kbGVFdmVudENhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKICAgICAgICAgcmVzdWx0ID0gY2Fs
bChleGVjLCBoYW5kbGVFdmVudEZ1bmN0aW9uLCBoYW5kbGVFdmVudENhbGxUeXBlLCBoYW5kbGVF
dmVudENhbGxEYXRhLCBtX2NhbGxiYWNrLCBhcmdzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlz
aW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKU0N1
c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbgogICAgICAgICAKICAgICBKU0M6OkpTTG9j
ayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZlbnRGdW5jdGlv
biA9IG1fZGF0YS0+Y2FsbGJhY2soKS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRs
ZUV2ZW50IikpOworICAgIEpTVmFsdWVQdHIgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IG1fZGF0YS0+
Y2FsbGJhY2soKS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwog
ICAgIENhbGxEYXRhIGhhbmRsZUV2ZW50Q2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlRXZl
bnRDYWxsVHlwZSA9IGhhbmRsZUV2ZW50RnVuY3Rpb24tPmdldENhbGxEYXRhKGhhbmRsZUV2ZW50
Q2FsbERhdGEpOwogICAgIENhbGxEYXRhIGNhbGxiYWNrQ2FsbERhdGE7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBib29sIEpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiAg
ICAgICAgIAogICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwogICAgICAgICAKLSAgICBKU1Zh
bHVlKiBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJo
YW5kbGVFdmVudCIpKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRsZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CkBAIC03Niw3ICs3
Niw3IEBAIGJvb2wgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sKICAgICBBcmdM
aXN0IGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBlcnJvcikpOwogCi0gICAgSlNW
YWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIGdsb2JhbE9iamVjdC0+
c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG1fY2FsbGJhY2ssIGFyZ3MpOwogICAgIGdsb2JhbE9iamVjdC0+
c3RvcFRpbWVvdXRDaGVjaygpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZv
aWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVZvaWRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogICAgICAgICAKICAg
ICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogZnVuY3Rp
b24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQi
KSk7CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtODYsNyArODYsNyBAQCB2b2lk
IEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAgICAgRG9jdW1lbnQ6OnVwZGF0
ZURvY3VtZW50c1JlbmRlcmluZygpOwogfQogIAotUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRv
Vm9pZENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gdG9Wb2lkQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRy
IHZhbHVlKQogewogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS0+Z2V0T2JqZWN0KCk7CiAg
ICAgaWYgKCFvYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRD
YWxsYmFjay5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21Wb2lkQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICB9OwogCi0g
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENhbGxiYWNrKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHRvVm9pZENh
bGxiYWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLVBhc3NS
ZWZQdHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpj
cmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSogdmFsdWUpCitQYXNzUmVm
UHRyPEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3Jl
YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTgx
LDcgKzgxLDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgICAgIAotICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKKyAgICBK
U1ZhbHVlUHRyIGZ1bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewpAQCAtMTAwLDcgKzEwMCw3IEBA
IFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBhcmdzLmFwcGVu
ZChqc1N0cmluZyhleGVjLCBwcmVmaXgpKTsKIAogICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1l
b3V0Q2hlY2soKTsKLSAgICBKU1ZhbHVlKiByZXR2YWwgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOworICAgIEpTVmFsdWVQ
dHIgcmV0dmFsID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2N1
c3RvbVJlc29sdmVyLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2so
KTsKIAogICAgIFN0cmluZyByZXN1bHQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlciA6IHB1YmxpYyBYUGF0aE5TUmVzb2x2ZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+IGNyZWF0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlUHRyKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgfkpTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXBwbGlj
YXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIHZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrKCkKICAgICB9CiB9
CiAKLUpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01BcHBsaWNhdGlvbkNhY2hlOjph
ZGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC05MSw3ICs5MSw3IEBAIEpTVmFsdWUqIEpT
RE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKEV4ZWMKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTUFwcGxpY2F0aW9uQ2Fj
aGU6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkp
LT5pbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBK
U1ZhbHVlKiBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZShFCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtMTE2LDcgKzExNiw3IEBAIEpTVmFsdWUq
IEpTRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnQKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSogSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNE
T01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcwICszNDAsNzAgQEAgdm9pZCBtYXJr
RE9NT2JqZWN0V3JhcHBlcihKU0dsb2JhbERhdGEmIAogICAgIHdyYXBwZXItPm1hcmsoKTsKIH0K
IAotSlNWYWx1ZSoganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IHMpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBzKQogewogICAgIGlmIChzLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBqc093bmVkU3Ry
aW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKK0pTVmFsdWVQdHIg
anNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCiB7
CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICByZXR1
cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKIH0KIAotSlNWYWx1ZSoganNTdHJpbmdPclVuZGVm
aW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK0pTVmFsdWVQdHIganNTdHJp
bmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBp
ZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJu
IGpzU3RyaW5nKGV4ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIHMpOwogfQogCi1KU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEtVUkwmIHVybCkKK0pTVmFsdWVQdHIganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5nKCkpOwog
fQogCi1KU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
S1VSTCYgdXJsKQorSlNWYWx1ZVB0ciBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5n
KCkpOwogfQogCi1KU1ZhbHVlKiBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBLVVJMJiB1cmwpCitKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNCb29sZWFuKGZhbHNlKTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXJsLnN0cmlu
ZygpKTsKIH0KIAotVVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorVVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVj
ayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKICAgICByZXR1cm4gdmFsdWUtPnRv
U3RyaW5nKGV4ZWMpOwogfQogCi1VU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK1VTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQ
dHIgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gVVN0cmluZygpOwogICAgIHJldHVybiB2YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiB9
CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiBl
eGNlcHRpb24pCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZVB0ciBleGNlcHRpb24pCiB7CiAgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRp
b24tPnRvU3RyaW5nKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QgPSBleGNl
cHRpb24tPnRvT2JqZWN0KGV4ZWMpOwpAQCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGUKIAogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMt
PmV4Y2VwdGlvbigpOworICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9u
KCk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXBvcnRFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKIH0KQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uOwogICAgIGdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihlYywgZGVzY3JpcHRpb24p
OwogCi0gICAgSlNWYWx1ZSogZXJyb3JPYmplY3QgPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0
ciBlcnJvck9iamVjdCA9IG5vVmFsdWUoKTsKICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUp
IHsKICAgICAgICAgY2FzZSBET01FeGNlcHRpb25UeXBlOgogICAgICAgICAgICAgZXJyb3JPYmpl
Y3QgPSB0b0pTKGV4ZWMsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwpA
QCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSog
ZnIKICAgICAgICAgd2luZG93LT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotSlNW
YWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQ
dHIgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1
cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIG9i
amVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgY2FjaGVET01PYmplY3RXcmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0
LCB3cmFwcGVyKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQotICAgIHRlbXBsYXRl
PGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUq
IGdldERPTU9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBvYmpl
Y3QpCisgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5s
aW5lIEpTQzo6SlNWYWx1ZVB0ciBnZXRET01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBET01DbGFzcyogb2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGNhY2hlRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxE
YXRhKCksIG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBXcmFwcGVyQ2xhc3MsIGNsYXNzIERPTUNsYXNzPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlKiBnZXRET01PYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBE
T01DbGFzcyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQorICAgIHRlbXBsYXRlPGNsYXNz
IFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWVQdHIgZ2V0
RE9NT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgRE9NQ2xhc3MqIG9iamVjdCwg
U1ZHRWxlbWVudCogY29udGV4dCkKICAgICB7CiAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBjYWNoZURPTU5vZGVXcmFwcGVyKG5vZGUtPmRvY3VtZW50KCks
IG5vZGUsIHdyYXBwZXIpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzLCBjbGFzcyBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNW
YWx1ZSogZ2V0RE9NTm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIERPTUNsYXNzKiBu
b2RlKQorICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3MgRE9NQ2xhc3M+IGlu
bGluZSBKU0M6OkpTVmFsdWVQdHIgZ2V0RE9NTm9kZVdyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIERPTUNsYXNzKiBub2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CkBAIC0xNDcsMjkgKzE0NywyOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjb25zdCBKU0M6Okhhc2hUYWJsZSogZ2V0SGFzaFRhYmxlRm9yR2xv
YmFsRGF0YShKU0M6OkpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBzdGF0aWNU
YWJsZSk7CiAKLSAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSogZXhjZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciBleGNlcHRpb24pOwogICAgIHZvaWQgcmVwb3J0Q3VycmVu
dEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgLy8gQ29udmVydCBhIERPTSBpbXBs
ZW1lbnRhdGlvbiBleGNlcHRpb24gY29kZSBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4g
dGhlIGV4ZWN1dGlvbiBzdGF0ZS4KICAgICB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEV4Y2VwdGlvbkNvZGUpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yTnVs
bChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBudWxsIGlmIHRoZSBzdHJpbmcg
aXMgbnVsbAotICAgIEpTQzo6SlNWYWx1ZSoganNTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBLVVJMJik7IC8vIG51bGwgaWYgdGhlIFVSTCBpcyBudWxsCisgICAgSlNDOjpKU1Zh
bHVlUHRyIGpzU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8v
IG51bGwgaWYgdGhlIHN0cmluZyBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3RyaW5n
T3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VSTCYpOyAvLyBudWxsIGlmIHRoZSBVUkwg
aXMgbnVsbAogCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51
bGwKLSAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBLVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKKyAgICBKU0M6
OkpTVmFsdWVQdHIganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCisgICAgSlNDOjpKU1Zh
bHVlUHRyIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7
IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKIAotICAgIEpTQzo6SlNWYWx1ZSoganNT
dHJpbmdPckZhbHNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIGJvb2xlYW4g
ZmFsc2UgaWYgdGhlIHN0cmluZyBpcyBudWxsCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1N0cmluZ09y
RmFsc2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYg
dGhlIFVSTCBpcyBudWxsCisgICAgSlNDOjpKU1ZhbHVlUHRyIGpzU3RyaW5nT3JGYWxzZShKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJp
bmcgaXMgbnVsbAorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1N0cmluZ09yRmFsc2UoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIGJvb2xlYW4gZmFsc2UgaWYgdGhlIFVSTCBpcyBudWxs
CiAKICAgICAvLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQgYmUg
dXNlZCBmb3IgYW55IFVTdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKICAg
ICAvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBK
U1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgotICAgIEpTQzo6SlNW
YWx1ZSoganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6VVN0
cmluZyYpOyAKKyAgICBKU0M6OkpTVmFsdWVQdHIganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6VVN0cmluZyYpOyAKIAotICAgIEpTQzo6VVN0cmluZyB2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopOyAv
LyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCi0gICAgSlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUq
KTsgLy8gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQKKyAgICBKU0M6OlVT
dHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWVQdHIpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCisgICAgSlNDOjpVU3RyaW5n
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWVQdHIpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5l
ZAogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUqIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8VD4gcHRyKSB7IHJldHVybiB0b0pTKGV4
ZWMsIHB0ci5nZXQoKSk7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6
SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFQ+IHB0cikg
eyByZXR1cm4gdG9KUyhleGVjLCBwdHIuZ2V0KCkpOyB9CiAKICAgICBib29sIGNoZWNrTm9kZVNl
Y3VyaXR5KEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopOwogCkBAIC0xNzksNyArMTc5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEpTQzo6RXhl
Y1N0YXRlKiwgRnJhbWUqKTsKICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShKU0M6OkV4
ZWNTdGF0ZSosIEZyYW1lKiwgU3RyaW5nJiBtZXNzYWdlKTsKICAgICB2b2lkIHByaW50RXJyb3JN
ZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIEpTQzo6
SlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5U2xv
dCYpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9t
Tm9kZShOb2RlKik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSlNET01H
bG9iYWxPYmplY3Q6Om1hcmsoKQogICAgIH0KIH0KIAotSlNFdmVudExpc3RlbmVyKiBKU0RPTUds
b2JhbE9iamVjdDo6ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxp
bmUpCitKU0V2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kSlNFdmVudExpc3Rl
bmVyKEpTVmFsdWVQdHIgdmFsLCBib29sIGlzSW5saW5lKQogewogICAgIGlmICghdmFsLT5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk1LDcgKzk1LDcgQEAgSlNFdmVudExpc3Rl
bmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZAogICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KG9i
amVjdCk7CiB9CiAKLVBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVj
dDo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUqIHZhbCwg
Ym9vbCBpc0lubGluZSkKK1Bhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9i
amVjdDo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIg
dmFsLCBib29sIGlzSW5saW5lKQogewogICAgIGlmIChKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gZmluZEpTRXZlbnRMaXN0ZW5lcih2YWwsIGlzSW5saW5lKSkKICAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOwpAQCAtMTA3LDcgKzEwNyw3IEBAIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBK
U0RPTUdsb2JhbE8KICAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3Qo
dmFsKSwgdGhpcywgaXNJbmxpbmUpLmdldCgpOwogfQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJbmxpbmUpCitKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lciogSlNET01HbG9iYWxPYmplY3Q6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBp
ZiAoIXZhbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTYsNyArMTE2LDcg
QEAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsTwogICAgIHJldHVybiBs
aXN0ZW5lcnMuZ2V0KGFzT2JqZWN0KHZhbCkpOwogfQogCi1QYXNzUmVmUHRyPEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyPiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaXNJ
bmxpbmUpCitQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBKU0RPTUdsb2Jh
bE9iamVjdDo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUHRyIHZhbCwgYm9vbCBpc0lubGluZSkKIHsKICAgICBpZiAoSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyKGV4ZWMsIHZhbCwgaXNJbmxpbmUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAzOTYw
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsMTYgKzU0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QgPSAwOwogCiAgICAgICAgIC8vIEZpbmRzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVu
ZXIsIHJldHVybnMgMCBpZiBubyBleGlzdGluZyBvbmUuCi0gICAgICAgIEpTRXZlbnRMaXN0ZW5l
ciogZmluZEpTRXZlbnRMaXN0ZW5lcihKU0M6OkpTVmFsdWUqLCBib29sIGlzSW5saW5lID0gZmFs
c2UpOworICAgICAgICBKU0V2ZW50TGlzdGVuZXIqIGZpbmRKU0V2ZW50TGlzdGVuZXIoSlNDOjpK
U1ZhbHVlUHRyLCBib29sIGlzSW5saW5lID0gZmFsc2UpOwogCiAgICAgICAgIC8vIEZpbmRzIG9y
IGNyZWF0ZXMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5l
ciBvYmplY3QgaXMgR0MtcHJvdGVjdGVkLgotICAgICAgICBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0
ZW5lcj4gZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxKU0V2
ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBG
aW5kcyBhIHdyYXBwZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVudExpc3RlbmVyLCByZXR1
cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25lLgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKiwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqIGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAg
ICAvLyBGaW5kcyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpT
IEV2ZW50TGlzdGVuZXIgb2JqZWN0IGlzICpOT1QqIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFz
c1JlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGlz
SW5saW5lID0gZmFsc2UpOworICAgICAgICBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyPiBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKIAogICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+IExpc3Rl
bmVyc01hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6SlNPYmplY3QqLCBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcio+IFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDI5ICs2OSwyOSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgSlNWYWx1
ZSogd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBj
b25zdCBBcmdMaXN0Jik7Ci1zdGF0aWMgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jU2hvd01vZGFs
RGlhbG9nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
LXN0YXRpYyBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNOb3RJbXBsZW1lbnRlZChFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7Ci0KLXN0YXRpYyBKU1ZhbHVl
KiBqc0RPTVdpbmRvd0Jhc2VDcnlwdG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZUV2ZW50
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0
YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZSopOworc3RhdGljIEpTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1Zh
bHVlUHRyIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIHdpbmRv
d1Byb3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
ciwgY29uc3QgQXJnTGlzdCYpOworCitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VD
cnlwdG8oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
Oworc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAog
Ly8gQ29uc3RydWN0b3JzCi1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGlj
IHZvaWQgc2V0SlNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKik7Ci1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7Ci1z
dGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKik7Ci1zdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsK
LXN0YXRpYyBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQgc2V0SlNET01X
aW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwotc3RhdGlj
IEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLXN0YXRpYyB2b2lkIHNldEpTRE9N
V2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSop
Owotc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotc3RhdGljIHZvaWQg
c2V0SlNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lk
IHNldEpTRE9NV2luZG93QmFzZUF1ZGlvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0
cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRK
U0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOwor
c3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQg
c2V0SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlUHRyKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMg
dm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlUHRyKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9p
ZCBzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRp
YyB2b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0cik7CitzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VYU0xU
UHJvY2Vzc29yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKK3N0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIAogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFz
ZS5sdXQuaCIKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBwYXJzZU1vZGEKIH0KIAogc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRXhlY1N0YXRl
KiBleGVjLCBGcmFtZSogb3BlbmVyRnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLAotICAgIGNvbnN0
IFN0cmluZyYgZnJhbWVOYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMs
IEpTVmFsdWUqIGRpYWxvZ0FyZ3MpCisgICAgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0
IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgSlNWYWx1ZVB0ciBkaWFsb2dBcmdzKQog
ewogICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7
CkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNv
bnN0IAogICAgIHJldHVybiBwYWdlLT5jaHJvbWUoKS0+Y2FuUnVuTW9kYWxOb3coKTsKIH0KIAot
c3RhdGljIEpTVmFsdWUqIHNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIEpTVmFsdWUqIGRpYWxvZ0FyZ3MsIGNvbnN0IFN0cmlu
ZyYgZmVhdHVyZUFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBzaG93TW9kYWxEaWFsb2coRXhlY1N0
YXRlKiBleGVjLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBKU1ZhbHVlUHRyIGRp
YWxvZ0FyZ3MsIGNvbnN0IFN0cmluZyYgZmVhdHVyZUFyZ3MpCiB7CiAgICAgaWYgKCFjYW5TaG93
TW9kYWxEaWFsb2dOb3coZnJhbWUpIHx8ICFhbGxvd1BvcFVwKGV4ZWMpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSogc2hv
d01vZGFsRGlhbG9nKEV4ZWNTdGF0CiAKICAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1ZSBlaXRo
ZXIganVzdCBiZWZvcmUgY2xlYXJpbmcgdGhlIGRpYWxvZyB3aW5kb3cncwogICAgIC8vIHByb3Bl
cnRpZXMgKGluIEpTRE9NV2luZG93QmFzZTo6Y2xlYXIpLCBvciB3aGVuIG9uIHJldHVybiBmcm9t
IHJ1bk1vZGFsLgotICAgIEpTVmFsdWUqIHJldHVyblZhbHVlID0gbm9WYWx1ZSgpOworICAgIEpT
VmFsdWVQdHIgcmV0dXJuVmFsdWUgPSBub1ZhbHVlKCk7CiAgICAgZGlhbG9nV2luZG93LT5zZXRS
ZXR1cm5WYWx1ZVNsb3QoJnJldHVyblZhbHVlKTsKICAgICBkaWFsb2dGcmFtZS0+cGFnZSgpLT5j
aHJvbWUoKS0+cnVuTW9kYWwoKTsKICAgICBkaWFsb2dXaW5kb3ctPnNldFJldHVyblZhbHVlU2xv
dCgwKTsKQEAgLTM1NSwxMiArMzU1LDEyIEBAIHN0YXRpYyBKU1ZhbHVlKiBzaG93TW9kYWxEaWFs
b2coRXhlY1N0YXQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIGpzRE9N
V2luZG93QmFzZUNyeXB0byhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JikKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlQ3J5cHRvKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOyAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKIH0KIAotSlNWYWx1ZSoganNE
T01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VFdmVudChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CkBAIC0zNjksMTQgKzM2OSwxNCBAQCBKU1ZhbHVlKiBqc0RPTVdpbmRv
d0Jhc2VFdmVudChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8
SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmN1cnJlbnRFdmVu
dCgpKTsKIH0KIAotSlNWYWx1ZSoganNET01XaW5kb3dCYXNlSW1hZ2UoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0
ciBqc0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RP
TVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTSW1hZ2VDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOwogfQogCi1KU1ZhbHVlKiBq
c0RPTVdpbmRvd0Jhc2VNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93
QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICNpZiBFTkFCTEUoQ0hBTk5FTF9NRVNTQUdJTkcp
CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTM4NywyMSArMzg3LDIxIEBA
IEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEUKICNlbmRpZgogfQogCi1K
U1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRv
d0Jhc2VPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNl
Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU09wdGlvbkNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2Uq
Pihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKSk7CiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93
QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWE1MSHR0
cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93
QmFzZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKIH0KIAotSlNWYWx1ZSoganNET01X
aW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykp
CkBAIC00MTQsNyArNDE0LDcgQEAgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0
YXRlKgogI2VuZGlmCiB9CiAKLUpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAjaWYgRU5BQkxFKFdPUktF
UlMpCiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90
LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTQyNSw3ICs0MjUsNyBA
QCBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlCiAjZW5kaWYKIH0KIAot
SlNWYWx1ZSoganNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIGpz
RE9NV2luZG93QmFzZVhTTFRQcm9jZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogI2lmIEVOQUJMRShYU0xUKQogICAg
IGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC00MzYsNyArNDM2LDcgQEAgSlNWYWx1
ZSoganNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeAogI2VuZGlmCiB9CiAKLXZvaWQgc2V0
SlNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZUV2ZW50KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAg
aWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNj
ZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQg
c2V0SlNET01XaW5kb3dCYXNlRXZlbnQoRXhlY1N0YXRlKiAKICAgICBzdGF0aWNfY2FzdDxKU0RP
TVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkV2
ZW50IiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0
SlNET01XaW5kb3dCYXNlQXVkaW8oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93
QmFzZSo+KHRoaXNPYmplY3QpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1
cm47CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVj
U3RhdGUqIAogICAgIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRoaXNPYmplY3QpLT5w
dXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiQXVkaW8iKSwgdmFsdWUpOwogfQogCi12b2lkIHNl
dEpTRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VJbWFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0Fj
Y2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lk
IHNldEpTRE9NV2luZG93QmFzZUltYWdlKEV4ZWNTdGF0ZSogCiAgICAgc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJJ
bWFnZSIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlTWVzc2FnZUNoYW5u
ZWwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIHNldEpTRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0
aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShl
eGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHZvaWQgc2V0SlNET01X
aW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jh
c2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIk1lc3NhZ2VDaGFu
bmVsIiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VPcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSogdmFsdWUpCit2b2lkIHNl
dEpTRE9NV2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5k
b3dCYXNlKj4odGhpc09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAgICAgICAgIHJl
dHVybjsKQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIHNldEpTRE9NV2luZG93QmFzZU9wdGlvbihF
eGVjU3RhdGUqCiAgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCkt
PnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJPcHRpb24iKSwgdmFsdWUpOwogfQogCi12b2lk
IHNldEpTRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7
CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxs
b3dzQWNjZXNzRnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSoKICAgICBzdGF0aWNfY2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhl
YywgIldvcmtlciIpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgc2V0SlNET01XaW5kb3dCYXNlWE1MSHR0
cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSog
dmFsdWUpCit2b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYg
KCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNz
RnJvbShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXgKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlhNTEh0
dHBSZXF1ZXN0IiksIHZhbHVlKTsKIH0KIAotdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJv
Y2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUqIHZh
bHVlKQordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTAyLDE3ICs1MDIsMTcgQEAgdm9pZCBzZXRK
U0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yKEV4ZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvd0Jhc2U6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvd0Jhc2UqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpLT5mcmFtZSgpLT50
cmVlKCktPmNoaWxkKEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKS0+ZG9tV2luZG93KCkpOwog
fQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvd0Jhc2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQ
dHIgSlNET01XaW5kb3dCYXNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChzbG90LmluZGV4KCkpLT5kb21X
aW5kb3coKSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVtR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93QmFzZTo6bmFtZWRJdGVt
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSk7CiAgICAgRG9jdW1lbnQqIGRvYyA9IHRoaXNPYmotPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKQEAgLTU1Niw3ICs1NTYsNyBAQCBib29sIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90CiAKICAgICAvLyBEbyBwcm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRoYXQgZnVu
Y3Rpb25zIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKICAgICAvLyBw
cmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKLSAgICBKU1ZhbHVl
KiBwcm90byA9IHByb3RvdHlwZSgpOworICAgIEpTVmFsdWVQdHIgcHJvdG8gPSBwcm90b3R5cGUo
KTsKICAgICBpZiAocHJvdG8tPmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKGFzT2JqZWN0KHBy
b3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAg
ICAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTU5NCw3ICs1OTQsNyBAQCBi
b29sIEpTRE9NV2luZG93QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lk
IEpTRE9NV2luZG93QmFzZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9p
ZCBKU0RPTVdpbmRvd0Jhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBKU0RPTVdpbmRvd0Jhc2VUYWJsZS5lbnRy
eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChlbnRyeSkgewpAQCAtNzE3LDcgKzcxNyw3
IEBAIEpTR2xvYmFsRGF0YSogSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0cKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLUpTVmFsdWUqIHdpbmRvd1Byb3RvRnVuY09wZW4oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlKTsKICAgICBpZiAo
IXdpbmRvdykKQEAgLTc4OCw3ICs3ODgsNyBAQCBKU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNPcGVu
KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygpKTsg
Ly8gZ2xvYmFsIG9iamVjdAogfQogCi1KU1ZhbHVlKiB3aW5kb3dQcm90b0Z1bmNTaG93TW9kYWxE
aWFsb2coRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgd2luZG93UHJvdG9GdW5jU2hvd01vZGFsRGlh
bG9nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdp
bmRvdyh0aGlzVmFsdWUpOwogICAgIGlmICghd2luZG93KQpAQCAtODAzLDcgKzgwMyw3IEBAIEpT
VmFsdWUqIHdpbmRvd1Byb3RvRnVuY1Nob3dNb2RhbERpYWxvZygKICAgICByZXR1cm4gc2hvd01v
ZGFsRGlhbG9nKGV4ZWMsIGZyYW1lLCB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkpLCBhcmdzLmF0KGV4ZWMsIDEpLCB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMikpKTsKIH0K
IAotSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jTm90SW1wbGVtZW50ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
UHRyIHdpbmRvd1Byb3RvRnVuY05vdEltcGxlbWVudGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgaWYgKCF0
b0pTRE9NV2luZG93KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CkBAIC04MTIsNyArODEyLDcgQEAgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5j
Tm90SW1wbGVtZW50ZWQoRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01XaW5k
b3dCYXNlOjpzZXRSZXR1cm5WYWx1ZVNsb3QoSlNWYWx1ZSoqIHNsb3QpCit2b2lkIEpTRE9NV2lu
ZG93QmFzZTo6c2V0UmV0dXJuVmFsdWVTbG90KEpTVmFsdWVQdHIqIHNsb3QpCiB7CiAgICAgZCgp
LT5yZXR1cm5WYWx1ZVNsb3QgPSBzbG90OwogfQpAQCAtODI5LDcgKzgyOSw3IEBAIGludCBKU0RP
TVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KGNvbnMKICAgICByZXR1cm4gaW5zdGFsbFRpbWVv
dXQobmV3IFNjaGVkdWxlZEFjdGlvbihoYW5kbGVyKSwgdCwgc2luZ2xlU2hvdCk7CiB9CiAKLWlu
dCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogZnVuYywgY29uc3QgQXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2lu
dCBKU0RPTVdpbmRvd0Jhc2U6Omluc3RhbGxUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZVB0ciBmdW5jLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQog
ewogICAgIHJldHVybiBpbnN0YWxsVGltZW91dChuZXcgU2NoZWR1bGVkQWN0aW9uKGV4ZWMsIGZ1
bmMsIGFyZ3MpLCB0LCBzaW5nbGVTaG90KTsKIH0KQEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIEpT
RE9NV2luZG93QmFzZTo6ZGlzY29ubmVjdEZyYW1lKCkKIHsKIH0KIAotSlNWYWx1ZSogdG9KUyhF
eGVjU3RhdGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3Rh
dGUqLCBET01XaW5kb3cqIGRvbVdpbmRvdykKIHsKICAgICBpZiAoIWRvbVdpbmRvdykKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtODYwLDcgKzg2MCw3IEBAIEpTRE9NV2luZG93KiB0b0pT
RE9NV2luZG93KEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5k
b3dTaGVsbCgpLT53aW5kb3coKTsKIH0KIAotSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNW
YWx1ZSogdmFsdWUpCitKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU1ZhbHVlUHRyIHZhbHVl
KQogewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDE2ICs2MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlzY29u
bmVjdEZyYW1lKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0
eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIsIEpTQzo6UHV0
UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KGNvbnN0IEpTQzo6
VVN0cmluZyYgaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgICAgIGludCBp
bnN0YWxsVGltZW91dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSogZnVuY3Rpb24sIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAg
IGludCBpbnN0YWxsVGltZW91dChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZVB0ciBmdW5j
dGlvbiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsK
ICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCiAgICAgICAgIHZv
aWQgY2xlYXIoKTsKIAogICAgICAgICAvLyBTZXQgYSBwbGFjZSB0byBwdXQgYSBkaWFsb2cgcmV0
dXJuIHZhbHVlIHdoZW4gdGhlIHdpbmRvdyBpcyBjbGVhcmVkLgotICAgICAgICB2b2lkIHNldFJl
dHVyblZhbHVlU2xvdChKU0M6OkpTVmFsdWUqKiBzbG90KTsKKyAgICAgICAgdm9pZCBzZXRSZXR1
cm5WYWx1ZVNsb3QoSlNDOjpKU1ZhbHVlUHRyKiBzbG90KTsKIAogICAgICAgICB2aXJ0dWFsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkBAIC0xMDEsMTMg
KzEwMSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIFJlZlB0cjxET01X
aW5kb3c+IGltcGw7CiAKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xv
dDsKKyAgICAgICAgICAgIEpTQzo6SlNWYWx1ZVB0ciogcmV0dXJuVmFsdWVTbG90OwogICAgICAg
ICAgICAgSlNET01XaW5kb3dTaGVsbCogc2hlbGw7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSogY2hpbGRGcmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUqIGluZGV4R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSogbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZVB0ciBjaGlsZEZyYW1lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWVQdHIgbmFtZWRJdGVtR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICB2
b2lkIGNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpOwogICAgICAgICBpbnQgaW5zdGFsbFRp
bWVvdXQoU2NoZWR1bGVkQWN0aW9uKiwgaW50IGludGVydmFsLCBib29sIHNpbmdsZVNob3QpOwpA
QCAtMTE5LDExICsxMTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAgICAv
LyBSZXR1cm5zIGEgSlNET01XaW5kb3cgb3IganNOdWxsKCkKLSAgICBKU0M6OkpTVmFsdWUqIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyopOwogCiAgICAgLy8gUmV0dXJucyBKU0RPTVdp
bmRvdyBvciAwCiAgICAgSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJhbWUqKTsKLSAgICBK
U0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU0M6OkpTVmFsdWUqKTsKKyAgICBKU0RPTVdpbmRv
dyogdG9KU0RPTVdpbmRvdyhKU0M6OkpTVmFsdWVQdHIpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6
ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZQogICAgIEJhc2U6OmRlZmluZVNldHRlcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNldHRlckZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6Omxv
b2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6Omxvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBPbmx5IGFsbG93IGxv
b2tpbmctdXAgZ2V0dGVycyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgogICAgIGlmICgh
YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU0RP
TVdpbmRvdzo6bG9va3VwR2V0dGVyKEV4ZWNTCiAgICAgcmV0dXJuIEJhc2U6Omxvb2t1cEdldHRl
cihleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6bG9va3Vw
U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
SlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIC8vIE9ubHkgYWxsb3cgbG9va2lu
Zy11cCBzZXR0ZXJzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCiAgICAgaWYgKCFhbGxv
d3NBY2Nlc3NGcm9tKGV4ZWMpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIEpTVmFsdWUqIEpTRE9NV2lu
ZG93Ojpsb29rdXBTZXR0ZXIoRXhlY1MKICAgICByZXR1cm4gQmFzZTo6bG9va3VwU2V0dGVyKGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTRE9NV2luZG93OjpzZXRMb2Nh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGFj
dGl2ZUZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5p
bXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgfQogfQogCi1K
U1ZhbHVlKiBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIERPTVdpbmRvdyogd2luZG93
ID0gaW1wbCgpOwogCkBAIC0xNzUsOSArMTc1LDkgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OnBv
c3RNZXNzYWdlKEV4ZWNTdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMg
SlNWYWx1ZSogc2V0VGltZW91dE9ySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBKU0RPTVdpbmRv
dyogd2luZG93LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBib29sIHRpbWVvdXQpCitzdGF0aWMgSlNW
YWx1ZVB0ciBzZXRUaW1lb3V0T3JJbnRlcnZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NV2luZG93
KiB3aW5kb3csIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGJvb2wgdGltZW91dCkKIHsKLSAgICBKU1Zh
bHVlKiB2ID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4
ZWMsIDApOwogICAgIGludCBkZWxheSA9IGFyZ3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYyk7
CiAgICAgaWYgKHYtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCB3
aW5kb3ctPmluc3RhbGxUaW1lb3V0KGFzU3RyaW5nKHYpLT52YWx1ZSgpLCBkZWxheSwgdGltZW91
dCkpOwpAQCAtMTg5LDM0ICsxODksMzQgQEAgc3RhdGljIEpTVmFsdWUqIHNldFRpbWVvdXRPcklu
dGVydmFsKEV4ZQogICAgIHJldHVybiBqc051bWJlcihleGVjLCB3aW5kb3ctPmluc3RhbGxUaW1l
b3V0KGV4ZWMsIHYsIGFyZ3NUYWlsLCBkZWxheSwgdGltZW91dCkpOwogfQogCi1KU1ZhbHVlKiBK
U0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4gc2V0VGltZW91dE9ySW50ZXJ2YWwo
ZXhlYywgdGhpcywgYXJncywgdHJ1ZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVh
clRpbWVvdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU0RPTVdpbmRvdzo6Y2xlYXJUaW1lb3V0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICByZW1vdmVUaW1lb3V0KGFyZ3MuYXQoZXhlYywgMCktPnRvSW50MzIo
ZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdp
bmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBzZXRUaW1lb3V0T3JJbnRlcnZhbChleGVj
LCB0aGlzLCBhcmdzLCBmYWxzZSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjpjbGVhcklu
dGVydmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNET01XaW5kb3c6OmNsZWFySW50ZXJ2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIHJlbW92ZVRpbWVvdXQoYXJncy5hdChleGVjLCAwKS0+dG9JbnQzMihl
eGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2lu
ZG93OjphdG9iKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNET01XaW5kb3c6OmF0b2IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIEpTVmFs
dWUqIHYgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgdiA9IGFyZ3MuYXQoZXhl
YywgMCk7CiAgICAgaWYgKHYtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4ganNFbXB0eVN0cmlu
ZyhleGVjKTsKIApAQCAtMjM3LDEyICsyMzcsMTIgQEAgSlNWYWx1ZSogSlNET01XaW5kb3c6OmF0
b2IoRXhlY1N0YXRlKiBleAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBTdHJpbmcob3V0LmRh
dGEoKSwgb3V0LnNpemUoKSkpOwogfQogCi1KU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRE9NV2luZG93
OjpidG9hKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAo
YXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKLSAgICBKU1ZhbHVlKiB2ID0gYXJncy5h
dChleGVjLCAwKTsKKyAgICBKU1ZhbHVlUHRyIHYgPSBhcmdzLmF0KGV4ZWMsIDApOwogICAgIGlm
ICh2LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAKQEAg
LTI2Miw3ICsyNjIsNyBAQCBKU1ZhbHVlKiBKU0RPTVdpbmRvdzo6YnRvYShFeGVjU3RhdGUqIGV4
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgp
KSk7CiB9CiAKLUpTVmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNET01XaW5kb3c6OmFk
ZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAt
Mjc2LDcgKzI3Niw3IEBAIEpTVmFsdWUqIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEUK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3c6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5m
cmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0yOTAsNyArMjkwLDcgQEAgSlNWYWx1ZSogSlNE
T01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1ET01XaW5kb3cqIHRvRE9NV2luZG93KEpTVmFsdWUqIHZhbHVlKQorRE9NV2luZG93KiB0
b0RPTVdpbmRvdyhKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzAyLDIyICszMDIsMjIgQEAgRE9NV2luZG93KiB0
b0RPTVdpbmRvdyhKU1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gMDsKIH0KIAotSlNWYWx1ZSog
bm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVl
UHRyIG5vbkNhY2hpbmdTdGF0aWNDbG9zZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewog
ICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5
TmFtZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkNsb3NlKTsKIH0KIAotSlNWYWx1ZSog
bm9uQ2FjaGluZ1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQ
dHIgbm9uQ2FjaGluZ1N0YXRpY0JsdXJGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAg
ICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25CbHVyKTsKIH0KIAotSlNWYWx1ZSogbm9u
Q2FjaGluZ1N0YXRpY0ZvY3VzRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1ZhbHVlUHRy
IG5vbkNhY2hpbmdTdGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAg
IHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFt
ZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvbkZvY3VzKTsKIH0KIAotSlNWYWx1ZSogbm9u
Q2FjaGluZ1N0YXRpY1Bvc3RNZXNzYWdlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYpCitKU1Zh
bHVlUHRyIG5vbkNhY2hpbmdTdGF0aWNQb3N0TWVzc2FnZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDIs
IHByb3BlcnR5TmFtZSwganNET01XaW5kb3dQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKTsK
IH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTAgQEAgaW5saW5lIGNvbnN0IEpTRE9NV2luZG93KiBh
c0pTRE9NV2luZG93KAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvdyo+
KGdsb2JhbE9iamVjdCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Nsb3Nl
RnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBj
b25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwotSlNDOjpKU1ZhbHVlKiBub25DYWNoaW5nU3RhdGlj
Qmx1ckZ1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLUpTQzo6SlNWYWx1ZSogbm9uQ2FjaGluZ1N0
YXRpY0ZvY3VzRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50
aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwotSlNDOjpKU1ZhbHVlKiBub25DYWNo
aW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CitKU0M6OkpTVmFs
dWVQdHIgbm9uQ2FjaGluZ1N0YXRpY0Nsb3NlRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOworSlND
OjpKU1ZhbHVlUHRyIG5vbkNhY2hpbmdTdGF0aWNCbHVyRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYp
OworSlNDOjpKU1ZhbHVlUHRyIG5vbkNhY2hpbmdTdGF0aWNGb2N1c0Z1bmN0aW9uR2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKK0pTQzo6SlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljUG9zdE1lc3NhZ2VGdW5j
dGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU0RPTVdpbmRvdzo6
Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBA
IC0xMjMsNyArMTIzLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTRE9NV2luZG93OjpjdXN0b21H
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgSlNET01XaW5kb3c6OmN1c3Rv
bVB1dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSogdmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90JiBzbG90KQor
aW5saW5lIGJvb2wgSlNET01XaW5kb3c6OmN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1
ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFpbXBsKCktPmZyYW1l
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEyICs4MiwxMiBAQCBi
b29sIEpTRE9NV2luZG93U2hlbGw6OmdldE93blByb3BlcnR5U2xvCiAgICAgcmV0dXJuIG1fd2lu
ZG93LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
dm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit2b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIG1fd2luZG93LT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0V2l0aEF0dHJpYnV0ZXMoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXRXaXRoQXR0
cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBtX3dpbmRvdy0+
cHV0V2l0aEF0dHJpYnV0ZXMoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcyk7
CiB9CkBAIC0xMTcsMTIgKzExNywxMiBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OmRlZmluZVNl
dHRlcihFeGVjCiAgICAgbV93aW5kb3ctPmRlZmluZVNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUs
IHNldHRlckZ1bmN0aW9uKTsKIH0KIAotSlNWYWx1ZSogSlNET01XaW5kb3dTaGVsbDo6bG9va3Vw
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
SlNWYWx1ZVB0ciBKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIG1fd2luZG93
LT5sb29rdXBHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNET01X
aW5kb3dTaGVsbDo6bG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvd1NoZWxsOjpsb29rdXBTZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgcmV0dXJuIG1fd2luZG93LT5sb29rdXBTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0K
QEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkKiBKU0RPTVdpbmRvd1NoZWxsOjpvcGVyYXRvciBuZXco
c2l6CiAvLyBDb252ZXJzaW9uIG1ldGhvZHMKIC8vIC0tLS0KIAotSlNWYWx1ZSogdG9KUyhFeGVj
U3RhdGUqLCBGcmFtZSogZnJhbWUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiwgRnJhbWUq
IGZyYW1lKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAzOTYwMykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90KTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0
cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJvdG90eXBlKSAKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6
OkpTVmFsdWVQdHIgcHJvdG90eXBlKSAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSkpOyAKICAgICAgICAgfQpAQCAtNjksMjIgKzY5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAgICAgdmlydHVhbCBKU0M6OlVT
dHJpbmcgY2xhc3NOYW1lKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0
V2l0aEF0dHJpYnV0ZXMoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlUHRyLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEF0dHJpYnV0ZXMoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlUHRyLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5QXR0
cmlidXRlcyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
ZWZpbmVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24pOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVmaW5lU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqIHNldHRlckZ1bmN0aW9uKTsKLSAgICAgICAg
dmlydHVhbCBKU0M6OkpTVmFsdWUqIGxvb2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWUqIGxvb2t1cFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgbG9va3Vw
R2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciBsb29rdXBTZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IHZpcnR1YWwgSlNDOjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0KCk7CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2lu
Zm87IH0KIAogICAgICAgICBKU0RPTVdpbmRvdyogbV93aW5kb3c7CiAgICAgfTsKIAotICAgIEpT
Qzo6SlNWYWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKik7CisgICAgSlNDOjpKU1Zh
bHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSopOwogICAgIEpTRE9NV2luZG93U2hl
bGwqIHRvSlNET01XaW5kb3dTaGVsbChGcmFtZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUqIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0RhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBTdHJpbmcgb2xkVmVyc2lvbiA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMp
OwogICAgIFN0cmluZyBuZXdWZXJzaW9uID0gYXJncy5hdChleGVjLCAxKS0+dG9TdHJpbmcoZXhl
Yyk7CkBAIC04Niw3ICs4Niw3IEBAIEpTVmFsdWUqIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24o
RXhlY1MKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNPYmplY3QqIG9iamVjdDsKICAgICAKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw3IEBAIHZvaWQgSlNEb2N1bWVudDo6bWFyaygpCiAgICAgbWFya0FjdGl2ZU9i
amVjdHNGb3JDb250ZXh0KCpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCksIGltcGwoKSk7
CiB9CiAKLUpTVmFsdWUqIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWVQdHIgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaW1wbCgpKS0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNTgsNyArNTgsNyBAQCBKU1ZhbHVlKiBKU0Rv
Y3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUt
PmRvbVdpbmRvdygpLT5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBKU0RvY3VtZW50OjpzZXRMb2Nh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0RvY3VtZW50Ojpz
ZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBsKCkpLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRp
b24oRXhlY1N0YXRlKiAKICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFu
Z2Uoc3RyLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgZmFsc2Us
IHVzZXJHZXN0dXJlKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3Vt
ZW50KiBkb2N1bWVudCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50
KiBkb2N1bWVudCkKIHsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWxsb3dTZXR0
aW5nU3JjVG9KYXZhCiAgICAgcmV0dXJuIHRydWU7CiB9IAogCi1KU1ZhbHVlKiBKU0VsZW1lbnQ6
OnNldEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBBdG9taWNTdHJp
bmcgbmFtZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwpAQCAtNzYsNyArNzYs
NyBAQCBKU1ZhbHVlKiBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZShFeGVjU3RhCiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRWxl
bWVudDo6c2V0QXR0cmlidXRlTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXR0ciogbmV3QXR0ciA9IHRv
QXR0cihhcmdzLmF0KGV4ZWMsIDApKTsKQEAgLTg5LDEyICs4OSwxMiBAQCBKU1ZhbHVlKiBKU0Vs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoRXhlCiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0ph
dmFzY3JpcHRVUkwoZXhlYywgaW1wLCBuZXdBdHRyLT5uYW1lKCksIG5ld0F0dHItPnZhbHVlKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGVj
KSkpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6OmdldFB0cihpbXAt
PnNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZWMpKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU0VsZW1lbnQ6OnNl
dEF0dHJpYnV0ZU5TKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXRvbWljU3Ry
aW5nIG5hbWVzcGFjZVVSSSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3Mu
YXQoZXhlYywgMCkpOwpAQCAtMTEwLDcgKzExMCw3IEBAIEpTVmFsdWUqIEpTRWxlbWVudDo6c2V0
QXR0cmlidXRlTlMoRXhlY1MKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVOUyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgQXR0ciogbmV3QXR0ciA9IHRvQXR0cihhcmdzLmF0KGV4ZWMsIDApKTsK
QEAgLTEyMywxMiArMTIzLDEyIEBAIEpTVmFsdWUqIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTm9k
ZU5TKEUKICAgICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAs
IG5ld0F0dHItPm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6OmdldFB0
cihpbXAtPnNldEF0dHJpYnV0ZU5vZGVOUyhuZXdBdHRyLCBlYykpKTsKKyAgICBKU1ZhbHVlUHRy
IHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5zZXRBdHRyaWJ1dGVOb2RlTlMo
bmV3QXR0ciwgZWMpKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhl
YywgRWxlbWVudCogZWxlbWVudCkKK0pTVmFsdWVQdHIgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3Rh
dGUqIGV4ZWMsIEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNFdmVudDo6Y2xpcGJvYXJk
RGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTRXZlbnQ6OmNsaXBib2Fy
ZERhdGEoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBpbXBsKCktPmlzQ2xp
cGJvYXJkRXZlbnQoKSA/IHRvSlMoZXhlYywgaW1wbCgpLT5jbGlwYm9hcmREYXRhKCkpIDoganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50KiBl
dmVudCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50KiBldmVudCkKIHsK
ICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQg
SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNWYWx1ZSogaGFuZGxlRXZl
bnRGdW5jdGlvbiA9IGxpc3RlbmVyLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxl
RXZlbnQiKSk7CisgICAgSlNWYWx1ZVB0ciBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbGlzdGVuZXIt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGhhbmRsZUV2ZW50RnVuY3Rpb24t
PmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KSB7CkBAIC0xMDEsMTIgKzEwMSwxMiBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpo
YW5kbGVFdmVuCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFs
T2JqZWN0U2NvcGUoZXhlYywgZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVjdCA/IGdsb2Jh
bERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QgOiBnbG9iYWxPYmplY3QpOwogCi0gICAgICAgIEpT
VmFsdWUqIHJldHZhbDsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXR2YWw7CiAgICAgICAgIGlmICho
YW5kbGVFdmVudEZ1bmN0aW9uKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGlt
ZW91dENoZWNrKCk7CiAgICAgICAgICAgICByZXR2YWwgPSBjYWxsKGV4ZWMsIGhhbmRsZUV2ZW50
RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbGlzdGVuZXIsIGFyZ3MpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgSlNWYWx1ZSogdGhpc1ZhbHVlOworICAgICAgICAgICAgSlNW
YWx1ZVB0ciB0aGlzVmFsdWU7CiAgICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKICAgICAg
ICAgICAgICAgICB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3QtPnRvVGhpc09iamVjdChleGVjKTsK
ICAgICAgICAgICAgIGVsc2UKQEAgLTI2Myw3ICsyNjMsNyBAQCBKU09iamVjdCogSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6bGlzdGVuZXJPCiB9CiAKIC8vIEhlbHBlciBmdW5jdGlvbgotaW5saW5lIEpT
VmFsdWUqIGV2ZW50UGFyYW1ldGVyTmFtZShKU0xhenlFdmVudExpc3RlbmVyOjpMYXp5RXZlbnRM
aXN0ZW5lclR5cGUgdHlwZSwgRXhlY1N0YXRlKiBleGVjKQoraW5saW5lIEpTVmFsdWVQdHIgZXZl
bnRQYXJhbWV0ZXJOYW1lKEpTTGF6eUV2ZW50TGlzdGVuZXI6OkxhenlFdmVudExpc3RlbmVyVHlw
ZSB0eXBlLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBKU0xhenlFdmVudExpc3RlbmVyOjpIVE1MTGF6eUV2ZW50TGlzdGVuZXI6CkBAIC0zMTksNyAr
MzE5LDcgQEAgdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAgICAg
ICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6
OmV2ZW50SGFuZGxlclNjb3BlKQogICAgICAgICBTY29wZUNoYWluIHNjb3BlID0gbGlzdGVuZXJB
c0Z1bmN0aW9uLT5zY29wZSgpOwogCi0gICAgICAgIEpTVmFsdWUqIHRoaXNPYmogPSB0b0pTKGV4
ZWMsIG1fb3JpZ2luYWxOb2RlKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB0aGlzT2JqID0gdG9KUyhl
eGVjLCBtX29yaWdpbmFsTm9kZSk7CiAgICAgICAgIGlmICh0aGlzT2JqLT5pc09iamVjdCgpKSB7
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KGFzT2JqZWN0KHRo
aXNPYmopKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAg
IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUoc2NvcGUpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnZXQqIHRhcmdldCkKK0pTVmFsdWVQdHIgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgaWYgKCF0YXJn
ZXQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEV2ZW50VGFyZ2V0OwogCi0gICAgSlNDOjpKU1ZhbHVlKiB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgRXZlbnRUYXJnZXQqKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEV2ZW50VGFyZ2V0Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAkocmV2aXNp
b24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDEzICs3NCwxMyBAQAogICAgIG1hY3JvKHNwZWNpZmljRXZlbnRU
YXJnZXQsIE9uVW5sb2FkLCB1bmxvYWRFdmVudCkgXAogCiAjZGVmaW5lIEVWRU5UX0xJU1RFTkVS
X0dFVFRFUihzcGVjaWZpY0V2ZW50VGFyZ2V0LCBuYW1lLCBldmVudCkgXAotSlNDOjpKU1ZhbHVl
KiBqcyMjc3BlY2lmaWNFdmVudFRhcmdldCMjbmFtZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90JiBzbG90KSBcCitKU0M6OkpT
VmFsdWVQdHIganMjI3NwZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYgc2xvdCkgXAog
eyBcCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTIyNzcGVjaWZpY0V2ZW50VGFyZ2V0Kj4oc2xv
dC5zbG90QmFzZSgpKS0+Z2V0TGlzdGVuZXIoZXZlbnQpOyBcCiB9IFwKIAogI2RlZmluZSBFVkVO
VF9MSVNURU5FUl9TRVRURVIoc3BlY2lmaWNFdmVudFRhcmdldCwgbmFtZSwgZXZlbnQpIFwKLXZv
aWQgc2V0SlMjI3NwZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNPYmplY3QqIGJhc2VPYmplY3QsIEpTQzo6SlNWYWx1ZSogdmFsdWUpIFwKK3ZvaWQg
c2V0SlMjI3NwZWNpZmljRXZlbnRUYXJnZXQjI25hbWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNPYmplY3QqIGJhc2VPYmplY3QsIEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSkgXAogeyBcCiAg
ICAgc3RhdGljX2Nhc3Q8SlMjI3NwZWNpZmljRXZlbnRUYXJnZXQqPihiYXNlT2JqZWN0KS0+c2V0
TGlzdGVuZXIoZXhlYywgZXZlbnQsIHZhbHVlKTsgXAogfSBcCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExp
c3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIg
SlNFdmVudFRhcmdldE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
ICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTUyLDcgKzUyLDcgQEAgSlNWYWx1ZSogSlNFdmVu
dFRhcmdldE5vZGU6OmFkZEV2ZW50TGlzdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTRXZlbnRUYXJnZXRO
b2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUds
b2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFn
bG9iYWxPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xv
Y2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjEgKzM5LDIxIEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3Jl
YXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsK
ICAgICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAKLSAgICBKU1ZhbHVlKiBlbmFibGVI
aWdoQWNjdXJhY3lWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImVu
YWJsZUhpZ2hBY2N1cmFjeSIpKTsKKyAgICBKU1ZhbHVlUHRyIGVuYWJsZUhpZ2hBY2N1cmFjeVZh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3Vy
YWN5IikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kgPSBlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS0+
dG9Cb29sZWFuKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBKU1ZhbHVlKiB0aW1lb3V0VmFsdWUgPSBvYmplY3QtPmdldChleGVj
LCBJZGVudGlmaWVyKGV4ZWMsICJ0aW1lb3V0IikpOworICAgIEpTVmFsdWVQdHIgdGltZW91dFZh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHVuc2ln
bmVkIHRpbWVvdXQgPSB0aW1lb3V0VmFsdWUtPnRvVUludDMyKGV4ZWMpOwpAQCAtNjMsNyArNjMs
NyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0CiAgICAgcmV0dXJu
IFBvc2l0aW9uT3B0aW9uczo6Y3JlYXRlKGVuYWJsZUhpZ2hBY2N1cmFjeSwgdGltZW91dCk7CiB9
CiAKLUpTVmFsdWUqIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTR2VvbG9jYXRpb246Omdl
dEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
CiAgICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25F
cnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAgICAgUmVmUHRyPFBvc2l0
aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2s7CkBAIC0xMDIsNyArMTAyLDcgQEAgSlNWYWx1
ZSogSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aQogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCi1KU1ZhbHVlKiBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNHZW9sb2NhdGlvbjo6
d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJv
ckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAgICAgUmVmUHRyPFBvc2l0aW9u
Q2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2s7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEFsbENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEFsbENvbGxlY3Rpb24uaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1Zh
bHVlKiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7IAogICAgICAg
ICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmN1c3RvbUdldE93blByCiAgICAgcmV0dXJuIHJ1
bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90LCB0aGlzKTsKIH0KIAotYm9vbCBKU0hUTUxBcHBsZXRFbGVtZW50OjpjdXN0b21QdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTSFRNTEFwcGxldEVsZW1lbnQ6OmN1
c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBy
dW50aW1lT2JqZWN0Q3VzdG9tUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcGwoKSwg
c2xvdCk7CiB9CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgSlNIVE1MQXBwbGV0RWxlbWVudDo6Y2Fu
R2V0SXRlbXNGb3IKICAgICByZXR1cm4gcHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVf
b2JqZWN0IjsKIH0KIAotSlNWYWx1ZSogSlNIVE1MQXBwbGV0RWxlbWVudDo6bmFtZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU0hUTUxBcHBsZXRFbGVtZW50OjpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIEpTVmFsdWUqIGdldE5hbWVkSXRlbXMoRXhlY1N0YXRlKiBleGVjLCBI
VE1MQ29sbGVjdGlvbiogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorc3Rh
dGljIEpTVmFsdWVQdHIgZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEhUTUxDb2xsZWN0
aW9uKiBpbXBsLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+IG5hbWVkSXRlbXM7CiAgICAgaW1wbC0+bmFtZWRJdGVtcyhwcm9wZXJ0
eU5hbWUsIG5hbWVkSXRlbXMpOwpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZ2V0
TmFtZWRJdGVtcyhFeGVjU3RhdGUqCiAKIC8vIEhUTUxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBv
YmplY3RzLCB0aGV5IHN1cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwsCiAvLyBzbyB0aGF0IGRvY3Vt
ZW50LmZvcm1zLml0ZW0oMCkgYW5kIGRvY3VtZW50LmZvcm1zKDApIGJvdGggd29yay4KLXN0YXRp
YyBKU1ZhbHVlKiBjYWxsSFRNTENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
ZnVuY3Rpb24sIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQ
dHIgY2FsbEhUTUxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9u
LCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUo
KSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTAyLDEzICsxMDIsMTMg
QEAgYm9vbCBKU0hUTUxDb2xsZWN0aW9uOjpjYW5HZXRJdGVtc0Zvck5hbQogICAgIHJldHVybiAh
Z2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpLT5pc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlKiBKU0hUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU0hUTUxDb2xsZWN0aW9uKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
SlNIVE1MQ29sbGVjdGlvbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVy
biBnZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXNPYmotPmltcGwoKSwgcHJvcGVydHlOYW1lKTsKIH0K
IAotSlNWYWx1ZSogSlNIVE1MQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTSFRNTENvbGxlY3Rpb246Oml0ZW0oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgb2s7CiAgICAgdWlu
dDMyX3QgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKS50b1VJbnQzMigm
b2ssIGZhbHNlKTsKQEAgLTExNywxMiArMTE3LDEyIEBAIEpTVmFsdWUqIEpTSFRNTENvbGxlY3Rp
b246Oml0ZW0oRXhlY1N0YXQKICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhleGVjLCBpbXBsKCks
IElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0K
IAotSlNWYWx1ZSogSlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MQ29sbGVjdGlvbjo6bmFtZWRJ
dGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
Z2V0TmFtZWRJdGVtcyhleGVjLCBpbXBsKCksIElkZW50aWZpZXIoZXhlYywgYXJncy5hdChleGVj
LCAwKS0+dG9TdHJpbmcoZXhlYykpKTsKIH0KIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0
ZSogZXhlYywgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24pCiB7CiAgICAgaWYgKCFjb2xsZWN0
aW9uKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNyBAQCBib29sIEpTSFRNTERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoCiAg
ICAgcmV0dXJuIGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShh
dG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRlbShhdG9taWNQ
cm9wZXJ0eU5hbWUpKTsKIH0KIAotSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0hUTUxEb2N1bWVudCogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PEpTSFRNTERvY3VtZW50Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAg
SFRNTERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXNP
YmotPmltcGwoKSk7CkBAIC03OCwxNiArNzgsMTcgQEAgSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6
Om5hbWVHZXR0ZXIoRXhlYwogCiAvLyBDdXN0b20gYXR0cmlidXRlcwogCi1KU1ZhbHVlKiBKU0hU
TUxEb2N1bWVudDo6YWxsKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1M
RG9jdW1lbnQ6OmFsbChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gSWYgImFsbCIg
aGFzIGJlZW4gb3ZlcndyaXR0ZW4sIHJldHVybiB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUKLSAgICBp
ZiAoSlNWYWx1ZSogdiA9IGdldERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJhbGwiKSkpCisgICAg
SlNWYWx1ZVB0ciB2ID0gZ2V0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgImFsbCIpKTsKKyAgICBp
ZiAodikKICAgICAgICAgcmV0dXJuIHY7CiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNf
Y2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKCkpLT5hbGwoKS5nZXQoKSk7CiB9CiAKLXZvaWQgSlNI
VE1MRG9jdW1lbnQ6OnNldEFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9p
ZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1
ZSkKIHsKICAgICAvLyBBZGQgImFsbCIgdG8gdGhlIHByb3BlcnR5IG1hcC4KICAgICBwdXREaXJl
Y3QoSWRlbnRpZmllcihleGVjLCAiYWxsIiksIHZhbHVlKTsKQEAgLTk1LDcgKzk2LDcgQEAgdm9p
ZCBKU0hUTUxEb2N1bWVudDo6c2V0QWxsKEV4ZWNTdGF0ZSogZQogCiAvLyBDdXN0b20gZnVuY3Rp
b25zCiAKLUpTVmFsdWUqIEpTSFRNTERvY3VtZW50OjpvcGVuKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEZvciBjb21wYXRpYmls
aXR5IHdpdGggb3RoZXIgYnJvd3NlcnMsIHBhc3Mgb3BlbiBjYWxscyB3aXRoIG1vcmUgdGhhbiAy
IHBhcmFtZXRlcnMgdG8gdGhlIHdpbmRvdy4KICAgICBpZiAoYXJncy5zaXplKCkgPiAyKSB7CkBA
IC0xMDMsNyArMTA0LDcgQEAgSlNWYWx1ZSogSlNIVE1MRG9jdW1lbnQ6Om9wZW4oRXhlY1N0YXRl
KgogICAgICAgICBpZiAoZnJhbWUpIHsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdy
YXBwZXIgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJhbWUpOwogICAgICAgICAgICAgaWYgKHdyYXBw
ZXIpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IHdyYXBwZXItPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsICJvcGVuIikpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQ
dHIgZnVuY3Rpb24gPSB3cmFwcGVyLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAib3BlbiIp
KTsKICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgICAgICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTEzOCwxNCArMTM5
LDE0IEBAIHN0YXRpYyBTdHJpbmcgd3JpdGVIZWxwZXIoRXhlY1N0YXRlKiBleGUKICAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxEb2N1bWVudDo6
d3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0hUTUxEb2N1bWVudDo6d3JpdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVudCA9IGFzSlNET01XaW5kb3coZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5kb2N1bWVudCgpOwogICAgIHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPndyaXRlKHdyaXRlSGVscGVyKGV4ZWMsIGFyZ3Mp
LCBhY3RpdmVEb2N1bWVudCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFs
dWUqIEpTSFRNTERvY3VtZW50Ojp3cml0ZWxuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MRG9jdW1lbnQ6OndyaXRlbG4oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIERvY3VtZW50KiBhY3RpdmVEb2N1bWVu
dCA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5k
b2N1bWVudCgpOwogICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwoKSktPndyaXRl
KHdyaXRlSGVscGVyKGV4ZWMsIGFyZ3MpICsgIlxuIiwgYWN0aXZlRG9jdW1lbnQpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBKU0hUTUxF
bWJlZEVsZW1lbnQ6OmN1c3RvbUdldE93blBybwogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9
CiAKLWJvb2wgSlNIVE1MRW1iZWRFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCitib29sIEpTSFRNTEVtYmVkRWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RDdXN0
b21QdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgaW1wbCgpLCBzbG90KTsKIH0KQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBKU0hUTUxFbWJlZEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTgogICAg
IHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiOwogfQogCi1K
U1ZhbHVlKiBKU0hUTUxFbWJlZEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K0pTVmFsdWVQdHIgSlNIVE1MRW1iZWRFbGVtZW50OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3RHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIGJvb2wgSlNIVE1MRm9ybUVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmEKICAgICByZXR1cm4g
bmFtZWRJdGVtcy5zaXplKCk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTEZvcm1FbGVtZW50OjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRNTEZvcm1FbGVtZW50Ojpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVu
dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpOwogICAgIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lRWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGFsbG93U2V0dGluZ0phdmFzY3JpcAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpT
SFRNTEZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUp
Cit2b2lkIEpTSFRNTEZyYW1lRWxlbWVudDo6c2V0U3JjKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBTdHJpbmcgc3JjVmFsdWUgPSB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQg
SlNIVE1MRnJhbWVFbGVtZW50OjpzZXRTcmMoRXhlY1N0YXQKICAgICByZXR1cm47CiB9CiAKLXZv
aWQgSlNIVE1MRnJhbWVFbGVtZW50OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlKQordm9pZCBKU0hUTUxGcmFtZUVsZW1lbnQ6OnNldExvY2F0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBpbXAg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBTdHJpbmcgbG9j
YXRpb25WYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxG
cmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJdGVtc0YKICAgICByZXR1cm4gZnJh
bWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxG
cmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTSFRN
TEZyYW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0hUTUxF
bGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHNs
b3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSFRNTElGcmFtZUVsZW1lbnQ6OnNldFNyYyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxJRnJhbWVFbGVtZW50Ojpz
ZXRTcmMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEhUTUxJRnJh
bWVFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KGltcGwoKSk7
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJ
bnB1dEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGJv
b2wgSlNIVE1MSW5wdXRFbGVtZW50OjpjdXN0b21HZXRPd25Qcm8KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUpTVmFsdWUqIEpTSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0hUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlv
blN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbXBsKCkpOwogICAgIGlmICgh
aW5wdXQtPmNhbkhhdmVTZWxlY3Rpb24oKSkKQEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSogSlNI
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdAogICAgIHJldHVybiBqc051bWJlcihleGVjLCBp
bnB1dC0+c2VsZWN0aW9uU3RhcnQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTElucHV0RWxlbWVu
dDo6c2VsZWN0aW9uRW5kKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNIVE1M
SW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGltcGwoKSk7CiAgICAgaWYgKCFpbnB1dC0+Y2FuSGF2ZVNlbGVjdGlvbigpKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT2JqZWN0RWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBKU0hUTUxP
YmplY3RFbGVtZW50OjpjdXN0b21HZXRPd25QcgogICAgIHJldHVybiBydW50aW1lT2JqZWN0Q3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgdGhpcyk7CiB9
CiAKLWJvb2wgSlNIVE1MT2JqZWN0RWxlbWVudDo6Y3VzdG9tUHV0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQorYm9vbCBKU0hUTUxPYmplY3RFbGVtZW50OjpjdXN0b21QdXQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gcnVudGltZU9iamVjdEN1
c3RvbVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBsKCksIHNsb3QpOwogfQpAQCAt
NTMsNyArNTMsNyBAQCBib29sIEpTSFRNTE9iamVjdEVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yCiAg
ICAgcmV0dXJuIHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCI7CiB9CiAK
LUpTVmFsdWUqIEpTSFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWVQdHIgSlNIVE1MT2JqZWN0RWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIHJldHVybiBydW50aW1lT2JqZWN0R2V0dGVyKGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjpsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oaW1wbCgp
KTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW1wLT5sZW5ndGgoKSk7CiB9CiAKLXZvaWQg
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlKQordm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rp
b24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC02MCwxNCArNjAsMTQgQEAgdm9pZCBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKAogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CiB9CiAKLXZvaWQgSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmluZGV4U2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbjo6aW5kZXhTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGlt
cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7CiAgICAgSFRN
TFNlbGVjdEVsZW1lbnQqIGJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGlt
cC0+YmFzZSgpKTsKICAgICBzZWxlY3RJbmRleFNldHRlcihiYXNlLCBleGVjLCBpbmRleCwgdmFs
dWUpOwogfQogCi1KU1ZhbHVlKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb246OmFkZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24qPihpbXBsKCkpOwogICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b0hU
TUxPcHRpb25FbGVtZW50KGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6YWRkKEV4CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpyZW1vdmUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IHN0YXRpY19jYXN0PEhUTUxP
cHRpb25zQ29sbGVjdGlvbio+KGltcGwoKSk7CiAgICAgSlNIVE1MU2VsZWN0RWxlbWVudCogYmFz
ZSA9IHN0YXRpY19jYXN0PEpTSFRNTFNlbGVjdEVsZW1lbnQqPihhc09iamVjdCh0b0pTKGV4ZWMs
IGltcC0+YmFzZSgpKSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUqIEpTSFRNTFNlbGVjdEVsZW1l
bnQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVl
UHRyIEpTSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGltcGwoKSk7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgSlNW
YWx1ZSogSlNIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKEV4ZQogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCi12b2lkIHNlbGVjdEluZGV4U2V0dGVyKEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVj
dCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWVQdHIg
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBz
ZWxlY3QtPnJlbW92ZShpbmRleCk7CkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgc2VsZWN0SW5kZXhT
ZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQKICAgICB9CiB9CiAKLXZvaWQgSlNIVE1MU2VsZWN0RWxl
bWVudDo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBK
U0M6OkpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRl
cihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZVB0ciB2
YWx1ZSkKIHsKICAgICBzZWxlY3RJbmRleFNldHRlcihzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudCo+KGltcGwoKSksIGV4ZWMsIGluZGV4LCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAkocmV2aXNpb24gMzk2
MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQqLCBKU0M6OkV4ZWNTdGF0
ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUqKTsKK3ZvaWQgc2VsZWN0SW5kZXhTZXR0
ZXIoSFRNTFNlbGVjdEVsZW1lbnQqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBK
U0M6OkpTVmFsdWVQdHIpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0
b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBub25DYWNo
aW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBub25D
YWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQogewogICAgIHJldHVy
biBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAsIHByb3BlcnR5TmFtZSwganNI
aXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAotSlNWYWx1ZSogbm9uQ2FjaGluZ1N0
YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKK0pTVmFsdWVQdHIgbm9uQ2Fj
aGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1
cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0eU5hbWUsIGpz
SGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKLUpTVmFsdWUqIG5vbkNhY2hp
bmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNWYWx1ZVB0ciBub25DYWNo
aW5nU3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAxLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9y
eVByb3RvdHlwZUZ1bmN0aW9uR28pOwogfQpAQCAtOTIsNyArOTIsNyBAQCBib29sIEpTSGlzdG9y
eTo6Y3VzdG9tR2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SlNIaXN0b3J5OjpjdXN0b21QdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
SlNWYWx1ZSosIFB1dFByb3BlcnR5U2xvdCYpCitib29sIEpTSGlzdG9yeTo6Y3VzdG9tUHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgLy8gT25seSBhbGxvdyBwdXR0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2Ft
ZSBvcmlnaW4uCiAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhlYywgaW1wbCgpLT5m
cmFtZSgpKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
CShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEltYWdlRGF0YSogaW1hZ2VEYXRhKQorSlNWYWx1ZVB0ciB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSW1hZ2VEYXRhKiBpbWFnZURhdGEpCiB7CiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRP
YmplY3RXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5z
cGVjdGVkT2JqZWN0V3JhcHBlci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHN0YXRpYyBHbG9iYWxPYmplY3RXcmFwcGVyTWFwJiB3cmFwcGVycygKIAog
Y29uc3QgQ2xhc3NJbmZvIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6c19pbmZvID0geyAiSlNJ
bnNwZWN0ZWRPYmplY3RXcmFwcGVyIiwgJkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpzX2lu
Zm8sIDAsIDAgfTsKIAotSlNWYWx1ZSogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKEV4
ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpCitKU1ZhbHVl
UHRyIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChFeGVjU3RhdGUqIHVud3JhcHBlZEV4
ZWMsIEpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpCiB7CiAgICAgaWYgKCF1bndyYXBwZWRWYWx1
ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHVud3JhcHBlZFZhbHVlOwpAQCAtNjEsNyAr
NjEsNyBAQCBKU1ZhbHVlKiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoCiAgICAgICAg
IGlmIChKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSB3cmFwcGVyTWFwLT5nZXQo
dW53cmFwcGVkT2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCi0gICAgSlNW
YWx1ZSogcHJvdG90eXBlID0gdW53cmFwcGVkT2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICBKU1Zh
bHVlUHRyIHByb3RvdHlwZSA9IHVud3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CiAgICAgQVNT
RVJUKHByb3RvdHlwZS0+aXNOdWxsKCkgfHwgcHJvdG90eXBlLT5pc09iamVjdCgpKTsKIAogICAg
IGlmIChwcm90b3R5cGUtPmlzTnVsbCgpKQpAQCAtOTYsNyArOTYsNyBAQCBKU0luc3BlY3RlZE9i
amVjdFdyYXBwZXI6On5KU0luc3BlY3RlZE9iCiAgICAgfQogfQogCi1KU1ZhbHVlKiBKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OnByZXBhcmVJbmNvbWluZ1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUqIHZhbHVlKSBjb25zdAorSlNWYWx1ZVB0ciBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OnBy
ZXBhcmVJbmNvbWluZ1ZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWVQdHIgdmFsdWUpIGNvbnN0CiB7
CiAgICAgLy8gVGhlIEluc3BlY3RvciBpcyBvbmx5IGFsbG93ZWQgdG8gcGFzcyBwcmltaXRpdmUg
dmFsdWVzIGFuZCB3cmFwcGVkIG9iamVjdHMgdG8gb2JqZWN0cyBmcm9tIHRoZSBpbnNwZWN0ZWQg
cGFnZS4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0
V3JhcHBlci5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyIDog
cHVibGljIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUqIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMs
IEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpOworICAgICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlUHRyIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZVB0
ciB1bndyYXBwZWRWYWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTSW5zcGVjdGVkT2JqZWN0V3Jh
cHBlcigpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CkBA
IC00OCw4ICs0OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29s
IGFsbG93c0NhbGxBc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogcHJlcGFyZUluY29taW5nVmFsdWUo
SlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFs
dWUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogd3JhcE91dGdvaW5nVmFs
dWUoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVk
VmFsdWUpIGNvbnN0IHsgcmV0dXJuIHdyYXAodW53cmFwcGVkRXhlYywgdW53cmFwcGVkVmFsdWUp
OyB9CisgICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIHByZXBhcmVJbmNvbWluZ1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVk
VmFsdWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB3cmFwT3V0Z29p
bmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVu
d3JhcHBlZFZhbHVlKSBjb25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBl
ZFZhbHVlKTsgfQogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KICAgICB9OwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAJKHJldmlz
aW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3Jh
cHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIFN0cnVjdHVy
ZSogbGVha0luc3BlY3RvckNhbGxiYWNrVwogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLUpT
VmFsdWUqIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmFwKEV4ZWNTdGF0ZSogdW53cmFw
cGVkRXhlYywgSlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpCitKU1ZhbHVlUHRyIEpTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyOjp3cmFwKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZVB0
ciB1bndyYXBwZWRWYWx1ZSkKIHsKICAgICBpZiAoIXVud3JhcHBlZFZhbHVlLT5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gdW53cmFwcGVkVmFsdWU7CkBAIC02Niw3ICs2Niw3IEBAIEpTVmFs
dWUqIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyOjp3cmEKICAgICBpZiAoSlNJbnNwZWN0b3JD
YWxsYmFja1dyYXBwZXIqIHdyYXBwZXIgPSB3cmFwcGVycygpLmdldCh1bndyYXBwZWRPYmplY3Qp
KQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAotICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IHVu
d3JhcHBlZE9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB1
bndyYXBwZWRPYmplY3QtPnByb3RvdHlwZSgpOwogICAgIEFTU0VSVChwcm90b3R5cGUtPmlzTnVs
bCgpIHx8IHByb3RvdHlwZS0+aXNPYmplY3QoKSk7CiAKICAgICBpZiAocHJvdG90eXBlLT5pc051
bGwoKSkgewpAQCAtODgsNyArODgsNyBAQCBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6fkpT
SW5zcGVjdG9yCiAgICAgd3JhcHBlcnMoKS5yZW1vdmUodW53cmFwcGVkT2JqZWN0KCkpOwogfQog
Ci1KU1ZhbHVlKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6cHJlcGFyZUluY29taW5nVmFs
dWUoRXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSkgY29u
c3QKK0pTVmFsdWVQdHIgSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OnByZXBhcmVJbmNvbWlu
Z1ZhbHVlKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNWYWx1ZVB0ciB1bndyYXBwZWRWYWx1
ZSkgY29uc3QKIHsKICAgICBpZiAoSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIg
PSBhc1dyYXBwZXIodW53cmFwcGVkVmFsdWUpKSB7CiAgICAgICAgIC8vIFRoZSBvbmx5IHRpbWUg
YSB3cmFwcGVyIHNob3VsZCBiZSBwYXNzZWQgaW50byBhIEpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFw
cGVyIGlzIHdoZW4gYSBjbGllbnQtc2lkZSBzdG9yYWdlIGNhbGxiYWNrCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oCShyZXZpc2lv
biAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlciA6IHB1YmxpYyBKU1F1YXJh
bnRpbmVkT2JqZWN0V3JhcHBlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlKiB3cmFwKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUq
IHVud3JhcHBlZFZhbHVlKTsKKyAgICAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZVB0ciB3cmFwKEpT
Qzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFs
dWUpOwogCiAgICAgICAgIHZpcnR1YWwgfkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyKCk7CiAK
QEAgLTQ0LDggKzQ0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd3NDYWxsQXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogcHJlcGFyZUluY29taW5nVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSogd3JhcE91dGdvaW5nVmFsdWUoSlNDOjpF
eGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNWYWx1ZSogdW53cmFwcGVkVmFsdWUpIGNv
bnN0IHsgcmV0dXJuIHdyYXAodW53cmFwcGVkRXhlYywgdW53cmFwcGVkVmFsdWUpOyB9CisgICAg
ICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIHByZXBhcmVJbmNvbWluZ1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZVB0ciB3cmFwT3V0Z29pbmdWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZh
bHVlKSBjb25zdCB7IHJldHVybiB3cmFwKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZFZhbHVlKTsg
fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gbm9WYWx1
ZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGltcGwoKS0+ZXZhbHVhdGUoYXJncy5hdChleGVj
LCAwKS0+dG9TdHJpbmcoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZVB0ciBleGNlcHRp
b24gPSBub1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbXBsKCktPmV2YWx1YXRl
KGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpLCBleGNlcHRpb24pOwogCiAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CkBAIC00
NCwxMiArNDQsMTIgQEAgSlNWYWx1ZSogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
dGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZVB0ciBKU0phdmFTY3JpcHRDYWxs
RnJhbWU6OnRoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3QKIHsKICAgICByZXR1cm4gaW1wbCgp
LT50aGlzT2JqZWN0KCkgPyBpbXBsKCktPnRoaXNPYmplY3QoKSA6IGpzTnVsbCgpOwogfQogCi1K
U1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorSlNWYWx1ZVB0ciBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewogICAgIHN3aXRjaCAoaW1wbCgpLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6RnVuY3Rpb25UeXBlOgpAQCAtNjIsNyArNjIsNyBAQCBKU1ZhbHVl
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlCiAgICAgcmV0dXJuIGpzTnVsbCgpOwog
fQogCi1KU1ZhbHVlKiBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZVB0ciBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hh
aW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlmICghaW1wbCgpLT5zY29wZUNoYWlu
KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTcg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVl
KiBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQorSlNW
YWx1ZVB0ciBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDEsIHBy
b3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAKLUpT
VmFsdWUqIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JikK
K0pTVmFsdWVQdHIgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIDAs
IHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2FkKTsKIH0KIAot
SlNWYWx1ZSogbm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KQorSlNWYWx1ZVB0ciBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCiB7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywg
MSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pOwogfQpA
QCAtOTMsNyArOTMsNyBAQCBib29sIEpTTG9jYXRpb246OmN1c3RvbUdldE93blByb3BlcnR5U2xv
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6Y3VzdG9tUHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0xvY2F0aW9uOjpjdXN0b21QdXQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBs
KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0aWMg
dm9pZCBuYXZpZ2F0ZUlmQWxsb3dlZChFeGVjU3RhdGUqCiAgICAgfQogfQogCi12b2lkIEpTTG9j
YXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNM
b2NhdGlvbjo6c2V0SHJlZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CkBA
IC0xNTcsNyArMTU3LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhl
YwogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsIGZhbHNlKTsKIH0KIAot
dm9pZCBKU0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZh
bHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWVQdHIgdmFsdWUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAg
IEFTU0VSVChmcmFtZSk7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBKU0xvY2F0aW9uOjpzZXRQ
cm90b2NvbChFeGVjU3RhdGUqIAogICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1
cmwsIGZhbHNlKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdmFsdWUpCit2b2lkIEpTTG9jYXRpb246OnNldEhvc3QoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJh
bWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSlNMb2Nh
dGlvbjo6c2V0SG9zdChFeGVjU3RhdGUqIGV4ZWMKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVj
LCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgSlNMb2NhdGlvbjo6c2V0SG9z
dG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMTkwLDcgKzE5
MCw3IEBAIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5hbWUoRXhlY1N0YXRlKiAKICAgICBuYXZp
Z2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2Nh
dGlvbjo6c2V0UG9ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xv
Y2F0aW9uOjpzZXRQb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAg
LTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBvcnQoRXhlY1N0YXRlKiBleGVj
CiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi12
b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFs
dWUpCit2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAg
QVNTRVJUKGZyYW1lKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEpTTG9jYXRpb246OnNldFBh
dGhuYW1lKEV4ZWNTdGF0ZSogCiAgICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVy
bCwgZmFsc2UpOwogfQogCi12b2lkIEpTTG9jYXRpb246OnNldFNlYXJjaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+
ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgSlNM
b2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSogZXgKICAgICBuYXZpZ2F0ZUlmQWxsb3dlZChl
eGVjLCBmcmFtZSwgdXJsLCBmYWxzZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6c2V0SGFzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBpbXBsKCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKQEAgLTI0NSw3ICsyNDUsNyBA
QCB2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0YXRlKiBleGVjCiAgICAgbmF2aWdhdGVJ
ZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgZmFsc2UpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0
aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFs
dWVQdHIgSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCkBAIC0yNjEsNyArMjYxLDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVwbGFjZShF
eGVjU3RhdGUqIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xv
Y2F0aW9uOjpyZWxvYWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQ
dHIgSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBA
IC0yNzgsNyArMjc4LDcgQEAgSlNWYWx1ZSogSlNMb2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSog
ZQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU0xvY2F0aW9uOjph
c3NpZ24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBK
U0xvY2F0aW9uOjphc3NpZ24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpA
QCAtMjk1LDcgKzI5NSw3IEBAIEpTVmFsdWUqIEpTTG9jYXRpb246OmFzc2lnbihFeGVjU3RhdGUq
IGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNMb2NhdGlvbjo6
dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNM
b2NhdGlvbjo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICAgICAgSlNDOjpKU1ZhbHVlKiBtX2Nv
bnRleHRXcmFwcGVyOworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgbV9jb250ZXh0V3JhcHBlcjsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsNyArNjUsNyBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNW
YWx1ZSogSlNNZXNzYWdlUG9ydDo6c3RhcnRDb252ZXJzYXRpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjpzdGFydENvbnZl
cnNhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBjb25zdCBVU3RyaW5nJiBt
ZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CkBAIC03Myw3ICs3Myw3
IEBAIEpTVmFsdWUqIEpTTWVzc2FnZVBvcnQ6OnN0YXJ0Q29udmVyc2F0aW8KICAgICByZXR1cm4g
dG9KUyhleGVjLCBpbXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBtZXNzYWdlKS5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTTWVz
c2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU01lc3NhZ2VQb3J0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC04NSw3ICs4NSw3IEBA
IEpTVmFsdWUqIEpTTWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
TWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlw
ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWlt
ZVR5cGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw3IEBAIGJvb2wgSlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUKICAgICByZXR1
cm4gbWltZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAK
LUpTVmFsdWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZVB0ciBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBKU01pbWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU01pbWVUeXBl
QXJyYXkqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4gdG9KUyhleGVj
LCB0aGlzT2JqLT5pbXBsKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYw
MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGJvb2wgSlNOYW1lZE5vZGVNYXA6OmNhbkdldEl0
ZW1zRm9yTmFtZSgKICAgICByZXR1cm4gaW1wbC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7
CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlUHRyIEpTTmFtZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSlNOYW1lZE5vZGVNYXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05hbWVk
Tm9kZU1hcCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pTKGV4
ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBKU05hbWVkTm9kZXNDb2xs
ZWN0aW9uOjpKU05hbWVkTm9kZXNDb2xsCiB7CiB9CiAKLUpTVmFsdWUqIEpTTmFtZWROb2Rlc0Nv
bGxlY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTTmFtZWROb2Rlc0NvbGxl
Y3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbiog
dGhpc09iaiA9IHN0YXRpY19jYXN0PEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qPihhc09iamVjdChz
bG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdGhpc09iai0+bV9u
b2Rlcy0+c2l6ZSgpKTsKIH0KIAotSlNWYWx1ZSogSlNOYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBKU05hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSlNOYW1lZE5vZGVzQ29sbGVjdGlvbiAqdGhpc09iaiA9IHN0YXRp
Y19jYXN0PEpTTmFtZWROb2Rlc0NvbGxlY3Rpb24qPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KTsKICAgICByZXR1cm4gdG9KUyhleGVjLCAoKnRoaXNPYmotPm1fbm9kZXMpW3Nsb3QuaW5kZXgo
KV0uZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xs
ZWN0aW9uLmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVk
Tm9kZXNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlKiBw
cm90b3R5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlKiBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWVQdHIgbGVuZ3RoR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZVB0ciBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgT3duUHRy
PFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiA+IG1fbm9kZXM7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBAIHN0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSoK
ICAgICBpZiAoIXRoaXNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IElkZW50aWZpZXIsIGlzU2FmYXJpRnVuY3Rpb24sIChleGVjLCAi
aXNTYWZhcmkiKSk7Ci0gICAgSlNWYWx1ZSogaXNTYWZhcmlGdW5jdGlvbiA9IHRoaXNPYmplY3Qt
PmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9uTmFtZSk7CisgICAgSlNWYWx1ZVB0ciBpc1NhZmFy
aUZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2FmYXJpRnVuY3Rpb25OYW1lKTsK
ICAgICBpZiAoaXNTYWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVuY3Rpb24pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBib29sIG5lZWRzWW91VHVi
ZVF1aXJrKEV4ZWNTdGF0ZSoKIAogI2VuZGlmCiAKLUpTVmFsdWUqIEpTTmF2aWdhdG9yOjphcHBW
ZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgSlNOYXZpZ2F0b3I6OmFw
cFZlcnNpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIE5hdmlnYXRvciogaW1wID0g
c3RhdGljX2Nhc3Q8TmF2aWdhdG9yKj4oaW1wbCgpKTsKICAgICBGcmFtZSogZnJhbWUgPSBpbXAt
PmZyYW1lKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lv
biAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYg
aW50IEV4cGVjdGlvbkNvZGU7CiAKLUpTVmFsdWUqIEpTTm9kZTo6aW5zZXJ0QmVmb3JlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNOb2RlOjppbnNl
cnRCZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgb2sgPSBpbXBsKCktPmluc2VydEJlZm9yZSh0
b05vZGUoYXJncy5hdChleGVjLCAwKSksIHRvTm9kZShhcmdzLmF0KGV4ZWMsIDEpKSwgZWMsIHRy
dWUpOwpAQCAtNzYsNyArNzYsNyBAQCBKU1ZhbHVlKiBKU05vZGU6Omluc2VydEJlZm9yZShFeGVj
U3RhdGUqCiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlKiBKU05vZGU6OnJlcGxh
Y2VDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTTm9kZTo6cmVwbGFjZUNoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIG9rID0gaW1wbCgpLT5y
ZXBsYWNlQ2hpbGQodG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpLCB0b05vZGUoYXJncy5hdChleGVj
LCAxKSksIGVjLCB0cnVlKTsKQEAgLTg2LDcgKzg2LDcgQEAgSlNWYWx1ZSogSlNOb2RlOjpyZXBs
YWNlQ2hpbGQoRXhlY1N0YXRlKgogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSog
SlNOb2RlOjpyZW1vdmVDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CitKU1ZhbHVlUHRyIEpTTm9kZTo6cmVtb3ZlQ2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgb2sg
PSBpbXBsKCktPnJlbW92ZUNoaWxkKHRvTm9kZShhcmdzLmF0KGV4ZWMsIDApKSwgZWMpOwpAQCAt
OTYsNyArOTYsNyBAQCBKU1ZhbHVlKiBKU05vZGU6OnJlbW92ZUNoaWxkKEV4ZWNTdGF0ZSogCiAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1KU1ZhbHVlKiBKU05vZGU6OmFwcGVuZENoaWxkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNOb2RlOjph
cHBlbmRDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBvayA9IGltcGwoKS0+YXBwZW5kQ2hpbGQo
dG9Ob2RlKGFyZ3MuYXQoZXhlYywgMCkpLCBlYywgdHJ1ZSk7CkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBKU05vZGU6Om1hcmsoKQogICAgIEFTU0VSVChtYXJrZWQoKSk7CiB9CiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUqIGNyZWF0ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBOb2Rl
KiBub2RlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZVB0ciBjcmVhdGVXcmFwcGVyKEV4
ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgQVNT
RVJUKCFnZXRDYWNoZWRET01Ob2RlV3JhcHBlcihub2RlLT5kb2N1bWVudCgpLCBub2RlKSk7CkBA
IC0yMTgsNyArMjE4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogY3JlYXRlV3Jh
cAogICAgIHJldHVybiB3cmFwcGVyOyAgICAKIH0KICAgICAKLUpTVmFsdWUqIHRvSlNOZXdseUNy
ZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKQorSlNWYWx1ZVB0ciB0b0pTTmV3bHlD
cmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBKU1ZhbHVlKiB0b0pT
TmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZXhl
Yywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSog
bm9kZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiAzOTYwMykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTTm9kZUZpbHRlckNvbmRpdGlvbikKIAotSlNOb2RlRmlsdGVy
Q29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZSogZmlsdGVyKQorSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZVB0ciBmaWx0ZXIp
CiAgICAgOiBtX2ZpbHRlcihmaWx0ZXIpCiB7CiB9CkBAIC02NSw3ICs2NSw3IEBAIHNob3J0IEpT
Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSgKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCi0gICAg
SlNWYWx1ZSogcmVzdWx0ID0gY2FsbChleGVjLCBtX2ZpbHRlciwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBtX2ZpbHRlciwgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBjYWxsKGV4ZWMsIG1f
ZmlsdGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1fZmlsdGVyLCBhcmdzKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVK
RUNUOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
b25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2Rl
RmlsdGVyQ29uZGl0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEpTTm9kZUZpbHRlckNvbmRpdGlvbj4gY3JlYXRlKEpTQzo6SlNWYWx1ZSogZmlsdGVyKQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShKU0M6
OkpTVmFsdWVQdHIgZmlsdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEpTTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmls
dGVyKTsKKyAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZVB0ciBmaWx0
ZXIpOwogCiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5v
ZGUqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAgICAgICBKU0M6
OkpTVmFsdWUqIG1fZmlsdGVyOworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgbV9maWx0ZXI7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEy
ICs0MSwxMiBAQCB2b2lkIEpTTm9kZUZpbHRlcjo6bWFyaygpCiAgICAgRE9NT2JqZWN0OjptYXJr
KCk7CiB9CiAKLUpTVmFsdWUqIEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTTm9kZUZpbHRlcjo6YWNjZXB0
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGltcGwoKS0+YWNjZXB0Tm9kZShleGVjLCB0b05vZGUoYXJncy5hdChl
eGVjLCAwKSkpKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNW
YWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU1ZhbHVl
UHRyIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoJkpTTm9kZUZpbHRlcjo6c19p
bmZvKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTTm9kZUZpbHRlcio+KGFzT2JqZWN0
KHZhbHVlKSktPmltcGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRl
cmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IHZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmsoKQogICAgIERPTU9iamVjdDo6bWFyaygpOwogfQog
Ci1KU1ZhbHVlKiBKU05vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4ZWMsIGVjKTsKQEAgLTUy
LDcgKzUyLDcgQEAgSlNWYWx1ZSogSlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdAogICAg
IHJldHVybiB0b0pTKGV4ZWMsIG5vZGUuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU05vZGVJdGVy
YXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1Zh
bHVlUHRyIEpTTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8Tm9k
ZT4gbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMsIGVjKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIE5lZWQgdG8gc3VwcG9ydCBjYWxsIHNvIHRoYXQgbGlzdCgwKSB3b3Jrcy4KLXN0YXRpYyBK
U1ZhbHVlKiBjYWxsTm9kZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24s
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWVQdHIgY2FsbE5v
ZGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlUHRyLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKS50b1VJbnQzMigmb2spOwpAQCAtNTYs
NyArNTYsNyBAQCBib29sIEpTTm9kZUxpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjCiAgICAg
cmV0dXJuIGltcGwtPml0ZW1XaXRoTmFtZShwcm9wZXJ0eU5hbWUpOwogfQogCi1KU1ZhbHVlKiBK
U05vZGVMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTTm9k
ZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU05vZGVMaXN0KiB0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNOb2RlTGlzdCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSkpOwogICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+aXRlbVdpdGhOYW1l
KHByb3BlcnR5TmFtZSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJy
YXlDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5BcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgYm9v
bCBKU1BsdWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRQogICAgIHJldHVybiBwbHVnaW5B
cnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpT
UGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgSlNQ
bHVnaW5BcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTUGx1Z2lu
QXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5Kj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2lu
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBib29sIEpTUGx1
Z2luOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0CiAgICAgcmV0dXJuIHBsdWdpbi0+Y2FuR2V0
SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUqIEpTUGx1Z2luOjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTUGx1Z2luOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU1BsdWdpbio+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiB0b0pT
KGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1
bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIFJ1bnRp
bWVPYmplY3RJbXAqIGdldFJ1bnRpbWVPYmplYwogICAgIHJldHVybiBKU0M6OkJpbmRpbmdzOjpJ
bnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCBpbnN0YW5jZSk7CiB9CiAKLUpTVmFs
dWUqIHJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBKU0hUTUxFbGVtZW50KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNI
VE1MRWxlbWVudCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPih0aGlzT2JqLT5pbXBsKCkpOwpA
QCAtNjksNyArNjksNyBAQCBKU1ZhbHVlKiBydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
CiAgICAgcmV0dXJuIHJ1bnRpbWVPYmplY3QgPyBydW50aW1lT2JqZWN0IDoganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSogcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlUHRyIHJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hU
TUxFbGVtZW50Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHRoaXNPYmotPmltcGwoKSk7CkBA
IC05MCw3ICs5MCw3IEBAIGJvb2wgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2wK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBydW50aW1lT2JqZWN0Q3VzdG9tUHV0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgcnVu
dGltZU9iamVjdEN1c3RvbVB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wKiBydW50aW1lT2JqZWN0
ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCBlbGVtZW50KTsKICAgICBpZiAoIXJ1bnRpbWVPYmpl
Y3QpCkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoRXhl
Y1N0YXRlKiBlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsUGx1
Z2luKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlKiwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxQbHVnaW4oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7CiAgICAgSW5zdGFuY2UqIGluc3RhbmNlID0gcGx1Z2luSW5zdGFuY2Uoc3RhdGljX2Nhc3Q8
SlNIVE1MRWxlbWVudCo+KGZ1bmN0aW9uKS0+aW1wbCgpKTsKICAgICBpbnN0YW5jZS0+YmVnaW4o
KTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChl
eGVjLCBhcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VEZWZh
dWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVu
dEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5FbGVtZW50RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBSdW50aW1lIG9iamVjdCBzdXBwb3J0IGNv
ZGUgZm9yIEpTSFRNTEFwcGxldEVsZW1lbnQsIEpTSFRNTEVtYmVkRWxlbWVudCBhbmQgSlNIVE1M
T2JqZWN0RWxlbWVudC4KIAotICAgIEpTQzo6SlNWYWx1ZSogcnVudGltZU9iamVjdEdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci0gICAgSlNDOjpKU1ZhbHVlKiBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3Bl
cnR5U2xvdCYpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBydW50aW1lT2JqZWN0R2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKICAgICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xv
dCYsIEpTSFRNTEVsZW1lbnQqKTsKLSAgICBib29sIHJ1bnRpbWVPYmplY3RDdXN0b21QdXQoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OkpTVmFsdWUqLCBIVE1M
RWxlbWVudCosIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBydW50aW1lT2JqZWN0
Q3VzdG9tUHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpK
U1ZhbHVlUHRyLCBIVE1MRWxlbWVudCosIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlND
OjpDYWxsVHlwZSBydW50aW1lT2JqZWN0R2V0Q2FsbERhdGEoSFRNTEVsZW1lbnQqLCBKU0M6OkNh
bGxEYXRhJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiAz
OTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNRdWFyYW50aW5lZE8KIAogY29uc3QgQ2xhc3NJbmZvIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjpzX2luZm8gPSB7ICJKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciIsIDAsIDAs
IDAgfTsKIAotSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyOjphc1dyYXBwZXIoSlNWYWx1ZSogdmFsdWUpCitKU1F1YXJhbnRpbmVkT2JqZWN0V3Jh
cHBlciogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihKU1ZhbHVlUHRyIHZh
bHVlKQogewogICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNDksOSArNDksOSBAQCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogSlNRdWFyYW50aW5l
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKj4ob2Jq
ZWN0KTsKIH0KIAotSlNWYWx1ZSogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmNhY2hlZFZh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjYWNoZWRW
YWx1ZUdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIEpTVmFsdWUqIHYgPSBzbG90LnNsb3RCYXNlKCk7CisgICAgSlNW
YWx1ZVB0ciB2ID0gc2xvdC5zbG90QmFzZSgpOwogICAgIEFTU0VSVCh2KTsKICAgICByZXR1cm4g
djsKIH0KQEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
OjpnZXRPd25QCiAgICAgUHJvcGVydHlTbG90IHVud3JhcHBlZFNsb3QobV91bndyYXBwZWRPYmpl
Y3QpOwogICAgIGJvb2wgcmVzdWx0ID0gbV91bndyYXBwZWRPYmplY3QtPmdldE93blByb3BlcnR5
U2xvdCh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllciwgdW53cmFwcGVkU2xvdCk7CiAg
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICBKU1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSA9IHVud3Jh
cHBlZFNsb3QuZ2V0VmFsdWUodW53cmFwcGVkRXhlY1N0YXRlKCksIGlkZW50aWZpZXIpOworICAg
ICAgICBKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlID0gdW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1
bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllcik7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHdyYXBPdXRnb2luZ1ZhbHVlKHVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRWYWx1ZSks
IGNhY2hlZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEpT
UXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25QCiAgICAgUHJvcGVydHlTbG90IHVud3Jh
cHBlZFNsb3QobV91bndyYXBwZWRPYmplY3QpOwogICAgIGJvb2wgcmVzdWx0ID0gbV91bndyYXBw
ZWRPYmplY3QtPmdldE93blByb3BlcnR5U2xvdCh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRp
ZmllciwgdW53cmFwcGVkU2xvdCk7CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBKU1ZhbHVl
KiB1bndyYXBwZWRWYWx1ZSA9IHVud3JhcHBlZFNsb3QuZ2V0VmFsdWUodW53cmFwcGVkRXhlY1N0
YXRlKCksIGlkZW50aWZpZXIpOworICAgICAgICBKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlID0g
dW53cmFwcGVkU2xvdC5nZXRWYWx1ZSh1bndyYXBwZWRFeGVjU3RhdGUoKSwgaWRlbnRpZmllcik7
CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHdyYXBPdXRnb2luZ1ZhbHVlKHVud3JhcHBlZEV4ZWNT
dGF0ZSgpLCB1bndyYXBwZWRWYWx1ZSksIGNhY2hlZFZhbHVlR2V0dGVyKTsKICAgICB9CiAKQEAg
LTEzOSw3ICsxMzksNyBAQCBib29sIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpnZXRPd25Q
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNW
YWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3ZvaWQgSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXI6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIEpTVmFsdWVQdHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBp
ZiAoIWFsbG93c1NldFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlCiAgICAgdHJhbnNm
ZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKIH0KIAotdm9pZCBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcjo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwgSlNW
YWx1ZSogdmFsdWUpCit2b2lkIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAg
IGlmICghYWxsb3dzU2V0UHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDkgKzE5
Nyw5IEBAIEpTT2JqZWN0KiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y28KICAgICBDb25z
dHJ1Y3RUeXBlIHVud3JhcHBlZENvbnN0cnVjdFR5cGUgPSB3cmFwcGVyLT5tX3Vud3JhcHBlZE9i
amVjdC0+Z2V0Q29uc3RydWN0RGF0YSh1bndyYXBwZWRDb25zdHJ1Y3REYXRhKTsKICAgICBBU1NF
UlQodW53cmFwcGVkQ29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlTm9uZSk7CiAKLSAgICBK
U1ZhbHVlKiB1bndyYXBwZWRSZXN1bHQgPSBKU0M6OmNvbnN0cnVjdCh3cmFwcGVyLT51bndyYXBw
ZWRFeGVjU3RhdGUoKSwgd3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENvbnN0
cnVjdFR5cGUsIHVud3JhcHBlZENvbnN0cnVjdERhdGEsIHByZXBhcmVkQXJncyk7CisgICAgSlNW
YWx1ZVB0ciB1bndyYXBwZWRSZXN1bHQgPSBKU0M6OmNvbnN0cnVjdCh3cmFwcGVyLT51bndyYXBw
ZWRFeGVjU3RhdGUoKSwgd3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENvbnN0
cnVjdFR5cGUsIHVud3JhcHBlZENvbnN0cnVjdERhdGEsIHByZXBhcmVkQXJncyk7CiAKLSAgICBK
U1ZhbHVlKiByZXN1bHRWYWx1ZSA9IHdyYXBwZXItPndyYXBPdXRnb2luZ1ZhbHVlKHdyYXBwZXIt
PnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1bndyYXBwZWRSZXN1bHQpOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0VmFsdWUgPSB3cmFwcGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51bndyYXBw
ZWRFeGVjU3RhdGUoKSwgdW53cmFwcGVkUmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0VmFsdWUt
PmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBhc09iamVjdChyZXN1bHRWYWx1
ZSk7CiAKQEAgLTIxOSw3ICsyMTksNyBAQCBDb25zdHJ1Y3RUeXBlIEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCi1ib29sIEpTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyOjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlLCBKU1ZhbHVlKiBwcm90bykKK2Jvb2wgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciB2YWx1ZSwgSlNWYWx1
ZVB0ciBwcm90bykKIHsKICAgICBpZiAoIWFsbG93c0hhc0luc3RhbmNlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTIzMSwxMSArMjMxLDExIEBAIGJvb2wgSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6Omhhc0luc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBm
dW5jdGlvbiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBzdGF0aWNf
Y2FzdDxKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcio+KGZ1bmN0aW9uKTsKIAotICAgIEpTVmFs
dWUqIHByZXBhcmVkVGhpc1ZhbHVlID0gd3JhcHBlci0+cHJlcGFyZUluY29taW5nVmFsdWUoZXhl
YywgdGhpc1ZhbHVlKTsKKyAgICBKU1ZhbHVlUHRyIHByZXBhcmVkVGhpc1ZhbHVlID0gd3JhcHBl
ci0+cHJlcGFyZUluY29taW5nVmFsdWUoZXhlYywgdGhpc1ZhbHVlKTsKIAogICAgIEFyZ0xpc3Qg
cHJlcGFyZWRBcmdzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsr
aSkKQEAgLTI0Nyw5ICsyNDcsOSBAQCBKU1ZhbHVlKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cjo6Y2FsCiAgICAgQ2FsbFR5cGUgdW53cmFwcGVkQ2FsbFR5cGUgPSB3cmFwcGVyLT5tX3Vud3Jh
cHBlZE9iamVjdC0+Z2V0Q2FsbERhdGEodW53cmFwcGVkQ2FsbERhdGEpOwogICAgIEFTU0VSVCh1
bndyYXBwZWRDYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOwogCi0gICAgSlNWYWx1ZSogdW53cmFw
cGVkUmVzdWx0ID0gSlNDOjpjYWxsKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB3cmFw
cGVyLT5tX3Vud3JhcHBlZE9iamVjdCwgdW53cmFwcGVkQ2FsbFR5cGUsIHVud3JhcHBlZENhbGxE
YXRhLCBwcmVwYXJlZFRoaXNWYWx1ZSwgcHJlcGFyZWRBcmdzKTsKKyAgICBKU1ZhbHVlUHRyIHVu
d3JhcHBlZFJlc3VsdCA9IEpTQzo6Y2FsbCh3cmFwcGVyLT51bndyYXBwZWRFeGVjU3RhdGUoKSwg
d3JhcHBlci0+bV91bndyYXBwZWRPYmplY3QsIHVud3JhcHBlZENhbGxUeXBlLCB1bndyYXBwZWRD
YWxsRGF0YSwgcHJlcGFyZWRUaGlzVmFsdWUsIHByZXBhcmVkQXJncyk7CiAKLSAgICBKU1ZhbHVl
KiByZXN1bHQgPSB3cmFwcGVyLT53cmFwT3V0Z29pbmdWYWx1ZSh3cmFwcGVyLT51bndyYXBwZWRF
eGVjU3RhdGUoKSwgdW53cmFwcGVkUmVzdWx0KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IHdy
YXBwZXItPndyYXBPdXRnb2luZ1ZhbHVlKHdyYXBwZXItPnVud3JhcHBlZEV4ZWNTdGF0ZSgpLCB1
bndyYXBwZWRSZXN1bHQpOwogCiAgICAgd3JhcHBlci0+dHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNT
dGF0ZShleGVjKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXIgOiBwdWJsaWMgSlNDOjpKU09iamVjdCB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIGFzV3JhcHBlcihKU0M6OkpTVmFs
dWUqKTsKKyAgICAgICAgc3RhdGljIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiBhc1dyYXBw
ZXIoSlNDOjpKU1ZhbHVlUHRyKTsKIAogICAgICAgICB2aXJ0dWFsIH5KU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlcigpOwogCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1Zh
bHVlKiBwcm90bykgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvKSAKICAgICAgICAgeyAKICAgICAg
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Ok92ZXJy
aWRlc0hhc0luc3RhbmNlKSk7IAogICAgICAgICB9CkBAIC01OSw4ICs1OSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
cHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpKU1ZhbHVl
KiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUqKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNW
YWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1
dChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWVQdHIpOwogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCk7CkBAIC02OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6Q2FsbERh
dGEmKTsKICAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFu
Y2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBKU0M6OkpTVmFsdWUqIHByb3RvKTsK
KyAgICAgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlUHRyLCBKU0M6OkpTVmFsdWVQdHIgcHJvdG8pOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYpOwogCkBAIC04MiwxNCArODIsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzQ2FsbEFzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKLSAgICAgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUqIHByZXBhcmVJ
bmNvbWluZ1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWUq
IHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVl
KiB3cmFwT3V0Z29pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpK
U1ZhbHVlKiB1bndyYXBwZWRWYWx1ZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEpTQzo6
SlNWYWx1ZVB0ciBwcmVwYXJlSW5jb21pbmdWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVk
RXhlYywgSlNDOjpKU1ZhbHVlUHRyIHVud3JhcHBlZFZhbHVlKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgSlNDOjpKU1ZhbHVlUHRyIHdyYXBPdXRnb2luZ1ZhbHVlKEpTQzo6RXhlY1N0YXRl
KiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTVmFsdWVQdHIgdW53cmFwcGVkVmFsdWUpIGNvbnN0ID0g
MDsKIAotICAgICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlKiBjYWNoZWRWYWx1ZUdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgY2FjaGVkVmFsdWVHZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogCiAgICAgICAgIHZvaWQgdHJhbnNmZXJFeGNlcHRpb25Ub0V4ZWNTdGF0ZShK
U0M6OkV4ZWNTdGF0ZSopIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUqIGNh
bGwoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwgSlNDOjpKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOworICAgICAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlUHRyIGNhbGwoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiwg
SlNDOjpKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiAgICAgICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
T2JqZWN0KiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CiAKICAgICAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogbV91bndyYXBwZWRHbG9iYWxPYmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUkdCQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JD
b2xvci5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1zdGF0aWMgSlNWYWx1ZSoganNSR0JDb2xvclJlZChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci1zdGF0aWMgSlNWYWx1ZSoganNS
R0JDb2xvckdyZWVuKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKLXN0YXRpYyBKU1ZhbHVlKiBqc1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0ciBq
c1JHQkNvbG9yUmVkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRyIGpzUkdCQ29sb3JHcmVlbihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgSlNWYWx1ZVB0
ciBqc1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CiAKIC8qCiBAYmVnaW4gSlNSR0JDb2xvclRhYmxlCkBAIC01OSw3ICs1OSw3
IEBAIGJvb2wgSlNSR0JDb2xvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWMKICAgICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PEpTUkdCQ29sb3IsIERPTU9iamVjdD4oZXhlYywgJkpTUkdCQ29s
b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1ZSogZ2V0SlNS
R0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvbG9yKQorSlNWYWx1ZVB0ciBnZXRK
U1JHQkNvbG9yKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY29sb3IpCiB7CiAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNSR0JDb2xvcihleGVjLCBjb2xvcik7CiB9CkBAIC02OCwxNyArNjgsMTcg
QEAgSlNWYWx1ZSogZ2V0SlNSR0JDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotSlNWYWx1ZSoganNSR0JDb2xvclJlZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IGpzUkdCQ29sb3JSZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiB0b0pTKGV4ZWMsIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoKHN0YXRpY19jYXN0PEpTUkdCQ29sb3IqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+aW1wbCgpID4+IDE2KSAmIDB4RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSk7CiB9CiAKLUpTVmFsdWUqIGpzUkdCQ29sb3JHcmVlbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IGpzUkdCQ29sb3JHcmVlbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSgoc3RhdGljX2Nhc3Q8SlNSR0JDb2xvcio+KGFzT2JqZWN0KHNsb3Qu
c2xvdEJhc2UoKSkpLT5pbXBsKCkgPj4gOCkgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUikpOwogfQogCi1KU1ZhbHVlKiBqc1JHQkNvbG9yQmx1ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRy
IGpzUkdCQ29sb3JCbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1cm4gdG9KUyhleGVjLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEpTUkdCQ29sb3IqPihhc09iamVjdChzbG90LnNs
b3RCYXNlKCkpKS0+aW1wbCgpICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U0M6OkpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpT
dHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQdHIgcHJvdG90eXBlKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KQEAgLTUyLDcg
KzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2NvbG9yOwog
ICAgIH07CiAKLSAgICBKU0M6OkpTVmFsdWUqIGdldEpTUkdCQ29sb3IoSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBjb2xvcik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIGdldEpTUkdCQ29sb3IoSlND
OjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb2xvcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1Zh
bHVlKiBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsK
ICAgICBpbnQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDApLT50b0ludDMyKGV4ZWMsIGluZGV4T2sp
OwpAQCAtNTYsNyArNTYsNyBAQCBKU1ZhbHVlKiBKU1NRTFJlc3VsdFNldFJvd0xpc3Q6Oml0ZW0o
RXhlCiAgICAgdW5zaWduZWQgdmFsdWVzSW5kZXggPSBpbmRleCAqIG51bUNvbHVtbnM7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvbHVtbnM7IGkrKykgewogICAgICAgICBjb25z
dCBTUUxWYWx1ZSYgdmFsdWUgPSBtX2ltcGwtPnZhbHVlcygpW3ZhbHVlc0luZGV4ICsgaV07Ci0g
ICAgICAgIEpTVmFsdWUqIGpzVmFsdWUgPSBub1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWVQdHIg
anNWYWx1ZSA9IG5vVmFsdWUoKTsKIAogICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBTUUxWYWx1ZTo6U3RyaW5nVmFsdWU6CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi1KU1ZhbHVlKiBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNT
UUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IGFyZ3MuYXQoZXhlYywgMCktPnRv
U3RyaW5nKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU1LDcgKzU1
LDcgQEAgSlNWYWx1ZSogSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeAogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlKiBs
ZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOworICAgICAgICBKU1ZhbHVlUHRyIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS0+dG9VSW50MzIoZXhlYyk7CkBAIC02Myw3ICs2Myw3
IEBAIEpTVmFsdWUqIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXgKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBv
YmplY3QtPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1l
bnRJbnN0YW5jZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NW
R0VsZW1lbnRJbnN0YW5jZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVu
dExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBs
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBA
IC00OCw3ICs0OCw3IEBAIEpTVmFsdWUqIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudEwK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdFbGVtZW50SW5z
dGFuY2U6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDEzICsyNiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTU1ZHTGVuZ3RoOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgU1ZHTGVuZ3RoIGltcCgqaW1wbCgpKTsKICAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgaW1wLnZhbHVlKGNvbnRleHQoKSkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR0xlbmd0
aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU1ZHUE9EVHlw
ZVdyYXBwZXI8U1ZHTGVuZ3RoPiogd3JhcHBlciA9IGltcGwoKTsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBp
bXAoKmltcGwoKSk7CiAKQEAgLTM3LDEwICszNywxMCBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6
bXVsdGlwbHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLm11bHRpcGx5KHNlY29uZE1h
dHJpeCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJp
eDo6aW52ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBK
U1NWR01hdHJpeDo6aW52ZXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewog
ICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7Ci0gICAgSlNDOjpKU1ZhbHVlKiByZXN1
bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3Jt
Pjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpT
Qzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBw
ZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRl
eHQuZ2V0KCkpOwogCiAgICAgaWYgKCFpbXAuaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEUp
OwpAQCAtNDgsNyArNDgsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6aW52ZXJzZShFeGVjU3Rh
dGUqCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnRyYW5z
bGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpT
U1ZHTWF0cml4Ojp0cmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKQEAgLTU4LDcgKzU4LDcg
QEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnRyYW5zbGF0ZShFeGVjU3RhdAogICAgIHJldHVybiB0
b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3JtPjo6Y3Jl
YXRlKGltcC50cmFuc2xhdGUoeCwgeSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1K
U1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7
CiAKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0
ZSogZQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZm
aW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5zY2FsZShzY2FsZUZhY3RvcikpLmdldCgpLCBtX2Nv
bnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3Jt
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdN
YXRyaXg6OnNjYWxlTm9uVW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtNzYsNyArNzYs
NyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKEV4CiAgICAgcmV0dXJu
IHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+Ojpj
cmVhdGUoaW1wLnNjYWxlTm9uVW5pZm9ybShzY2FsZUZhY3RvclgsIHNjYWxlRmFjdG9yWSkpLmdl
dCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdN
YXRyaXg6OnJvdGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIApAQCAtODQsMTQgKzg0LDE0IEBAIEpT
VmFsdWUqIEpTU1ZHTWF0cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9KUyhl
eGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShp
bXAucm90YXRlKGFuZ2xlKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUq
IEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEFmZmluZVRyYW5zZm9y
bSBpbXAoKmltcGwoKSk7CiAgCiAgICAgZmxvYXQgeCA9IGFyZ3MuYXQoZXhlYywgMCktPnRvRmxv
YXQoZXhlYyk7CiAgICAgZmxvYXQgeSA9IGFyZ3MuYXQoZXhlYywgMSktPnRvRmxvYXQoZXhlYyk7
CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnJvdGF0ZUZyb21WZWN0b3Io
eCwgeSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1
bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8QWZmaW5lVHJhbnNmb3Jt
Pjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0Lmdl
dCgpKTsKIAogICAgIGlmICh4ID09IDAuMCB8fCB5ID09IDAuMCkKICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFNWR0V4Y2VwdGlvbjo6U1ZHX0lOVkFMSURfVkFMVUVfRVJSKTsKQEAgLTk5
LDE5ICs5OSwxOSBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OmZsaXBYKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4OjpmbGlw
WChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEFmZmluZVRyYW5zZm9y
bSBpbXAoKmltcGwoKSk7CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBl
V3JhcHBlcjxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLmZsaXBYKCkpLmdldCgpLCBtX2Nv
bnRleHQuZ2V0KCkpOwogfQogCi1KU1ZhbHVlKiBKU1NWR01hdHJpeDo6ZmxpcFkoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNTVkdNYXRyaXg6OmZsaXBZKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGlt
cCgqaW1wbCgpKTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuZmxpcFkoKSkuZ2V0KCksIG1fY29udGV4
dC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3WChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHTWF0cml4Ojpza2V3WChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGltcCgqaW1wbCgpKTsKIApAQCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUqIEpTU1ZHTWF0
cml4Ojpza2V3WChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyPEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuc2tld1goYW5nbGUp
KS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNr
ZXdZKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNT
VkdNYXRyaXg6OnNrZXdZKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQYXRoU2VnKiBvYmplY3QsIFNW
R0VsZW1lbnQqIGNvbnRleHQpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBTVkdQ
YXRoU2VnKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFvYmplY3Qp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdQYXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSlNWYWx1ZSogSlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6Y2xlYXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
IApAQCAtNDgsNyArNDgsNyBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpjbGVhcihFeGVj
U3RhCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNl
Z0xpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZVB0ciBKU1NWR1BhdGhTZWdMaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBT
VkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpAQCAt
NTcsMTQgKzU3LDE0IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OmluaXRpYWxpemUoRXgK
IAogICAgIFNWR1BhdGhTZWcqIG9iaiA9IFdURjo6Z2V0UHRyKGltcC0+aW5pdGlhbGl6ZShuZXdJ
dGVtLCBlYykpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwg
bV9jb250ZXh0LmdldCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVj
LCBvYmosIG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
IAogICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lKCkpOyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NW
R1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6Z2V0SXRlbShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKQEAg
LTc4LDEyICs3OCwxMiBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpnZXRJdGVtKEV4ZWNT
CiAgICAgU1ZHUGF0aFNlZ0xpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0Kj4o
aW1wbCgpKTsKICAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihpbXAtPmdldEl0ZW0o
aW5kZXgsIGVjKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2Jq
LCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4
ZWMsIG9iaiwgbV9jb250ZXh0LmdldCgpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omlu
c2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNW
YWx1ZVB0ciBKU1NWR1BhdGhTZWdMaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBTVkdQYXRoU2VnKiBuZXdJdGVtID0gdG9TVkdQYXRoU2VnKGFyZ3MuYXQoZXhlYywgMCkpOwpA
QCAtOTcsMTQgKzk3LDE0IEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1C
ZWYKIAogICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlz
dCo+KGltcGwoKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RG
OjpnZXRQdHIoaW1wLT5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBtX2Nv
bnRleHQuZ2V0KCkpOworICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSB0b0pTKGV4ZWMsIFdU
Rjo6Z2V0UHRyKGltcC0+aW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9j
b250ZXh0LmdldCgpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9j
b250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUo
KSk7ICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xp
c3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pT
VmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNW
R1BhdGhTZWcqIG5ld0l0ZW0gPSB0b1NWR1BhdGhTZWcoYXJncy5hdChleGVjLCAwKSk7CkBAIC0x
MTgsMTQgKzExOCwxNCBAQCBKU1ZhbHVlKiBKU1NWR1BhdGhTZWdMaXN0OjpyZXBsYWNlSXRlbShF
CiAKICAgICBTVkdQYXRoU2VnTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3Qq
PihpbXBsKCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIFdURjo6
Z2V0UHRyKGltcC0+cmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgsIGVjKSksIG1fY29udGV4dC5n
ZXQoKSk7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQ
dHIoaW1wLT5yZXBsYWNlSXRlbShuZXdJdGVtLCBpbmRleCwgZWMpKSwgbV9jb250ZXh0LmdldCgp
KTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgbV9jb250ZXh0LT5zdmdB
dHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7ICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0
ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NW
R1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAKQEAgLTE0MCwyMSArMTQw
LDIxIEBAIEpTVmFsdWUqIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXgKIAogICAgIFJl
ZlB0cjxTVkdQYXRoU2VnPiBvYmooaW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOwogCi0gICAg
SlNDOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iai5nZXQoKSwgbV9jb250ZXh0Lmdl
dCgpKTsKKyAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gdG9KUyhleGVjLCBvYmouZ2V0KCks
IG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAg
IG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkpOyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBKU1NWR1BhdGhT
ZWdMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K0pTVmFsdWVQdHIgSlNTVkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
U1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZHUGF0aFNlZyhhcmdzLmF0KGV4ZWMsIDApKTsKIAog
ICAgIFNWR1BhdGhTZWdMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdCo+KGlt
cGwoKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQ
dHIoaW1wLT5hcHBlbmRJdGVtKG5ld0l0ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAg
SlNDOjpKU1ZhbHVlUHRyIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIoaW1wLT5hcHBl
bmRJdGVtKG5ld0l0ZW0sIGVjKSksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKIAogICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAt
PmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOyAgICAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgU1ZHUE9ETGlzdEl0
ZW08RmxvYXRQb2ludD4gUE9ETGlzdEl0ZW07CiB0eXBlZGVmIFNWR0xpc3Q8UmVmUHRyPFBPRExp
c3RJdGVtPiA+IFNWR1BvaW50TGlzdEJhc2U7CiAKLXN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4
dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKK3N0
YXRpYyBKU1ZhbHVlUHRyIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBhc3NSZWZQ
dHI8UE9ETGlzdEl0ZW0gPiBpdGVtKQogewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwpAQCAtNDIsNyArNDIsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZmlu
aXNoR2V0dGVyKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBl
V3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+OjpjcmVhdGUoaXRlbS5nZXQoKSwgbGlz
dC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCksIGNvbnRleHQpOwogfQogCi1zdGF0
aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYg
ZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQ
T0RMaXN0SXRlbSA+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9p
bnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtID4gaXRlbSkKIHsKICAgICBpZiAo
ZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKQEAgLTUzLDcgKzUzLDcg
QEAgc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIAogICAgIHJldHVybiB0
b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6
Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgpLCBjb250ZXh0KTsKIH0KIAot
c3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCog
bGlzdCwgUGFzc1JlZlB0cjxQT0RMaXN0SXRlbT4gaXRlbSkKK3N0YXRpYyBKU1ZhbHVlUHRyIGZp
bmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYg
ZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFzc1JlZlB0cjxQ
T0RMaXN0SXRlbT4gaXRlbSkKIHsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNl
dHRlclJlYWRPbmx5UmVzdQogICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHU3RhdGljUE9EVHlw
ZVdyYXBwZXI8RmxvYXRQb2ludD46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIGNvbnRleHQpOwogfQog
Ci1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JikKK0pTVmFsdWVQdHIgSlNTVkdQb2ludExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1w
bCgpLT5jbGVhcihlYyk7CkBAIC03Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0
OjpjbGVhcihFeGVjU3RhdGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSogSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcgKzgw
LDcgQEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlYwogICAgICAgICBs
aXN0SW1wLT5pbml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHUG9pbnQoYXJncy5hdChl
eGVjLCAwKSkpLCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZHUG9p
bnRMaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzLmF0KGV4ZWMsIDAp
LT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSogSlNT
VkdQb2ludExpc3Q6OmdldEl0ZW0oRXhlY1N0YQogICAgICAgICBsaXN0SW1wLT5nZXRJdGVtKGlu
ZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9y
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTU1ZH
UG9pbnRMaXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdz
LmF0KGV4ZWMsIDEpLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTExMCw3ICsxMTAsNyBA
QCBKU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yCiAgICAgICAgIGxpc3RJ
bXAtPmluc2VydEl0ZW1CZWZvcmUoUE9ETGlzdEl0ZW06OmNvcHkodG9TVkdQb2ludChhcmdzLmF0
KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6
cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1
ZVB0ciBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9
IGFyZ3MuYXQoZXhlYywgMSktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xMjUsNyArMTI1
LDcgQEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZQogICAgICAgICBs
aXN0SW1wLT5yZXBsYWNlSXRlbShQT0RMaXN0SXRlbTo6Y29weSh0b1NWR1BvaW50KGFyZ3MuYXQo
ZXhlYywgMCkpKSwgaW5kZXgsIGVjKSk7CiB9CiAKLUpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0Ojpy
ZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFy
Z3MuYXQoZXhlYywgMCktPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xNDAsNyArMTQwLDcg
QEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlYwogICAgICAgICBsaXN0
SW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlz
dDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlUHRyIEpTU1ZHUG9pbnRMaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdQb2lu
dExpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdHlwZWRlZiBTVkdQ
T0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+IFBPRExpc3RJdGVtOwogdHlwZWRlZiBTVkdMaXN0PFJl
ZlB0cjxQT0RMaXN0SXRlbT4gPiBTVkdUcmFuc2Zvcm1MaXN0QmFzZTsKIAotc3RhdGljIEpTVmFs
dWUqIGZpbmlzaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdF
bGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExp
c3RJdGVtPiBpdGVtKQorc3RhdGljIEpTVmFsdWVQdHIgZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9y
bUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVj
KSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkBAIC00Miw3ICs0Miw3IEBA
IHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6
Y3JlYXRlKGl0ZW0uZ2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgp
LCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zv
cm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQorc3RhdGljIEpTVmFs
dWVQdHIgZmluaXNoU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNW
R0VsZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9E
TGlzdEl0ZW0+IGl0ZW0pCiB7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0
ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVy
Q3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0
ZU5hbWUpLmdldCgpLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRl
clJlYWRPbmx5UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0Vs
ZW1lbnQqIGNvbnRleHQsIFNWR1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8UE9ETGlz
dEl0ZW0+IGl0ZW0pCitzdGF0aWMgSlNWYWx1ZVB0ciBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3Vs
dChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0
LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFBPRExpc3RJdGVtPiBpdGVtKQog
ewogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpAQCAt
NjMsNyArNjMsNyBAQCBzdGF0aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1CiAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxTVkdUcmFuc2Zv
cm0+OjpjcmVhdGUoKml0ZW0pLmdldCgpLCBjb250ZXh0KTsKIH0KIAotSlNWYWx1ZSogSlNTVkdU
cmFuc2Zvcm1MaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZVB0ciBKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbCgpLT5jbGVh
cihlYyk7CkBAIC03Miw3ICs3Miw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xl
YXIoRXhlY1MKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdU
cmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKQEAgLTgwLDcg
KzgwLDcgQEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKAogICAgICAg
ICBsaXN0SW1wLT5pbml0aWFsaXplKFBPRExpc3RJdGVtOjpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFy
Z3MuYXQoZXhlYywgMCkpKSwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0
OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBh
cmdzLmF0KGV4ZWMsIDApLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKQEAgLTk1LDcgKzk1LDcg
QEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKEV4ZQogICAgICAgICBsaXN0
SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxp
c3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZVB0ciBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGJvb2wgaW5kZXhPazsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhlYywgMSktPnRvVUludDMyKGV4ZWMsIGluZGV4
T2spOwpAQCAtMTEwLDcgKzExMCw3IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5z
ZXJ0SXRlbUIKICAgICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9yZShQT0RMaXN0SXRlbTo6
Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4LCBlYykpOwogfQog
Ci1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNTVkdUcmFuc2Zvcm1MaXN0Ojpy
ZXBsYWNlSXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
Ym9vbCBpbmRleE9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJncy5hdChleGVjLCAxKS0+dG9V
SW50MzIoZXhlYywgaW5kZXhPayk7CkBAIC0xMjUsNyArMTI1LDcgQEAgSlNWYWx1ZSogSlNTVkdU
cmFuc2Zvcm1MaXN0OjpyZXBsYWNlSXRlbQogICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShQ
T0RMaXN0SXRlbTo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzLmF0KGV4ZWMsIDApKSksIGluZGV4
LCBlYykpOwogfQogCi1KU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1NWR1RyYW5z
Zm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3MuYXQoZXhl
YywgMCktPnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwpAQCAtMTQwLDcgKzE0MCw3IEBAIEpTVmFs
dWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVtb3ZlSXRlbSgKICAgICAgICAgbGlzdEltcC0+cmVt
b3ZlSXRlbShpbmRleCwgZWMpKTsKIH0KIAotSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0Ojph
cHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQ
dHIgSlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTVkdUcmFu
c2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IGJvb2wgSlNTdG9yYWdlOjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1MKICAgICByZXR1cm4gaW1w
bC0+Y29udGFpbnMocHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSogSlNTdG9yYWdlOjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIEpTU3RvcmFnZTo6bmFtZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTU3RvcmFnZSogdGhpc09iaiA9IHN0YXRpY19j
YXN0PEpTU3RvcmFnZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIHJldHVybiBq
c1N0cmluZ09yTnVsbChleGVjLCB0aGlzT2JqLT5pbXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1l
KSk7CkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShFeGVj
U3RhdGUKICAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTU3RvcmFnZSwgQmFzZT4oZXhlYywg
c19pbmZvLnByb3BIYXNoVGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgSlNWYWx1ZSogcHJvdG90eXBlID0g
dGhpcy0+cHJvdG90eXBlKCk7CisgICAgSlNWYWx1ZVB0ciBwcm90b3R5cGUgPSB0aGlzLT5wcm90
b3R5cGUoKTsKICAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3Rv
dHlwZSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNzQsNyArNzQsNyBAQCBib29sIEpTU3RvcmFnZTo6Y3VzdG9tR2V0UHJvcGVy
dHlOYW1lcyhFCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3RvcmFnZTo6Y3VzdG9t
UHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKK2Jvb2wgSlNTdG9yYWdlOjpjdXN0b21QdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBj
dXN0b20gcHV0IGlmIHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5
IHRoaXMgbmFtZS4KICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxs
aW5nIGNhbkdldEl0ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sK
QEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBKU1N0b3JhZ2U6OmN1c3RvbVB1dChFeGVjU3RhdGUqIGV4
ZQogICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNTdG9yYWdlLCBCYXNlPihleGVjLCBzX2lu
Zm8ucHJvcEhhc2hUYWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSB0aGlz
LT5wcm90b3R5cGUoKTsKKyAgICBKU1ZhbHVlUHRyIHByb3RvdHlwZSA9IHRoaXMtPnByb3RvdHlw
ZSgpOwogICAgIGlmIChwcm90b3R5cGUtPmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBl
KS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNyBAQCBib29sIEpTU3R5bGVTaGVldExpc3Q6OmNhbkdldEl0ZW1zRm9yTmFtCiAg
ICAgcmV0dXJuIHN0eWxlU2hlZXRMaXN0LT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKIH0K
IAotSlNWYWx1ZSogSlNTdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciBKU1N0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSlNTdHlsZVNoZWV0TGlzdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTU3R5
bGVTaGVldExpc3QqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICBIVE1MU3R5bGVF
bGVtZW50KiBlbGVtZW50ID0gdGhpc09iai0+aW1wbCgpLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDM5
NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotSlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqIGV4ZWMsIFRl
eHQqIHRleHQpCitKU1ZhbHVlUHRyIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBU
ZXh0KiB0ZXh0KQogewogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNp
b24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmso
KQogICAgIERPTU9iamVjdDo6bWFyaygpOwogfQogICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2Vy
OjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRy
IEpTVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
KQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnBhcmVudE5vZGUoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNDUsNyArNDUsNyBAQCBKU1ZhbHVlKiBKU1RyZWVX
YWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9
CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWVQdHIgSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwo
KS0+Zmlyc3RDaGlsZChleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01
Myw3ICs1Myw3IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3QKICAg
ICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtl
cjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRy
IEpTVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYp
CiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bGFzdENoaWxkKGV4ZWMpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTYxLDcgKzYxLDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fs
a2VyOjpsYXN0Q2hpbGQoRXhlY1N0YQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQog
ICAgIAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwo
KS0+bmV4dFNpYmxpbmcoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAt
NjksNyArNjksNyBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTCiAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCi1KU1ZhbHVlKiBKU1RyZWVXYWxr
ZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQorSlNW
YWx1ZVB0ciBKU1RyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmKQogewogICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzU2libGlu
ZyhleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC03Nyw3ICs3Nyw3IEBA
IEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEUKICAgICByZXR1cm4gdG9K
UyhleGVjLCBub2RlKTsKIH0KICAgICAKLUpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNO
b2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVlUHRyIEpTVHJlZVdh
bGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAg
ICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2Vy
OjpwcmV2aW91c05vZGUoRXhlYwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAg
IAotSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmKQorSlNWYWx1ZVB0ciBKU1RyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dE5v
ZGUoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNXb3JrZXJD
b250ZQogCiBjb25zdCBDbGFzc0luZm8gSlNXb3JrZXJDb250ZXh0QmFzZTo6c19pbmZvID0geyAi
V29ya2VyQ29udGV4dCIsIDAsIDAsIGdldEpTV29ya2VyQ29udGV4dEJhc2VUYWJsZSB9OwogCi12
b2lkIEpTV29ya2VyQ29udGV4dEJhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3ZvaWQgSlNXb3JrZXJDb250ZXh0QmFzZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgbG9va3VwUHV0PEpTV29ya2VyQ29udGV4dEJhc2UsIEJhc2U+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGdldEpTV29ya2VyQ29udGV4dEJhc2VUYWJsZShleGVj
KSwgdGhpcywgc2xvdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29u
dGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29u
dGV4dEJhc2UuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEpTV29ya2VyQ29udGV4dEJhc2UoUGFzc1JlZlB0cjxKU0M6
OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4pOwogICAgICAgICB2aXJ0dWFs
IH5KU1dvcmtlckNvbnRleHRCYXNlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUqLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBj
b25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsg
fQogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTcgKzY1LDE3IEBAIHZvaWQgSlNXb3JrZXJDb250ZXh0
OjptYXJrKCkKICAgICB9CiB9CiAKLUpTVmFsdWUqIEpTV29ya2VyQ29udGV4dDo6c2VsZihFeGVj
U3RhdGUqKSBjb25zdAorSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnNlbGYoRXhlY1N0YXRl
KikgY29uc3QKIHsKICAgICByZXR1cm4gYXNWYWx1ZSgpOwogfQogCi12b2lkIEpTV29ya2VyQ29u
dGV4dDo6c2V0U2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQordm9pZCBKU1dv
cmtlckNvbnRleHQ6OnNldFNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlKQog
ewogICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJzZWxmIiksIHZhbHVlKTsKIH0KIAot
SlNWYWx1ZSogSlNXb3JrZXJDb250ZXh0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNXb3JrZXJDb250ZXh0OjphZGRF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZmluZE9yQ3Jl
YXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgYXJncy5hdChleGVjLCAxKSk7CiAg
ICAgaWYgKCFsaXN0ZW5lcikKQEAgLTg0LDcgKzg0LDcgQEAgSlNWYWx1ZSogSlNXb3JrZXJDb250
ZXh0OjphZGRFdmVudExpc3RlbgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlKiBKU1dvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1dvcmtlckNvbnRleHQ6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewog
ICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKICAgICBpZiAoIWxpc3Rl
bmVyKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBKU1dvcmtlcjo6bWFyaygpCiAgICAgfQog
fQogCi1KU1ZhbHVlKiBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTV29ya2VyOjphZGRFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCkBAIC03MCw3
ICs3MCw3IEBAIEpTVmFsdWUqIEpTV29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWMKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNXb3JrZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU1dvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRv
SlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAg
IGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDcgQEAgdm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrKCkKIH0KIAogLy8gQ3VzdG9tIGZ1
bmN0aW9ucwotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNp
emUoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
Tm90IGVub3VnaCBhcmd1bWVudHMiKTsKQEAgLTExNiw3ICsxMTYsNyBAQCBKU1ZhbHVlKiBKU1hN
TEh0dHBSZXF1ZXN0OjpvcGVuKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0dHBSZXF1ZXN0
OjpzZXRSZXF1ZXN0SGVhZGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CkBAIC0xMjcsMTMgKzEy
NywxMyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hNTEh0
dHBSZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAg
ICAgIGltcGwoKS0+c2VuZChlYyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbCA9
IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsID0gYXJncy5hdChleGVj
LCAwKTsKICAgICAgICAgaWYgKHZhbC0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAg
IGltcGwoKS0+c2VuZChlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZhbC0+aXNPYmplY3QoJkpTRG9j
dW1lbnQ6OnNfaW5mbykpCkBAIC0xNDcsNyArMTQ3LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVx
dWVzdDo6c2VuZChFeGVjU3RhdAogICAgIGludCBzaWduZWRMaW5lTnVtYmVyOwogICAgIGludHB0
cl90IHNvdXJjZUlEOwogICAgIFVTdHJpbmcgc291cmNlVVJMOwotICAgIEpTVmFsdWUqIGZ1bmN0
aW9uOworICAgIEpTVmFsdWVQdHIgZnVuY3Rpb247CiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGZ1bmN0aW9uKTsKICAgICBpbXBsKCktPnNldExhc3RTZW5kTGluZU51bWJlcihzaWdu
ZWRMaW5lTnVtYmVyID49IDAgPyBzaWduZWRMaW5lTnVtYmVyIDogMCk7CiAgICAgaW1wbCgpLT5z
ZXRMYXN0U2VuZFVSTChzb3VyY2VVUkwpOwpAQCAtMTU2LDE4ICsxNTYsMTggQEAgSlNWYWx1ZSog
SlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJl
cXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlKiBoZWFkZXIgPSBqc1N0cmluZ09yTnVs
bChleGVjLCBpbXBsKCktPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3MuYXQoZXhlYywgMCktPnRvU3Ry
aW5nKGV4ZWMpLCBlYykpOworICAgIEpTVmFsdWVQdHIgaGVhZGVyID0ganNTdHJpbmdPck51bGwo
ZXhlYywgaW1wbCgpLT5nZXRSZXNwb25zZUhlYWRlcihhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmlu
ZyhleGVjKSwgZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVy
biBoZWFkZXI7CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5
cGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0ciBKU1hN
TEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1pbWVUeXBlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CkBA
IC0xNzYsNyArMTc2LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNaW1l
VAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1
ZXN0OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpAQCAtMTg4LDcgKzE4OCw3IEBA
IEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGUKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTIwMCw3ICsyMDAsNyBAQCBKU1ZhbHVlKiBK
U1hNTEh0dHBSZXF1ZXN0OjpyZW1vdmVFdmVudExpCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwo
ZXhlYywgaW1wbCgpLT5yZXNwb25zZVRleHQoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpTWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6Om1hcmsoKQogICAgIH0KIH0KIAotSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVz
dFVwbG9hZDo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlUHRyIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKQEAgLTg5LDcg
Kzg5LDcgQEAgSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbgogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK0pTVmFsdWVQdHIgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24g
Mzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0
eWxlc2hlZXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZVB0
ciBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlZXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIG5vZGVWYWwgPSBhcmdzLmF0KGV4ZWMs
IDApOworICAgIEpTVmFsdWVQdHIgbm9kZVZhbCA9IGFyZ3MuYXQoZXhlYywgMCk7CiAgICAgaWYg
KG5vZGVWYWwtPmlzT2JqZWN0KCZKU05vZGU6OnNfaW5mbykpIHsKICAgICAgICAgSlNOb2RlKiBu
b2RlID0gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qobm9kZVZhbCkpOwogICAgICAgICBp
bXBsKCktPmltcG9ydFN0eWxlc2hlZXQobm9kZS0+aW1wbCgpKTsKQEAgLTU4LDEwICs1OCwxMCBA
QCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OmltcG9ydFN0eWxlc2hlCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9G
cmFnbWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogbm9kZVZhbCA9IGFyZ3MuYXQoZXhl
YywgMCk7Ci0gICAgSlNWYWx1ZSogZG9jVmFsID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBKU1Zh
bHVlUHRyIG5vZGVWYWwgPSBhcmdzLmF0KGV4ZWMsIDApOworICAgIEpTVmFsdWVQdHIgZG9jVmFs
ID0gYXJncy5hdChleGVjLCAxKTsKICAgICBpZiAobm9kZVZhbC0+aXNPYmplY3QoJkpTTm9kZTo6
c19pbmZvKSAmJiBkb2NWYWwtPmlzT2JqZWN0KCZKU0RvY3VtZW50OjpzX2luZm8pKSB7CiAgICAg
ICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVjdChu
b2RlVmFsKSktPmltcGwoKTsKICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oc3RhdGljX2Nhc3Q8SlNEb2N1bWVudCo+KGFzT2JqZWN0KGRvY1ZhbCkpLT5pbXBs
KCkpOwpAQCAtNzEsOSArNzEsOSBAQCBKU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvRnJhCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFBy
b2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVu
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSog
bm9kZVZhbCA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgSlNWYWx1ZVB0ciBub2RlVmFsID0gYXJn
cy5hdChleGVjLCAwKTsKICAgICBpZiAobm9kZVZhbC0+aXNPYmplY3QoJkpTTm9kZTo6c19pbmZv
KSkgewogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUqPihhc09iamVj
dChub2RlVmFsKSk7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0RG9jdW1lbnQgPSBp
bXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQobm9kZS0+aW1wbCgpKTsKQEAgLTg1LDcgKzg1LDcg
QEAgSlNWYWx1ZSogSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvYwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRyIEpTWFNM
VFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRPck51bGwoKSB8
fCBhcmdzLmF0KGV4ZWMsIDIpLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsgLy8gVGhyb3cgZXhjZXB0aW9uPwpAQCAtOTYsNyArOTYsNyBAQCBKU1Zh
bHVlKiBKU1hTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihFCiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUqIEpTWFNMVFByb2Nlc3Nvcjo6Z2V0UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgSlNYU0xUUHJvY2Vz
c29yOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewogICAgIGlmIChhcmdzLmF0KGV4ZWMsIDEpLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBKU1ZhbHVlKiBKU1hT
TFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihFCiAgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoZXhlYywgdmFsdWUpOwogfQogCi1KU1ZhbHVlKiBKU1hTTFRQcm9jZXNzb3I6OnJlbW92ZVBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlUHRy
IEpTWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5hdChleGVjLCAxKS0+aXNVbmRlZmluZWRP
ck51bGwoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIg
KzM5LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiBmdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJncykKK1NjaGVkdWxlZEFjdGlvbjo6U2NoZWR1
bGVkQWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jdGlvbiwgY29uc3QgQXJn
TGlzdCYgYXJncykKICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiB7CiAgICAgQXJnTGlzdDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKLSAgICBmb3IgKEFyZ0xpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgZm9yIChB
cmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIG1fYXJncy5hcHBlbmQoKCppdCkuanNWYWx1ZShleGVjKSk7CisgICAgfQog
fQogCiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oCShyZXZp
c2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICov
CiAgICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjaGVk
dWxlZEFjdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlKiBmdW5jdGlvbiwg
Y29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgICAgIFNjaGVkdWxlZEFjdGlvbihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlUHRyIGZ1bmN0aW9uLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKICAgICAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFN0cmluZyYgY29kZSkKICAgICAgICAg
ICAgIDogbV9jb2RlKGNvZGUpCiAgICAgICAgIHsKQEAgLTQ2LDggKzQ2LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZXhlY3V0ZShKU0RPTVdpbmRv
d1NoZWxsKik7CiAKLSAgICAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBtX2Z1
bmN0aW9uOwotICAgICAgICBWZWN0b3I8SlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiA+
IG1fYXJnczsKKyAgICAgICAgSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyIG1fZnVuY3Rpb247Cisg
ICAgICAgIFZlY3RvcjxKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI+IG1fYXJnczsKICAgICAgICAg
U3RyaW5nIG1fY29kZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhbGxTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsU3RhY2suY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FsbFN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBTY3JpcHRD
YWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjayhFeGVjU3RhCiAgICAgaW50IHNpZ25lZExpbmVOdW1i
ZXI7CiAgICAgaW50cHRyX3Qgc291cmNlSUQ7CiAgICAgVVN0cmluZyB1cmxTdHJpbmc7Ci0gICAg
SlNWYWx1ZSogZnVuY3Rpb247CisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbjsKIAogICAgIGV4ZWMt
PmludGVycHJldGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBzaWduZWRMaW5lTnVtYmVy
LCBzb3VyY2VJRCwgdXJsU3RyaW5nLCBmdW5jdGlvbik7CiAKQEAgLTkwLDcgKzkwLDcgQEAgdm9p
ZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQogICAgIGlmICghbV9jYWxsZXIgfHwgbV9p
bml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNWYWx1ZSogZnVuYyA9IG1fZXhl
Yy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIobV9leGVjLCBtX2NhbGxlcik7CisgICAg
SlNWYWx1ZVB0ciBmdW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlciht
X2V4ZWMsIG1fY2FsbGVyKTsKICAgICB3aGlsZSAoIWZ1bmMtPmlzTnVsbCgpKSB7CiAgICAgICAg
IEludGVybmFsRnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24o
ZnVuYyk7CiAgICAgICAgIEFyZ0xpc3QgZW1wdHlBcmdMaXN0OwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3
ICsyOTYsNyBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0CiAgICAg
Ly8gQ3JlYXRlIGEgSlNPYmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50CiAgICAgSlNMb2NrIGxv
Y2soZmFsc2UpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNWYWx1ZSoganNFbGVtZW50VmFsdWUgPSB0b0pTKGV4ZWMsIHBsdWdpbik7
CisgICAgSlNWYWx1ZVB0ciBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZXhlYywgcGx1Z2luKTsKICAg
ICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1ZS0+aXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFz
cyBTdHJpbmc7CiAKIGNsYXNzIFNjcmlwdFZhbHVlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRWYWx1
ZShKU0M6OkpTVmFsdWUqIHZhbHVlID0gSlNDOjpub1ZhbHVlKCkpIDogbV92YWx1ZSh2YWx1ZSkg
e30KKyAgICBTY3JpcHRWYWx1ZShKU0M6OkpTVmFsdWVQdHIgdmFsdWUgPSBKU0M6Om5vVmFsdWUo
KSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQogCi0gICAgSlNDOjpKU1ZhbHVlKiBqc1ZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorICAgIEpTQzo6SlNWYWx1ZVB0ciBqc1ZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogICAgIGJvb2wgZ2V0U3RyaW5nKFN0
cmluZyYgcmVzdWx0KSBjb25zdDsKICAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgIGJvb2wg
aXNVbmRlZmluZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBKU0M6OlByb3RlY3RlZFB0cjxK
U0M6OkpTVmFsdWU+IG1fdmFsdWU7CisgICAgSlNDOjpQcm90ZWN0ZWRKU1ZhbHVlUHRyIG1fdmFs
dWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
b2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4
Niw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU1ZhbHVl
KiBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJp
bmcobmFtZSkpKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMjk5LDcgKzI5OSw3
IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgcmV0
dXJuIG5pbDsKIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0
VGltZW91dENoZWNrKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2VsZiBfaW1wXSwgYXJnTGlzdCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtz
ZWxmIF9pbXBdLCBhcmdMaXN0KTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKQEAgLTMyNCw3ICszMjQsNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhl
Y1N0YXRlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OwogCi0gICAgSlNWYWx1ZSogcmVzdWx0OworICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5zdGFydFRpbWVvdXRDaGVjaygpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHN0YXRpYyB2
b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgLy8gbGVhdmluZyB0aGUg
bG9jayBwZXJtYW5lbnRseSBoZWxkCiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCBTdHJpbmcoa2V5KSkpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcoa2V5KSkpOwog
ICAgICAgICAKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAg
ICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGlj
IHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZQogICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOwogCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIEpTVmFsdWUqIHJl
c3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7CiAKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAt
NTA0LDcgKzUwNCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUK
ICAgICByZXR1cm4gdG9SZWYoW3NlbGYgX2ltcF0pOwogfQogCi0rIChpZClfY29udmVydFZhbHVl
VG9PYmpjVmFsdWU6KEpTVmFsdWUqKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KFJvb3RPYmplY3Qq
KW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9vdE9iamVjdAorKyAo
aWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlUHRyKXZhbHVlIG9yaWdpblJvb3RP
YmplY3Q6KFJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVj
dCopcm9vdE9iamVjdAogewogICAgIGlmICh2YWx1ZS0+aXNPYmplY3QoKSkgewogICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0
YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgSlNMb2NrIGxv
Y2soZmFsc2UpOwogICAgICAgICAKICAgICAgICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKCkgIT0g
JlJ1bnRpbWVPYmplY3RJbXA6OnNfaW5mbykgewotICAgICAgICAgICAgSlNWYWx1ZSogcnVudGlt
ZU9iamVjdCA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVu
dGltZV9vYmplY3QiKSk7CisgICAgICAgICAgICBKU1ZhbHVlUHRyIHJ1bnRpbWVPYmplY3QgPSBv
YmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0
IikpOwogICAgICAgICAgICAgaWYgKHJ1bnRpbWVPYmplY3QgJiYgcnVudGltZU9iamVjdC0+aXNP
YmplY3QoKSkKICAgICAgICAgICAgICAgICBvYmplY3QgPSBhc09iamVjdChydW50aW1lT2JqZWN0
KTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVj
dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0
T2JqZWN0UHJpdmF0ZS5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogfQogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCAo
UHJpdmF0ZSkKLSsgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKil2
YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5S
b290T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmpl
Y3Q7CisrIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1ZVB0cil2YWx1
ZSBvcmlnaW5Sb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290
T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7
CiArIChpZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSZWYpanNPYmplY3Qgb3Jp
Z2luUm9vdE9iamVjdDooSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVj
dCByb290T2JqZWN0OihKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilyb290T2JqZWN0OwogLSAo
aWQpX2luaXQ7CiAtIChpZClfaW5pdFdpdGhKU09iamVjdDooSlNDOjpKU09iamVjdCopaW1wIG9y
aWdpblJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4pb3Jp
Z2luUm9vdE9iamVjdCByb290T2JqZWN0OihQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+KXJvb3RPYmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBA
IHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAgICBteSBAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCA9ICgpOwogCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOYW1lZE5vZGVN
YXAiIG9yICRpbnRlcmZhY2VOYW1lIGVxICJIVE1MQ29sbGVjdGlvbiIpIHsKLSAgICAgICAgcHVz
aChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWUq
IHByb3RvID0gcHJvdG90eXBlKCk7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlT
bG90SW1wbCwgIiAgICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWVQdHIgcHJvdG8gPSBwcm90b3R5
cGUoKTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlm
IChwcm90by0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDwke25hbWVzcGFjZU1heWJlfUpTT2Jq
ZWN0Kj4oYXNPYmplY3QocHJvdG8pKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSlc
biIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1
cm4gZmFsc2U7XG5cbiIpOwogICAgIH0KQEAgLTQ3MSw5ICs0NzEsOSBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKIAogICAgICMgR2V0dGVycwogICAgIGlmICgkaGFzU2V0dGVyKSB7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUqLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlKik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJIYXNDdXN0b21JbmRleFNldHRlciJ9OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIGJvb2wgY3VzdG9tUHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn07CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB2b2lkIHB1dChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWVQdHIsIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB2aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWVQdHIpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBib29sIGN1c3RvbVB1dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIEpTQzo6SlNWYWx1ZVB0ciwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn07CiAgICAg
fQogCiAgICAgIyBDbGFzcyBpbmZvCkBAIC00ODMsMTMgKzQ4MywxMyBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICAjIFN0cnVjdHVyZSBJRAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9N
V2luZG93IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LAotICAgICAgICAgICAgIiAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6
SlNWYWx1ZSogcHJvdG90eXBlKVxuIiAuCisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3Rv
dHlwZSlcbiIgLgogICAgICAgICAgICAgIiAgICB7XG4iIC4KICAgICAgICAgICAgICIgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpOZWVkc1Ro
aXNDb252ZXJzaW9uKSk7XG4iIC4KICAgICAgICAgICAgICIgICAgfVxuXG4iKTsKICAgICB9IGVs
c2lmICgkaGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsCi0gICAgICAg
ICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpKU1ZhbHVlKiBwcm90b3R5cGUpXG4iIC4KKyAgICAgICAgICAgICIgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWVQ
dHIgcHJvdG90eXBlKVxuIiAuCiAgICAgICAgICAgICAiICAgIHtcbiIgLgogICAgICAgICAgICAg
IiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSkpO1xuIiAuCiAgICAgICAgICAgICAiICAgIH1cblxuIik7
CkBAIC01MjEsMTMgKzUyMSwxMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCBkZWZpbmVTZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU09iamVjdCogc2V0
dGVyRnVuY3Rpb24pO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tRGVmaW5lU2V0dGVyIn07CiAKICAgICAjIEN1c3RvbSBsb29rdXBHZXR0ZXIgZnVuY3Rpb24K
LSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBsb29r
dXBHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5
TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Mb29r
dXBHZXR0ZXIifTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgSlNDOjpK
U1ZhbHVlUHRyIGxvb2t1cEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUxvb2t1cEdldHRlciJ9OwogCiAgICAgIyBDdXN0b20gbG9va3VwU2V0dGVyIGZ1
bmN0aW9uCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1
ZSogbG9va3VwU2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tTG9va3VwU2V0dGVyIn07CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
IEpTQzo6SlNWYWx1ZVB0ciBsb29rdXBTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21Mb29rdXBTZXR0ZXIifTsKIAogICAgICMgQ29uc3RydWN0b3Igb2Jq
ZWN0IGdldHRlcgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSogZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqKTtcbiIpIGlmICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlQ29uc3RydWN0b3IifTsKKyAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWVQdHIgZ2V0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkdlbmVyYXRlQ29uc3RydWN0b3IifTsKIAogICAgIG15ICRudW1DdXN0b21GdW5jdGlvbnMgPSAw
OwogICAgIG15ICRudW1DdXN0b21BdHRyaWJ1dGVzID0gMDsKQEAgLTU0NywxNSArNTQ3LDE1IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHsk
ZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0pIHsKLSAgICAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSogIiAuICRjb2RlR2VuZXJh
dG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhl
Y1N0YXRlKikgY29uc3Q7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIEpTQzo6SlNWYWx1ZVB0ciAiIC4gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDtcbiIp
OwogICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQi
IC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1l
KSAuICIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUdldHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBKU0M6OkpTVmFsdWUqICIgLiAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0O1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWVQ
dHIgIiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsKICAgICAgICAgICAgIH0gZWxz
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNl
dHRlciJ9KSB7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFk
b25seS8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2
b2lkIHNldCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUpIC4gIihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNv
ZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NzAsNyArNTcwLDcgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVu
Y3Rpb25zfSkgewogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn0pIHsKICAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25J
bXBsZW1lbnRhdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltcGxlbWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNm
aXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUqICIgLiAkZnVuY3Rpb25JbXBsZW1lbnRh
dGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZVB0
ciAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC02MDIsMjEgKzYwMiwyMSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgSW5kZXgg
Z2V0dGVyCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4
R2V0dGVyIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlKiBpbmRleEdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIGluZGV4R2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9wZXJ0eVNs
b3QmKTtcbiIpOwogICAgIH0KICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSGFzQ3VzdG9tSW5kZXhHZXR0ZXIifSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIEpTQzo6SlNWYWx1ZSogZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGluZGV4KTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNW
YWx1ZVB0ciBnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1xuIik7
CiAgICAgfQogICAgIAogICAgICMgSW5kZXggc2V0dGVyCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGluZGV4LCBKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAgfQogICAgICMgTmFtZSBnZXR0ZXIK
ICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTmFtZUdldHRlciJ9
IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0
dGVyIn0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByaXZhdGU6XG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zv
ck5hbWUoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbENsYXNzTmFtZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSogbmFtZUdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlUHRyIG5hbWVHZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xv
dCYpO1xuIik7CiAgICAgfQogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOwpA
QCAtNjMwLDI4ICs2MzAsMjggQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICBpZiAoISRoYXNQ
YXJlbnQgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVUb0pTIn0p
IHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNTVkdQT0RUeXBlV3Jh
cHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50KiBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qLCBTVkdFbGVtZW50KiBjb250ZXh0KTtc
biIpOwogICAgICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVkaW5nQ29udGV4dFBhcmFtZXRlcigk
aW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6
OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqLCBTVkdFbGVtZW50KiBj
b250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNW
YWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKiwgU1ZHRWxlbWVudCogY29u
dGV4dCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCAkaW1wbFR5cGUqKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgJGltcGxUeXBlKik7XG4iKTsKICAgICAgICAgfQogCiAgICAg
ICAgICMgUmVzb2x2ZSBhbWJpZ3VpdHkgd2l0aCBFdmVudFRhcmdldCB0aGF0IG90aGVyd2lzZSBl
eGlzdHMuCiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIpIHsKLSAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBFdmVudFRhcmdldE5vZGUqIG5vZGUpIHsgcmV0dXJuIHRvSlMoZXhl
Yywgc3RhdGljX2Nhc3Q8Tm9kZSo+KG5vZGUpKTsgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiaW5saW5lIEpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBFdmVudFRhcmdldE5vZGUqIG5vZGUpIHsgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGlj
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsgfVxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCEk
aGFzUGFyZW50IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlTmF0
aXZlQ29udmVydGVyIn0pIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7Ci0gICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNW
YWx1ZSopO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJHBvZFR5cGUg
dG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgfSBlbHNp
ZiAoJGludGVyZmFjZU5hbWUgZXEgIk5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNDOjpK
U1ZhbHVlKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6OkpTVmFsdWVQdHIpO1xuIik7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJGltcGxDbGFz
c05hbWUqIHRvJHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFsdWUqKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiRpbXBsQ2xhc3NOYW1lKiB0byR7aW50ZXJmYWNlTmFt
ZX0oSlNDOjpKU1ZhbHVlUHRyKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiTm9kZSIgb3IgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiIG9yICRpbnRl
cmZhY2VOYW1lIGVxICJUZXh0IikgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IkpTQzo6SlNWYWx1ZSogdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosICRpbnRlcmZh
Y2VOYW1lKik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpT
VmFsdWVQdHIgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosICRpbnRlcmZhY2VOYW1l
Kik7XG4iKTsKICAgICAgICAgfQogICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4i
KTsKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICBpZiAoJG51bUZ1
bmN0aW9ucyA+IDAgfHwgJG51bUNvbnN0YW50cyA+IDApIHsKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LAotICAgICAgICAgICAgIiAgICBzdGF0aWMgUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNWYWx1ZSogcHJv
dG90eXBlKVxuIiAuCisgICAgICAgICAgICAiICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlUHRyIHByb3RvdHlwZSlcbiIgLgog
ICAgICAgICAgICAgIiAgICB7XG4iIC4KICAgICAgICAgICAgICIgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUpKTtcbiIgLgogICAgICAgICAgICAgIiAgICB9XG4iKTsKQEAgLTY4NCw3ICs2ODQsNyBAQCBz
dWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gRnVuY3Rp
b25zXG5cbiIpOwogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1
bmN0aW9uc30pIHsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2Z1bmN0aW9uTmFtZX0o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKiwgY29uc3QgSlND
OjpBcmdMaXN0Jik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6
OkpTVmFsdWVQdHIgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZVB0ciwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNjkyLDE2ICs2OTIsMTYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIi8vIEF0dHJpYnV0ZXNcblxuIik7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAg
ICAgICBteSAkZ2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVHZW5lcmF0b3It
PldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29uc3RydWN0b3IiIDogIiIpOwot
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSogJHtnZXR0ZXJ9
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgY29uc3QgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6
SlNWYWx1ZVB0ciAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgICAgICB1bmxlc3Mg
KCRhdHRyaWJ1dGUtPnR5cGUgPX4gL3JlYWRvbmx5LykgewogICAgICAgICAgICAgICAgIG15ICRz
ZXR0ZXIgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNm
aXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3RvciIgOiAiIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInZvaWQgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSopO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgInZvaWQgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZVB0cik7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkdlbmVyYXRlQ29uc3RydWN0b3IifSkgewogICAgICAgICAgICAgbXkgJGdldHRlciA9
ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7Ci0gICAgICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyICR7Z2V0
dGVyfShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIGNvbnN0IEpTQzo6
UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzA5LDcgKzcwOSw3
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCIvLyBD
b25zdGFudHNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAeyRkYXRhTm9k
ZS0+Y29uc3RhbnRzfSkgewogICAgICAgICAgICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJm
YWNlTmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRjb25zdGFudC0+bmFtZSk7Ci0g
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiAke2dldHRlcn0o
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBjb25zdCBKU0M6OlByb3Bl
cnR5U2xvdCYpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlUHRyICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIGNvbnN0IEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTA1Niw3ICsxMDU2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gICRj
b2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8gIkNvbnN0cnVj
dG9yIiA6ICIiKTsKICAgICAgICAgICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9
ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRuYW1lKTsKIAotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZVB0ciAke2dldEZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKIAogICAgICAgICAgICAgICAgIG15ICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJz
aW9uID0gIiI7CkBAIC0xMTI0LDEwICsxMTI0LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkcG9kVHlwZSBpbXAoKnN0YXRpY19j
YXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpK
U1ZhbHVlKiByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGltcGxDbGFzc05hbWUsICIiLCAiaW1wLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVj
KSIsICJzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSki
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTQzo6SlNWYWx1ZVB0ciByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICIiLCAiaW1wLiRpbXBsR2V0dGVyRnVu
Y3Rpb25OYW1lKGVjKSIsICJzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xvdC5z
bG90QmFzZSgpKSkiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NO
YW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHN0YXRpY19jYXN0PCRjbGFz
c05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlKiBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGlt
cGxDbGFzc05hbWUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uLCAiaW1wLT4kaW1w
bEdldHRlckZ1bmN0aW9uTmFtZShlYykiLCAic3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSkpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWVQdHIgcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAk
aW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbiwgImltcC0+JGltcGxHZXR0ZXJGdW5jdGlv
bk5hbWUoZWMpIiwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RC
YXNlKCkpKSIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTtcbiIpOwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0
ZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JGdW5jdGlv
bk5hbWUgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3IiOwogCi0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2NvbnN0cnVjdG9yRnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpT
VmFsdWVQdHIgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0
KHNsb3Quc2xvdEJhc2UoKSkpLT5nZXRDb25zdHJ1Y3RvcihleGVjKTtcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifTsKIAogICAg
ICAgICBpZiAoJGhhc1NldHRlcikgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2
b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVxuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQ
dHIgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9vbCBvaztcbiIpOwpAQCAtMTE4MSw3ICsxMTgxLDcg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKIAogICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKVxuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlKVxuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpbmRleFNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
bjtcbiIpOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRwdXRGdW5jdGlvbk5hbWUgPSAic2V0SlMiIC4g
JGludGVyZmFjZU5hbWUgLiAgJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpIC4gKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3Rv
ciIgOiAiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1lKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7cHV0RnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSlcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7cHV0
RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1Zh
bHVlUHRyIHZhbHVlKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9ICYmICEkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJp
dHkifSkgewpAQCAtMTI4NCw3ICsxMjg0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJh
dGVDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSog
JHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpXG57XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlUHRyICR7Y2xhc3NOYW1lfTo6Z2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKVxue1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rvcjwke2NsYXNzTmFtZX1Db25zdHJ1Y3Rv
cj4oZXhlYyk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAg
IH0KQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNs
YXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwogICAgICAgICAgICAgbXkgJGZ1bmN0aW9u
SW1wbGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIn0gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xj
Zmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOwogCi0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTVmFsdWUqICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKVxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWVQdHIgJHtmdW5jdGlvbk5hbWV9
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncylcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKIAogICAgICAgICAgICAgJGltcGxLSlNJbmNsdWRleyJFcnJvci5oIn0gPSAxOwpAQCAtMTQx
OCw3ICsxNDE4LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15
ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNm
aXJzdCgkY29uc3RhbnQtPm5hbWUpOwogCiAgICAgICAgICAgICAjIEZJWE1FOiB0aGlzIGNhc3Rz
IGludG8gaW50IHRvIG1hdGNoIG91ciBwcmV2aW91cyBiZWhhdmlvciB3aGljaCB0dXJuZWQgMHhG
RkZGRkZGRiBpbiAtMSBmb3IgTm9kZUZpbHRlci5TSE9XX0FMTAotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU1ZhbHVlKiAke2dldHRlcn0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JilcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJKU1ZhbHVlUHRyICR7Z2V0dGVyfShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKVxuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oIiAuICRjb25zdGFudC0+
dmFsdWUgLiAiKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKQEAgLTE0MjYsNyArMTQyNiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
fQogCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0
dGVyIn0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbkpTVmFsdWUqICR7Y2xhc3NO
YW1lfTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuSlNWYWx1ZVB0ciAke2NsYXNzTmFtZX06OmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqID0gc3Rh
dGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpO1xuIik7CiAg
ICAgICAgIGlmIChJbmRleEdldHRlclJldHVybnNTdHJpbmdzKCRpbXBsQ2xhc3NOYW1lKSkgewpA
QCAtMTQ0NCwxMSArMTQ0NCwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAg
aWYgKCghJGhhc1BhcmVudCBvciAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5l
cmF0ZVRvSlMifSkgYW5kICFVc2VzTWFudWFsVG9KU0ltcGxlbWVudGF0aW9uKCRpbXBsQ2xhc3NO
YW1lKSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1NWR1BP
RFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNWYWx1ZVB0ciB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPiogb2JqZWN0
LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CiAgICAgICAgIH0gZWxzaWYgKElzU1ZHVHlwZU5l
ZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCAkaW1wbFR5cGUqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dClcbiIpOworICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsICRpbXBsVHlwZSogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KVxuIik7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6SlNW
YWx1ZSogdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgJGltcGxUeXBlKiBvYmplY3QpXG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsICRpbXBsVHlwZSogb2JqZWN0KVxuIik7CiAgICAgICAgIH0KIAog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtMTQ2NCw5ICsxNDY0LDkgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIGlmICgoISRoYXNQYXJlbnQgb3IgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkg
YW5kICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYXRpdmVDb252ZXJ0
ZXIifSkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSogdmFsdWUp
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHBvZFR5cGUgdG8ke2ludGVy
ZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZVB0ciB2YWx1ZSlcbiIpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNzTmFtZSogdG8ke2ludGVy
ZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSogdmFsdWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJGltcGxDbGFzc05hbWUqIHRvJHtpbnRlcmZhY2VOYW1lfShKU0M6OkpTVmFs
dWVQdHIgdmFsdWUpXG4iKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CkBAIC0xNTE1LDcgKzE1MTUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bkZ1bmN0aW9uQ2FsbCgpCiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAi
cmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAiSlNDOjpKU1ZhbHVlKiByZXN1bHQgPSAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENsYXNzTmFtZSwg
IiIsICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gIkpTQzo6SlNWYWx1ZVB0ciByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW1wbENs
YXNzTmFtZSwgIiIsICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXNPYmoiKSAuICI7XG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKIAogICAgICAg
ICBpZiAoJHBvZFR5cGUpIHsKQEAgLTE5NzIsNyArMTk3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsg
fQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSogcHJvdG8pIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJv
dG8pIAogICAgIHsgCiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAogICAgIH0KSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCi0g
ICAgICAgIEpTVmFsdWUqIGZ1bmN0aW9uID0gb2JqLT5pbXA7CisgICAgICAgIEpTVmFsdWVQdHIg
ZnVuY3Rpb24gPSBvYmotPmltcDsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAg
ICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBi
b29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAgIGdldExpc3RG
cm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3Qp
OwogICAgICAgICBQcm90ZWN0ZWRQdHI8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnN0YXJ0VGlt
ZW91dENoZWNrKCk7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdFYgPSBjYWxsKGV4ZWMsIGZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGZ1bmN0aW9uLCBhcmdMaXN0KTsKKyAgICAgICAgSlNW
YWx1ZVB0ciByZXN1bHRWID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBmdW5jdGlvbiwgYXJnTGlzdCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RvcFRpbWVvdXRD
aGVjaygpOwogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRo
ZSBmdW5jdGlvbiBjYWxsLgpAQCAtMTYxLDcgKzE2MSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQ
IG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBKU1ZhbHVlKiBmdW5jdGlv
biA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFs
dWUuc3RyaW5nKSk7CisgICAgICAgIEpTVmFsdWVQdHIgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwogICAg
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5j
dGlvbi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKQpAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwg
TlBPYmplY3QqIG8sIE4KICAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdz
LCBhcmdDb3VudCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIFByb3RlY3RlZFB0cjxK
U0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKLSAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ViA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
b2JqLT5pbXAsIGFyZ0xpc3QpOworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdFYgPSBjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iai0+aW1wLCBhcmdMaXN0KTsKICAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICAgICAgLy8gQ29u
dmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0yMDYs
NyArMjA2LDcgQEAgYm9vbCBfTlBOX0V2YWx1YXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QUwogICAg
ICAgICBnbG9iYWxPYmplY3QtPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBl
IHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1
ZSogcmVzdWx0OworICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdDsKICAgICAgICAgaWYgKHR5cGUg
PT0gTm9ybWFsKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKQEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIF9OUE5fR2V0
UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIFByaXZhdGVJZGVudGlmaWVyKiBp
ID0gc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAKICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7
CisgICAgICAgIEpTVmFsdWVQdHIgcmVzdWx0OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpCiAg
ICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJ
ZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOwogICAgICAgICBlbHNlCkBAIC0zNjQsNyArMzY0
LDcgQEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogCiAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgSlNWYWx1ZSogZnVuYyA9
IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUu
c3RyaW5nKSk7CisgICAgICAgIEpTVmFsdWVQdHIgZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhlYywg
aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAhZnVuYy0+aXNVbmRlZmluZWQo
KTsKICAgICB9CkBAIC00MzIsNyArNDMyLDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5Q
T2JqZWN0KiBvLCBjbwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIAogICAg
ICAgICAvLyBDYWxsIHRoZSBjb25zdHJ1Y3RvciBvYmplY3QuCi0gICAgICAgIEpTVmFsdWUqIGNv
bnN0cnVjdG9yID0gb2JqLT5pbXA7CisgICAgICAgIEpTVmFsdWVQdHIgY29uc3RydWN0b3IgPSBv
YmotPmltcDsKICAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBjb25zdHJ1Y3Rvci0+Z2V0Q29uc3RydWN0RGF0
YShjb25zdHJ1Y3REYXRhKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZU5vbmUpCkBAIC00NDIsNyArNDQyLDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5Q
T2JqZWN0KiBvLCBjbwogICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3Ms
IGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAgUHJvdGVjdGVkUHRyPEpT
R2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsK
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdGFydFRpbWVvdXRDaGVjaygpOwotICAgICAgICBKU1Zh
bHVlKiByZXN1bHRWID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBl
LCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KTsKKyAgICAgICAgSlNWYWx1ZVB0ciByZXN1bHRWID0g
Y29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
LCBhcmdMaXN0KTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zdG9wVGltZW91dENoZWNrKCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L3J1bnRpbWUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiArNzgsMTIgQEAgdm9pZCBJbnN0YW5jZTo6ZW5k
KCkKICAgICB2aXJ0dWFsRW5kKCk7CiB9CiAKLUpTVmFsdWUqIEluc3RhbmNlOjpnZXRWYWx1ZU9m
RmllbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVsZCogYUZpZWxkKSBjb25zdAorSlNWYWx1
ZVB0ciBJbnN0YW5jZTo6Z2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmll
bGQqIGFGaWVsZCkgY29uc3QKIHsKICAgICByZXR1cm4gYUZpZWxkLT52YWx1ZUZyb21JbnN0YW5j
ZShleGVjLCB0aGlzKTsKIH0KIAotdm9pZCBJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGFGaWVsZCwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAor
dm9pZCBJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmll
bGQqIGFGaWVsZCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgYUZpZWxkLT5zZXRW
YWx1ZVRvSW5zdGFuY2UoZXhlYywgdGhpcywgYVZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lLmgJKHJl
dmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw4ICs1MCw4IEBAIHR5cGVkZWYgVmVjdG9yPE1ldGhvZCo+IE1ldGhvZExpc3Q7CiBj
bGFzcyBGaWVsZCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRl
KiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
VG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUqKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RhbmNlKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlUHRyKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIH5GaWVsZCgpIHsgfQogfTsKQEAgLTY5LDcgKzY5LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIE1ldGhvZExpc3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSop
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEZpZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZp
ZXImLCBJbnN0YW5jZSopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGZhbGxiYWNr
T2JqZWN0KEV4ZWNTdGF0ZSosIEluc3RhbmNlKiwgY29uc3QgSWRlbnRpZmllciYpIHsgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZmFsbGJhY2tPYmplY3Qo
RXhlY1N0YXRlKiwgSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4ganNVbmRl
ZmluZWQoKTsgfQogCiAgICAgdmlydHVhbCB+Q2xhc3MoKSB7IH0KIH07CkBAIC0xMDcsMjUgKzEw
NywyNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25z
dCA9IDA7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBnZXRWYWx1ZU9mRmllbGQoRXhlY1N0
YXRlKiwgY29uc3QgRmllbGQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGdldFZhbHVl
T2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJikgY29uc3QgeyBy
ZXR1cm4ganNVbmRlZmluZWQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mRmllbGQo
RXhlY1N0YXRlKiwgY29uc3QgRmllbGQqLCBKU1ZhbHVlKikgY29uc3Q7CisgICAgdmlydHVhbCBK
U1ZhbHVlUHRyIGdldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUqLCBjb25zdCBGaWVsZCopIGNvbnN0
OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYpIGNvbnN0IHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IEZpZWxk
KiwgSlNWYWx1ZVB0cikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2V0VmFsdWVP
ZlVuZGVmaW5lZEZpZWxkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1Zh
bHVlKikge30KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlUHRyKSB7fQogCi0gICAgdmlydHVhbCBK
U1ZhbHVlKiBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlTWV0aG9k
KEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKSA9IDA7
CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZURlZmF1bHRNZXRo
b2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0K
KyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqLCBj
b25zdCBBcmdMaXN0JikgeyByZXR1cm4ganNVbmRlZmluZWQoKTsgfQogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0NvbnN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBKU1ZhbHVlKiBpbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlz
dCYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlQ29uc3RydWN0
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKSB7IHJldHVybiBub1ZhbHVlKCk7IH0KICAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYpIHsgfQogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSlNW
YWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkg
Y29uc3QgPSAwOwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0IHsgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGdldENsYXNzKCktPm5hbWUoKSk7
IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
IHsgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGdldENsYXNzKCktPm5hbWUoKSk7IH0KICAgICAKICAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0KCkgY29uc3Q7CiAgICAgCkBAIC0xNDUsOCArMTQ1LDgg
QEAgcHVibGljOgogICAgIEFycmF5KFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwogICAgIHZpcnR1
YWwgfkFycmF5KCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRl
ICosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSlNW
YWx1ZSogdmFsdWVBdChFeGVjU3RhdGUgKiwgdW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKiwgdW5zaWduZWQgaW5kZXgsIEpT
VmFsdWVQdHIpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVBdChFeGVj
U3RhdGUgKiwgdW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRMZW5ndGgoKSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMTMgQEAgUnVudGltZUFy
cmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleAogewogfQogCi1KU1ZhbHVlKiBSdW50aW1l
QXJyYXk6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1bnRpbWVBcnJheTo6bGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxS
dW50aW1lQXJyYXkqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKTsKICAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgdGhpc09iai0+Z2V0TGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlKiBSdW50aW1l
QXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWVQdHIgUnVudGltZUFycmF5OjppbmRleEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVu
dGltZUFycmF5Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgcmV0dXJuIHRoaXNP
YmotPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBzbG90LmluZGV4KCkpOwpAQCAt
ODMsNyArODMsNyBAQCBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3Qp
OwogfQogCi12b2lkIFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQordm9pZCBSdW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IpOwpAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgUnVudGltZUFycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCAKICAgICBK
U09iamVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lk
IFJ1bnRpbWVBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFs
dWUqIHZhbHVlKQordm9pZCBSdW50aW1lQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4LCBKU1ZhbHVlUHRyIHZhbHVlKQogewogICAgIGlmIChpbmRleCA+PSBnZXRMZW5n
dGgoKSkgewogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IpOwpJbmRleDogV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0cik7CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwpAQCAtNTYsMTQgKzU2LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5
cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0
cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgSlNWYWx1ZVB0ciBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBPd25QdHI8QmluZGluZ3M6OkFy
cmF5PiBfYXJyYXk7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNp
b24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUnVudGltZU1ldGhvZDo6UnVudGltZU1ldGhvZChFeGVj
U3RhdGUqIAogewogfQogCi1KU1ZhbHVlKiBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZVB0ciBSdW50aW1lTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1
bnRpbWVNZXRob2QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oYXNPYmpl
Y3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAKQEAgLTcwLDcgKzcwLDcgQEAgYm9vbCBSdW50aW1lTWV0
aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotc3RhdGlj
IEpTVmFsdWUqIGNhbGxSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1
bmN0aW9uLCBKU1ZhbHVlKiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMg
SlNWYWx1ZVB0ciBjYWxsUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBm
dW5jdGlvbiwgSlNWYWx1ZVB0ciB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAg
ICAgUnVudGltZU1ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8UnVudGltZU1ldGhvZCo+KGZ1
bmN0aW9uKTsKIApAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgSlNWYWx1ZSogY2FsbFJ1bnRpbWVN
ZXRob2QoRXhlY1N0CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhpc09iaiBpcyB0aGUg
RE9NIG9iamVjdCBmb3IgYSBwbHVnaW4sIGdldCB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAv
LyBydW50aW1lIG9iamVjdCBmcm9tIHRoZSBET00gb2JqZWN0LgotICAgICAgICBKU1ZhbHVlKiB2
YWx1ZSA9IHRoaXNWYWx1ZS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIl9fYXBwbGVfcnVu
dGltZV9vYmplY3QiKSk7CisgICAgICAgIEpTVmFsdWVQdHIgdmFsdWUgPSB0aGlzVmFsdWUtPmdl
dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikpOwogICAg
ICAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKSAgICAK
ICAgICAgICAgICAgIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihhc09iamVj
dCh2YWx1ZSkpOwogICAgICAgICBlbHNlCkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBKU1ZhbHVl
KiBjYWxsUnVudGltZU1ldGhvZChFeGVjU3QKICAgICAgICAgcmV0dXJuIFJ1bnRpbWVPYmplY3RJ
bXA6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMpOwogICAgICAgICAKICAgICBpbnN0YW5j
ZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlTWV0aG9k
KGV4ZWMsICptZXRob2QtPm1ldGhvZHMoKSwgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQg
PSBpbnN0YW5jZS0+aW52b2tlTWV0aG9kKGV4ZWMsICptZXRob2QtPm1ldGhvZHMoKSwgYXJncyk7
CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfbWV0aG9kLmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9tZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0
ZVN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgbGVuZ3RoR2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRh
KENhbGxEYXRhJik7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAJKHJldmlzaW9u
IDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgUnVudGltZU9iamVjdEltcDo6aW52YWxpZGF0ZSgp
CiAgICAgaW5zdGFuY2UgPSAwOwogfQogCi1KU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjpmYWxs
YmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZVB0ciBSdW50aW1lT2Jq
ZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1
bnRpbWVPYmplY3RJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4o
YXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5j
ZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtNzcsMTQgKzc3LDE0IEBAIEpTVmFsdWUqIFJ1bnRp
bWVPYmplY3RJbXA6OmZhbGxiYWNrT2JqZWMKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIAogICAg
IENsYXNzICphQ2xhc3MgPSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKTsKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0KGV4ZWMsIGluc3RhbmNlLmdldCgpLCBwcm9wZXJ0
eU5hbWUpOworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gYUNsYXNzLT5mYWxsYmFja09iamVjdChl
eGVjLCBpbnN0YW5jZS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKIAogICAgIGluc3RhbmNlLT5lbmQo
KTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIFJ1bnRp
bWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlUHRyIFJ1
bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7ICAgIAogICAg
IFJ1bnRpbWVPYmplY3RJbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1w
Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0
YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtOTYsMTQgKzk2LDE0IEBAIEpTVmFsdWUqIFJ1
bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEUKIAogICAgIENsYXNzICphQ2xhc3MgPSBpbnN0
YW5jZS0+Z2V0Q2xhc3MoKTsKICAgICBGaWVsZCogYUZpZWxkID0gYUNsYXNzLT5maWVsZE5hbWVk
KHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0KCkpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGlu
c3RhbmNlLT5nZXRWYWx1ZU9mRmllbGQoZXhlYywgYUZpZWxkKTsgCisgICAgSlNWYWx1ZVB0ciBy
ZXN1bHQgPSBpbnN0YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAogICAgIAog
ICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTVmFsdWUqIFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZVB0ciBSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
UnVudGltZU9iamVjdEltcCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpOwogICAgIFJlZlB0
cjxJbnN0YW5jZT4gaW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTExNSw3ICsxMTUs
NyBAQCBKU1ZhbHVlKiBSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIoCiAKICAgICBDbGFz
cyAqYUNsYXNzID0gaW5zdGFuY2UtPmdldENsYXNzKCk7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RM
aXN0ID0gYUNsYXNzLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5nZXQoKSk7
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBuZXcgKGV4
ZWMpIFJ1bnRpbWVNZXRob2QoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIAogICAg
IGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAgIApAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wg
UnVudGltZU9iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUnVudGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikK
K3ZvaWQgUnVudGltZU9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NF
cnJvcihleGVjKTsKQEAgLTIwMiwyMyArMjAyLDIzIEBAIGJvb2wgUnVudGltZU9iamVjdEltcDo6
ZGVsZXRlUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUqIFJ1bnRp
bWVPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgaGludCkgY29uc3QKK0pTVmFsdWVQdHIgUnVudGltZU9iamVjdEltcDo6ZGVmYXVs
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25z
dAogewogICAgIGlmICghaW5zdGFuY2UpCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nl
c3NFcnJvcihleGVjKTsKICAgICAKICAgICBSZWZQdHI8SW5zdGFuY2U+IHByb3RlY3RvcihpbnN0
YW5jZSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5z
dGFuY2UtPmRlZmF1bHRWYWx1ZShleGVjLCBoaW50KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9
IGluc3RhbmNlLT5kZWZhdWx0VmFsdWUoZXhlYywgaGludCk7CiAgICAgaW5zdGFuY2UtPmVuZCgp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBjYWxsUnVudGltZU9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZVB0ciBjYWxsUnVudGltZU9iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAqPihmdW5jdGlvbiktPmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAg
aW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmludm9r
ZURlZmF1bHRNZXRob2QoZXhlYywgYXJncyk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBpbnN0
YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKICAgICBpbnN0YW5jZS0+ZW5k
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzNSwxMSArMjM1LDExIEBAIEpTT2JqZWN0
KiBjYWxsUnVudGltZUNvbnN0cnVjdG9yKEV4ZWNTdGEKIHsKICAgICBSZWZQdHI8SW5zdGFuY2U+
IGluc3RhbmNlKHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihjb25zdHJ1Y3RvciktPmdl
dEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZUNvbnN0cnVjdChleGVjLCBhcmdzKTsKKyAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VDb25zdHJ1Y3QoZXhlYywgYXJncyk7
CiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgIAogICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQtPmlzT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJlc3VsdCkg
OiBjb25zdHJ1Y3RvcjsKKyAgICByZXR1cm4gcmVzdWx0LT5pc09iamVjdCgpID8gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPihyZXN1bHQtPmFzQ2VsbCgpKSA6IGNvbnN0cnVjdG9yOwogfQogCiBDb25z
dHJ1Y3RUeXBlIFJ1bnRpbWVPYmplY3RJbXA6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24g
Mzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw5ICszNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SdW50aW1lT2JqZWN0SW1w
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVm
YXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAg
IHZpcnR1YWwgSlNWYWx1ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxs
RGF0YSYpOwogICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0
cnVjdERhdGEmKTsKICAgICAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1Zh
bHVlKiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgfQpA
QCAtNzAsOSArNzAsOSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KICAgICAKLSAgICBzdGF0aWMg
SlNWYWx1ZSogZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBmaWVsZEdldHRl
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIEpTVmFsdWUqIG1ldGhvZEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWVQdHIgZmFsbGJh
Y2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNW
YWx1ZVB0ciBtZXRob2RHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgUmVmUHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFu
Y2U7CiB9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldAogICAgIHJl
dHVybiBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQ7CiB9CiAKLUpTVmFsdWUqIENJbnN0
YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0
aG9kTGlzdCwgY29uc3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0LCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgYXJlIG5v
dCBhbGxvd2VkIGJ5IE5QT2JqZWN0cy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAgIC8vIG5hbWUg
bWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBKU1Zh
bHVlKiBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhCiAgICAgZm9yIChpID0gMDsgaSA8
IGNvdW50OyBpKyspCiAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmY0FyZ3NbaV0p
OwogCi0gICAgSlNWYWx1ZSogcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShl
eGVjLCAmcmVzdWx0VmFyaWFudCwgX3Jvb3RPYmplY3QuZ2V0KCkpOworICAgIEpTVmFsdWVQdHIg
cmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFu
dCwgX3Jvb3RPYmplY3QuZ2V0KCkpOwogICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVz
dWx0VmFyaWFudCk7CiAgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCiAKLUpTVmFsdWUqIENJ
bnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCitKU1ZhbHVlUHRyIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFfb2JqZWN0LT5f
Y2xhc3MtPmludm9rZURlZmF1bHQpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAt
MTMwLDcgKzEzMCw3IEBAIEpTVmFsdWUqIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCgK
ICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgX05QTl9SZWxlYXNlVmFy
aWFudFZhbHVlKCZjQXJnc1tpXSk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHRWYWx1ZSA9IGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5nZXQo
KSk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KGV4ZWMsICZyZXN1bHRWYXJpYW50LCBfcm9vdE9iamVjdC5nZXQoKSk7CiAgICAgX05QTl9SZWxl
YXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKICAgICByZXR1cm4gcmVzdWx0VmFsdWU7
CiB9CkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzQ29uc3RydWN0
KCkgY29ucwogICAgIHJldHVybiBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdDsKIH0KICAgICAK
LUpTVmFsdWUqIENJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghX29iamVj
dC0+X2NsYXNzLT5jb25zdHJ1Y3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAt
MTYzLDEyICsxNjMsMTIgQEAgSlNWYWx1ZSogQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhl
YwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdFZhbHVlID0gY29u
dmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0Lmdl
dCgpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFs
dWUoZXhlYywgJnJlc3VsdFZhcmlhbnQsIF9yb290T2JqZWN0LmdldCgpKTsKICAgICBfTlBOX1Jl
bGVhc2VWYXJpYW50VmFsdWUoJnJlc3VsdFZhcmlhbnQpOwogICAgIHJldHVybiByZXN1bHRWYWx1
ZTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIENJbnN0YW5j
ZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBo
aW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKICAgICAgICAgcmV0
dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwpAQCAtMTc3LDI2ICsxNzcsMjYgQEAgSlNWYWx1ZSogQ0lu
c3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YQogICAgIHJldHVybiB2YWx1ZU9mKGV4ZWMpOwog
fQogCi1KU1ZhbHVlKiBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWVQdHIgQ0luc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7CiAgICAgY2hhciBidWZbMTAyNF07CiAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIk5QT2JqZWN0ICVwLCBOUENsYXNzICVwIiwgX29iamVjdCwgX29iamVjdC0+X2NsYXNzKTsK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgYnVmKTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNl
OjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIENJbnN0YW5j
ZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlLgogICAgIHJldHVybiBqc051bWJlcihleGVjLCAw
KTsKIH0KIAotSlNWYWx1ZSogQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAorSlNWYWx1
ZVB0ciBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUuCiAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7
CiB9CiAKLUpTVmFsdWUqIENJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
IAorSlNWYWx1ZVB0ciBDSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdCAK
IHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiB9CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9jL2NfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDIxIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0
dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1
ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwg
SlNWYWx1ZVB0ciB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1
ZVB0ciBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwg
Y29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQ
dHIgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdM
aXN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUq
LCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGludm9rZURlZmF1bHRN
ZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tl
Q29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgaW52b2tlQ29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5Jik7CiAKLSAgICBKU1ZhbHVlKiBzdHJpbmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICBKU1ZhbHVlKiBudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlKiBi
b29sZWFuVmFsdWUoKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0
ZSopIGNvbnN0OworICAgIEpTVmFsdWVQdHIgbnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7
CisgICAgSlNWYWx1ZVB0ciBib29sZWFuVmFsdWUoKSBjb25zdDsKICAgICAKICAgICBOUE9iamVj
dCAqZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gX29iamVjdDsgfQogCkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9j
X3J1bnRpbWUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19ydW50
aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjb25zdCBjaGFyKiBDRmll
bGQ6Om5hbWUoKSBjb25zdAogICAgIHJldHVybiBpLT5pc1N0cmluZyA/IGktPnZhbHVlLnN0cmlu
ZyA6IDA7CiB9CiAKLUpTVmFsdWUqIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKK0pTVmFsdWVQdHIgQ0ZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0KSBj
b25zdAogewogICAgIGNvbnN0IENJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCBDSW5zdGFuY2UqPihpbnN0KTsKICAgICBOUE9iamVjdCogb2JqID0gaW5zdGFuY2UtPmdldE9i
amVjdCgpOwpAQCAtNjcsNyArNjcsNyBAQCBKU1ZhbHVlKiBDRmllbGQ6OnZhbHVlRnJvbUluc3Rh
bmNlKEV4ZWNTCiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVydHko
b2JqLCBfZmllbGRJZGVudGlmaWVyLCAmcHJvcGVydHkpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChyZXN1bHQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKGV4ZWMsICZwcm9wZXJ0eSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMs
ICZwcm9wZXJ0eSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CiAgICAgICAgICAgICBfTlBOX1Jl
bGVhc2VWYXJpYW50VmFsdWUoJnByb3BlcnR5KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAgSlNWYWx1ZSogQ0ZpZWxkOjp2YWx1ZUZyb21J
bnN0YW5jZShFeGVjUwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi12b2lkIENGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmlu
c3QsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3QKK3ZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFu
Y2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdCwgSlNWYWx1ZVB0ciBhVmFs
dWUpIGNvbnN0CiB7CiAgICAgY29uc3QgQ0luc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0
PGNvbnN0IENJbnN0YW5jZSo+KGluc3QpOwogICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0YW5jZS0+
Z2V0T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmgJKHJldmlzaW9uIDM5NjAzKQorKysg
V2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgs
OCBAQCBjbGFzcyBDRmllbGQgOiBwdWJsaWMgRmllbGQgewogcHVibGljOgogICAgIENGaWVsZChO
UElkZW50aWZpZXIgaWRlbnQpIDogX2ZpZWxkSWRlbnRpZmllcihpZGVudCkgeyB9CiAKLSAgICB2
aXJ0dWFsIEpTVmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3Rh
bmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0
IEluc3RhbmNlKiwgSlNWYWx1ZVB0cikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBu
YW1lKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShyZXZp
c2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYxNldp
dGhMYXRpCiB9CiAKIC8vIFZhcmlhbnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5QUmVs
ZWFzZVZhcmlhbnRWYWx1ZSgpCi12b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQordm9pZCBjb252ZXJ0
VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUsIE5QVmFy
aWFudCogcmVzdWx0KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIApAQCAtMTA1LDcgKzEw
NSw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKICAgICB9CiB9
CiAKLUpTVmFsdWUqIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiByb290T2JqZWN0KQorSlNWYWx1ZVB0
ciBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFu
dCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDM5NjAzKQorKysg
V2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcs
OCBAQCBlbnVtIE5QX1ZhbHVlVHlwZSB7CiB9OwogCiBXZWJDb3JlOjpTdHJpbmcgY29udmVydE5Q
U3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyAqc3RyaW5nKTsKLXZvaWQgY29udmVydFZhbHVl
VG9OUFZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIE5QVmFyaWFudCogcmVzdWx0KTsKLUpT
VmFsdWUqIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSosIGNvbnN0IE5QVmFyaWFu
dCosIFJvb3RPYmplY3QqKTsKK3ZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRl
KiwgSlNWYWx1ZVB0ciwgTlBWYXJpYW50KiByZXN1bHQpOworSlNWYWx1ZVB0ciBjb252ZXJ0TlBW
YXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBOUFZhcmlhbnQqLCBSb290T2JqZWN0Kik7
CiBJZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGNvbnN0IE5QVVRGOCogbmFt
ZSk7CiAKIHN0cnVjdCBQcml2YXRlSWRlbnRpZmllciB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5p
X2luc3RhbmNlLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5p
X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBDbGFzcyAqSmF2
YUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0IAogICAgIHJldHVybiBfY2xhc3M7CiB9CiAKLUpT
VmFsdWUqIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
SlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkBAIC05MiwyMyArOTIsMjMgQEAg
SlNWYWx1ZSogSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjUwogICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB1KTsKIH0KIAotSlNWYWx1ZSogSmF2YUluc3RhbmNlOjpudW1iZXJWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFs
dWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGpkb3VibGUgZG91YmxlVmFsdWUgPSBj
YWxsSk5JTWV0aG9kPGpkb3VibGU+KF9pbnN0YW5jZS0+X2luc3RhbmNlLCAiZG91YmxlVmFsdWUi
LCAiKClEIik7CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGRvdWJsZVZhbHVlKTsKIH0KIAot
SlNWYWx1ZSogSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAorSlNWYWx1ZVB0ciBK
YXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAgamJvb2xlYW4gYm9vbGVh
blZhbHVlID0gY2FsbEpOSU1ldGhvZDxqYm9vbGVhbj4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJi
b29sZWFuVmFsdWUiLCAiKClaIik7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihib29sZWFuVmFsdWUp
OwogfQogCi1KU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdzKQor
SlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdzKQogewogICAg
IGludCBpLCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwogICAgIGp2YWx1ZSAqakFyZ3M7Ci0gICAgSlNW
YWx1ZSogcmVzdWx0VmFsdWU7CisgICAgSlNWYWx1ZVB0ciByZXN1bHRWYWx1ZTsKICAgICBNZXRo
b2QgKm1ldGhvZCA9IDA7CiAgICAgc2l6ZV90IG51bU1ldGhvZHMgPSBtZXRob2RMaXN0LnNpemUo
KTsKICAgICAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBKU1ZhbHVlKiBKYXZhSW5zdGFuY2U6Omludm9r
ZU1ldGhvZCAoRXhlCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAgICAgaWYgKHJvb3RPYmpl
Y3QtPm5hdGl2ZUhhbmRsZSgpKSB7CiAgICAgICAgIGpvYmplY3Qgb2JqID0gX2luc3RhbmNlLT5f
aW5zdGFuY2U7Ci0gICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9WYWx1
ZSgpOworICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9WYWx1ZSgp
OwogICAgICAgICBjb25zdCBjaGFyICpjYWxsaW5nVVJMID0gMDsgIC8vIEZJWE1FLCBuZWVkIHRv
IHByb3BhZ2F0ZSBjYWxsaW5nIFVSTCB0byBKYXZhCiAgICAgICAgIGhhbmRsZWQgPSBkaXNwYXRj
aEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+
aXNTdGF0aWMoKSwgak1ldGhvZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJRChv
YmopLCBqQXJncywgcmVzdWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAg
ICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgewpAQCAtMjgzLDcgKzI4Myw3IEBAIEpT
VmFsdWUqIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGUKICAgICByZXR1cm4gcmVzdWx0
VmFsdWU7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAorSlNWYWx1ZVB0ciBK
YXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgaGludCkgY29uc3QKIHsKICAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcpCiAg
ICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKQEAgLTI5OSw3ICsyOTksNyBAQCBKU1Zh
bHVlKiBKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjCiAgICAgcmV0dXJuIHZhbHVlT2Yo
ZXhlYyk7CiB9CiAKLUpTVmFsdWUqIEphdmFJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0IAorSlNWYWx1ZVB0ciBKYXZhSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdCAKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CiB9CkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJp
ZGdlL2puaS9qbmlfaW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTYgKzc3LDE2IEBA
IHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0OwogICAg
IAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgdmFsdWVPZihFeGVjU3RhdGUq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVlKiBp
bnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2QsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBpbnZva2VNZXRob2Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2QsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpOwogCiAgICAgam9iamVjdCBqYXZhSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBfaW5z
dGFuY2UtPl9pbnN0YW5jZTsgfQogICAgIAotICAgIEpTVmFsdWUqIHN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIEpTVmFsdWVQdHIgc3Ry
aW5nVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJWYWx1ZShF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIGJvb2xlYW5WYWx1ZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgZ2V0QmluZGluZ0xhbmd1YWdlKCkgY29uc3Qg
eyByZXR1cm4gSmF2YUxhbmd1YWdlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0
LmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0
aWMganZhbHVlIGludm9rZShKU09iamVjdENhbGxDb250ZXh0Kik7CiAKLSAgICBqb2JqZWN0IGNv
bnZlcnRWYWx1ZVRvSk9iamVjdChKU1ZhbHVlKikgY29uc3Q7Ci0gICAgSlNWYWx1ZSogY29udmVy
dEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSosIGpvYmplY3QpIGNvbnN0OworICAgIGpvYmplY3Qg
Y29udmVydFZhbHVlVG9KT2JqZWN0KEpTVmFsdWVQdHIpIGNvbnN0OworICAgIEpTVmFsdWVQdHIg
Y29udmVydEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSosIGpvYmplY3QpIGNvbnN0OwogICAgIHZv
aWQgZ2V0TGlzdEZyb21KQXJyYXkoRXhlY1N0YXRlKiwgam9iamVjdEFycmF5LCBBcmdMaXN0Jikg
Y29uc3Q7CiAgICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwpJbmRleDog
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUv
YnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5Myw3ICsyOTMs
NyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvCiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBKYXZh
U3RyaW5nKG1ldGhvZE5hbWUpKTsKLSAgICBKU1ZhbHVlKiBmdW5jdGlvbiA9IF9pbXAtPmdldChl
eGVjLCBpZGVudGlmaWVyKTsKKyAgICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gX2ltcC0+Z2V0KGV4
ZWMsIGlkZW50aWZpZXIpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZnVuY3Rpb24tPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMzAzLDcgKzMwMyw3IEBAIGpvYmplY3QgSmF2YUpTT2Jq
ZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICBBcmdMaXN0IGFyZ0xpc3Q7CiAgICAgZ2V0TGlz
dEZyb21KQXJyYXkoZXhlYywgYXJncywgYXJnTGlzdCk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0gSlND
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIF9pbXAsIGFyZ0xpc3Qp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIF9pbXAsIGFyZ0xpc3QpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5zdG9wVGltZW91dENoZWNrKCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9K
T2JqZWN0KHJlc3VsdCk7CkBAIC0zMTMsNyArMzEzLDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6
OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIEpTX0xPRyAoInNjcmlwdCA9ICVzXG4iLCBKYXZh
U3RyaW5nKHNjcmlwdCkuVVRGOFN0cmluZygpKTsKICAgICAKLSAgICBKU1ZhbHVlKiByZXN1bHQ7
CisgICAgSlNWYWx1ZVB0ciByZXN1bHQ7CiAKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAg
CkBAIC0zNDcsNyArMzQ3LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3Ry
aW5nIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CiAgICAgCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIEpTVmFsdWUq
IHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVt
YmVyTmFtZSkpKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkpKTsKIAogICAgIHJldHVybiBjb252
ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KQEAgLTM5Nyw3ICszOTcsNyBAQCBqb2JqZWN0
IEphdmFKU09iamVjdDo6Z2V0U2xvdChqaW50IGluZGV4CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5kZXgp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4KTsKIAogICAg
IHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKIH0KQEAgLTQ4NSw3ICs0ODUs
NyBAQCBqbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAgICAgcmV0dXJu
IG5hdGl2ZUhhbmRsZTsKIH0KIAotam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRv
Sk9iamVjdChKU1ZhbHVlKiB2YWx1ZSkgY29uc3QKK2pvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252
ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZVB0ciB2YWx1ZSkgY29uc3QKIHsKICAgICBKU0xvY2sg
bG9jayhmYWxzZSk7CiAgICAgCkBAIC01NzEsNyArNTcxLDcgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmNvbnZlcnRWYWx1ZVRvSk9iagogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUq
IEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgam9i
amVjdCB0aGVPYmplY3QpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFKU09iamVjdDo6Y29udmVydEpP
YmplY3RUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCB0aGVPYmplY3QpIGNvbnN0CiB7
CiAgICAgLy8gSW5zdGFuY2VzIG9mIG5ldHNjYXBlLmphdmFzY3JpcHQuSlNPYmplY3QgZ2V0IGNv
bnZlcnRlZCBiYWNrIHRvCiAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3RzLiAgQWxsIG90aGVyIG9i
amVjdHMgYXJlIHdyYXBwZWQuICBJdCdzIG5vdApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9vYmpjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7
CiAgICAgICAgZXhjZXB0aW9uRGVzY3JpcHRpb246KE5TU3RyaW5nICoqKWV4Y2VwdGlvblN0cmlu
ZzsKIEBlbmQKIAotYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBp
c1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSog
YXJncywganZhbHVlICZyZXN1bHQsIGNvbnN0IGNoYXIqLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGVz
Y3JpcHRpb24pCitib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlz
U3RhdGljLCBKTklUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBh
cmdzLCBqdmFsdWUgJnJlc3VsdCwgY29uc3QgY2hhciosIEpTVmFsdWVQdHImIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKQogewogICAgIGlkIHZpZXcgPSAoaWQpdGFyZ2V0QXBwbGV0VmlldzsKICAgICAK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBX
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIEphdmFGaWVsZDo6SmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9iamUKICAgICBf
ZmllbGQgPSBuZXcgSk9iamVjdFdyYXBwZXIoYUZpZWxkKTsKIH0KIAotSlNWYWx1ZSogSmF2YUFy
cmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2Jq
ZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3Qp
CitKU1ZhbHVlUHRyIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290
T2JqZWN0PiByb290T2JqZWN0KQogewogICAgIGlmICh0eXBlWzBdICE9ICdbJykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC05Myw3ICs5Myw3IEBAIGp2YWx1ZSBKYXZhRmllbGQ6
OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGEKICAgICAgICAgewogICAgICAgICAgICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CiAgICAgICAgICAgICBpZiAo
cm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gbm9WYWx1ZSgpOworICAgICAgICAg
ICAgICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uRGVzY3JpcHRpb24gPSBub1ZhbHVlKCk7CiAgICAg
ICAgICAgICAgICAganZhbHVlIGFyZ3NbMV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwpAQCAtMTA2LDExICsxMDYsMTEgQEAganZhbHVl
IEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTVmFsdWUqIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QgCitKU1ZhbHVlUHRyIEphdmFGaWVsZDo6dmFsdWVG
cm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QgCiB7
CiAgICAgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEph
dmFJbnN0YW5jZSAqPihpKTsKIAotICAgIEpTVmFsdWUqIGpzcmVzdWx0ID0ganNVbmRlZmluZWQo
KTsKKyAgICBKU1ZhbHVlUHRyIGpzcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBz
d2l0Y2ggKF9KTklUeXBlKSB7CiAgICAgICAgIGNhc2UgYXJyYXlfdHlwZToKQEAgLTE3NSw3ICsx
NzUsNyBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAgICAgICAg
IHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9vdE9i
amVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0aXZl
SGFuZGxlKCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb25EZXNjcmlwdGlv
biA9IG5vVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uID0gbm9WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJdOwogICAg
ICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgCkBAIC0xODksNyAr
MTg5LDcgQEAgdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbgogICAgIH0K
IH0KIAotdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RhbmNlKiBpLCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0Cit2b2lkIEphdmFGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGks
IEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5z
dGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UgKj4oaSk7CiAgICAganZhbHVl
IGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlIChleGVjLCBhVmFsdWUsIF9KTklUeXBl
LCB0eXBlKCkpOwpAQCAtMzg2LDcgKzM4Niw3IEBAIFJvb3RPYmplY3QqIEphdmFBcnJheTo6cm9v
dE9iamVjdCgpIGNvbnMKICAgICByZXR1cm4gX3Jvb3RPYmplY3QgJiYgX3Jvb3RPYmplY3QtPmlz
VmFsaWQoKSA/IF9yb290T2JqZWN0LmdldCgpIDogMDsKIH0KIAotdm9pZCBKYXZhQXJyYXk6OnNl
dFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSogYVZhbHVl
KSBjb25zdAordm9pZCBKYXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgSk5JRW52ICplbnYg
PSBnZXRKTklFbnYoKTsKICAgICBjaGFyICpqYXZhQ2xhc3NOYW1lID0gMDsKQEAgLTQ1NCw3ICs0
NTQsNyBAQCB2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4CiB9CiAKIAot
SlNWYWx1ZSogSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgpIGNvbnN0CitKU1ZhbHVlUHRyIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7
CiAgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoX3R5cGVb
MV0pOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHJldmlzaW9uIDM5NjAzKQorKysg
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4
ICsxMTIsOCBAQCBjbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQKIHB1YmxpYzoKICAgICBK
YXZhRmllbGQgKEpOSUVudiAqZW52LCBqb2JqZWN0IGFGaWVsZCk7CiAKLSAgICB2aXJ0dWFsIEpT
VmFsdWUqIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2Ug
Kmluc3RhbmNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBKU1ZhbHVlKiBhVmFsdWUp
IGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICpp
bnN0YW5jZSwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lLlVURjhTdHJpbmcoKTsgfQogICAg
IHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF90eXBlLlVURjhTdHJp
bmcoKTsgfQpAQCAtMTY4LDEzICsxNjgsMTMgQEAgcHVibGljOgogCiAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUqIGFWYWx1ZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBKU1ZhbHVlKiB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50
IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0OworICAgIHZp
cnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGlu
ZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsK
ICAgICAKICAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS0+X2lu
c3RhbmNlOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSogY29udmVydEpPYmplY3RUb0FycmF5IChF
eGVjU3RhdGUqIGV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NS
ZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHN0YXRpYyBKU1ZhbHVlUHRyIGNvbnZlcnRKT2JqZWN0
VG9BcnJheSAoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0
eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Sk9i
amVjdFdyYXBwZXI+IF9hcnJheTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAko
cmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFy
cmF5SW5zdGFuY2VUb0phdgogICAgICAgICAgICAgICAgIGVudi0+RmluZENsYXNzKCJqYXZhL2xh
bmcvU3RyaW5nIiksCiAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsKICAg
ICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAg
ICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IGl0ZW0tPnRvU3RyaW5nKGV4ZWMpOwogICAg
ICAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGphcnJheSxpLAogICAgICAg
ICAgICAgICAgICAgICBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFy
ICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpKTsKQEAgLTM3Nyw3ICsz
NzcsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAgICAgICAg
IGNhc2UgYm9vbGVhbl90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3Qm9vbGVhbkFycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0ZW0g
PSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBpdGVt
ID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpib29sZWFuIHZhbHVl
ID0gKGpib29sZWFuKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+
U2V0Qm9vbGVhbkFycmF5UmVnaW9uKChqYm9vbGVhbkFycmF5KWphcnJheSwgKGpzaXplKWksIChq
c2l6ZSkxLCAmdmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRp
YyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBieXRlX3R5
cGU6IHsKICAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCeXRlQXJy
YXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVj
LCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7CiAgICAgICAgICAgICAgICAgamJ5dGUgdmFsdWUgPSAoamJ5dGUpaXRlbS0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oKGpieXRl
QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9
CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VU
b0phdgogICAgICAgICBjYXNlIGNoYXJfdHlwZTogewogICAgICAgICAgICAgamFycmF5ID0gKGpv
YmplY3RBcnJheSllbnYtPk5ld0NoYXJBcnJheShsZW5ndGgpOwogICAgICAgICAgICAgZm9yKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
KiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIEpTVmFsdWVQ
dHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAgICBVU3RyaW5n
IHN0cmluZ1ZhbHVlID0gaXRlbS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAgICAgICAgamNo
YXIgdmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZS5zaXplKCkgPiAw
KQpAQCAtNDEwLDcgKzQxMCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUluc3RhbmNl
VG9KYXYKICAgICAgICAgY2FzZSBzaG9ydF90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAo
am9iamVjdEFycmF5KWVudi0+TmV3U2hvcnRBcnJheShsZW5ndGgpOwogICAgICAgICAgICAgZm9y
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIEpTVmFs
dWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKICAgICAgICAgICAgICAgICBqc2hv
cnQgdmFsdWUgPSAoanNob3J0KWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAg
IGVudi0+U2V0U2hvcnRBcnJheVJlZ2lvbigoanNob3J0QXJyYXkpamFycmF5LCAoanNpemUpaSwg
KGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9CkBAIC00MjAsNyArNDIwLDcgQEAgc3Rh
dGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogICAgICAgICBjYXNlIGludF90
eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3SW50QXJy
YXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVj
LCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7CiAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50KWl0ZW0tPnRvTnVtYmVy
KGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0SW50QXJyYXlSZWdpb24oKGppbnRBcnJh
eSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAg
LTQzMCw3ICs0MzAsNyBAQCBzdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2
CiAgICAgICAgIGNhc2UgbG9uZ190eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVj
dEFycmF5KWVudi0+TmV3TG9uZ0FycmF5KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIGl0
ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVB0ciBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwogICAgICAgICAgICAgICAgIGpsb25nIHZhbHVl
ID0gKGpsb25nKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0
TG9uZ0FycmF5UmVnaW9uKChqbG9uZ0FycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAm
dmFsdWUpOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBqb2JqZWN0
IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKICAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7CiAg
ICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRBcnJheShsZW5n
dGgpOwogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlKiBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWVQdHIgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsK
ICAgICAgICAgICAgICAgICBqZmxvYXQgdmFsdWUgPSAoamZsb2F0KWl0ZW0tPnRvTnVtYmVyKGV4
ZWMpOwogICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZsb2F0QXJy
YXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7CiAgICAgICAgICAgICB9CkBA
IC00NTAsNyArNDUwLDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0ph
dgogICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7CiAgICAgICAgICAgICBqYXJyYXkgPSAoam9i
amVjdEFycmF5KWVudi0+TmV3RG91YmxlQXJyYXkobGVuZ3RoKTsKICAgICAgICAgICAgIGZvcih1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSogaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
UHRyIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CiAgICAgICAgICAgICAgICAgamRvdWJs
ZSB2YWx1ZSA9IChqZG91YmxlKWl0ZW0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAg
IGVudi0+U2V0RG91YmxlQXJyYXlSZWdpb24oKGpkb3VibGVBcnJheSlqYXJyYXksIChqc2l6ZSlp
LCAoanNpemUpMSwgJnZhbHVlKTsKICAgICAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjgsNyBAQCBz
dGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiB9CiAKIAotanZhbHVlIGNv
bnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUsIEpOSVR5
cGUgX0pOSVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCitqdmFsdWUgY29udmVydFZh
bHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBKTklUeXBlIF9K
TklUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQogewogICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCShyZXZpc2lvbiAzOTYw
MykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBAIEpOSVR5cGUgSk5JVHlwZUZyb21DbGFzc05hbWUoY29uc3QgY2hhciAK
IEpOSVR5cGUgSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKGNoYXIgdHlwZSk7CiBjb25zdCBjaGFy
ICpzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShKTklUeXBlIHR5cGUpOwogCi1qdmFsdWUgY29u
dmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIEpOSVR5cGUsIGNvbnN0IGNo
YXIqIGphdmFDbGFzc05hbWUpOworanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0
ZSosIEpTVmFsdWVQdHIsIEpOSVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpOwogCiBq
dmFsdWUgZ2V0Sk5JRmllbGQoam9iamVjdCBvYmosIEpOSVR5cGUgdHlwZSwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnbmF0dXJlKTsKIApAQCAtMjc3LDcgKzI3Nyw3IEBAIFQgY2Fs
bEpOSVN0YXRpY01ldGhvZChqY2xhc3MgY2xzLCBjb25zdCAKICAgICByZXR1cm4gcmVzdWx0Owog
fQogICAgIAotYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgY29uc3Qgdm9pZCogdGFy
Z2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJu
VHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSYgcmVzdWx0LCBj
b25zdCBjaGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlKiYgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwor
Ym9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgY29uc3Qgdm9pZCogdGFyZ2V0QXBwbGV0
Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwgam1l
dGhvZElEIG1ldGhvZElELCBqdmFsdWUqIGFyZ3MsIGp2YWx1ZSYgcmVzdWx0LCBjb25zdCBjaGFy
KiBjYWxsaW5nVVJMLCBKU1ZhbHVlUHRyJiBleGNlcHRpb25EZXNjcmlwdGlvbik7CiAKIH0gLy8g
bmFtZXNwYWNlIEJpbmRpbmdzCiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmpl
Y3QuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiArIChOU1N0cmluZyAqKXdl
YlNjcmlwdE5hbWVGb3JLZXk6KGNvbnN0IGNoYXIgKiluYW1lOwogKyAoQk9PTClpc0tleUV4Y2x1
ZGVkRnJvbVdlYlNjcmlwdDooY29uc3QgY2hhciAqKW5hbWU7CiAKLSsgKGlkKV9jb252ZXJ0VmFs
dWVUb09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKil2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CisrIChpZClfY29udmVydFZhbHVlVG9P
YmpjVmFsdWU6KEpTQzo6SlNWYWx1ZVB0cil2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihKU0M6OkJp
bmRpbmdzOjpSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KEpTQzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3QqKXJvb3RPYmplY3Q7CiAtIF9pbml0V2l0aEpTT2JqZWN0OihKU0M6
OkpTT2JqZWN0KilpbXAgb3JpZ2luUm9vdE9iamVjdDooUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdz
OjpSb290T2JqZWN0PilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8SlND
OjpCaW5kaW5nczo6Um9vdE9iamVjdD4pcm9vdE9iamVjdDsKIC0gKEpTQzo6SlNPYmplY3QgKilf
aW1wOwogQGVuZApJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgJKHJldmlzaW9uIDM5NjAz
KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2RzTmFt
ZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBGaWVsZCAqZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UgKmluc3Rh
bmNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogZmFsbGJhY2tPYmplY3QoRXhlY1N0
YXRlICpleGVjLCBJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSk7CisgICAgdmlydHVhbCBKU1ZhbHVlUHRyIGZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
OwogICAgIAogICAgIENsYXNzU3RydWN0UHRyIGlzYSgpIHsgcmV0dXJuIF9pc2E7IH0KICAgICAK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfY2xhc3MubW0JKHJldmlzaW9uIDM5NjAzKQorKysgV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyAr
MjQ0LDcgQEAgRmllbGQqIE9iamNDbGFzczo6ZmllbGROYW1lZChjb25zdCBJZGVudAogICAgIHJl
dHVybiBhRmllbGQ7CiB9CiAKLUpTVmFsdWUqIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkKK0pTVmFsdWVQdHIgT2JqY0NsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIEluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KQogewogICAgIE9iamNJbnN0YW5jZSogb2JqY0luc3RhbmNlID0gc3RhdGljX2Nhc3Q8T2JqY0lu
c3RhbmNlKj4oaW5zdGFuY2UpOwogICAgIGlkIHRhcmdldE9iamVjdCA9IG9iamNJbnN0YW5jZS0+
Z2V0T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkocmV2aXNp
b24gMzk2MDMpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMjMgKzQ4LDIzIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIENs
YXNzICpnZXRDbGFzcygpIGNvbnN0OwogICAgICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIHZh
bHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVh
bCBKU1ZhbHVlUHRyIHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU1Zh
bHVlUHRyIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBj
b25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGludm9rZU1ldGhvZChFeGVjU3RhdGUq
LCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNWYWx1
ZVB0ciBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFy
Z0xpc3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0
ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgaW52b2tlRGVmYXVs
dE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1Zh
bHVlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZVB0cik7CiAgICAgCi0gICAgdmlydHVhbCBK
U1ZhbHVlKiBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHkpIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRWYWx1ZU9m
VW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpIGNv
bnN0OwogCiAgICAgT2JqZWN0U3RydWN0UHRyIGdldE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIF9p
bnN0YW5jZS5nZXQoKTsgfQogICAgIAotICAgIEpTVmFsdWUqIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0
ZSopIGNvbnN0OwotICAgIEpTVmFsdWUqIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0Owot
ICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIEpTVmFsdWVQdHIgc3RyaW5n
VmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZVB0ciBudW1iZXJWYWx1ZShFeGVj
U3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlUHRyIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgZ2V0QmluZGluZ0xhbmd1YWdlKCkgY29uc3QgeyBy
ZXR1cm4gT2JqZWN0aXZlQ0xhbmd1YWdlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
aW5zdGFuY2UubW0JKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOSArMTI0LDkgQEAgYm9vbCBPYmpj
SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdAogICAgIHJldHVybiBbX2luc3RhbmNlLmdl
dCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlRGVmYXVsdE1ldGhvZFdpdGhB
cmd1bWVudHM6KV07CiB9CiAKLUpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlz
dCAmYXJncykKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0LCBjb25zdCBBcmdMaXN0ICZhcmdz
KQogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0
ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBz
Y29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKQEAgLTI0NiwxMiArMjQ2LDEy
IEBAIEpTVmFsdWUqIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWMKIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZAogICAgIC8vIGl0IGNhbid0IGhhbmRsZSBjb3B5aW5nIGZy
b20gYSB2b2xhdGlsZSB0byBub24tdm9sYXRpbGUuCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNW
YWx1ZSomPihyZXN1bHQpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWVQdHImPihyZXN1
bHQpOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0ICZhcmdzKQorSlNWYWx1ZVB0ciBPYmpjSW5zdGFu
Y2U6Omludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0ICZh
cmdzKQogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1
ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGZhbHNlKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNlcHRp
b24obmlsKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBKU1ZhbHVlKiBPYmpjSW5zdGFuY2U6Omludm9r
ZURlZmF1bHRNZXRoCiAKICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lv
bnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBp
dCBjYW4ndCBoYW5kbGUgY29weWluZyBmcm9tIGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgot
ICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxKU1ZhbHVlUHRyJj4ocmVzdWx0KTsKIH0KIAogYm9vbCBPYmpjSW5zdGFuY2U6OnN1
cHBvcnRzU2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKCkKQEAgLTMwOCw3ICszMDgsNyBAQCBib29s
IE9iamNJbnN0YW5jZTo6c3VwcG9ydHNTZXRWYWx1ZU9mVW5kCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIEpTVmFsdWUqIGFWYWx1ZSkKK3Zv
aWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgSlNWYWx1ZVB0ciBhVmFsdWUpCiB7CiAgICAg
aWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKQEAgLTMzMiw5ICszMzIsOSBAQCB2b2lk
IE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpCiAgICAgfQogfQogCi1KU1ZhbHVl
KiBPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjSW5zdGFu
Y2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5KSBjb25zdAogewotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAg
IGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVjdCgpOwogCkBAIC0zNTgsMTAgKzM1OCwxMCBAQCBK
U1ZhbHVlKiBPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluCiAKICAgICAvLyBXb3JrIGFy
b3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRzIG1h
cmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBoYW5kbGUgY29weWluZyBmcm9tIGEg
dm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgotICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUq
Jj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlUHRyJj4ocmVzdWx0KTsK
IH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNJbnN0
YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBoaW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykKICAgICAgICAg
cmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwpAQCAtMzc0LDI0ICszNzQsMjQgQEAgSlNWYWx1ZSog
T2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlYwogICAgIHJldHVybiB2YWx1ZU9mKGV4ZWMp
OwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0pTVmFsdWVQdHIgT2JqY0luc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKGV4ZWMs
IFtnZXRPYmplY3QoKSBkZXNjcmlwdGlvbl0pOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6
Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWVQdHIgT2JqY0luc3Rh
bmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlCiAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IDApOwogfQogCi1KU1ZhbHVlKiBPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CitK
U1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogIEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUKICAgICByZXR1cm4ganNCb29sZWFu
KGZhbHNlKTsKIH0KIAotSlNWYWx1ZSogT2JqY0luc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QgCitKU1ZhbHVlUHRyIE9iamNJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0IAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKIH0KSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4
IEBAIHB1YmxpYzoKICAgICBPYmpjRmllbGQoSXZhclN0cnVjdFB0cik7CiAgICAgT2JqY0ZpZWxk
KENGU3RyaW5nUmVmIG5hbWUpOwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSogdmFsdWVGcm9t
SW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNW
YWx1ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciB2YWx1ZUZyb21JbnN0YW5jZShF
eGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlUHRyKSBj
b25zdDsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgICAg
ICAgCkBAIC03OSwxMyArNzksMTMgQEAgY2xhc3MgT2JqY0FycmF5IDogcHVibGljIEFycmF5IHsK
IHB1YmxpYzoKICAgICBPYmpjQXJyYXkoT2JqZWN0U3RydWN0UHRyLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+KTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywg
dW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlKiBhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwg
SlNWYWx1ZSogdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbnQgaW5kZXgsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFs
dWVQdHIgdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CiAgICAgCiAgICAg
T2JqZWN0U3RydWN0UHRyIGdldE9iamNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS5nZXQo
KTsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUqIGNvbnZlcnRPYmpjQXJyYXlUb0FycmF5KEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0U3RydWN0UHRyIGFuT2JqZWN0KTsKKyAgICBzdGF0aWMgSlNWYWx1
ZVB0ciBjb252ZXJ0T2JqY0FycmF5VG9BcnJheShFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFN0cnVj
dFB0ciBhbk9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE9iamVjdFN0cnVjdFB0
cj4gX2FycmF5OwpAQCAtMTA0LDE3ICsxMDQsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVl
KiBwcm90b3R5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1
Y3R1cmUoSlNWYWx1ZVB0ciBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgfQogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVQdHIsIFB1dFByb3BlcnR5U2xvdCYpOwog
ICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWVQdHIgZGVm
YXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKIApJbmRleDogV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOCw5ICsxMDgs
OSBAQCBjb25zdCBjaGFyKiBPYmpjRmllbGQ6Om5hbWUoKSBjb25zdCAKICAgICByZXR1cm4gWyhO
U1N0cmluZyopX25hbWUuZ2V0KCkgVVRGOFN0cmluZ107CiB9CiAKLUpTVmFsdWUqIE9iamNGaWVs
ZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5z
dGFuY2UpIGNvbnN0CitKU1ZhbHVlUHRyIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0CiB7Ci0gICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNv
bnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwogCkBAIC0xMjgsMTAg
KzEyOCwxMCBAQCBKU1ZhbHVlKiBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4CiAKICAg
ICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJlIHJl
c3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBoYW5kbGUgY29w
eWluZyBmcm9tIGEgdm9sYXRpbGUgdG8gbm9uLXZvbGF0aWxlLgotICAgIHJldHVybiBjb25zdF9j
YXN0PEpTVmFsdWUqJj4ocmVzdWx0KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlUHRy
Jj4ocmVzdWx0KTsKIH0KIAotc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQorc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2Jq
Y09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgUmVmUHRy
PFJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVjdChleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmICghcm9vdE9iamVjdCkKQEAgLTEzOSw3ICsxMzksNyBAQCBz
dGF0aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KEV4ZWNTCiAgICAgcmV0dXJuIFt3ZWJT
Y3JpcHRPYmplY3RDbGFzcygpIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTp2YWx1ZSBvcmlnaW5S
b290T2JqZWN0OnJvb3RPYmplY3QuZ2V0KCkgcm9vdE9iamVjdDpyb290T2JqZWN0LmdldCgpXTsK
IH0KIAotdm9pZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAordm9pZCBP
YmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3Rh
bmNlKiBpbnN0YW5jZSwgSlNWYWx1ZVB0ciBhVmFsdWUpIGNvbnN0CiB7CiAgICAgaWQgdGFyZ2V0
T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdl
dE9iamVjdCgpOwogICAgIGlkIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KGV4ZWMs
IGFWYWx1ZSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgT2JqY0FycmF5OjpPYmpjQXJyYXkoT2JqZWN0
U3RydWN0UHRyIGEsIAogewogfQogCi12b2lkIE9iamNBcnJheTo6c2V0VmFsdWVBdChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSogYVZhbHVlKSBjb25zdAordm9p
ZCBPYmpjQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5k
ZXgsIEpTVmFsdWVQdHIgYVZhbHVlKSBjb25zdAogewogICAgIGlmICghW19hcnJheS5nZXQoKSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc2VydE9iamVjdDphdEluZGV4OildKSB7CiAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXJyYXkgaXMgbm90IG11dGFibGUu
Iik7CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBPYmpjQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0
YXRlKiBleAogICAgIH0KIH0KIAotSlNWYWx1ZSogT2JqY0FycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAorSlNWYWx1ZVB0ciBPYmpjQXJyYXk6
OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgaWYgKGluZGV4ID4gW19hcnJheS5nZXQoKSBjb3VudF0pCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7CkBA
IC0yMjIsMTYgKzIyMiwxNiBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJv
cGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpw
dXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNs
b3QmKQordm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgSlNWYWx1ZVB0ciwgUHV0UHJvcGVydHlTbG90JikKIHsKIH0KIAotc3RhdGlj
IEpTVmFsdWUqIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogZnVuY3Rpb24sIEpTVmFsdWUqIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3N0
YXRpYyBKU1ZhbHVlUHRyIGNhbGxPYmpDRmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmUnVudGltZU9iamVjdEltcDo6
c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAot
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1
bHQgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgUnVudGltZU9iamVjdEltcCogaW1wID0gc3RhdGlj
X2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIEluc3Rh
bmNlKiBpbnN0YW5jZSA9IGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwpAQCAtMjc0LDcgKzI3
NCw3IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWxldGVQcm9wZXIKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUqIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKK0pTVmFs
dWVQdHIgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAogewogICAgIHJldHVybiBfaW5zdGFuY2Ut
PmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChleGVjLCBfaXRlbSk7CiB9CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L29iamMvb2JqY191dGlsaXR5LmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCB0eXBl
ZGVmIGVudW0gewogCiBjbGFzcyBSb290T2JqZWN0OwogCi1PYmpjVmFsdWUgY29udmVydFZhbHVl
VG9PYmpjVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSosIE9iamNWYWx1ZVR5cGUpOwotSlNWYWx1
ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNz
dHJpbmcpOwotSlNWYWx1ZSogY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhlY1N0YXRlKiwgdm9p
ZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2JqZWN0Kik7CitPYmpjVmFsdWUgY29udmVy
dFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZVB0ciwgT2JqY1ZhbHVlVHlwZSk7
CitKU1ZhbHVlUHRyIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKTsKK0pTVmFsdWVQdHIgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoRXhl
Y1N0YXRlKiwgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2JqZWN0Kik7CiBPYmpj
VmFsdWVUeXBlIG9iamNWYWx1ZVR5cGVGb3JUeXBlKGNvbnN0IGNoYXIgKnR5cGUpOwogCiBib29s
IGNvbnZlcnRKU01ldGhvZE5hbWVUb09iamMoY29uc3QgY2hhciAqSlNOYW1lLCBjaGFyICpidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191
dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgYm9vbCBjb252ZXJ0SlNNZXRo
b2ROYW1lVG9PYmpjKGNvbnN0IGNoYQogICAgIFtdLCBvdGhlciAgICAgICBleGNlcHRpb24KIAog
Ki8KLU9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUqIHZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCitPYmpjVmFsdWUgY29udmVydFZhbHVl
VG9PYmpjVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUHRyIHZhbHVlLCBPYmpjVmFsdWVU
eXBlIHR5cGUpCiB7CiAgICAgT2JqY1ZhbHVlIHJlc3VsdDsKICAgICBkb3VibGUgZCA9IDA7CkBA
IC0xOTQsNyArMTk0LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUqIGNvbnZlcnROU1N0cmluZ1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQorSlNWYWx1ZVB0ciBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZykK
IHsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgCkBAIC0yMDMsNyArMjAzLDcgQEAgSlNW
YWx1ZSogY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YQogICAgIGNoYXJzID0gKHVuaWNo
YXIgKiltYWxsb2Moc2l6ZW9mKHVuaWNoYXIpKmxlbmd0aCk7CiAgICAgW25zc3RyaW5nIGdldENo
YXJhY3RlcnM6Y2hhcnNdOwogICAgIFVTdHJpbmcgdSgoY29uc3QgVUNoYXIqKWNoYXJzLCBsZW5n
dGgpOwotICAgIEpTVmFsdWUqIGFWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHUpOworICAgIEpTVmFs
dWVQdHIgYVZhbHVlID0ganNTdHJpbmcoZXhlYywgdSk7CiAgICAgZnJlZSgodm9pZCAqKWNoYXJz
KTsKICAgICByZXR1cm4gYVZhbHVlOwogfQpAQCAtMjI2LDcgKzIyNiw3IEBAIEpTVmFsdWUqIGNv
bnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGEKICAgICBpZCAgICAgICAgICAgICAgb2JqZWN0
IHdyYXBwZXIKICAgICBvdGhlciAgICAgICAgICAgc2hvdWxkIG5vdCBoYXBwZW4KICovCi1KU1Zh
bHVlKiBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZl
ciwgT2JqY1ZhbHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQorSlNWYWx1ZVB0
ciBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZlciwg
T2JqY1ZhbHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQogewogICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgc3Ry
dWN0IENvbnNvbGVNZXNzYWdlIHsKICAgICBNZXNzYWdlU291cmNlIHNvdXJjZTsKICAgICBNZXNz
YWdlTGV2ZWwgbGV2ZWw7CiAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgVmVjdG9yPFByb3RlY3Rl
ZFB0cjxKU1ZhbHVlPiA+IHdyYXBwZWRBcmd1bWVudHM7CisgICAgVmVjdG9yPFByb3RlY3RlZEpT
VmFsdWVQdHI+IHdyYXBwZWRBcmd1bWVudHM7CiAgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gZnJh
bWVzOwogICAgIHVuc2lnbmVkIGxpbmU7CiAgICAgU3RyaW5nIHVybDsKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdl
YkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCw3ICs4OCw3IEBAIEpTT2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWMK
IH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0IGNvZGUgaW4gdGhlIHNjb3BlIG9mIHRo
aXMgZnJhbWUuCi1KU1ZhbHVlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBV
U3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0CitKU1ZhbHVlUHRyIEph
dmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNWYWx1
ZVB0ciYgZXhjZXB0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlm
ICghbV9pc1ZhbGlkKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUu
aAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBjb25zdCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKCkgY29uc3Q7
CiAKICAgICAgICAgSlNDOjpKU09iamVjdCogdGhpc09iamVjdCgpIGNvbnN0OwotICAgICAgICBK
U0M6OkpTVmFsdWUqIGV2YWx1YXRlKGNvbnN0IEpTQzo6VVN0cmluZyYgc2NyaXB0LCBKU0M6OkpT
VmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OworICAgICAgICBKU0M6OkpTVmFsdWVQdHIgZXZhbHVh
dGUoY29uc3QgSlNDOjpVU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZVB0ciYgZXhjZXB0aW9u
KSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSmF2YVNjcmlwdENhbGxG
cmFtZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0
Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZSk7CkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc2LDcgKzI3Niw3IEBAIEpTQ2xhc3NSZWYgUHJvZmlsZUNsYXNzKCkKICAgICByZXR1cm4g
cHJvZmlsZUNsYXNzOwogfQogCi1KU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmls
ZSogcHJvZmlsZSkKK0pTVmFsdWVQdHIgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIFByb2ZpbGUqIHBy
b2ZpbGUpCiB7CiAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Cklu
ZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmgJKHJldmlzaW9uIDM5NjAzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgSlNDOjpKU1ZhbHVlKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9maWxlKik7
CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb2ZpbGUq
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0UHJvZmlsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9y
L0phdmFTY3JpcHRQcm9maWxlTm9kZS5jcHAJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0
LDcgKzIyNCw3IEBAIEpTQ2xhc3NSZWYgUHJvZmlsZU5vZGVDbGFzcygpCiAgICAgcmV0dXJuIHBy
b2ZpbGVOb2RlQ2xhc3M7CiB9CiAKLUpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBQcm9m
aWxlTm9kZSogcHJvZmlsZU5vZGUpCitKU1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBQ
cm9maWxlTm9kZSogcHJvZmlsZU5vZGUpCiB7CiAgICAgaWYgKCFwcm9maWxlTm9kZSkKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGVOb2RlLmgJKHJldmlzaW9uIDM5NjAzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNj
cmlwdFByb2ZpbGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBKU0NsYXNzUmVmIFByb2ZpbGVO
b2RlQ2xhc3MoKTsKLSAgICBKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb2ZpbGVOb2RlKik7CisgICAgSlNDOjpKU1ZhbHVlUHRyIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb2ZpbGVOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDog
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgdXNpbmcgSlND
OjpFeGVjU3RhdGU7CiB1c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNPYmplY3Q7CiB1
c2luZyBKU0M6OkpTVmFsdWU7Cit1c2luZyBKU0M6OkpTVmFsdWVQdHI7CiB1c2luZyBKU0M6OlVT
dHJpbmc7CiAKIHVzaW5nIHN0ZDo6bWluOwpAQCAtMjA0LDcgKzIwNSw3IEBAIHN0YXRpYyBjaGFy
KiBjcmVhdGVVVEY4U3RyaW5nKGNvbnN0IFN0cmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgYm9vbCBnZXRTdHJpbmcoU2NyaXB0Q29udHJvbGxlciogcHJveHksIEpTVmFsdWUqIHJl
c3VsdCwgU3RyaW5nJiBzdHJpbmcpCitzdGF0aWMgYm9vbCBnZXRTdHJpbmcoU2NyaXB0Q29udHJv
bGxlciogcHJveHksIEpTVmFsdWVQdHIgcmVzdWx0LCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBp
ZiAoIXByb3h5IHx8ICFyZXN1bHQgfHwgcmVzdWx0LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yNTksNyArMjYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3Jt
UmVxdWVzdChQbHVnaW5SZQogICAgIAogICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1
c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5j
ZSB0byB0aGUgcGFyZW50IGZyYW1lLgogICAgIFJlZlB0cjxGcmFtZT4gcGFyZW50RnJhbWUgPSBt
X3BhcmVudEZyYW1lOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygp
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+ZXhlY3V0ZVNjcmlwdChqc1N0cmluZywgcmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMo
KSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSkgewogICAg
ICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMzk2MDMpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk1NCw3ICs5NTQsOCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVj
dGlvbigpICAgCiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCiAK
ICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQoKS0+
ZnJhbWUoKSkpIHsKLSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSogd3JhcHBlciA9IGdldENhY2hl
ZERPTU9iamVjdFdyYXBwZXIoKndpbmRvdy0+Z2xvYmFsRGF0YSgpLCB0aGlzKSkKKyAgICAgICAg
SlNDOjpKU1ZhbHVlUHRyIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCp3aW5k
b3ctPmdsb2JhbERhdGEoKSwgdGhpcyk7CisgICAgICAgIGlmICh3cmFwcGVyKQogICAgICAgICAg
ICAgSlNDOjpIZWFwOjpoZWFwKHdyYXBwZXIpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV9yZXNw
b25zZVRleHQuc2l6ZSgpICogMik7CiAgICAgfQogI2VuZGlmCkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzk2
MDMpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDA5LTAxLTA1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxh
Y2UgYWxsIHVzZXMgb2YgSlNWYWx1ZSogd2l0aCBuZXcgd3JhcHBlciBjbGFzcywgSlNWYWx1ZVB0
ci4KKyAgICAgICAgU2VlIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxl
ZCBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3Jj
ZVVzZXJHZXN0dXJlOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0
ZS5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIF9jb252ZXJ0VmFsdWVUb09iamNW
YWx1ZTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIGV4Y2VwdGlvbl0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoYWVEZXNjRnJvbUpTVmFsdWUpOgorICAg
ICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0p
OgorCiAyMDA5LTAxLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMzk2MDMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL3Zpc2libGVfdW5pdHMuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+
CisjaW1wb3J0IDxydW50aW1lL0pTVmFsdWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtODksNyArOTAsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiB1c2luZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xv
Y2s7Ci11c2luZyBKU0M6OkpTVmFsdWU7Cit1c2luZyBKU0M6OkpTVmFsdWVQdHI7CiAKIC8qCiBI
ZXJlIGlzIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1hdHJpeCBmb3IgZm91ciB0eXBlcyBvZiBuYXZp
Z2F0aW9uczoKQEAgLTY1Niw3ICs2NTcsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UoCiB7CiAgICAgQVNTRVJUKF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50
KCkpOwogICAgIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmxv
YWRlcigpLT5leGVjdXRlU2NyaXB0KHN0cmluZywgZm9yY2VVc2VyR2VzdHVyZSkuanNWYWx1ZSgp
OworICAgIEpTVmFsdWVQdHIgcmVzdWx0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCkt
PmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVzZXJHZXN0dXJlKS5qc1ZhbHVlKCk7CiAKICAg
ICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUpIC8vIEluIGNhc2UgdGhlIHNjcmlwdCByZW1vdmVk
IG91ciBmcmFtZSBmcm9tIHRoZSBwYWdlLgogICAgICAgICByZXR1cm4gQCIiOwpJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDM5
NjAzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRF
cnJvckxpbmVOdW1iZQogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdENhbGxGcmFtZSAoV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZUludGVybmFsKQogCi0tIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6
KEpTVmFsdWUqKXZhbHVlOworLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVl
UHRyKXZhbHVlOwogCiBAZW5kCiAKQEAgLTEwOSw3ICsxMDksNyBAQCBOU1N0cmluZyAqIGNvbnN0
IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAgICAgX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1l
ID0gMDsKIH0KIAotLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKil2YWx1
ZQorLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlUHRyKXZhbHVlCiB7CiAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIwNCw3ICsyMDQsNyBAQCBO
U1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAgICAgaWYgKCFfcHJpdmF0
ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU1ZhbHVl
KiBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV4Y2VwdGlvbigpOwor
ICAgIEpTVmFsdWVQdHIgZXhjZXB0aW9uID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5l
eGNlcHRpb24oKTsKICAgICByZXR1cm4gZXhjZXB0aW9uID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlOmV4Y2VwdGlvbl0gOiBuaWw7CiB9CiAKQEAgLTIyMSw4ICsyMjEsOCBAQCBOU1N0
cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAKICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CiAKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSBub1ZhbHVlKCk7Ci0gICAgSlNWYWx1
ZSogcmVzdWx0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5ldmFsdWF0ZShTdHJpbmco
c2NyaXB0KSwgZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlUHRyIGV4Y2VwdGlvbiA9IG5vVmFsdWUo
KTsKKyAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+
ZXZhbHVhdGUoU3RyaW5nKHNjcmlwdCksIGV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpleGNlcHRpb25d
OwogICAgIHJldHVybiByZXN1bHQgPyBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6cmVz
dWx0XSA6IG5pbDsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAzOTYwMykKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiAr
MTMxLDcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW1wb3J0IDxydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW1wb3J0IDxydW50aW1lL0pTVmFsdWUuaD4KICNpbXBvcnQgPG1hY2gtby9keWxkLmg+CiAjaW1w
b3J0IDxvYmpjL29iamMtYXV0by5oPgogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KQEAg
LTM2MjMsNyArMzYyNCw3IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJh
bWUKICAgICByZXR1cm4gY29yZUZyYW1lLT5zaG91bGRDbG9zZSgpOwogfQogCi1zdGF0aWMgTlNB
cHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiBqc1ZhbHVlKQorc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zy
b21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBqc1ZhbHVlKQogewogICAgIE5T
QXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzYyA9IDA7CiAgICAgaWYgKGpzVmFsdWUtPmlzQm9v
bGVhbigpKQpAQCAtMzY2NSw3ICszNjY2LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0
b3IqIGFlRGVzY0ZybwogICAgICAgICAgICAgICAgIHJldHVybiBhZURlc2M7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSogcHJpbWl0aXZlID0gb2JqZWN0LT50b1By
aW1pdGl2ZShleGVjKTsKKyAgICAgICAgSlNWYWx1ZVB0ciBwcmltaXRpdmUgPSBvYmplY3QtPnRv
UHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05T
QXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwpAQCAtMzY4NSw3ICszNjg2LDcg
QEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICByZXR1
cm4gbmlsOwogICAgIGlmICghY29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNvcmVGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVT
Y3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZVB0ciByZXN1bHQgPSBj
b3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgp
OwogICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJTY3JpcHRD
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1l
LmNwcAkocmV2aXNpb24gMzk2MDMpCisrKyBXZWJLaXQvd2luL1dlYlNjcmlwdENhbGxGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotVVN0cmluZyBXZWJTY3JpcHRDYWxsRnJhbWU6OmpzVmFsdWVUb1N0cmluZyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUqIGpzdmFsdWUpCitVU3RyaW5nIFdlYlNjcmlwdENhbGxG
cmFtZTo6anNWYWx1ZVRvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZVB0ciBq
c3ZhbHVlKQogewogICAgIGlmICghanN2YWx1ZSkKICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQi
OwpAQCAtMTgyLDcgKzE4Miw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2NyaXB0
Q2FsbEYKIAogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKIAotICAgIEpTVmFsdWUqIHNjcmlwdEV4
ZWN1dGlvblJlc3VsdCA9IHZhbHVlQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcoc2Ny
aXB0KTsKKyAgICBKU1ZhbHVlUHRyIHNjcmlwdEV4ZWN1dGlvblJlc3VsdCA9IHZhbHVlQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcoc2NyaXB0KTsKICAgICAqcmVzdWx0ID0gV2ViQ29y
ZTo6QlN0cmluZyhqc1ZhbHVlVG9TdHJpbmcobV9zdGF0ZSwgc2NyaXB0RXhlY3V0aW9uUmVzdWx0
KSkucmVsZWFzZSgpOwogCiAgICAgcmV0dXJuIFNfT0s7CkBAIC0yMjEsNyArMjIxLDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JpcHRDYWxsRgogICAgIElkZW50aWZpZXIgaWRl
bnRLZXkobV9zdGF0ZSwgcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGtleSksIFN5c1N0cmluZ0xl
bihrZXkpKTsKIAogI2lmIDAKLSAgICBKU1ZhbHVlKiBqc3ZhbHVlID0gbm9WYWx1ZSgpOworICAg
IEpTVmFsdWVQdHIganN2YWx1ZSA9IG5vVmFsdWUoKTsKICAgICBTY29wZUNoYWluIHNjb3BlQ2hh
aW4gPSBtX3N0YXRlLT5zY29wZUNoYWluKCk7CiAgICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3Ig
aXQgPSBzY29wZUNoYWluLmJlZ2luKCk7IGl0ICE9IHNjb3BlQ2hhaW4uZW5kKCkgJiYgIWpzdmFs
dWU7ICsraXQpCiAgICAgICAgIGpzdmFsdWUgPSAoKml0KS0+Z2V0KG1fc3RhdGUsIGlkZW50S2V5
KTsKQEAgLTIzMSw3ICsyMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlNjcmlw
dENhbGxGCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUpTVmFsdWUqIFdlYlNjcmlwdENhbGxGcmFt
ZTo6dmFsdWVCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyhCU1RSIHNjcmlwdCkKK0pT
VmFsdWVQdHIgV2ViU2NyaXB0Q2FsbEZyYW1lOjp2YWx1ZUJ5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nKEJTVFIgc2NyaXB0KQogewogI2lmIDAKICAgICBFeGVjU3RhdGUqIHN0YXRlID0g
bV9zdGF0ZTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBKU1ZhbHVlKiBXZWJTY3JpcHRDYWxsRnJhbWU6
OnZhbHVlQnlFdmFsCiAgICAgLy8gZmluZCAiZXZhbCIKICAgICBKU09iamVjdCogZXZhbCA9IDA7
CiAgICAgaWYgKHN0YXRlLT5zY29wZU5vZGUoKSkgeyAgLy8gImV2YWwiIHdvbid0IHdvcmsgd2l0
aG91dCBjb250ZXh0IChpLmUuIGF0IGdsb2JhbCBzY29wZSkKLSAgICAgICAgSlNWYWx1ZSogdiA9
IGdsb2JPYmotPmdldChzdGF0ZSwgImV2YWwiKTsKKyAgICAgICAgSlNWYWx1ZVB0ciB2ID0gZ2xv
Yk9iai0+Z2V0KHN0YXRlLCAiZXZhbCIpOwogICAgICAgICBpZiAodi0+aXNPYmplY3QoKSAmJiBh
c09iamVjdCh2KS0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgICAgICAgIGV2YWwgPSBhc09iamVj
dCh2KTsKICAgICAgICAgZWxzZQpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgSlNWYWx1ZSogV2ViU2Ny
aXB0Q2FsbEZyYW1lOjp2YWx1ZUJ5RXZhbAogICAgICAgICAgICAgc3RhdGUgPSBnbG9iT2JqLT5n
bG9iYWxFeGVjKCk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSogc2F2ZWRFeGNlcHRpb24gPSBzdGF0
ZS0+ZXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZVB0ciBzYXZlZEV4Y2VwdGlvbiA9IHN0YXRlLT5l
eGNlcHRpb24oKTsKICAgICBzdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsKIAogICAgIFVTdHJpbmcg
Y29kZShyZWludGVycHJldF9jYXN0PFVDaGFyKj4oc2NyaXB0KSwgU3lzU3RyaW5nTGVuKHNjcmlw
dCkpOwogCiAgICAgLy8gZXZhbHVhdGUKLSAgICBKU1ZhbHVlKiBzY3JpcHRFeGVjdXRpb25SZXN1
bHQ7CisgICAgSlNWYWx1ZVB0ciBzY3JpcHRFeGVjdXRpb25SZXN1bHQ7CiAgICAgaWYgKGV2YWwp
IHsKICAgICAgICAgQXJnTGlzdCBhcmdzOwogICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhz
dGF0ZSwgY29kZSkpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJTY3JpcHRDYWxsRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlNjcmlwdENhbGxGcmFtZS5oCShyZXZpc2lvbiAzOTYw
MykKKysrIFdlYktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDEwICs3NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gQlNU
UiogdmFsdWUpOwogCiAgICAgLy8gSGVscGVyIGFuZCBhY2Nlc3NvcnMKLSAgICB2aXJ0dWFsIEpT
Qzo6SlNWYWx1ZSogdmFsdWVCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyhCU1RSIHNj
cmlwdCk7CisgICAgdmlydHVhbCBKU0M6OkpTVmFsdWVQdHIgdmFsdWVCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0RnJvbVN0cmluZyhCU1RSIHNjcmlwdCk7CiAgICAgdmlydHVhbCBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKLSAgICBzdGF0aWMgSlNDOjpV
U3RyaW5nIGpzVmFsdWVUb1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSopOwor
ICAgIHN0YXRpYyBKU0M6OlVTdHJpbmcganNWYWx1ZVRvU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlUHRyKTsKIAogcHJpdmF0ZToKICAgICBVTE9ORyBtX3JlZkNvdW50OwpJbmRl
eDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiAzOTYwMykKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2ODMsNyArMjY4Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViVmlldzo6c3RyaW4KICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKIAotICAgIEpTQzo6SlNWYWx1ZSogc2NyaXB0RXhlY3V0aW9uUmVzdWx0ID0gY29yZUZyYW1l
LT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChXZWJDb3JlOjpTdHJpbmcoc2NyaXB0KSwgdHJ1ZSku
anNWYWx1ZSgpOworICAgIEpTQzo6SlNWYWx1ZVB0ciBzY3JpcHRFeGVjdXRpb25SZXN1bHQgPSBj
b3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFdlYkNvcmU6OlN0cmluZyhzY3JpcHQp
LCB0cnVlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25SZXN1bHQpCiAgICAg
ICAgIHJldHVybiBFX0ZBSUw7CiAgICAgZWxzZSBpZiAoc2NyaXB0RXhlY3V0aW9uUmVzdWx0LT5p
c1N0cmluZygpKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>